📄 main.lst
字号:
(0367) ** 全局变量: 无
(0368) ** 调用模块:
(0369) ** 说明:
(0370) ** 注意:
(0371) ********************************************************************************************************/
(0372) uint8 Rbuf_getchar(siocirqueue *RTbuf){
(0373) uint8 Btemp=0;
01DB 2744 CLR R20
(0374) if (!Rbuf_empty(RTbuf)){
01DC 018B MOVW R16,R22
01DD DFAC RCALL _Rbuf_empty
01DE 2300 TST R16
01DF F4C1 BNE 0x01F8
(0375) Btemp=RTbuf->R_buf[RTbuf->R_front];
01E0 01CB MOVW R24,R22
01E1 9604 ADIW R24,4
01E2 01FB MOVW R30,R22
01E3 81E0 LDD R30,Z+0
01E4 27FF CLR R31
01E5 0FE8 ADD R30,R24
01E6 1FF9 ADC R31,R25
01E7 8140 LDD R20,Z+0
(0376) REV_DIS();
01E8 9857 CBI 0x0A,7
(0377) RTbuf->R_count--;
01E9 01CB MOVW R24,R22
01EA 9602 ADIW R24,2
01EB 01FC MOVW R30,R24
01EC 8180 LDD R24,Z+0
01ED 5081 SUBI R24,1
01EE 8380 STD Z+0,R24
(0378) RTbuf->R_front=(RTbuf->R_front+1) % RBUF_SIZE;
01EF E01A LDI R17,0xA
01F0 01FB MOVW R30,R22
01F1 8100 LDD R16,Z+0
01F2 5F0F SUBI R16,0xFF
01F3 940E02EF CALL mod8u
01F5 01FB MOVW R30,R22
01F6 8300 STD Z+0,R16
(0379) REV_EN();
01F7 9A57 SBI 0x0A,7
(0380) }
(0381) return (Btemp);
01F8 2F04 MOV R16,R20
01F9 940E0307 CALL pop_gset2
01FB 9508 RET
_uart0_rx_isr:
data --> R22
status --> R10
RTbuf --> R20
01FC 922A ST R2,-Y
01FD 923A ST R3,-Y
01FE 930A ST R16,-Y
01FF 931A ST R17,-Y
0200 938A ST R24,-Y
0201 939A ST R25,-Y
0202 93EA ST R30,-Y
0203 93FA ST R31,-Y
0204 B62F IN R2,0x3F
0205 922A ST R2,-Y
0206 940E0314 CALL push_gset3
(0382)
(0383) }
(0384) /*********************************************************************************************************
(0385) ** 函数名称: Tbuf_getchar
(0386) ** 功能描述: 从发送缓冲区读一个字符
(0387) ** 输 入:
(0388) ** 输出 : 读字符
(0389) ** 全局变量: 无
(0390) ** 调用模块:
(0391) ** 说明:
(0392) ** 注意:
(0393) ********************************************************************************************************
(0394) uint8 Tbuf_getchar(void){
(0395) uint8 Btemp;
(0396) if (!Tbuf_empty()){
(0397) Btemp=RTbuf->T_buf[RTbuf->T_front];
(0398) TXC_DIS();
(0399) RTbuf->T_count--;
(0400) RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
(0401) TXC_EN();
(0402) return (Btemp);
(0403) }
(0404) }
(0405) */
(0406)
(0407) /******************************* 中断处理函数 ***************************
(0408) * 功能:完成数据得的接收和发送
(0409) ***********************************************************************/
(0410) #if USEUART0
(0411) #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
(0412) void uart0_rx_isr(void)
(0413) {
(0414) uint8 status,data;
(0415) siocirqueue *RTbuf;
(0416) RTbuf=&RTbuf_UART0;
0208 E64D LDI R20,0x6D
0209 E050 LDI R21,0
(0417) // CLI();
(0418) status=UCSR0A;
020A B0AB IN R10,0x0B
(0419) data=UDR0;
020B B16C IN R22,0x0C
(0420) //WDR(); //喂狗
(0421) if((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
020C 2D8A MOV R24,R10
020D 7188 ANDI R24,0x18
020E F009 BEQ 0x0210
020F C022 RJMP 0x0232
(0422) {
(0423) if(RTbuf->R_count<RBUF_SIZE){
0210 01FA MOVW R30,R20
0211 8182 LDD R24,Z+2
0212 308A CPI R24,0xA
0213 F008 BCS 0x0215
0214 C01A RJMP 0x022F
(0424) RTbuf->R_count++;
0215 01CA MOVW R24,R20
0216 9602 ADIW R24,2
0217 01FC MOVW R30,R24
0218 8180 LDD R24,Z+0
0219 5F8F SUBI R24,0xFF
021A 8380 STD Z+0,R24
(0425) RTbuf->R_buf[RTbuf->R_rear]=data;
021B 01CA MOVW R24,R20
021C 9604 ADIW R24,4
021D 01FA MOVW R30,R20
021E 81E1 LDD R30,Z+1
021F 27FF CLR R31
0220 0FE8 ADD R30,R24
0221 1FF9 ADC R31,R25
0222 8360 STD Z+0,R22
(0426) RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
0223 01CA MOVW R24,R20
0224 9601 ADIW R24,1
0225 011C MOVW R2,R24
0226 E01A LDI R17,0xA
0227 01FC MOVW R30,R24
0228 8100 LDD R16,Z+0
0229 5F0F SUBI R16,0xFF
022A 940E02EF CALL mod8u
022C 01F1 MOVW R30,R2
022D 8300 STD Z+0,R16
(0427) }
022E C003 RJMP 0x0232
(0428) else
(0429) {
(0430) RTbuf->R_overflow=1;
022F E081 LDI R24,1
0230 01FA MOVW R30,R20
0231 8383 STD Z+3,R24
(0431) }
(0432) }
0232 940E030A CALL pop_gset3
0234 9029 LD R2,Y+
0235 BE2F OUT 0x3F,R2
0236 91F9 LD R31,Y+
0237 91E9 LD R30,Y+
0238 9199 LD R25,Y+
0239 9189 LD R24,Y+
023A 9119 LD R17,Y+
023B 9109 LD R16,Y+
023C 9039 LD R3,Y+
023D 9029 LD R2,Y+
023E 9518 RETI
_uart0_tx_isr:
RTbuf --> R20
023F 922A ST R2,-Y
0240 923A ST R3,-Y
0241 930A ST R16,-Y
0242 931A ST R17,-Y
0243 938A ST R24,-Y
0244 939A ST R25,-Y
0245 93EA ST R30,-Y
0246 93FA ST R31,-Y
0247 B62F IN R2,0x3F
0248 922A ST R2,-Y
0249 940E0318 CALL push_gset1
(0433) //SEI();
(0434) }
(0435)
(0436) #pragma interrupt_handler uart0_tx_isr: iv_USART0_TXC
(0437) void uart0_tx_isr(void)
(0438) {
(0439) //CLI();
(0440) siocirqueue *RTbuf;
(0441) //WDR(); //喂狗
(0442) RTbuf=&RTbuf_UART0;
024B E64D LDI R20,0x6D
024C E050 LDI R21,0
(0443) if (RTbuf->T_count>0){
024D 2422 CLR R2
024E 01FA MOVW R30,R20
024F 8830 LDD R3,Z+16
0250 1423 CP R2,R3
0251 F008 BCS 0x0253
0252 C01B RJMP 0x026E
(0444) UDR0=RTbuf->T_buf[RTbuf->T_front];
0253 01CA MOVW R24,R20
0254 9641 ADIW R24,0x11
0255 01FA MOVW R30,R20
0256 85E6 LDD R30,Z+14
0257 27FF CLR R31
0258 0FE8 ADD R30,R24
0259 1FF9 ADC R31,R25
025A 8020 LDD R2,Z+0
025B B82C OUT 0x0C,R2
(0445) RTbuf->T_count--;
025C 01CA MOVW R24,R20
025D 9640 ADIW R24,0x10
025E 01FC MOVW R30,R24
025F 8180 LDD R24,Z+0
0260 5081 SUBI R24,1
0261 8380 STD Z+0,R24
(0446) RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
0262 01CA MOVW R24,R20
0263 960E ADIW R24,0xE
0264 011C MOVW R2,R24
0265 E01A LDI R17,0xA
0266 01FC MOVW R30,R24
0267 8100 LDD R16,Z+0
0268 5F0F SUBI R16,0xFF
0269 940E02EF CALL mod8u
026B 01F1 MOVW R30,R2
026C 8300 STD Z+0,R16
(0447) }
026D C003 RJMP 0x0271
(0448) else RTbuf->T_disabled=1;
FILE: <library>
026E E081 LDI R24,1
026F 01FA MOVW R30,R20
0270 8F83 STD Z+27,R24
0271 940E031B CALL pop_gset1
0273 9029 LD R2,Y+
0274 BE2F OUT 0x3F,R2
0275 91F9 LD R31,Y+
0276 91E9 LD R30,Y+
0277 9199 LD R25,Y+
0278 9189 LD R24,Y+
0279 9119 LD R17,Y+
027A 9109 LD R16,Y+
027B 9039 LD R3,Y+
027C 9029 LD R2,Y+
027D 9518 RETI
div32u:
027E 94E8 BCLR 6
027F C001 RJMP 0x0281
mod32u:
0280 9468 BSET 6
0281 D02F RCALL long_div_prolog
0282 24CC CLR R12
0283 C008 RJMP 0x028C
div32s:
0284 94E8 BCLR 6
0285 C001 RJMP 0x0287
mod32s:
0286 9468 BSET 6
0287 D029 RCALL long_div_prolog
0288 FD37 SBRC R19,7
0289 D053 RCALL neg_R16_R19
028A FDB7 SBRC R27,7
028B D05A RCALL neg_R24_R27
028C 2477 CLR R7
028D 2488 CLR R8
028E 2499 CLR R9
028F 24AA CLR R10
0290 24BB CLR R11
0291 D041 RCALL tst_R16_R19
0292 F0C1 BEQ 0x02AB
0293 D044 RCALL tst_R24_R27
0294 F0B1 BEQ 0x02AB
0295 E2E8 LDI R30,0x28
0296 0F00 LSL R16
0297 1F11 ROL R17
0298 1F22 ROL R18
0299 1F33 ROL R19
029A 1C77 ROL R7
029B 1C88 ROL R8
029C 1C99 ROL R9
029D 1CAA ROL R10
029E 1CBB ROL R11
029F 1688 CP R8,R24
02A0 0699 CPC R9,R25
02A1 06AA CPC R10,R26
02A2 06BB CPC R11,R27
02A3 F028 BCS 0x02A9
02A4 1A88 SUB R8,R24
02A5 0A99 SBC R9,R25
02A6 0AAA SBC R10,R26
02A7 0ABB SBC R11,R27
02A8 9503 INC R16
02A9 95EA DEC R30
02AA F759 BNE 0x0296
02AB F426 BRTC 0x02B0
02AC 2D08 MOV R16,R8
02AD 2D19 MOV R17,R9
02AE 2D2A MOV R18,R10
02AF 2D3B MOV R19,R11
02B0 C013 RJMP long_div_epilog
long_div_prolog:
02B1 927A ST R7,-Y
02B2 928A ST R8,-Y
02B3 929A ST R9,-Y
02B4 92AA ST R10,-Y
02B5 92BA ST R11,-Y
02B6 92CA ST R12,-Y
02B7 93EA ST R30,-Y
02B8 938A ST R24,-Y
02B9 939A ST R25,-Y
02BA 93AA ST R26,-Y
02BB 93BA ST R27,-Y
02BC 858B LDD R24,Y+11
02BD 859C LDD R25,Y+12
02BE 85AD LDD R26,Y+13
02BF 85BE LDD R27,Y+14
02C0 2EC3 MOV R12,R19
02C1 F00E BRTS 0x02C3
02C2 26CB EOR R12,R27
02C3 9508 RET
long_div_epilog:
02C4 FCC7 SBRC R12,7
02C5 D017 RCALL neg_R16_R19
02C6 91B9 LD R27,Y+
02C7 91A9 LD R26,Y+
02C8 9199 LD R25,Y+
02C9 9189 LD R24,Y+
02CA 91E9 LD R30,Y+
02CB 90C9 LD R12,Y+
02CC 90B9 LD R11,Y+
02CD 90A9 LD R10,Y+
02CE 9099 LD R9,Y+
02CF 9089 LD R8,Y+
02D0 9079 LD R7,Y+
02D1 9624 ADIW R28,4
02D2 9508 RET
tst_R16_R19:
02D3 2FE0 MOV R30,R16
02D4 2BE1 OR R30,R17
02D5 2BE2 OR R30,R18
02D6 2BE3 OR R30,R19
02D7 9508 RET
tst_R24_R27:
02D8 2FE8 MOV R30,R24
02D9 2BE9 OR R30,R25
02DA 2BEA OR R30,R26
02DB 2BEB OR R30,R27
02DC 9508 RET
neg_R16_R19:
02DD 9500 COM R16
02DE 9510 COM R17
02DF 9520 COM R18
02E0 9530 COM R19
02E1 5F0F SUBI R16,0xFF
02E2 4F1F SBCI R17,0xFF
02E3 4F2F SBCI R18,0xFF
02E4 4F3F SBCI R19,0xFF
02E5 9508 RET
neg_R24_R27:
02E6 9580 COM R24
02E7 9590 COM R25
02E8 95A0 COM R26
02E9 95B0 COM R27
02EA 5F8F SUBI R24,0xFF
02EB 4F9F SBCI R25,0xFF
02EC 4FAF SBCI R26,0xFF
02ED 4FBF SBCI R27,0xFF
02EE 9508 RET
mod8u:
02EF 9468 BSET 6
02F0 C001 RJMP xdiv8u
div8u:
02F1 94E8 BCLR 6
xdiv8u:
02F2 932A ST R18,-Y
02F3 92FA ST R15,-Y
02F4 92EA ST R14,-Y
02F5 24FF CLR R15
02F6 24EE CLR R14
02F7 E120 LDI R18,0x10
02F8 0F00 LSL R16
02F9 1CFF ROL R15
02FA 1CEE ROL R14
02FB 16E1 CP R14,R17
02FC F010 BCS 0x02FF
02FD 1AE1 SUB R14,R17
02FE 9503 INC R16
02FF 952A DEC R18
0300 F7B9 BNE 0x02F8
0301 F40E BRTC 0x0303
0302 2D0E MOV R16,R14
0303 90E9 LD R14,Y+
0304 90F9 LD R15,Y+
0305 9129 LD R18,Y+
0306 9508 RET
pop_gset2:
0307 E0E2 LDI R30,2
0308 940C031C JMP pop
pop_gset3:
030A E0E4 LDI R30,4
030B 940C031C JMP pop
pop_gset4:
030D E0E8 LDI R30,0x8
030E 940C031C JMP pop
push_gset5:
0310 92FA ST R15,-Y
0311 92EA ST R14,-Y
push_gset4:
0312 92DA ST R13,-Y
0313 92CA ST R12,-Y
push_gset3:
0314 92BA ST R11,-Y
0315 92AA ST R10,-Y
push_gset2:
0316 937A ST R23,-Y
0317 936A ST R22,-Y
push_gset1:
0318 935A ST R21,-Y
0319 934A ST R20,-Y
031A 9508 RET
pop_gset1:
031B E0E1 LDI R30,1
pop:
031C 9149 LD R20,Y+
031D 9159 LD R21,Y+
031E FDE0 SBRC R30,0
031F 9508 RET
0320 9169 LD R22,Y+
0321 9179 LD R23,Y+
0322 FDE1 SBRC R30,1
0323 9508 RET
0324 90A9 LD R10,Y+
0325 90B9 LD R11,Y+
0326 FDE2 SBRC R30,2
0327 9508 RET
0328 90C9 LD R12,Y+
0329 90D9 LD R13,Y+
032A FDE3 SBRC R30,3
032B 9508 RET
032C 90E9 LD R14,Y+
032D 90F9 LD R15,Y+
032E 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -