📄 led_man.dt
字号:
; ===========================================
;中断方式实现内部TCC功能
;晶振=4MHZ,指令周期为4个时钟
;============================================
;--------------------------------------------------
; 定义变量
;-------------------------------------------------------
R3 == 0x03 ; 状态寄存器
PORT5 == 0x05 ; PORT5端口
IOCE == 0x0E ; WDT控制寄存器
IOCF == 0x0F ; 中断控制寄存器
ISR == 0x0F ; 中断状态寄存器
A_BUF == 0x20 ; 保存中断前A的值
R3_BUF == 0x21 ; 保存中断前的状态
TCC_Count == 0x22 ; 自定义计数器
;----------------------------主程序------------------------------;
ORG 0x00
JMP main
ORG 0x08
JMP TCC_INT
ORG 0x10
;----------------------------------------------------------------------;
TCC_INT:
MOV A_BUF, A ; 保存A的值
MOV A,R3
MOV R3_BUF,A ;保存状态字
MOV A, @0xFE
AND ISR, A ; 清中断标志位
INC TCC_Count ; 每中断一次TCC_Count计数器加1
JBS TCC_Count,7 ; 判断TCC_Count是否溢出
JMP TCC_out ; 没有溢出
clr TCC_Count
com port5 ;一秒取反输出(P5.0LED)
TCC_out:
MOV A, A_BUF ; 恢复A的值
MOV A,R3_BUF
MOV R3,A ;回复R3的值
RETI ; 中断返回
;----------------------------------------------------------------------;
main:
MOV A, @0x00
IOW IOCE ; 关闭看门狗
MOV A, @0x00
IOW PORT5 ; Port5为输出口
BC PORT5, 0 ; 关闭LED灯
MOV A, @0xd0 ; 保留不需要设置的状态位
OR A, @0x07 ; 预除数为16
CONTW
MOV A, @0x01 ; 允许计数器中断
IOW IOCF
ENI ; 开中断
loop:
nop
nop
jmp loop
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -