为何我的心口,隐隐作痛?因为,我要考单片机
开篇语
在我复习的不可自拔的时候。突然想起,简书的单片机版块~~好吧,根本就没有这个版块,但是我想写点关于单片机相关的东西,让大家见识到这个生活中隐藏在我们各种各样机器内的核心器件。也是很多点子物品的灵魂所在。当然,不是科普单片机。其实,好吧,这就是我复习的时候写一点笔记。。。下周三就考试了。我还是很慌的,所以把自己的一些思绪理清,正好简书是个不错的记笔记的好家伙~~~嘿嘿嘿~~所以,就有了这个了。待会投稿都不知道投到哪儿去~。不过,如果你正在被单片机苦苦折磨,最后一道大题想不清楚怎么搞,那么,我这篇笔记一定可以帮到你的。。
题目
这是我复习的第一套试卷的最后一题,难度杠杠滴
这是第一题的题目配套的图片,也是8051单片机的一个扩展电路
接下来让我逐条解读,做好笔记~~
题目答案
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP TIMER0
ORG 0030H
一堆伪代码,还有无条件跳转指令。为的,是在对的时间,遇到对的中断,把它带到对的地方,其中MAIN是主函数,属于预备阶段;TIMER0是中断到来之后执行的中断服务程序~
MAIN: MOV SP,#60H %初始化堆栈地址
CLR RS1
CLR RS0
MOV R0,#100 %由R0计数,一百次读入两个数值并且求平均
MOV R1,#0 %记录最小值是一百次中的第几次
MOV R4,#0FFH %存入最小值的初值
MOV R5,#0 %最小值低字节的地址记录
MOV TL0,#30H %%
MOV TH0,#0F8 %%
MOV TMOD,#21H %% 这个是定时器,由计数原理算出来的初值赋值,对了是定时方式一 16位定时器
SETB ET0 %%
SETB TR0 %%
SETB EA %% 开中断控制位
SJMP $ %预备工作完毕,等待中断到来
TIMER0:PUSH ACC %%
PUSH PSW %%
PUSH DPH %%
PUSH DPL %%保护现场
CLR RS0
CLR RS1
MOV DPTR,#2000H %%
MOVX A,@DPTR %% 读入第一次读数的其中一个数,地址是2000H 对应74LS245
MOV R2,A %把读入的数据存入R2寄存器
MOV DPTR,#4000H %%
MOVX A,@DPTR %%读入第二个数据
ADD A,R2 %读入的两数相加
RRC A %%右移A ,等同于A/2 即为求均值
MOV DPH,#10H %%
MOV DPL,R1 %%将DPTR指针指向1000H 即6264中的一个地址
MOVX @DPTR,A %将第一次求得的均值存入6264指定地址
MOV R3,A %保留此次求得的均值,以便与下一次读入的数据的均值进行比较
CLR C %清除Cy 为后面的计算做准备
SUBB A,R4 %把第一次求得的均值与初始化的最小值(0FFH,这他么其实是最大的,后面随便来个数都会顶替掉的)进行比较(比较方式是使用借位减法,使用起对Cy的不同赋值来判定那一个数大)
JC T0A %如果一开始的数大(即Cy=1),那么直接跳转到T0A
MOV R4,03H %如果求得的均值大,那么Cy=0,进行这一步,就是用R3(03H其实就是R3的地址)种存储的本次求得的均值替代掉原来R4中存储的最小值
MOV R5,01H %然后把R1(01H)中的地址赋给R5
T0A: DEC R0 %上面不管是直接跳过来还是经过几步再过来,反正都会过来,R0=R0-1 代表接受数据一次
INC R1 % R1=R1+1 代表均值存储地址变为下一个地址
MOV A,R0 %取得求均值进行的次数
JNZ T0EX %判断A是否等于0,等于0则直接往下走,不等于0就跳转到T0EX
MOV DPTR,#2000H %运行到这儿就代表着A(也就是R0计数器为0了)等于0,运行了一百次,那么,接下来就要输出了,这一句的意思是把输出地址定位为1#74LS373
MOV A,R5 %由上面的中断服务程序的最后,可以知道,R5是记录最小值的低字节地址,也就是R0的,只有在新求的均值小于上一步求出来的均值的时候,才把下一步的均值放到R5种存储,这样R5种存储的永远是最小值的地址,此时取出R5中的地址数据
MOVX @DPTR,A %输出最小值低字节地址数据
MOV DPTR,#6000H %%
MOV A,#10H %%
MOVX @DPTR,A %%将最小值高字节地址输出到2#74LS373
MOV R0,#100 %%
MOV R1,#0 %%
MOV R4,#0FFH %%再次对计数器,最小值,最小值低字节地址,最小值进行初始化,准备下一步的运行
T0EX: POP DPL %%
POP DPH %%
POP PSW %%
POP ACC %%
RETI %%恢复现场,进入中断前的主程序,也就是SJMP那一段的PC所指地址
绝望的怒吼
整整61行代码。而且我们的单片机试卷还有两个这种压轴题,还有不少的小题和大题,当然比起这个不值一提。。绝望~~但还是要学习~!!!
天绝地灭版的笑声
不多废话了。刚刚是学得累了。玩会电脑补充下战斗力,现在,继续与单片机斗争,看是谁QJ谁!!
战场一角!!!!