📄 led_man.lst
字号:
1 ; ===========================================
2 ;中断方式实现内部TCC功能
3 ;晶振=4MHZ,指令周期为4个时钟
4 ;============================================
5 ;--------------------------------------------------
6 ; 定义变量
7 ;-------------------------------------------------------
8 0003 R3 == 0x03 ; 状态寄存器
9 0005 PORT5 == 0x05 ; PORT5端口
10 000E IOCE == 0x0E ; WDT控制寄存器
11 000F IOCF == 0x0F ; 中断控制寄存器
12 000F ISR == 0x0F ; 中断状态寄存器
13 0020 A_BUF == 0x20 ; 保存中断前A的值
14 0021 R3_BUF == 0x21 ; 保存中断前的状态
15 0022 TCC_Count == 0x22 ; 自定义计数器
16 ;----------------------------主程序------------------------------;
17 ORG 0x00
18 00000 141E JMP main
19 ORG 0x08
20 00008 1410 JMP TCC_INT
21 ORG 0x10
22 ;----------------------------------------------------------------------;
23 00010 TCC_INT:
24 00010 0060 MOV A_BUF, A ; 保存A的值
25 00011 0403 MOV A,R3
26 00012 0061 MOV R3_BUF,A ;保存状态字
27 00013 18FE MOV A, @0xFE
28 00014 02CF AND ISR, A ; 清中断标志位
29 00015 0562 INC TCC_Count ; 每中断一次TCC_Count计数器加1
30 00016 0FE2 JBS TCC_Count,7 ; 判断TCC_Count是否溢出
31 00017 141A JMP TCC_out ; 没有溢出
32 00018 00E2 clr TCC_Count
33 00019 04C5 com port5 ;一秒取反输出(P5.0LED)
34 0001A TCC_out:
35 0001A 0420 MOV A, A_BUF ; 恢复A的值
36 0001B 0421 MOV A,R3_BUF
37 0001C 0043 MOV R3,A ;回复R3的值
38 0001D 0013 RETI ; 中断返回
39 ;----------------------------------------------------------------------;
40 0001E main:
41 0001E 1800 MOV A, @0x00
42 0001F 000E IOW IOCE ; 关闭看门狗
43 00020 1800 MOV A, @0x00
44 00021 0005 IOW PORT5 ; Port5为输出口
45 00022 0805 BC PORT5, 0 ; 关闭LED灯
46 00023 18D0 MOV A, @0xd0 ; 保留不需要设置的状态位
47 00024 1907 OR A, @0x07 ; 预除数为16
48 00025 0002 CONTW
49
50 00026 1801 MOV A, @0x01 ; 允许计数器中断
51 00027 000F IOW IOCF
52 00028 0010 ENI ; 开中断
53 00029 loop:
54 00029 0000 nop
55 0002A 0000 nop
56 0002B 1429 jmp loop
57 END
0 Error(s), 0 Warning(s), 0 User Message(s)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -