📄 tiaoshi.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 0013 temp3 == 0x13 ; 最暗比较器
24 0014 temp2 == 0x14 ; 较暗比较器
25 0015 temp1 == 0x15 ; 次暗比较器
26 0016 temp0 == 0x16 ; 最亮比较器
27 0017 r_x1 == 0x17
28 0018 r_x2 == 0x18
29 001A count == 0x1a
30 001B flag == 0x1b ; 0位为连击标志位,1位为响应标志位
31 001C time == 0x1c ; 时间变换1
32 001D time1 == 0x1d
33 001E time0 == 0x1e ; 时间中间量
34 0020 count3 == 0x20
35 0021 count2 == 0x21
36 0022 count1 == 0x22
37 0023 count0 == 0x23
38 0024 count_gu == 0x24
39 0000 c == 0 ; 进位标志位
40 0002 Z == 2 ; 为0标志位
41 ;----------------------------程序入口地址------------------------------;
42 org 0x00
43 00000 141C jmp start ; 开始程序入口
44 org 0x08 ; 中断入口地址
45 ;--------------------中断处理--------------------------------------------;
46 00008 tcc_int:
47 00008 0050 mov a_buf, a ; 保存A的值
48 00009 18EA mov a,@0xea ; TCC计数初值
49 0000A 0041 mov tcc,a
50 0000B 18FE mov a, @0xfe
51 0000C 02CF and isr, a ; 清中断标志位
52 ;-----------------------------------------------------------------------
53 0000D 1049 call gu_loop ; 调用固定计数子程序
54 0000E 05DD djz time1
55 0000F 141A jmp tcc_out
56 00010 180A mov a,@10
57 00011 005D mov time1,a
58 00012 05DC djz time
59 00013 141A jmp tcc_out
60 00014 041E mov a,time0
61 00015 005C mov time,a
62 00016 110C call bian_loop ; 调用可变计数子程序
63 00017 111B call bian1_loop
64 00018 112A call bian2_loop
65 00019 1139 call bian3_loop
66
67 ;----------------------------------------------------------------------
68 0001A tcc_out:
69 0001A 0410 mov a, a_buf ; 恢复A的值
70 0001B 0013 reti ; 中断返回
71 ;---------------------主程序-----------------------------------------------;
72 0001C start:
73 0001C 1880 mov a, @0x80
74
75 0001D 000E iow ioce ; 开看门狗
76 ;---------------------设置IO口--------------------------------------------
77 0001E 0080 clra
78 0001F 0005 iow ioc5 ; Port5为输出口
79 00020 180A mov a,@0x0a ; p61为输入口
80 00021 0006 iow ioc6 ; 其余为输出口
81 00022 18DF mov a,@0xdf ; p61设置下拉电阻
82 00023 000B iow iocb
83 ;------------------赋初值-------------------------------------------------;
84 00024 184B mov a,@75
85 00025 0053 mov temp3,a ;最暗计数器
86 00026 1832 mov a,@50
87 00027 0054 mov temp2,a ;较暗计数器
88 00028 1819 mov a,@25
89 00029 0055 mov temp1,a ;次暗计数器
90 0002A 1800 mov a,@0
91 0002B 0056 mov temp0,a ;最亮计数器
92 ;-------------------------------------------------------------------------
93 0002C 180A mov a,@10
94 0002D 005D mov time1,a
95 0002E 041E mov a,time0
96 0002F 005C mov time,a
97 ;-------------------------------------------------------------------------
98 00030 00D7 clr r_x1
99 00031 00D8 clr r_x2
100 00032 00DB clr flag
101 00033 00DA clr count
102 00034 00E0 clr count3
103 00035 00E1 clr count2
104 00036 00E2 clr count1
105 00037 00E3 clr count0
106 00038 00E4 clr count_gu
107 00039 180F mov a,@0x0f
108 0003A 0245 or port5,a ;p5和p6的LED灭
109 0003B 18F0 mov a,@0xf0
110 0003C 0246 or port6,a
111 0003D 1832 mov a,@50
112 0003E 005E mov time0,a
113 ;----------------------------------------------------------------
114 0003F 18D0 mov a, @0b11010000 ; 保留不需要设置的状态位
115 00040 1900 or a, @0b00000000 ; 预除数2
116 00041 0002 contw
117 00042 1801 mov a, @0x01 ; 允许计数器中断
118 00043 000F iow iocf
119 00044 0010 eni ; 开中断
120 ;----------------------等待中断----------------------------------------------;
121 00045 main:
122 00045 1148 call key_scan ; 调用按键扫描
123 00046 0000 nop
124 00047 0000 nop
125 00048 1445 jmp main
126 ;------------------------------------------------------------------------------
127 ;固定计数子程序
128 ;可以在此改变IO口的状态,50us-5ms,100等份
129 ;-----------------------------------------------------------------------------
130 ;=========================第一部分===========================================
131 00049 gu_loop:
132 00049 0564 inc count_gu
133 0004A 1864 mov a,@0x64
134 0004B 0324 xor a,count_gu ; 是否等于100
135 0004C 0E83 jbs psw,z
136 0004D 1454 jmp gu_next ; 否,返回
137 0004E 00E4 clr count_gu
138 0004F 180F mov a,@0x0f ; P5置1,灯灭
139 00050 0245 or port5,a
140 00051 18F0 mov a,@0xf0 ; P6口置1,灯灭
141 00052 0246 or port6,a
142 00053 0012 ret
143 00054 gu_next: ; 第一灯最暗
144
145 00054 0413 mov a,temp3
146 00055 0124 sub a,count_gu
147 00056 0E03 jbs psw,c
148 00057 1482 jmp gu_next1
149 00058 0080 clra
150 00059 0320 xor a,count3
151 0005A 0E83 jbs psw,z
152 0005B 145E jmp disp3_next
153 0005C 0805 bc port5,0
154 0005D 1482 jmp gu_next1
155 0005E disp3_next: ; 第二灯最暗
156 0005E 1801 mov a,@1
157 0005F 0320 xor a,count3
158 00060 0E83 jbs psw,z
159 00061 1464 jmp disp3_next1
160 00062 0906 bc port6,4
161 00063 1482 jmp gu_next1 ; 第三灯最暗
162 00064 disp3_next1:
163 00064 1802 mov a,@2
164 00065 0320 xor a,count3
165 00066 0E83 jbs psw,z
166 00067 146A jmp disp3_next2
167 00068 0986 bc port6,6
168 00069 1482 jmp gu_next1
169 0006A disp3_next2: ; 第四灯最暗
170 0006A 1803 mov a,@3
171 0006B 0320 xor a,count3
172 0006C 0E83 jbs psw,z
173 0006D 1470 jmp disp3_next3
174 0006E 0885 bc port5,2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -