单片机原理与应用技术重点程序高惠芳资料讲解

上传人:yuzo****123 文档编号:141434158 上传时间:2020-08-08 格式:PPT 页数:90 大小:2.05MB
返回 下载 相关 举报
单片机原理与应用技术重点程序高惠芳资料讲解_第1页
第1页 / 共90页
单片机原理与应用技术重点程序高惠芳资料讲解_第2页
第2页 / 共90页
单片机原理与应用技术重点程序高惠芳资料讲解_第3页
第3页 / 共90页
单片机原理与应用技术重点程序高惠芳资料讲解_第4页
第4页 / 共90页
单片机原理与应用技术重点程序高惠芳资料讲解_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《单片机原理与应用技术重点程序高惠芳资料讲解》由会员分享,可在线阅读,更多相关《单片机原理与应用技术重点程序高惠芳资料讲解(90页珍藏版)》请在金锄头文库上搜索。

1、传送类指令举例: 例31已知(R0)=30H,问执行如下程序,A、R4、30H和31H单元的内容是什么。 MOV A , #10H MOV R4 ,#36H MOV R0 ,#7AH MOV 31H ,#01H 解:8051执行上述指令后的结果为:,(A)=10H (R4)=36H (30H)=7AH (31H)=01H,例32设内部RAM中30H单元的内容为40H ,40H单元的内容为10H,P1口作输入口,其输入数据为0CAH,程序及执行后的结果如下: MOV R0,#30H ;单元地址30H送R0中 MOV A ,R0 ;R0 间址,将30H单元内容送A MOV R1 ,A ;A送R1

2、MOV B ,R1 ;R1间址,将40H单元内容送B MOV R1,P 1 ;将P1内容送40H单元 MOV P2 , P1 ;将P1内容送P2,执行结果:(R0)=30H , (R1)=40H , (A)=40H , (B) =10H ,(P1)=0CAH ,(40H)=0CAH , (P2)=0CAH,例35 已知外部RAM 2020H单元中有一个数X, 内部RAM 20H单元一个数Y,试编出可以使它们互相交换的程序。 解: MOV P2, #20H MOV R1 , #20H MOVX A , R1 XCH A , R1 MOVX R1 ,A SJMP $ END,指向内部 RAM 20

3、H单元,指向外部 RAM 2020H单元,补充:设20H,21H单元存放一个16位2进制数X1(高8位存于21H单元) ;30H,31H单元存放一个16位2进制数X2,(高8位存于31H单元);求X1+X2,结果存放于20H,21H。(两数之和不超过16位),答案,ORG 0000H AJMP main ORG 0100H MAIN: MOV 20H,#12H MOV 21H,#34H MOV 30H,#23H MOV 31H,#45H MOV A,20H ADD A,30H MOV 20H,A MOV A,21H ADDC A,31H MOV 21H,A SJMP $ END 1234H+#

4、2345H = #3579H,例4.3.1 将片内RAM 30H单元中的两位 压缩BCD码转换成二进制数送到片内 RAM 40H单元中.(P63),ORG 1000H START:MOV A, 30H ; 取两位BCD压缩码a1a0送A ANL A, #0F0H ; 取高4位BCD码a1 SWAP A ; 高4位与低4位换位 MOV B, #0AH ; 将二进制数10送入B MUL AB ; 将10a1送入A中 MOV R0, A ; 结果送入R0中保存 MOV A, 30H ; 再取两位BCD压缩码a1a0送A ANL A, #0FH ; 取低4位BCD码a0 ADD A, R0 ; 求和1

5、0a1+ a0 MOV 40H, A ; 结果送入40H保存 SJMP $ ; 程序执行完,“原地踏步” END,例4.3.2 将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASC码,存入21H、22H,高位存22H.(P64),ORG 1000H START:MOV A,20H ; 取压缩BCD码 ANL A,#0FH ; 取低位BCD码 ADD A,#30H ; 转换为低位ASCII码 MOV 21H,A ; 保存低位ASCII码 MOV A,20H ; 重新取压缩BCD码 ANL A,#0F0H ; 分离高位BCD码 SWAPA ; 得到高位BCD码 ADD A,#30H ;

6、转换为高位ASCII码 MOV 22H,A ; 保存高位ASCII码 SJMP$ END,补充举例:三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、54H和55H单元中;要求把相加之和存放在50H、51H和52H单元中进位存放在位寻址区的20H单元最低位中(即20H.0)。,分析: 除最低字节可以使用ADD指令之外,其它字节相加时要把低字节的进位考虑进去,因此使用ADDC指令.,MOV 00H,C,#20H,分支程序是通过转移指令实现的,一、单分支程序,使用条件转移指令实现,即根据条件对程序的执行进行判断,满足条件则进行程序转移,否则程序顺利

7、执行。,可实现单分支程序转移的指令有:,JZ、JNZ、CJNE、DJNZ等,还有以位状态作为条件进行程序分支的指令:,JC、JNC、JB、JNB和JBC等,(1)单分支结构举例,例4.3.3 求符号函数的值。已知片内RAM的40H单元内有一自变量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM的41H单元中。见P65,1 X0,0 X=0,-1 X0,Y =,ORG 1000H START: MOV A, 40H; 将X送入A中 JZ COMP ; 若A为0,转至COMP处 JNB ACC.7, POST ; 若A第7位不为1(X为正数), ;则程序转到 POST处, ;否则(X为负数

8、)程序往下执行 MOV A, #0FFH ; 将1(补码)送入A中 SJMP COMP ; 程序转到COMP处 POST: MOV A, #01H ; 将+1送入A中 COMP: MOV 41H, A ; 结果存入Y SJMP $ ; 程序执行完,“原地踏步” END,补充举例:假定在外部RAM中有ST1、ST2、ST3共3个连续单元,其中ST1和ST2单元中分别存放着两个8位无符号二进制数,要求 找出其中的大数并存入ST3单元中。,MOV A,R2,一、 单重循环程序,例4.3.5 已知片内RAM30H3FH单元中存放了16个二进制无符号数,编制程序求他们的累加和,并将其和数存放在R4,R5

9、中(R4存高8位,R5存低8位)。见P69,ORG 1000H START: MOV R0, #30H MOV R2, #10H ; 设置循环次数(16) MOV R4, #00H ; 和高位单元R4清0 MOV R5, #00H ; 和低位单元R5清0 LOOP: MOV A, R5 ; 和低8位的内容送A ADD A, R0 ; 将R0与R5的内容相加 MOV R5, A ; 低8位的结果送R5 CLR A ; A清0 ADDC A, R4 ; 将R4的内容和Cy相加 MOV R4, A ; 高8位的结果送R4 INC R0 ; 地址递增(加1) DJNZ R2, LOOP ; 若循环次数

10、减1不为0,则转 ;到LOOP处循环,否则,循环结束 SJMP $ END,例4.3.6 编制程序将片内RAM的30H4FH单元中的内容传送至片外RAM的2000H开始的单元中。(见P70),程序如下: ORG 1000H START: MOV R0, #30H MOV DPTR, #2000H MOV R2, #20H ; 设置循环次数 LOOP: MOV A, R0 ; 将片内RAM数据区内容送A MOVX DPTR, A ; 将A的内容送片外 ;RAM数据区 INC R0 ; 源地址递增 INC DPTR ; 目的地址递增 DJNZ R2, LOOP ; 若R2的不为0,则转到 ;LOO

11、P处继续循环,否则循环结束 SJMP $ END,2、较长时间的定时程序,较长时间的定时,通常采用多重循环的方法,1个机器周期,1个机器周期,2个机器周期,4个机器周期,最大定时时间计算公式为:,(4256+2+1)2562s2s+2 s=525828(s),2个机器周期,1个机器周期,1个机器周期,1个机器周期,sbit位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时须指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。格式如下: sbit 位变量名=位地址; 1、位地址为位直接地址,其取值范围为0 x000 xff; 2、位地址是可位寻址变

12、量带位号或特殊功能寄存器名带位号,则在它前面须对可位寻址变量或特殊功能寄存器进行定义。 Note:字节地址与位号之间、特殊功能寄存器与位号之间一般用“”作间隔。,【例5-5】sbit型变量的定义。 sbit OV=0 xd2; sbit CY=0 xd7; unsigned char bdata flag; sbit flag0=flag0; sfr P1=0 x90; sbit P1_0=P10; sbit P1_1=P11; sbit P1_2=P12; sbit P1_3=P13; sbit P1_4=P14; sbit P1_5=P15; sbit P1_6=P16; sbit P1_

13、7=P17;,3 中断方式,单片机的中断为固定入口式中断,即一响应中断就转入固定入口地址执行中断服务程序。具体入口如下: 编号 中断源 中断向量(汇编) C语言 0 INT0 0003 interrupt 0 1T0 000BH interrupt 1 2INT1 0013H interrupt 2 3T1 001BH interrupt 3 4RI/TI 0023H interrupt 4 在这些单元中往往是一些跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元。,51系列单片机的5个中断源的中断服务入口地址之间相差8个单元。这8个存储单元用来存储中断服务程序一般来

14、说是不够的。用户常在中断服务程序地址入口处放一条三字节的长转移指令。一般地,主程序从0030H单元以后开始存放。例如: ORG 0000H LJMP START ; 转入主程序,START为主程序地址标号 ORG 0003H LJMP INT0 ; 转外中断中断服务程序 ORG 000BH LJMP T0 ; 转定时器T0中断服务程序 ORG 0030H START: ; 主程序开始,例6.1.2 在图6.1.6中,P1.0P1.3接有4个开关,P1.4P1.7接有4个发光二极管,消抖电路用于产生中断请求信号,当消抖电路的开关来回拨动一次将产生一个下跳变信号,向CPU申请中断。要求:初时发光二

15、极管全黑,每中断一次,P1.0P1.3所接的开关状态反映到发光二极管上,且要求开关合上时对应发光二极管亮。,解:汇编程序如下: ORG 0000H AJMP MAIN ORG 0003H ;外部中断0入口 AJMP SER_INT0 ;转中断服务程序 ORG 0100H ;主程序 MAIN: MOV P1 , #0FH ;熄灭发光二极管且对开关输入端先输出1 SETB IT0 ;脉冲触发方式 SETB EX0 ;允许中断 SETB EA ;总中断允许 AJMP $ ;等待中断,SER_INT0: MOV P1 , #0FH ;熄灭发光二极管且对开关输入端先输出1 MOV A , P1 ;输入开关状态 CPL A ;状态取反 ANL A , #0FH ;屏蔽A的高半字节 SWAP A ;A高低半字节交换 MOV P1 , A ;开关状态输出 RETI ;中断返回,每次单纯重置一次4个开关的开、合状态,4个

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号