📄 int_t0_led.asm
字号:
;******************************Copyright (c)**********************************
;** 广州周立功单片机发展有限公司研究所
;** http://www.zlgmcu.com
;******************************文件信息************************************
;文件名:INT_T0_Led.asm
;功能:使用DP-51S实验仪学习定时/计数器并实现LED发光管的流水显示
;说明:(使用中断方式现实)
;1.学习使用使用定时/计数器产生延时的程序设计方法与技巧
;2.LED发光管和LED数码管共用同一地址2000H~3FFFH,在此选取2000H。
;3.正确设置跳线JP1使P1.6与KBIT7相连,即把跳线置于下端
;最后修改时间:2003年3月21
;*************************************************************************
LED_ADDR EQU 2000H ;定义LED数码管的数据段地址
COUNTER DATA 30H ;定义计数单元
DBUFFER DATA 31H ;定义输出初始值
LEDCS EQU P1.6 ;定义LED片选信号线
ORG 8000H ;伪指令,定义程序从8000H开始存放
AJMP MAIN
ORG 800BH ;中断入口向量地址
AJMP LEDINT0
ORG 8100H ;伪指令,定义以下程序从8100H开始存放
MAIN: MOV SP,#60H ;给堆栈指针赋初值
MOV TMOD,#01H ;定时器0工作于方式1
MOV TH0,#3CH ;给计数寄存器的高8位赋初值
MOV TL0,#0B0H ;给计数寄存器的低8位赋初值
MOV DBUFFER,#07FH ;赋初值07FH,点亮L8
SETB ET0 ;允许定时器0溢出中断
SETB EA ;开放总中断
SETB TR0 ;计时开始
MOV DPTR,#LED_ADDR ;LED发光二极管操作地址送DPTR
CLR LEDCS ;使能LED发光二极管
LOOP: MOV A,DBUFFER ;输出显示数据送A
MOVX @DPTR,A ;输出显示
AJMP LOOP
;***********************
;定时器0中断服务子程序
;***********************
LEDINT0:
PUSH PSW ;压栈保护现场
PUSH ACC
CLR TR0 ;禁止定时器计数
MOV TH0,#3CH ;重新给计数器赋初值
MOV TL0,#0B0H
DJNZ COUNTER,LEDRET ;定时1s到了吗?
MOV COUNTER,#20 ;是,则重新赋初值
MOV A,DBUFFER ;读取原始状态
RR A ;改变原始状态
MOV DBUFFER,A ;更新输出
LEDRET: SETB TR0 ;启动定时器
POP ACC ;出栈
POP PSW
RETI ;中断返回
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -