Free考研资料 - 免费考研论坛

 找回密码
 注册
打印 上一主题 下一主题

单片机的一生<转>

[复制链接]
跳转到指定楼层
楼主
kenny2046 发表于 07-5-3 17:01:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
单片机的一生<转>

  
在水源上发现一篇蛮有趣文章——

某天某日某产房,你诞生了(power up , 上电运行),结果你不哭,医生把你提起来,屁股上狠狠一巴掌,你哇哇大哭(reset, 复位成),护士给你检查,看有没有传染病(EMI测试),然后打预防针(绝缘处理),没有问题后作记录(QC pass),你的父母来接你回去(客户验收)。回家后你有了自己的新床(PCB),家里条件好,给你铺六张毛巾被(六层板),可惜上面小窟窿太多(过孔太多),父母把奶瓶给你,你终于获得了外部能量(Power Supply ),否则你的自身能量会耗尽(Battery too Low)。

每天清晨,你尚在休眠模式(IDL)下运行时,一阵***吵醒你(wake up,激活),你感觉很饿,于是大哭(Alarm Ring),父母马上来喂你,你不哭了(discard  Alarm,解除报警),但很不争气地撒尿了(current output,电流输出)。父母给你收拾完,开始教你说话,但你的大脑还很简单(initial procedure,初始化程序),后来你开始学走路,结果步调不稳(步进电机驱动错误),一跑就坐到地上了(RUN fail,运行失败)。好在你的父母很耐心地教你(调试阶段),你终于可以走了(调试通过)。

你逐渐长大,吃的也多了,给你的食物老是不够(功耗太大,power waste too heavy),你偷偷打开冰箱狂吃一顿,结果吃的太多不消化了(过载,over load),差点绷断肠子(route burn,烧断走线),还好你终于没事了,不敢吃那么多了(reduce power waste,降低功耗)。后来你上学了,接受好多新的知识(new procedure),但是没有实际经验(未调试的),结果工作时发现那些知识不能照用,还要更多地学习别人的经验(Copy procedure,拷贝程序),不过你还是不断发现臭虫(BUG),只好请教灭虫专家来解决(调试高手)。终于你的工作稳定了,你开始进入日复一日的工作状态(Endless Loop),你很烦,于是老是出错误(out of order,程序跑飞),结果老板开始盯紧你(软件陷阱),你被当场抓住修理一通,马上老老实实干活了(程序恢复)。

终于有个姑娘闯入你的生活(interrrupt,中断),使你忘记别的一切(优先级最高),你完全浸入爱河(进入中断服务子程序),大手大脚地花钱(Large 模式),很快就结婚了(双CPU运行),你马上发现你的储蓄不够用了(RAM resource too low),需要精简节约(compact模式),婚假也结束了,你又回去上班了(RETI,退出中断服务程序)。后来日子越过越枯燥,老婆批评你脑袋不够用(MIPS太低),不会算计(没有浮点运算能力),你对她的话一耳进一耳出(FIFO),你对老婆也爱理不理了(优先级降低),这时一个小姑娘勾引你,你马上动心(抗干扰能力差),幸好你老婆及时发现,严防紧守,你放弃了企图(丢弃乱码)。

日子恢复平静,一晃几十年过去,你发现你身边的年轻人都用全新的知识装备着,他们都是在ARM大学毕业的,开着Linux的车子,大把花着票子(海量存储)。你低头看自己,发现自己只是在51大学毕业,开着汇编的破车,手里钱少的可怜(256 字节内存)。你被迫到人才市场找工作,发现自己已经是多年前的旧货,降价处理了,你这样的都是一麻袋一麻袋的。

你长吁短叹,终于选择退休,靠养老金活着,开始疾病缠身,你的牙齿有了问题(IO口驱动力下降),你说话不清楚(TXD发射失败),耳朵也不灵(RXD接收不灵),你的胃也不好,存不住食物(ALE锁存失败),你终于因心肌梗死送到医院,医生手持电击手柄给你通电(高压测试),但你无法苏醒(复位失败),医生只好拔掉你的输液管(关闭电源),你看了这个乱七八糟的世界最后一眼,终于POWER DOWN了。


AT89C 系列单片机解密原理
    单片机解密简单就是擦除单片机片内的加密锁定位.由于AT89C系列单片机擦除操作时序设计上的不合理.使在擦除片内程  序之前首先擦除加密锁定位成为可能.AT89C系列单片机擦除操作的时序为:擦除开始---->擦除操作硬件初始化(10微秒)---->擦除加密锁定位(50----200微秒)--->擦除片内程序存储器内的数据(10毫秒)----->擦除结束.如果用程序监控擦除过程,一旦加密锁定位被擦除就终止擦除操作,停止进一步擦除片内程序存储器,加过密的单片机就变成没加密的单片机了.片内程序可通过总线被读出.对于AT89C系列单片机有两种不可破解的加密方法.
一、永久性地破坏单片机的加密位的加密方法.简称OTP加密模式.
二、永久性地破坏单片机的数据总线的加密方法.简称烧总线加密模式.

AT89C系列单片机OTP加密模式原理

这种编程加密算法烧坏加密锁定位(把芯片内的硅片击穿),面不破坏其它部分,不占用单片机任何资源.加密锁定位被烧坏后不再具有擦除特性,89C51/52/55有3个加密位进一步增加了加密的可靠性.一旦用OTP模式加密后,单片机片内的加密位和程序存储器内的数据就不能被再次擦除,89C51/52/55单片机就好象变成了一次性编程的OTP型单片机一样.如果用户程序长度大于89C51单片机片内存储器的容量,也可使用OPT模式做加密,具体方法如下:
1、按常规扩展一片大容量程序存储器,如27C512(64K).
2、把关键的程序部分安排在程序的前4K中.
3、把整个程序写入27C512,再把27C512的前4K填充为0.
4、把程序的前4K固化到AT89C51中,用OPT模式做加密.
5、把单片机的EA脚接高电平. 这样程序的前4K在单片机内部运行,后60K在片外运行.盗版者无法读出程序的前4K程序,即使知道后60K也无济于事.
21#
fengyanwei 发表于 07-11-2 11:02:36 | 只看该作者
非常好的!
20#
fengyanwei 发表于 07-11-2 11:02:07 | 只看该作者
好文章!!!!!!
19#
zjj000 发表于 07-8-11 21:48:54 | 只看该作者
xiexie a
18#
Abit 发表于 07-8-8 14:26:59 | 只看该作者
厉害!!服了!
17#
yuey2008 发表于 07-7-31 15:22:46 | 只看该作者
很好,谢谢!
16#
jimmy_mao 发表于 07-7-29 19:50:01 | 只看该作者
好强啊!!!
真是有心啊~~
15#
yx19850621 发表于 07-5-7 11:32:05 | 只看该作者
看到了!
不错吗,支持你!
近期来申请转正吧!
14#
mba_xwzjg 发表于 07-5-5 13:18:19 | 只看该作者
有意思。哈哈哈。
13#
 楼主| kenny2046 发表于 07-5-3 17:09:20 | 只看该作者

单片机编程技巧--功能强大的时钟中断

功能强大的时钟中断
  在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。
  下面以6MHz时钟的AT89C51系统为例,说明时钟中断的应用。
  定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断时比启动时经过了N+1个机器周期。所以,我们只要在T0中预先存入一个比满值0FFFFh小N的数,然后启动定时器,便会在N个机器周期后产生中断。这个值便是所谓的“初值”。下面计算我们需要的初值:时钟为6MHz,12个时钟周期为一个机器周期,20mS中有10000个机器周期。(10000)10=(2710)16,则0FFFFh-2710h+1=0D8F0h。由于响应中断、保护现场及重装初值还需要7~8个机器周期,把这个值再加上7,即T0应装入的初值是0D8F7h。每次中断进入后,先把A及PSW的值压入堆栈,然后即把0D8F7h装入T0。
  设置一个单元,每次中断加1 我们可以取内部RAM中一个单元,取名为INCPI(Increase Per Interrupt),在中断中,装完T0初值后,用INC INCPI指令将其加一。从这个单元中,无论中断程序还是主程序,都可以从中获得20mS的1~256之间任意整数倍的信号。例如:有一段向数码管送显的程序,需要每0.5秒执行一次以便刷新显示器,便可以设一单元(称为等待单元)W_DISP,用/MOV A,INCPI/ADD A,#25/MOV W_DISP,A/语句让其比当前的INCPI值大25,然后在每次中断中检查是否于INCPI值相等。若相等,说明已过了25个中断周期,便执行送显程序,并且让W_DISP再加上25,等待下个0.5秒。我们可以设置多个等待单元,以便取出多个不同的时基信号。让中断程序在每次中断时依次查询各个等待单元是否与INCPI相等,若相等,则执行相应的处理,并重新设置该等待单元的值,否则跳过。例如:用0.5秒信号刷新或闪烁显示器,用1秒信号产生实时时钟,或输出一定频率的方波,以一定间隔查询输入设备等。
  在中断中读键 通常,我们在主程序中读键盘,步骤为:扫描键盘,若有键按下,则延时几十毫秒去抖动,再次确认此键确实按下,然后处理该键对应的工作,完成后再次重上述步骤。但这有两点不足:1.处理相应工作时无法锁存按键的输入,即可能漏键。2.延时去抖时CPU无法做其它事情,效率不高。如果把读键放入时钟中断中,则可避免上述不足。方法为:如果两次相邻的中断中都读到同一个键按下,则这个键是有效的(达到了去抖目的),并将其锁存到先入先出(队列)的键盘缓冲区,等主程序来处理。这样,主程序处理按键的同时,仍可响应键盘的输入。缓冲区深度通常可设为8级,若锁存的键数多于8个,则忽略新的按键,并报警提示用户新的按键将无效。若键盘缓冲队列停滞的时间大大长于主程序处理按键所需要的最大时间,说明主程序已出错或跑飞,可以在中断用指令将系统复位,起到了看门狗的目的。
  主程序中的延时 由于有常开的时钟中断,所以当主程序中有需要时间较短、精度较高的延时时,应暂时把时钟中断关闭。而程序中需要时间较长、精度不高的延时时,便可仿照下需的写法,避免多层嵌套的循环延时。
  例:在P1.1输出1秒的高电平脉冲
    MOV    A,INCPI
    INC    A
    CJNE    A,INCPI$    ;等待一次中断处理完成
    SETB    P1.1        ;设P1.1为H,脉冲开始
    ADD    A,#50        ;50个20mS为1秒
    CJNE    A,INCPI,$    ;等中断将INCPI加一50次
    CLR    P1.1        ;设P1.1为L,脉冲结束
  结束语:从上看出,要灵活地应用时钟中断,将任务合理分配给中断和主程序,并且二者要分工明确,接口简单。这其中的技巧还需要大家在实践中多多摸索与体会。另外要注意:应尽量缩短中断处理程序的执行时间,更不要长于20mS。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|Free考研资料 ( 苏ICP备05011575号 )

GMT+8, 25-8-14 01:15 , Processed in 0.132766 second(s), 13 queries , Gzip On, Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表