📄 1602.lst
字号:
(0205) /************************************************************************/
(0206)
(0207) unsigned char dispbuf[]={'0','1','2','3','4','5','6','7','8','9'};
(0208) unsigned char dispbitcnt=8;
(0209)
(0210) unsigned char second;
(0211) unsigned char minite;
(0212) unsigned char hour;
(0213) unsigned int tcnt;
(0214) unsigned char mstcnt=8,i;
(0215)
(0216)
(0217) void port_init(void)
(0218) {
(0219) PORTA = 0x00;
_port_init:
112 2422 CLR R2
113 BA2B OUT 0x1B,R2
(0220) DDRA = 0xFF;
114 EF8F LDI R24,0xFF
115 BB8A OUT 0x1A,R24
(0221) PORTB = 0x00;
116 BA28 OUT 0x18,R2
(0222) DDRB = 0xFF;
117 BB87 OUT 0x17,R24
(0223) PORTC = 0x00; //m103 output only
118 BA25 OUT 0x15,R2
(0224) DDRC = 0xFF;
119 BB84 OUT 0x14,R24
(0225) PORTD = 0x00;
11A BA22 OUT 0x12,R2
(0226) DDRD = 0xFF;
11B BB81 OUT 0x11,R24
11C 9508 RET
(0227) }
(0228) //TIMER0 initialize - prescale:64
(0229) // WGM: Normal
(0230) // desired value: 1mSec
(0231) // actual value: 1.000mSec (0.0%)
(0232) void timer0_init(void)
(0233) {
(0234) TCCR0 = 0x00; //stop
_timer0_init:
11D 2422 CLR R2
11E BE23 OUT 0x33,R2
(0235) TCNT0 = 0x83; //set count
11F E883 LDI R24,0x83
120 BF82 OUT 0x32,R24
(0236) OCR0 = 0x7D; //set compare
121 E78D LDI R24,0x7D
122 BF8C OUT 0x3C,R24
(0237) TCCR0 = 0x03; //start timer
123 E083 LDI R24,3
124 BF83 OUT 0x33,R24
125 9508 RET
_timer0_ovf_isr:
126 920A ST R0,-Y
127 921A ST R1,-Y
128 922A ST R2,-Y
129 923A ST R3,-Y
12A 924A ST R4,-Y
12B 925A ST R5,-Y
12C 926A ST R6,-Y
12D 927A ST R7,-Y
12E 928A ST R8,-Y
12F 929A ST R9,-Y
130 930A ST R16,-Y
131 931A ST R17,-Y
132 932A ST R18,-Y
133 933A ST R19,-Y
134 938A ST R24,-Y
135 939A ST R25,-Y
136 93AA ST R26,-Y
137 93BA ST R27,-Y
138 93EA ST R30,-Y
139 93FA ST R31,-Y
13A B60F IN R0,0x3F
13B 920A ST R0,-Y
13C 9721 SBIW R28,1
(0238) }
(0239)
(0240) #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
(0241) void timer0_ovf_isr(void)
(0242) {
(0243) //mstcnt--;
(0244) //if(mstcnt==0)
(0245) //{
(0246) // mstcnt=8;
(0247)
(0248) // }
(0249) //for(i=0;i<8;i++)
(0250) tcnt++;
13D 9180 0075 LDS R24,tcnt
13F 9190 0076 LDS R25,tcnt+1
141 9601 ADIW R24,1
142 9390 0076 STS tcnt+1,R25
144 9380 0075 STS tcnt,R24
(0251)
(0252) if(tcnt==1000)
146 3E88 CPI R24,0xE8
147 E0E3 LDI R30,3
148 079E CPC R25,R30
149 F009 BEQ 0x014B
14A C07B RJMP 0x01C6
(0253) {
(0254) tcnt=0;
14B 2422 CLR R2
14C 2433 CLR R3
14D 9230 0076 STS tcnt+1,R3
14F 9220 0075 STS tcnt,R2
(0255) second++;
151 9180 0079 LDS R24,second
153 5F8F SUBI R24,0xFF
154 9380 0079 STS second,R24
(0256) if(second==60)
156 338C CPI R24,0x3C
157 F4A1 BNE 0x016C
(0257) {
(0258) second=0;
158 9220 0079 STS second,R2
(0259) minite++;
15A 9180 0078 LDS R24,minite
15C 5F8F SUBI R24,0xFF
15D 9380 0078 STS minite,R24
(0260) if(minite==60)
15F 338C CPI R24,0x3C
160 F459 BNE 0x016C
(0261) {
(0262) minite=0;
161 9220 0078 STS minite,R2
(0263) hour++;
163 9180 0077 LDS R24,hour
165 5F8F SUBI R24,0xFF
166 9380 0077 STS hour,R24
(0264) if(hour==24)
168 3188 CPI R24,0x18
169 F411 BNE 0x016C
(0265) {
(0266) hour=0;
16A 9220 0077 STS hour,R2
(0267) }
(0268) }
(0269) }
(0270) table_2[7]=dispbuf[second%10];
16C E02A LDI R18,0xA
16D E030 LDI R19,0
16E 9100 0079 LDS R16,second
170 2711 CLR R17
171 940E 0213 CALL mod16s
173 01F8 MOVW R30,R16
174 E688 LDI R24,0x68
175 E090 LDI R25,0
176 0FE8 ADD R30,R24
177 1FF9 ADC R31,R25
178 8020 LDD R2,Z+0
179 9220 0067 STS 0x0067,R2
(0271) table_2[6]=dispbuf[second/10];
17B E02A LDI R18,0xA
17C E030 LDI R19,0
17D 9100 0079 LDS R16,second
17F 2711 CLR R17
180 940E 0217 CALL div16s
182 01F8 MOVW R30,R16
183 E688 LDI R24,0x68
184 E090 LDI R25,0
185 0FE8 ADD R30,R24
186 1FF9 ADC R31,R25
187 8020 LDD R2,Z+0
188 9220 0066 STS 0x0066,R2
(0272) table_2[4]=dispbuf[minite%10];
18A E02A LDI R18,0xA
18B E030 LDI R19,0
18C 9100 0078 LDS R16,minite
18E 2711 CLR R17
18F 940E 0213 CALL mod16s
191 01F8 MOVW R30,R16
192 E688 LDI R24,0x68
193 E090 LDI R25,0
194 0FE8 ADD R30,R24
195 1FF9 ADC R31,R25
196 8020 LDD R2,Z+0
197 9220 0064 STS 0x0064,R2
(0273) table_2[3]=dispbuf[minite/10];
199 E02A LDI R18,0xA
19A E030 LDI R19,0
19B 9100 0078 LDS R16,minite
19D 2711 CLR R17
19E 940E 0217 CALL div16s
1A0 01F8 MOVW R30,R16
1A1 E688 LDI R24,0x68
1A2 E090 LDI R25,0
1A3 0FE8 ADD R30,R24
1A4 1FF9 ADC R31,R25
1A5 8020 LDD R2,Z+0
1A6 9220 0063 STS table_2+3,R2
(0274) table_2[1]=dispbuf[hour%10];
1A8 E02A LDI R18,0xA
1A9 E030 LDI R19,0
1AA 9100 0077 LDS R16,hour
1AC 2711 CLR R17
1AD 940E 0213 CALL mod16s
1AF 01F8 MOVW R30,R16
1B0 E688 LDI R24,0x68
1B1 E090 LDI R25,0
1B2 0FE8 ADD R30,R24
1B3 1FF9 ADC R31,R25
1B4 8020 LDD R2,Z+0
1B5 9220 0061 STS table_2+1,R2
(0275) table_2[0]=dispbuf[hour/10];
1B7 E02A LDI R18,0xA
1B8 E030 LDI R19,0
1B9 9100 0077 LDS R16,hour
1BB 2711 CLR R17
1BC 940E 0217 CALL div16s
1BE 01F8 MOVW R30,R16
1BF E688 LDI R24,0x68
1C0 E090 LDI R25,0
1C1 0FE8 ADD R30,R24
1C2 1FF9 ADC R31,R25
1C3 8020 LDD R2,Z+0
1C4 9220 0060 STS table_2,R2
(0276)
(0277) }
(0278) DisplayOneChar(i, 1, table_2[i]); //显示单个字符
1C6 9030 0074 LDS R3,i
1C8 E680 LDI R24,0x60
1C9 E090 LDI R25,0
1CA 2DE3 MOV R30,R3
1CB 27FF CLR R31
1CC 0FE8 ADD R30,R24
1CD 1FF9 ADC R31,R25
1CE 8020 LDD R2,Z+0
1CF 8228 STD Y+0,R2
1D0 E021 LDI R18,1
1D1 2D03 MOV R16,R3
1D2 DEEB RCALL _DisplayOneChar
(0279)
(0280) i++;
1D3 9180 0074 LDS R24,i
1D5 5F8F SUBI R24,0xFF
1D6 9380 0074 STS i,R24
(0281) if(i==8)
1D8 3088 CPI R24,0x8
1D9 F419 BNE 0x01DD
(0282) {
(0283) i=0;
1DA 2422 CLR R2
1DB 9220 0074 STS i,R2
(0284) }
(0285)
(0286)
(0287) TCNT0 = 0x83; //reload counter value
1DD E883 LDI R24,0x83
1DE BF82 OUT 0x32,R24
1DF 9621 ADIW R28,1
1E0 9009 LD R0,Y+
1E1 BE0F OUT 0x3F,R0
1E2 91F9 LD R31,Y+
1E3 91E9 LD R30,Y+
1E4 91B9 LD R27,Y+
1E5 91A9 LD R26,Y+
1E6 9199 LD R25,Y+
1E7 9189 LD R24,Y+
1E8 9139 LD R19,Y+
1E9 9129 LD R18,Y+
1EA 9119 LD R17,Y+
1EB 9109 LD R16,Y+
1EC 9099 LD R9,Y+
1ED 9089 LD R8,Y+
1EE 9079 LD R7,Y+
1EF 9069 LD R6,Y+
1F0 9059 LD R5,Y+
1F1 9049 LD R4,Y+
1F2 9039 LD R3,Y+
1F3 9029 LD R2,Y+
1F4 9019 LD R1,Y+
1F5 9009 LD R0,Y+
1F6 9518 RETI
(0288) }
(0289)
(0290) //call this routine to initialize all peripherals
(0291) void init_devices(void)
(0292) {
(0293) //stop errant interrupts until set up
(0294) CLI(); //disable all interrupts
_init_devices:
1F7 94F8 BCLR 7
(0295) port_init();
1F8 DF19 RCALL _port_init
(0296) timer0_init();
1F9 DF23 RCALL _timer0_init
(0297)
(0298) MCUCR = 0x00;
1FA 2422 CLR R2
1FB BE25 OUT 0x35,R2
(0299) GICR = 0x00;
1FC BE2B OUT 0x3B,R2
(0300) TIMSK = 0x01; //timer interrupt sources
1FD E081 LDI R24,1
1FE BF89 OUT 0x39,R24
(0301) SEI(); //re-enable interrupts
1FF 9478 BSET 7
200 9508 RET
_main:
i --> Y,+3
201 9722 SBIW R28,2
(0302) //all peripherals are now initialized
(0303) }
(0304)
(0305)
(0306) /*******************************************************************************/
(0307)
(0308) void main(void)
(0309) {
(0310) unsigned char i;
(0311) DDRD=0XFF;//PD设为输出
202 EF8F LDI R24,0xFF
203 BB81 OUT 0x11,R24
(0312) DDRB=0XFF;//PB设为输出
204 BB87 OUT 0x17,R24
(0313) Delay400Ms(); //启动等待,等LCM讲入工作状态
205 DEFB RCALL _Delay400Ms
(0314) LCMInit(); //LCM初始化
206 DE99 RCALL _LCMInit
(0315) Delay5Ms(); //延时片刻(可不要)
207 DEEF RCALL _Delay5Ms
(0316)
(0317) DisplayListChar(0, 0, table_1);
208 E584 LDI R24,0x54
209 E090 LDI R25,0
20A 8399 STD Y+1,R25
20B 8388 STD Y+0,R24
20C 2722 CLR R18
20D 2700 CLR R16
20E DEC4 RCALL _DisplayListChar
(0318) /*Delay400Ms(); //启动等待,等LCM进入工作状态
(0319) WriteCommandLCM(0x08,1); //关闭显示
(0320) WriteCommandLCM(0x01,1); //显示清屏
(0321) WriteCommandLCM(0x06,1); // 显示光标移动设置
(0322) WriteCommandLCM(0x0f,1); // 显示开及光标设置,闪
(0323) for(i=0;i<8;i++)
(0324) {
(0325) DisplayOneChar(i, 0, table_1[i]); //显示单个字符
(0326) }
(0327) WriteCommandLCM(0x07,1); // 显示光标移动设置
(0328)
(0329) for(i=0;i<8;i++)
(0330) {
(0331) DisplayOneChar(i, 1, table_2[i]); //显示单个字符
(0332) }
(0333) //WriteCommandLCM(0x0c,1); // 显示开及光标设置,不闪
(0334) //ReadDataLCM();//测试用句无意义*/
(0335) init_devices();
20F DFE7 RCALL _init_devices
(0336) while(1);
FILE: <library>
210 CFFF RJMP 0x0210
211 9622 ADIW R28,2
212 9508 RET
mod16s:
213 9468 BSET 6
214 92DA ST R13,-Y
215 2ED1 MOV R13,R17
216 C004 RJMP 0x021B
div16s:
217 94E8 BCLR 6
218 92DA ST R13,-Y
219 2ED1 MOV R13,R17
21A 26D3 EOR R13,R19
21B FF17 SBRS R17,7
21C C004 RJMP 0x0221
21D 9510 COM R17
21E 9500 COM R16
21F 5F0F SUBI R16,0xFF
220 4F1F SBCI R17,0xFF
221 FF37 SBRS R19,7
222 C004 RJMP 0x0227
223 9530 COM R19
224 9520 COM R18
225 5F2F SUBI R18,0xFF
226 4F3F SBCI R19,0xFF
227 940E 0234 CALL xdiv16u
229 FED7 SBRS R13,7
22A C004 RJMP 0x022F
22B 9510 COM R17
22C 9500 COM R16
22D 5F0F SUBI R16,0xFF
22E 4F1F SBCI R17,0xFF
22F 90D9 LD R13,Y+
230 9508 RET
mod16u:
231 9468 BSET 6
232 C001 RJMP xdiv16u
div16u:
233 94E8 BCLR 6
xdiv16u:
234 92EA ST R14,-Y
235 92FA ST R15,-Y
236 938A ST R24,-Y
237 24EE CLR R14
238 24FF CLR R15
239 E180 LDI R24,0x10
23A 0F00 LSL R16
23B 1F11 ROL R17
23C 1CEE ROL R14
23D 1CFF ROL R15
23E 16E2 CP R14,R18
23F 06F3 CPC R15,R19
240 F018 BCS 0x0244
241 1AE2 SUB R14,R18
242 0AF3 SBC R15,R19
243 9503 INC R16
244 958A DEC R24
245 F7A1 BNE 0x023A
246 F416 BRTC 0x0249
247 2D0E MOV R16,R14
248 2D1F MOV R17,R15
249 9189 LD R24,Y+
24A 90F9 LD R15,Y+
24B 90E9 LD R14,Y+
24C 9508 RET
push_xgsetF03C:
24D 937A ST R23,-Y
24E 936A ST R22,-Y
24F 935A ST R21,-Y
250 934A ST R20,-Y
251 92DA ST R13,-Y
252 92CA ST R12,-Y
253 92BA ST R11,-Y
254 92AA ST R10,-Y
255 9508 RET
pop_xgsetF03C:
256 90A9 LD R10,Y+
257 90B9 LD R11,Y+
258 90C9 LD R12,Y+
259 90D9 LD R13,Y+
25A 9149 LD R20,Y+
25B 9159 LD R21,Y+
25C 9169 LD R22,Y+
25D 9179 LD R23,Y+
25E 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -