220 likes | 397 Views
中等职业教材 《 单片机原理与应用 》. 3.2 指令系统 —— 发光二极管的闪烁控制. 新港职业学校 明月新. 一、情景导入 —— 金陵夜景. 闪烁灯. 闪烁灯硬件电路. 二、知识回顾. 点亮 1 个 LED 灯程序. ORG 0000H. LOOP : MOV P1,# 0FE H. SJMP LOOP. END. 二、知识回顾. 点亮 8 个 LED 灯程序. ORG 0000H. LOOP : MOV P1,# 00 H. SJMP LOOP. END. 思考问题. 怎样才能让灯不断地闪烁呢?. ORG 0000H.
E N D
中等职业教材《单片机原理与应用》 3.2 指令系统 ——发光二极管的闪烁控制 新港职业学校 明月新
二、知识回顾 点亮1个LED灯程序 ORG 0000H LOOP:MOV P1,#0FEH SJMP LOOP END
二、知识回顾 点亮8个LED灯程序 ORG 0000H LOOP:MOV P1,#00H SJMP LOOP END
思考问题 怎样才能让灯不断地闪烁呢? ORG 0000H LOOP:MOV P1,#00H ;(8个灯全亮) MOV P1,#0FFH ;(8个灯全灭) SJMP LOOP END
修改程序,实现闪烁 ORG 0000H LOOP:MOV P1,#00H LCALL DELAY MOV P1,#0FFH LCALL DELAY SJMP LOOP DELAY:MOV R0,#0FAH D1: MOV R1,#0FAH D2: DJNZ R1,D2 DJNZ R0,D1 RET END
二、知识回顾——指令复习 LCALL: 子程序调用指令 RET: 子程序返回指令 DJNZ: 减1不为0转移指令 循环控制指令 DJNZ Rn,rel: 当Rn-1≠0,转到rel处; 当Rn-1=0,往下执行。 循环次数设定指令 MOV Rn,#DATA8:
三、明确学习目标 1.理解LED闪烁灯的编程思路和实现方法,并看懂程序; 2.会通过Keil软件及STC—ISP下载软件进行程序调试和仿真演示; 3.掌握有关汇编指令的功能及应用; 4.延时程序的理解以及根据延时时间修改延时程序。
三、新课认知1.程序讲解 (设置起始地址伪指令) ORG 0000H ;① LOOP:MOV P1,#00H;② (8个灯亮) (调用延时子程序,灯亮的时间) LCALL DELAY ;③ MOV P1,#0FFH ;④ (8个灯灭) LCALL DELAY ;⑤ (调用延时子程序,灯灭的时间) SJMP LOOP ;⑥ (循环,转去执行LOOP(标号)) DELAY:MOV R0,#0FAH ; ⑦ (立即数为250,送给R0) D1: MOV R1,#0FAH;⑧ (立即数为250 ,送给R1) D2: DJNZ R1,D2;⑨ (沿蓝色区域转圈250次,小循环) DJNZ R0,D1;⑩ (沿红色区域转圈250次,大循环) RET ;⑾ (返回) END;⑿ (汇编结束伪指令)
三、新课认知2.程序讲解 计算精确的延时时间为多少微秒 (晶振频率=12MHZ)? (延时子程序如下: DELAY: MOV R0,#0FAH D1: MOV R1,#0FAH D2: DJNZ R1,D2 DJNZ R0,D1 RET ) 答:t=1+(1+2×250+2)×250+2≈2×250×250 =125000微秒=125毫秒
四、仿真操作 1. 双击Keil uVision2的桌面快捷方式 ; 2.关闭工程并新建一个工程,保存并选择CPU型号; 3. 新建文本,输入源程序,保存源程序(.asm); 4.源程序的编译与生成目标文件(HEX文件); • 5.运行STC—ISP下载软件; 6.打开单片机学习板电源,进行仿真演示。
五、知识拓展 1.修改源程序,实现: 1)P1口1、3、5、7灯亮灭闪烁; 2)P1口2、4、6、8灯亮灭闪烁; 3)P1口1、2、3、4灯一直亮,5、6、7、8灯亮灭闪烁; 4)P1口5、6、7、8灯一直亮,1、2、3、4灯亮灭闪烁; 答:1)将指令MOV P1,#00H修改为MOV P1,#55H; 2)将指令MOV P1,#00H修改为MOV P1,#0AAH; 3)将指令MOV P1,#0FFH修改为MOV P1,#0F0H; 4)将指令MOV P1,#0FFH修改为MOV P1,#0FH;
五、知识拓展 2.1)通过程序中参数的调整,来改变LED的闪烁频率 (延时时间)(f=10HZ, t =100ms)。 分析:t≈2×200×250 =100000微秒=100毫秒=0.1秒 DELAY:MOV R0,#0C8H;#200 D1: MOV R1,#0FAH ;#250
五、知识拓展 2)a.如果将参数改为如下数值,可否实现闪烁效果? DELAY:MOV R0,#05H D1: MOV R1,#05H 答:不可以。 因为t≈2×5×5=50微秒=0.05毫秒
六、课堂小结 1.几个重要指令。 LCALL:子程序调用指令 RET:子程序返回指令 DJNZ:减1不为0转移指令 当Rn-1=0,转到rel; 当Rn-1=0,往下执行。 循环次数设定指令:MOV Rn,#DATA8(其中#DATA8就是循环次数值) 循环控制指令:DJNZ Rn,rel (指令中rel常常由循环入口标号表示,如D1、 D2)
六、课堂小结 2.闪烁灯程序,并上机调试运行。 ORG 0000H LOOP:MOV P1,#00H LCALL DELAY MOV P1,#0FFH LCALL DELAY SJMP LOOP DELAY: MOV R0,#0FAH D1: MOV R1,#0FAH D2: DJNZ R1,D2 DJNZ R0,D1 RET END
六、课堂小结 3.通过修改程序改变闪烁现象; 通过修改程序改变延时时间。
七、布置作业——课后思考题 1)停一个周期,用什么指令?(必做) 2)一个单元中的数是否能超过255?为什么?(必做) 3)如果需要f=5HZ,t =200ms,即延时200ms怎么办? (选做) 4)修改主程序,实现流水灯效果。(选做)