定时器中断综合实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

思考:如何修改成时、分、秒单元可以人工修改?

相关文档
最新文档