📄 8ledjianbian(dingshi).lst
字号:
1 ; ===========================================
2 ; 中断方式实现内部TCC功能
3 ; 晶振=4MHZ,指令周期为4个时钟
4 ; 2008年10月30日;8个灯的流水渐灭
5 ;============================================
6 ;--------------------------------------------------
7 ; 系统变量
8 ;-------------------------------------------------------
9 0001 tcc == 0x01 ; TCC计数器
10 0003 psw == 0x03 ; 状态寄存器
11 0005 port5 == 0x05 ; PORT5端口
12 0005 ioc5 == 0x05 ; port5控制端口
13 0006 port6 == 0x06 ; port6端口
14 0006 ioc6 == 0x06 ; port6控制端口
15 000B iocb == 0x0b ; 设置下拉控制器
16 000E IOCE == 0x0E ; WDT控制寄存器
17 000F IOCF == 0x0F ; 中断控制寄存器
18 000F ISR == 0x0F ; 中断状态寄存器
19 ;---------------------------------------------------------------------
20 ;定义变量
21 ;---------------------------------------------------------------------
22 0010 a_buf == 0x10 ; 保存中断前A的值
23 0011 count_gu == 0x11 ; 固定计数器
24 0012 count_bian == 0x12 ; 可变计数器
25 0013 temp3_75 == 0x13 ; 最暗比较器
26 0014 temp2_50 == 0x14 ; 较暗比较器
27 0015 temp1_25 == 0x15 ; 次暗比较器
28 0016 temp0_0 == 0x16 ; 最亮比较器
29 0019 count == 0x19 ; 分配计数器
30 001A year == 0x1a ; 年龄,用在按键扫描中
31 001B flag == 0x1b ; 0位为连击标志位,1位为响应标志位
32 001C time == 0x1c ; 时间变换1
33 001D time1 == 0x1d ; 时间变换2
34 001E time0 == 0x1e ; 时间中间量
35 0000 c == 0 ; 进位标志位
36 0002 Z == 2 ; 为0标志位
37 ;----------------------------程序入口地址------------------------------;
38 org 0x00
39 00000 141A jmp start ; 开始程序入口
40 org 0x08 ; 中断入口地址
41 ;----------------------------------------------------------------------;
42 00008 tcc_int:
43 00008 0050 mov a_buf, a ; 保存A的值
44 00009 18EA mov a,@0xea ; TCC计数初值
45 0000A 0041 mov tcc,a
46 0000B 18FE mov a, @0xfe
47 0000C 02CF and isr, a ; 清中断标志位
48 ;-----------------------------------------------------------------------
49 0000D 1046 call gu_loop ; 调用固定计数子程序
50
51 0000E 05DD djz time1
52 0000F 1418 jmp tcc_out
53 00010 041E mov a,time0
54 00011 005D mov time1,a
55 00012 11B1 call bian_loop ; 调用可变计数子程序
56
57 00013 05DC djz time
58 00014 1418 jmp tcc_out
59 00015 1828 mov a,@40
60 00016 005C mov time,a
61
62 00017 11CA call key_scan ; 调用按键扫描
63
64 ;----------------------------------------------------------------------
65 00018 tcc_out:
66 00018 0410 mov a, a_buf ; 恢复A的值
67 00019 0013 reti ; 中断返回
68 ;---------------------主程序-----------------------------------------------;
69 0001A start:
70 0001A 1880 mov a, @0x80
71
72 0001B 000E iow ioce ; 关闭看门狗
73 ;---------------------设置IO口--------------------------------------------
74 0001C 0080 clra
75 0001D 0005 iow ioc5 ; Port5为输出口
76 0001E 180A mov a,@0x0a ; p61为输入口
77 0001F 0006 iow ioc6 ; 其余为输出口
78 00020 18DF mov a,@0xdf ; p61设置下拉电阻
79 00021 000B iow iocb
80 ;------------------赋初值-------------------------------------------------;
81 00022 184B mov a,@75
82 00023 0392 add a,count_bian
83 00024 0053 mov temp3_75,a ;最暗计数器
84 00025 1832 mov a,@50
85 00026 0392 add a,count_bian
86 00027 0054 mov temp2_50,a ;较暗计数器
87 00028 1819 mov a,@25
88 00029 0392 add a,count_bian
89 0002A 0055 mov temp1_25,a ;次暗计数器
90 0002B 1800 mov a,@0
91 0002C 0392 add a,count_bian
92 0002D 0056 mov temp0_0,a ;最亮计数器
93 ;--------------------------------------------------------------------------
94 0002E 1828 mov a,@40
95 0002F 005C mov time,a
96 00030 041E mov a,time0
97 00031 005D mov time1,a
98 ;-------------------------------------------------------------------------
99 00032 00DA clr year ;年龄,决定进入连击时的等待时间和连击的速度;
100 00033 00DB clr flag
101 00034 00D9 clr count
102 00035 00D1 clr count_gu
103 00036 00D2 clr count_bian
104 00037 180F mov a,@0x0f
105 00038 0245 or port5,a ;p5和p6的LED灭
106 00039 18F0 mov a,@0xf0
107 0003A 0246 or port6,a
108 0003B 18FF mov a,@255
109 0003C 005E mov time0,a
110 ;----------------------------------------------------------------
111 0003D 18D0 mov a, @0b11010000 ; 保留不需要设置的状态位
112 0003E 1900 or a, @0b00000000 ; 预除数2
113 0003F 0002 contw
114 00040 1801 mov a, @0x01 ; 允许计数器中断
115 00041 000F iow iocf
116 00042 0010 eni ; 开中断
117 ;----------------------等待中断----------------------------------------------;
118 00043 main:
119 00043 0000 nop
120 00044 0000 nop
121 00045 1443 jmp main
122 ;------------------------------------------------------------------------------
123 ;固定计数子程序
124 ;可以在此改变IO口的状态,50us-5ms,100等份
125 ;-----------------------------------------------------------------------------
126 ;=========================第一部分===========================================
127 00046 gu_loop:
128 00046 0551 inc count_gu
129 00047 18AF mov a,@0xaf
130 00048 0311 xor a,count_gu ; 是否等于100
131 00049 0E83 jbs psw,z
132 0004A 1451 jmp gu_next ; 否,返回
133 0004B 00D1 clr count_gu
134 0004C 180F mov a,@0x0f ; P5置1,灯灭
135 0004D 0245 or port5,a
136 0004E 18F0 mov a,@0xf0 ; P6口置1,灯灭
137 0004F 0246 or port6,a
138 00050 0012 ret
139 00051 gu_next: ; 第一灯最暗
140 00051 0413 mov a,temp3_75
141 00052 0111 sub a,count_gu
142 00053 0E03 jbs psw,c
143 00054 14A9 jmp gu_next1
144 00055 0080 clra
145 00056 0319 xor a,count
146 00057 0E83 jbs psw,z
147 00058 145B jmp disp_next
148 00059 0805 bc port5,0
149 0005A 0012 ret
150 0005B disp_next: ; 第二灯最暗
151 0005B 1801 mov a,@1
152 0005C 0319 xor a,count
153 0005D 0E83 jbs psw,z
154 0005E 1461 jmp disp_next1
155 0005F 0845 bc port5,1
156 00060 0012 ret ; 第三灯最暗
157 00061 disp_next1:
158 00061 1802 mov a,@2
159 00062 0319 xor a,count
160 00063 0E83 jbs psw,z
161 00064 1467 jmp disp_next2
162 00065 0885 bc port5,2
163 00066 0012 ret
164 00067 disp_next2: ; 第四灯最暗
165 00067 1803 mov a,@3
166 00068 0319 xor a,count
167 00069 0E83 jbs psw,z
168 0006A 146D jmp disp_next3
169 0006B 08C5 bc port5,3
170 0006C 0012 ret
171 0006D disp_next3: ; 第五灯最暗
172 0006D 1804 mov a,@4
173 0006E 0319 xor a,count
174 0006F 0E83 jbs psw,z
175 00070 1473 jmp disp_next4
176 00071 0906 bc port6,4
177 00072 0012 ret
178 00073 disp_next4: ; 第六灯最暗
179 00073 1805 mov a,@5
180 00074 0319 xor a,count
181 00075 0E83 jbs psw,z
182 00076 1479 jmp disp_next5
183 00077 0946 bc port6,5
184 00078 0012 ret
185 00079 disp_next5: ; 第七灯最暗
186 00079 1806 mov a,@6
187 0007A 0319 xor a,count
188 0007B 0E83 jbs psw,z
189 0007C 147F jmp disp_next6
190 0007D 0986 bc port6,6
191 0007E 0012 ret
192 0007F disp_next6: ; 第八灯最暗
193 0007F 1807 mov a,@7
194 00080 0319 xor a,count
195 00081 0E83 jbs psw,z
196 00082 1485 jmp disp_next7
197 00083 09C6 bc port6,7
198 00084 0012 ret
199 00085 disp_next7: ; 第七灯最暗
200 00085 1808 mov a,@8
201 00086 0319 xor a,count
202 00087 0E83 jbs psw,z
203 00088 148B jmp disp_next8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -