定时器中断综合实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2 定时器、中断综合实验
一、实验目的
熟悉MCS-51定时器,串行口和中断初始化编程方法,了解定时器的应用,时钟程序的设计与调试技巧。
二、实验内容
编写程序,用定时器中断现实LED跑马灯实验。
实验内容1:
1).用查表法实现LED跑马灯实验;
2).采用定时器控制跑马灯的变化速度。
三、流程框图
四、实验步骤及程序
ORG 0000H
LJMP MAIN
ORG 000BH ; T0 中断入口地址
MOV TH0,#0BH ; 62.5毫秒定时
MOV TL0,#0DCH
DJNZ R2,T0OUT ; 中断16次为1秒
MOV R2,#16
PUSH ACC ; 保存数据
MOVC A,@A+DPTR ; 查表法LED 左右移
MOV P0,A
POP ACC
INC A
CJNE A,#24,T0OUT ; 24种"花样"
CLR A
T0OUT: RETI
ORG 0050H
MAIN: MOV SP,#6FH ;
MOV R2,#16 ; 定时器中断次数,@12M
MOV A,#00H ; 查表起始值
MOV DPTR,#TABLE
MOV TMOD,#00000001B ; 定时器方式1
MOV TH0,#0BH ; 62.5MS
MOV TL0,#0DCH
SETB EA ; 中端总允许
SETB ET0 ; 允许T0 中断
SETB TR0 ; 启动定时
WAIT: SJMP $ ;原地等待中断
RET
TABLE:DB 0FEH,0FDH,0FBH,0F7H ;LED 左右移数据表,共有24种"花样"
DB 0EFH,0DFH,0BFH,07FH
DB 00H,55H,0AAH,00H
DB 7FH,0BFH,0DFH,0EFH
DB 0F7H,0FBH,0FDH,0FEH
DB 00H,0AAH,55H,00H
END
思考:换用T1定时器,定时方式2。
用汇编语言编辑8个LED灯,实现第一秒只有L1不亮,其余七个全亮,第二个L2不亮,其余七个全亮
ORG 0000H
SJMP START
ORG 000BH
SJMP T0_INT
START:
MOV TMOD, #01H
MOV TH0, #3CH ; (65536 - 50000) / 256;
MOV TL0, #0B0H ; (65536 - 50000) % 256;
SETB TR0
SETB ET0
SETB EA
MOV A, #01H
MOV R2, #20
SJMP $
T0_INT:
MOV TH0, #3CH ; (65536 - 50000) / 256;
MOV TL0, #0B0H ; (65536 - 50000) % 256;
DJNZ R2, T0_END
MOV R2, #20
MOV P0, A
RL A
T0_END:
RETI
END
实验内容2:
设计一个实时时钟,用42H显示秒单元,用41H显示分单元,用40H显示时单元。要求每满1秒,秒单元内容加1;秒满60,分单元加1,分满60,时单元加1。时满24 ,时分秒全部清0。
从秒到分,从分到时,通过软件累加现实。P115。
ORG 0000H
LJMP MAIN ;上电,跳向主程序
ORG 000BH ;T0的中断入口
LJMP IT0P
ORG 1000H
MAIN: MOV TMOD,#01H ;设T0为方式1
MOV 20H,#0AH ;装入中断次数
CLR A
MOV 40H,A ;“时”单元清“0”
MOV 41H,A ;“分”单元清“0”
MOV 42H,A ;“秒”单元清“0”
SETB ET0 ;允许T0申请中断
SETB EA ;总中断允许
MOV TH0,#3CH ;给T0装入计数初值
MOV TL0,#0B0H
SETB TR0 ;启动T0
HERE: SJMP HERE ;等中断(也可调用显示子程序)
IT0P: PUSH PSW ;T0中断子程序入口,保护现场
PUSH Acc
MOV TH0,#3CH ;重新装入初值
MOV TL0,#0B0H
DJNZ 20H,RETURN ;1秒时间未到,返回
MOV 20H,#0AH ;重置中断次数
MOV A,#01H ;“秒”单元增1
ADD A,42H
DA A ;“秒”单元十进制调整
MOV 42H,A ;“秒”的BCD码存回“秒”单元
CJNE A,#60H,RETURN ;是否到60秒,未到则返回
MOV 42H,#00H ;计满60秒,“秒”单元清“0”
MOV A,#01H ;“分”单元增1
ADD A,41H
DA A ;“分”单元十进制调整
MOV 41H,A ;“分”的BCD码存回“分”单元
CJNE A,#60H,RETURN ;是否到60分,未到则返回
MOV 41H,#00H ;计满60分,“分”单元清“0”
MOV A,#01H ;“时”单元增1
ADD A,40H
DA A ;“时”单元十进制调整
MOV 40H,A
CJNE A,#24H,RETURN ;是否到24小时,未到则返回
MOV 40H,#00H ;到24小时,“时”单元清“0”RETURN: POP Acc ;恢复现场
POP PSW
RETI ;中断返回
END
思考:如何修改成时、分、秒单元可以人工修改?