📄 shuma-anjian.lst
字号:
1 ; ===========================================
2 ;中断方式实现内部TCC功能
3 ;晶振=4MHZ,指令周期为4个时钟
4 ;============================================
5 ;--------------------------------------------------
6 ; 定义变量
7 ;-------------------------------------------------------
8 0001 TCC == 0x01
9 0002 pc == 0x02
10 0003 status == 0x03 ; 状态寄存器
11 0005 PORT5 == 0x05 ; PORT5端口
12 0006 port6 == 0x06
13 000B IOCB == 0x0b
14 000E IOCE == 0x0E ; WDT控制寄存器
15 000F IOCF == 0x0F ; 中断控制寄存器
16 000F ISR == 0x0F ; 中断状态寄存器
17 0010 A_BUF == 0x10 ; 保存中断前A的值
18 0011 TCC_Count == 0x11 ; 自定义计数器
19 0012 flag == 0x12
20 0013 flag1 == 0x13
21 0014 count == 0x14
22 0015 temp == 0x15
23 00F6 num == 246
24 0002 Z == 2
25 0000 c == 0
26 ;----------------------------主程序------------------------------;
27 ORG 0x00
28 00000 1418 JMP tcc_start
29 ORG 0x08
30 ;----------------------------------------------------------------------;
31 00008 TCC_INT:
32 00008 0050 MOV A_BUF, A ; 保存A的值
33 00009 180E mov a,@0x0e
34 0000A 0041 mov TCC,a
35 0000B 18FE MOV A, @0xFE
36 0000C 02CF AND ISR, A ; 清中断标志位
37 0000D 0A13 bs flag1,0 ;2ms的时间到
38 0000E 1802 mov a,@0x02
39 0000F 0346 xor port6,a ;一秒取反输出(P5.0LED)
40 00010 0551 INC TCC_Count ; 每中断一次TCC_Count计数器加1
41 00011 0E83 JBS status,Z ; 判断TCC_Count是否溢出
42 00012 1416 JMP TCC_out ; 没有溢出
43 00013 18F6 mov a,@num ;20ms的时间到
44 00014 0051 mov TCC_Count,a
45 00015 0A12 bs flag,0
46 00016 TCC_out:
47 ;bs port6,1
48 00016 0410 MOV A, A_BUF ; 恢复A的值
49 00017 0013 RETI ; 中断返回
50 ;----------------------------------------------------------------------;
51 00018 tcc_start:
52 00018 1800 MOV A, @0x00
53 00019 000E IOW IOCE ; 关闭看门狗
54 0001A 1800 MOV A, @0x00
55 0001B 0005 IOW PORT5 ; Port5为输出口
56 0001C 18EF mov a,@0xef ;p60为下拉电阻
57 0001D 000B IOW IOCB
58 0001E 1809 mov a,@0x09 ;pp64-p67为输出口
59 0001F 0006 iow port6 ;p60为按键输入口,p61为数码管的动态位
60 00020 0812 bc flag,0
61 00021 0813 bc flag1,0
62 00022 0846 bc port6,1
63 00023 00D4 clr count
64 00024 00D5 clr temp
65 00025 18F6 mov a,@num
66 00026 0051 mov TCC_Count,a
67 00027 18D0 MOV A, @0b11010000 ; 保留不需要设置的状态位
68 00028 1902 OR A, @0b00000010 ; 预除数为8
69 00029 0002 CONTW
70 0002A 1801 MOV A, @0x01 ; 允许计数器中断
71 0002B 000F IOW IOCF
72 0002C 0010 ENI ; 开中断
73 0002D main:
74
75 0002D 0E06 jbs port6,0
76 0002E 1448 jmp main_out
77 0002F 0E12 jbs flag,0
78 00030 1448 jmp main_out
79 00031 0812 bc flag,0
80 00032 0E06 jbs port6,0
81 00033 1448 jmp main_out
82 00034 key_in:
83 00034 0C06 jbc port6,0
84 00035 1434 jmp key_in
85 00036 0554 inc count
86 00037 180A mov a,@10
87 00038 0114 sub a,count
88 00039 0C03 jbc status,c
89 0003A 00D4 clr count
90
91 0003B main_next:
92 0003B 0E13 jbs flag1,0
93 0003C 143B jmp main_next
94 0003D 0813 bc flag1,0
95 0003E 0414 mov a,count
96 0003F 1A0F and a,@0x0f
97 00040 1049 call led_table
98 00041 0055 mov temp,a
99 00042 028F and a,0x0f
100 00043 0245 or port5,a
101 00044 0415 mov a,temp
102 00045 1AF0 and a,@0xf0
103 00046 0246 or port6,a
104 00047 00D5 clr temp
105 ;bs port6,1
106
107
108 00048 main_out:
109 00048 142D jmp main
110 00049 led_table:
111 00049 03C2 add pc,a
112 0004A 1C3F retl @0x3f ;0
113 0004B 1C06 retl @0x06 ;1
114 0004C 1C5B retl @0x5b ;2
115 0004D 1C4F retl @0x4f ;3
116 0004E 1C66 retl @0x66 ;4
117 0004F 1C6D retl @0x6d ;5
118 00050 1C7D retl @0x7d ;6
119 00051 1C07 retl @0x07 ;7
120 00052 1C7F retl @0x7f ;8
121 00053 1C6F retl @0x6f ;9
122 END
0 Error(s), 0 Warning(s), 0 User Message(s)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -