2)打开DATD窗口20H21H清零。
3)单步调试观察并记禄寄存器、内存的变化。判断程序是否正确。若发现问题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。
4)设断点调试、记禄结果。 3、实验报告
1)写出程序流程图、程序清单 2)根据记渌数据给程序加注解 3)调试心得
实验六 循环程序设计
1、实验内容:三字节加法
加数存放在内部RAM 20H21H22H,被加数存放在28H29H2AH,结果存放在28H29H2AH。多字节加法用 ADDC A,@R1 连续使用之三次。第一个字节使用时要先清进位位C第二、第三字节使用时需要调整加数、被加数的取数地址。连续取数或连续送数一般用间接寻址。间接寻址要先赋初值再使用,赋初值的语句要在循环体之外避免出现死循环。间接寻址地址调整用INC(连续增加),用DEC(连续减小)判断循环次数有多种方法:
1) DJNE R7,LOP ;R7内存循环次数,LOP为跳转地址。R7要先赋初值。 2) CJNE R7,#3,LOP 3) DEC R7
MOV A,R7 2、实验步骤
1)打开PV32编程序。汇编正确进入调试界面。否则修改程序重新汇编直到通过。 2)打开DATD窗口给加数、被加数赋值
3)单步调试观察并记禄寄存器、内存的变化。判断程序是否正确。若发现问题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。
4)设断点调试、记禄结果。
5)若将单字节加法作为子程序改写程序重新调试比较两种方法结果是否一致 3、实验报告
1)写出程序流程图、程序清单 2)根据记渌数据给程序加注解 3)调试心得
实验七 多重循环程序设计----闪烁灯
方法一
1.实验内容
在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2.电路原理图
C130pFC230pFX1U1CRYSTAL19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617C31uF18XTAL2R110k9RSTR10270D8U2:A24681A0A1A2A3OE74LS240Y0Y1Y2Y318161412293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.780C31 3.系统板上硬件连线
把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容 (1). 延时程序的设计方法
作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理: 石英晶体为12MHz,因此,1个机器周期为1微秒 机器周期 微秒
MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1
因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$
DJNZ R6,D2 DJNZ R5,D1 RET (2). 输出控制
当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5. 程序框图
开始
P1.0输出1,L1熄灭
延时0.2秒 P1.0输出0,L1 延时0.2秒 6. 汇编源程序 ORG 0000h START: CLR P1.0 LCALL DELAY SETB P1.0 LCALL DELAY LJMP START
DELAY: MOV R5,#20 ;延时子程序,延时0.2秒 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END
方法二
1、实验内容
1) 利用100毫秒为循环体,写一个1秒的三重循环程序
2) 写一个1毫秒的子程序,然后调用子程序写一个延时1秒的程序。 3) 如果单片机的机器周期为2个微秒改写程序。 2、实验原理
单片机每执行一条程序需要1--4个机器周 1秒定时子程序 期因此利用该性质可以实现软件定时。最筒单 的软件定时程序用NOP和DJNZ循环指令完成。 假定单片机的机器周期为1微秒则 R5,R6,R7赋初值 MOV R7,#O9H; 1 LOP:NOP; 1 DJNZ R7,LOP; 2 N 1毫秒到吗 RET; 2
T=1+9×3+2=30微秒 Y MOV R7,#250; 1
LOP:NOP; 1 恢复 R7初值 NOP; 1 N DJNZ R7,LOP; 2
0.1秒到吗 RET ; 2 T=1毫秒 每循环一次4微秒循环250次1毫秒 Y 此为单循环。
恢复R6初值 利用循环嵌套可以实现较长时间的定时
MOV R6,#100; 1 MOV R7,#250; 1 N 1秒到吗 LOP1:NOP NOP Y DJNZ R7,LOP1; T=1毫秒 Y RET MOV R7,#250; 1 DJNZ R6,LOP1; 2 RET; 2
将1毫秒作为循环体利用R6循环执行100次,执行时间为100毫秒。此为2重循环。注意内循环完成后R7=0,下次循环若还要执行250次R7必须重新赋值250,否则循环次数为256。 3、实验步骤
1)打开PV32编程序。汇编正确进入调试界面。否则修改程序重新汇编直到通过。 2)打开SFR窗口给R6、R7赋值
3) 设断点调试观察并记渌寄存器的变化。判断程序是否正确。 若发现问题重返编辑界面,修改程序重新汇编直到通过。 4)用子程序改写程序重新调试比较两种方法结果是否一致 4、实验报告
1.写出程序流程图、程序清单 2.根据记渌数据给程序加注解 3.调试心得