当前位置:文档之家› 南昌航空大学 单片机实验(全)

南昌航空大学 单片机实验(全)

南昌航空大学信息工程学院实验报告课程名称:单片微型机原理学号:姓名:指导教师:________ ___________ 成绩:_________________________南昌航空大学实验报告2014年 3 月 14 日课程名称: 单片微型机原理 实验名称: 清零、电脑时钟 班级: 姓名: 学号: 指导老师评定: 签名:一、实验目的1、掌握汇编语言设计和调试方法,熟悉键盘操作;2、熟悉MCS —51定时器、串行口和中断初始化编程方法,了解定时器应用在实时控制中程序的设计技巧。

二、实验内容1、把7000H ~ 70FFH 的内容清零。

2、编写程序,从DVCC 系列单片机实验仪键盘上输入时间初值,用定时器产生0.1S 定时中断,对时钟计数器计数,并将数值实时地送数码管显示。

三、实验步骤清零程序1、实验程序框图NY 开始 R0 =0,DPTR=7000H 00送到(DPTR) DPTR+1,R0+1 R0 = FF ?结束2、当DVCC单片机仿真实验系统独立工作时(1)将固化区EPROM中实验程序目标码传送到仿真RAM区,操作如下:输入0后按F1键,再输入0FFF后按F2键,再输入0后按EPMOV稍等,系统返回初始状态,显示“P."。

(2)按F2键进入仿真1态,仿真实验系统显示闪动“P......”时,根据表一所示,通过键盘输入实验程序的起始地址0030H,再按执行键EXEC,表示连续运行该程序,稍后,按RESET键退出运行;如果以单步运行程序,则输入0300后,按STEP键,按一次执行一条语句,直到执行到003CH为止,按MON键退出运行;如果以断点运行程序,则先输入003C (断点地址),再按F1键,再输入0030(起始地址),然后按EXEC键执行程序,当执行到003CH时自动停下来,此时按MON键退出。

(3)用存储器读写方法检查7000H—70FFH中的内容应全是00H。

3、当DVCC单片机仿真实验系统联PC机工作时(1)在闪动“P.”状态,按PCDBG键。

(2)在PC机处于WIN95/98软件平台下,单击DVCC图标。

(3)在系统设置选项中设定仿真模式为内程序、内数据。

(4)根据屏幕提示进入51/96动态调试菜单。

(5)联接DVCC实验系统(Ctrl + H)。

(6)装载目标文件(Ctrl + L)。

(7)设置PC起始地址。

(8)从起始地址开始连续运行程序(F9)或单步(F8)或断点运行程序。

(9)单步、断点运行完后,在存储器窗口内检查7000H—70FFH中的内容是否全为00H。

4、清零程序ORG 0030HCLEAR: MOV R0,#00HMOV DPTR,#7000H;设数据指针DPTR=7000HCLEAR1: CLR AMOVX @DPTR,A ;清第一个数据单元INC DPTR ;指针加一INC R0 ;字节数加一CJNE R0,#00H,CLEAR1 ;判字节数满256个否,不满继续CLEAR2: SJMP CLEAR2 ;满结束程序END电脑时钟1、实验程序框图2、实验操作(1) 用连续方式从起始地址0340H 开始执行程序(输入0340后按EXEC 键)。

(2) 连续运行程序,在键盘上输入时间初值。

如果输入时分秒初值超范围,则显示000000后要求重新设置初值,初值的默认值为000000。

(3) 再次按EXEC 键时钟开始工作,数码管上实时显示时间值。

3、电脑时钟程序 ORG 000BH LJMP TINTRUP ORG 0340h CLOCK0: MOV SP,#50H MOV R0,#7EH ;清显示缓冲区MOV R4,#06H CLR A CLOCK1:MOV @R0,A DEC R0 DJNZ R4,CLOCK1 MOV A,#7EH MOV DPTR,#1FFFH MOVX @DPTR,A MOV 76H,#00H ;初始化定时/计数器MOV 77H,#00H LCALL KEYDISP0 ;调显示键扫子程序LCALL DISDA0 ;调显示缓冲区放数程序 MOV TMOD,#01H ORL IE,#82H MOV TL0,#0B7HMOV TH0,#3CH MOV 23H,#00H SETB TR0 ;开定时中断 CLOCK2: LCALL DISP ;调显示子程序 LCALL DISDA0 ;调显示缓冲区放数子程序 SJMP CLOCK2 ;循环 DISDA0: MOV R0,#79H ;显示缓冲区放数子程序MOV A,22H ACALL DISDA MOV A,21HACALL DISDA 恢复初值,保护现场定时中断 Y Y YNN N NY 1秒到吗? 0.1秒单元清零,60秒到吗? 秒单元清零,60秒到吗? 分单元清零,24小时到吗? 时单元清零 堆栈返回 0.1秒加1秒加1分加1时加1 NY清显示缓冲区 初始化定时计数器 显示初值000000 从键盘设时钟初值 判时钟初值合乎规定否? 开始 开定时器 显示器显示当前时钟值MOV A,20HACALL DISDARETDISDA: M OV R1,AACALL DISDA1MOV A,R1SWAP ADISDA1: ANL A,#0FHMOV @R0,AINC R0RETTINTRUP: MOV TL0,#0B7H;定时器中断服务程序MOV TH0,#3CH;重新置初值PUSH PSWPUSH ACC;保护当前值SETB 0D3HINC 23H;0.1秒单元加1MOV A,23HCJNE A,#0AH,TINTRUP1;判1秒到否,未到继续MOV 23H,#00H;清0.1秒单元MOV A,22HINC A;秒单元加1DA AMOV 22H,ACJNE A,#60H,TINTRUP1;判60秒到否,未到继续MOV 22H,#00H;清秒计数单元MOV A,21HINC A;分单元加1DA AMOV 21H,ACJNE A,#60H,TINTRUP1;判60分到否,未到继续MOV 21H,#00H;清分计数单元MOV A,20HINC A;时单元加1DA AMOV 20H,ACJNE A,#24H,TINTRUP1;判24小时到否,未到继续MOV 20H,#00H;清时计数单元TINTRUP1:POP ACCPOP PSWRETI;返回主程序KEYDISP0:LCALL KEY;调显示键扫子程序JNC FANCKEY;转功能键处理DA TAKEY: LCALL DATAKEY1;数值键处理DB 79H,7EHSJMP KEYDISP0FANCKEY: CJNE A,#16H,KEYDISP0 ;是执行键,判输入的秒初值是否超限MOV A,7AHSWAP AORL A,79HMOV 22H,ACJNE A,#60H,FANCKEY1 FANCKEY1: JNC FANCKEY4;判输入的分初值是否超限MOV A,7CHSWAP AORL A,7BHMOV 21H,ACJNE A,#60H,FANCKEY2 FANCKEY2: JNC FANCKEY4;判输入的时初值是否超限MOV A,7EHSWAP AORL A,7DHMOV 20H,ACJNE A,#24H,FANCKEY3 FANCKEY3:JNC FANCKEY4RETFANCKEY4:CLR TR0LJMP CLOCK0DA TAKEY1:MOV R4,A;数字键处理子程序MOV DPTR,#1FFFH MOVX A,@DPTRMOV R1,AMOV A,R4MOV @R1,ACLR APOP 83HPOP 82HMOVC A,@A+DPTRINC DPTRCJNE A,01H,DATAKEY3DEC R1CLR AMOVC A,@A+DPTRDA TAKEY2: PUSH 82H PUSH 83HMOV DPTR,#1FFFHMOVX @DPTR,APOP 83HPOP 82HINC DPTRPUSH 82HPUSH 83HRETDA TAKEY3: DEC R1MOV A,R1SJMP DATAKEY2 KEY0: MOV R6,#20H;数字键闪动程序MOV DPTR,#1FFFHMOVX A,@DPTRMOV R0,AMOV A,@R0MOV R7,AMOV A,#10HMOV @R0,AKEY3: LCALL KEYDISP JNB 0E5H,KEY2DJNZ R6,KEY3MOV DPTR,#1FFFHMOVX A,@DPTRMOV R0,AMOV A,R7MOV @R0,AKEY: MOV R6,#50HKEY1: LCALL KEYDISPJNB 0E5H,KEY2DJNZ R6,KEY1SJMP KEY0KMOV A,@R1MOV R3,AXRL A,R4MOV R3,04HMOV R4,02HJZ KEYDISP1MOV R2,#88HMOV R4,#88HKEYDISP1: DEC R4MOV A,R4XRL A,#82HJZ KEYDISP2MOV A,R4XRL A,#0EHJZ KEYDISP2MOV A,R4ORL A,R4JZ KEYDISP3MOV R4,#20HDEC R2LJMP KEYDISP5KEYDISP3: MOV R4,#0FH KEYDISP2: MOV R2,04HMOV R4,03HKEYDISP5: MOV R1,#76HMOV A,R2MOV @R1,AINC R1MOV A,R3MOV @R1,AMOV A,R4CJNE R3,#10H,KEYDISP4 KEYDISP4: RETDISP: SETB 0D4H ;显示子程序MOV R1,#7EHMOV R2,#20HMOV R3,#00HDISP1: MOV DPTR,#0FF21HMOV A,R2MOVX @DPTR,AMOV DPTR,#DATACOMOV A,@R1MOVC A,@A+DPTRMOV DPTR,#0FF22HMOVX @DPTR,ADISP2: DJNZ R3,DISP2DEC R1CLR CMOV A,R2RRC AMOV R2,AJNZ DISP1MOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,ACLR 0D4HRETDA TACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,8 0H,90HDB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H ,0DEH键扫子程序KEYSM:SETB 0D4HMOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,AKEYSM0: MOV R2,#0FEHMOV R3,#08HMOV R0,#00HKEYSM1: MOV A,R2MOV DPTR,#0FF21HMOVX @DPTR,A;键矩阵中第1列置0NOPRL AMOV R2,AMOV DPTR,#0FF23H;读键的行值MOVX A,@DPTRCPL ANOPNOPNOPANL A,#0FHJNZ KEYSM2INC R0;无键且未到最后一列继续DJNZ R3,KEYSM1SJMP KEYSM10KEYSM2: ;有键,计算键值CPL AJB 0E0H,KEYSM3MOV A,#00HSJMP KEYSM7KEYSM3: JB 0E1H,KEYSM4MOV A,#08HSJMP KEYSM7KEYSM4: JB 0E2H,KEYSM5MOV A,#10HSJMP KEYSM7KEYSM5: JB 0E3H,KEYSM10MOV A,#18HKEYSM7: ADD A,R0CLR 0D4HCJNE A,#10H,KEYSM9KEYSM9: JNC KEYSM10MOV DPTR,#KEYDATAMOVC A,@A+DPTRKEYSM10: RET ;返回KEYDATA: DB 07H,04H,08H,05H,09H,06H,0AH,0BH ;键值表(0—F)DB01H,00H,02H,0FH,03H,0EH,0CH,0DH四、实验小结通过本次实验初步了解了单片机工作的基本原理,再次复习了汇编语言编写的相关内容,练习了单片机汇编程序设计的相关知识。

相关主题