单片机实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南昌航空大学实验报告
二0一一年 9月28 日
课程名称:单片微型机实验名称:实验一软件实验9、10
班级: 080611 姓名:吴智丽学号: 08061103
指导教师评定:签名:
一、实验目的
1、熟悉8031定时/计数功能,掌握定时/计数初始化编程方法。
2、熟悉MCS—51定时器、串行口和中断初始化编程方法,了解定时器应用在实时控制中程序的设计技巧。
二、实验内容
1、对定时器0外部输入的脉冲进行计数,并送显示器显示。
2、编写程序,从DVCC系列单片机实验仪键盘上输入时间初值,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示。
三、实验步骤
脉冲计数
1、实验程序框图
2 、实验操作
(1)把8032CPU的P3.4插孔接T0—T7任一根信号线或单脉冲输出空“SP”。
(2)用连续方式从起始地址02A0H开始运行程序(按02A0后按EXEC键)。
(3)观察数码管显示的内容应为脉冲个数。
(4)脉冲计数程序
CONT: MOV SP,#53H
MOV TMOD,#05H
;初始化定时/计数器
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
;允许定时/计数中断
CONT1: MOV R2,TH0
;取计数值
MOV R3,TL0
LCALL CONT2
;调二转十进制子程序
MOV R0,#79H
MOV A,R6
LCALL PWOR
MOV A,R5
LCALL PWOR
MOV A,R4
LCALL PWOR
LCALL DISP
;调显示子程序
SJMP CONT1
;循环
CONT2: CLR A
;清R4、R5、R6
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#10H
CONT3: CLR C
;R2、R3左移,移出的位送CY
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
;R4、R5、R6×2 + CY送R4、R5、R6 DA A
MOV R6,A
;十进制调整
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,CONT3
;循环16次
RET
PWOR: MOV R1,A ;
;拆送显示缓冲区
LCALL PWOR1
MOV A,R1
SWAP A
PWOR1: ANL A,#0FH
MOV @R0,A
INC R0
RET
DISP: SETB 0D4H
;显示子程序
MOV R1,#7EH
MOV R2,#20H
MOV R3,#00H
DISP1: MOV DPTR,#0FF21H
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#CDATA
MOV A,@R1
MOVC A,@A+DPTR
MOV DPTR,#0FF22H
MOVX @DPTR,A
DISP2: DJNZ R3,DISP2
DEC R1
CLR C
MOV A,R2
RRC A
MOV R2,A
JNZ DISP1
MOV A,#0FFH
MOV DPTR,#0FF22H
MOVX @DPTR,A
CLR 0D4H
RET
CDATA: DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H, 90H
DB
88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0D EH
电脑时钟
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,#0B7H
MOV 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,21H
ACALL DISDA
MOV A,20H
ACALL DISDA
RET
DISDA: M OV R1,A
ACALL DISDA1
MOV A,R1
SWAP A
DISDA1: ANL A,#0FH
MOV @R0,A
INC R0
RET
TINTRUP: MOV TL0,#0B7H
;定时器中断服务程序
MOV TH0,#3CH
;重新置初值
PUSH PSW
PUSH ACC
;保护当前值
SETB 0D3H
INC 23H
;0.1秒单元加1
MOV A,23H
CJNE A,#0AH,TINTRUP1
;判1秒到否,未到继续
MOV 23H,#00H
;清0.1秒单元
MOV A,22H
INC A
;秒单元加1
DA A
MOV 22H,A
CJNE A,#60H,TINTRUP1
;判60秒到否,未到继续
MOV 22H,#00H
;清秒计数单元
MOV A,21H
INC A
;分单元加1
DA A
MOV 21H,A
CJNE A,#60H,TINTRUP1
;判60分到否,未到继续
MOV 21H,#00H
;清分计数单元
MOV A,20H
INC A
;时单元加1
DA A
MOV 20H,A
CJNE A,#24H,TINTRUP1
;判24小时到否,未到继续
MOV 20H,#00H
;清时计数单元
TINTRUP1:POP ACC
POP PSW
RETI
;返回主程序
KEYDISP0:LCALL KEY
;调显示键扫子程序
JNC FANCKEY
;转功能键处理
DA TAKEY: LCALL DATAKEY1
;数值键处理
DB 79H,7EH
SJMP KEYDISP0
FANCKEY: CJNE A,#16H,KEYDISP0 ;是执行键,判输入的秒初值是否超限MOV A,7AH
SWAP A
ORL A,79H
MOV 22H,A
CJNE A,#60H,FANCKEY1 FANCKEY1: JNC FANCKEY4
;判输入的分初值是否超限MOV A,7CH
SWAP A
ORL A,7BH
MOV 21H,A
CJNE A,#60H,FANCKEY2 FANCKEY2: JNC FANCKEY4
;判输入的时初值是否超限
MOV A,7EH
SWAP A
ORL A,7DH
MOV 20H,A
CJNE A,#24H,FANCKEY3 FANCKEY3:JNC FANCKEY4
RET
FANCKEY4:CLR TR0
LJMP CLOCK0
DA TAKEY1:MOV R4,A
;数字键处理子程序
MOV DPTR,#1FFFH MOVX A,@DPTR
MOV R1,A
MOV A,R4
MOV @R1,A
CLR A
POP 83H
POP 82H
MOVC A,@A+DPTR
INC DPTR
CJNE A,01H,DATAKEY3
DEC R1
CLR A
MOVC A,@A+DPTR
DA TAKEY2: PUSH 82H PUSH 83H
MOV DPTR,#1FFFH
MOVX @DPTR,A
POP 83H
POP 82H
INC DPTR
PUSH 82H
PUSH 83H
RET
DA TAKEY3: DEC R1
MOV A,R1
SJMP DATAKEY2 KEY0: MOV R6,#20H
;数字键闪动程序MOV DPTR,#1FFFH
MOVX A,@DPTR
MOV R0,A
MOV A,@R0
MOV R7,A
MOV A,#10H
MOV @R0,A
KEY3: LCALL KEYDISP JNB 0E5H,KEY2
DJNZ R6,KEY3
MOV DPTR,#1FFFH
MOVX A,@DPTR
MOV R0,A
MOV A,R7
MOV @R0,A
KEY: MOV R6,#50H
KEY1: LCALL KEYDISP
JNB 0E5H,KEY2
DJNZ R6,KEY1
SJMP KEY0
K
MOV A,@R1
MOV R3,A
XRL A,R4
MOV R3,04H
MOV R4,02H
JZ KEYDISP1
MOV R2,#88H
MOV R4,#88H
KEYDISP1: DEC R4
MOV A,R4
XRL A,#82H
JZ KEYDISP2
MOV A,R4
XRL A,#0EH
JZ KEYDISP2
MOV A,R4
ORL A,R4
JZ KEYDISP3
MOV R4,#20H
DEC R2
LJMP KEYDISP5
KEYDISP3: MOV R4,#0FH KEYDISP2: MOV R2,04H
MOV R4,03H
KEYDISP5: MOV R1,#76H
MOV A,R2
MOV @R1,A
INC R1
MOV A,R3
MOV @R1,A
MOV A,R4
CJNE R3,#10H,KEYDISP4 KEYDISP4: RET
DISP: SETB 0D4H ;显示子程序MOV R1,#7EH
MOV R2,#20H
MOV R3,#00H
DISP1: MOV DPTR,#0FF21H
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#DATACO
MOV A,@R1
MOVC A,@A+DPTR
MOV DPTR,#0FF22H
MOVX @DPTR,A
DISP2: DJNZ R3,DISP2
DEC R1
CLR C
MOV A,R2
RRC A
MOV R2,A
JNZ DISP1
MOV A,#0FFH
MOV DPTR,#0FF22H
MOVX @DPTR,A
CLR 0D4H
RET
DA TACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,8 0H,90H
DB
88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H ,0DEH
键扫子程序
KEYSM:SETB 0D4H
MOV A,#0FFH
MOV DPTR,#0FF22H
MOVX @DPTR,A
KEYSM0: MOV R2,#0FEH
MOV R3,#08H
MOV R0,#00H
KEYSM1: MOV A,R2
MOV DPTR,#0FF21H
MOVX @DPTR,A
;键矩阵中第1列置0
NOP
RL A
MOV R2,A
MOV DPTR,#0FF23H
;读键的行值
MOVX A,@DPTR
CPL A
NOP
NOP
NOP
ANL A,#0FH
JNZ KEYSM2
INC R0
;无键且未到最后一列继续
DJNZ R3,KEYSM1
SJMP KEYSM10
KEYSM2: ;有键,计算键值
CPL A
JB 0E0H,KEYSM3
MOV A,#00H
SJMP KEYSM7
KEYSM3: JB 0E1H,KEYSM4
MOV A,#08H
SJMP KEYSM7
KEYSM4: JB 0E2H,KEYSM5
MOV A,#10H
SJMP KEYSM7
KEYSM5: JB 0E3H,KEYSM10
MOV A,#18H
KEYSM7: ADD A,R0
CLR 0D4H
CJNE A,#10H,KEYSM9
KEYSM9: JNC KEYSM10
MOV DPTR,#KEYDATA
MOVC A,@A+DPTR
KEYSM10: RET ;返回KEYDATA: DB 07H,04H,08H,05H,09H,06H,0AH,0BH ;键值表(0—F)
DB
01H,00H,02H,0FH,03H,0EH,0CH,0DH
四、实验小结
通过本次实验了解了单片机工作的基本原理,再次复习了汇编语言编写的相关内容,练习了单片机汇编程序设计的相关知识。
理解并实践了单片机计数和计时的相关概念和应用。