main.lst

来自「ATMEGA128的PCF8536驱动程序」· LST 代码 · 共 1,956 行 · 第 1/5 页

LST
1,956
字号
(0414) #if USEUART0
(0415) #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC 
(0416) void uart0_rx_isr(void)
(0417) {
(0418)  unsigned char status,data;
(0419)  siocirqueue *RTbuf;
(0420)  RTbuf=&RTbuf_UART0;
    03C8 EC40      LDI	R20,0xC0
    03C9 E051      LDI	R21,1
(0421) // CLI();
(0422)  status=UCSR0A;
    03CA B0AB      IN	R10,0x0B
(0423)  data=UDR0;
    03CB B16C      IN	R22,0x0C
(0424)  //WDR(); //喂狗
(0425)  if((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
    03CC 2D8A      MOV	R24,R10
    03CD 7188      ANDI	R24,0x18
    03CE F009      BEQ	0x03D0
    03CF C022      RJMP	0x03F2
(0426)  	{
(0427) 	if(RTbuf->R_count<RBUF_SIZE){
    03D0 01FA      MOVW	R30,R20
    03D1 8182      LDD	R24,Z+2
    03D2 3684      CPI	R24,0x64
    03D3 F008      BCS	0x03D5
    03D4 C01A      RJMP	0x03EF
(0428) 		RTbuf->R_count++;
    03D5 01CA      MOVW	R24,R20
    03D6 9602      ADIW	R24,2
    03D7 01FC      MOVW	R30,R24
    03D8 8180      LDD	R24,Z+0
    03D9 5F8F      SUBI	R24,0xFF
    03DA 8380      STD	Z+0,R24
(0429) 		RTbuf->R_buf[RTbuf->R_rear]=data;
    03DB 01CA      MOVW	R24,R20
    03DC 9604      ADIW	R24,4
    03DD 01FA      MOVW	R30,R20
    03DE 81E1      LDD	R30,Z+1
    03DF 27FF      CLR	R31
    03E0 0FE8      ADD	R30,R24
    03E1 1FF9      ADC	R31,R25
    03E2 8360      STD	Z+0,R22
(0430) 		RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
    03E3 01CA      MOVW	R24,R20
    03E4 9601      ADIW	R24,1
    03E5 011C      MOVW	R2,R24
    03E6 E614      LDI	R17,0x64
    03E7 01FC      MOVW	R30,R24
    03E8 8100      LDD	R16,Z+0
    03E9 5F0F      SUBI	R16,0xFF
    03EA 940E04B8  CALL	mod8u
    03EC 01F1      MOVW	R30,R2
    03ED 8300      STD	Z+0,R16
(0431) 		}
    03EE C003      RJMP	0x03F2
(0432) 	else 
(0433) 	   {
(0434) 	   RTbuf->R_overflow=1;
    03EF E081      LDI	R24,1
    03F0 01FA      MOVW	R30,R20
    03F1 8383      STD	Z+3,R24
(0435) 	   }
(0436) 	}
    03F2 940E04D3  CALL	pop_gset3
    03F4 9029      LD	R2,Y+
    03F5 BE2F      OUT	0x3F,R2
    03F6 91F9      LD	R31,Y+
    03F7 91E9      LD	R30,Y+
    03F8 9199      LD	R25,Y+
    03F9 9189      LD	R24,Y+
    03FA 9119      LD	R17,Y+
    03FB 9109      LD	R16,Y+
    03FC 9039      LD	R3,Y+
    03FD 9029      LD	R2,Y+
    03FE 9518      RETI
_uart0_tx_isr:
  RTbuf                --> R20
    03FF 922A      ST	R2,-Y
    0400 923A      ST	R3,-Y
    0401 930A      ST	R16,-Y
    0402 931A      ST	R17,-Y
    0403 938A      ST	R24,-Y
    0404 939A      ST	R25,-Y
    0405 93EA      ST	R30,-Y
    0406 93FA      ST	R31,-Y
    0407 B62F      IN	R2,0x3F
    0408 922A      ST	R2,-Y
    0409 940E04E1  CALL	push_gset1
(0437) //SEI();
(0438) }
(0439) 	
(0440) #pragma interrupt_handler uart0_tx_isr: iv_USART0_TXC
(0441) void uart0_tx_isr(void)
(0442) {
(0443) //CLI();
(0444)  siocirqueue *RTbuf;
(0445)  //WDR(); //喂狗
(0446)  RTbuf=&RTbuf_UART0;
    040B EC40      LDI	R20,0xC0
    040C E051      LDI	R21,1
(0447)  if (RTbuf->T_count>0){
    040D 2422      CLR	R2
    040E 01FA      MOVW	R30,R20
    040F 59E6      SUBI	R30,0x96
    0410 4FFF      SBCI	R31,0xFF
    0411 8030      LDD	R3,Z+0
    0412 1423      CP	R2,R3
    0413 F008      BCS	0x0415
    0414 C020      RJMP	0x0435
(0448) 	UDR0=RTbuf->T_buf[RTbuf->T_front];
    0415 01CA      MOVW	R24,R20
    0416 5985      SUBI	R24,0x95
    0417 4F9F      SBCI	R25,0xFF
    0418 01FA      MOVW	R30,R20
    0419 59E8      SUBI	R30,0x98
    041A 4FFF      SBCI	R31,0xFF
    041B 81E0      LDD	R30,Z+0
    041C 27FF      CLR	R31
    041D 0FE8      ADD	R30,R24
    041E 1FF9      ADC	R31,R25
    041F 8020      LDD	R2,Z+0
    0420 B82C      OUT	0x0C,R2
(0449) 	RTbuf->T_count--;
    0421 01CA      MOVW	R24,R20
    0422 5986      SUBI	R24,0x96
    0423 4F9F      SBCI	R25,0xFF
    0424 01FC      MOVW	R30,R24
    0425 8180      LDD	R24,Z+0
    0426 5081      SUBI	R24,1
    0427 8380      STD	Z+0,R24
(0450) 	RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
    0428 01CA      MOVW	R24,R20
    0429 5988      SUBI	R24,0x98
    042A 4F9F      SBCI	R25,0xFF
    042B 011C      MOVW	R2,R24
    042C E614      LDI	R17,0x64
    042D 01FC      MOVW	R30,R24
    042E 8100      LDD	R16,Z+0
    042F 5F0F      SUBI	R16,0xFF
    0430 940E04B8  CALL	mod8u
    0432 01F1      MOVW	R30,R2
    0433 8300      STD	Z+0,R16
(0451) 	}
    0434 C005      RJMP	0x043A
(0452)  else RTbuf->T_disabled=1;
FILE: <library>
    0435 E081      LDI	R24,1
    0436 01FA      MOVW	R30,R20
    0437 53E1      SUBI	R30,0x31
    0438 4FFF      SBCI	R31,0xFF
    0439 8380      STD	Z+0,R24
    043A 940E04E4  CALL	pop_gset1
    043C 9029      LD	R2,Y+
    043D BE2F      OUT	0x3F,R2
    043E 91F9      LD	R31,Y+
    043F 91E9      LD	R30,Y+
    0440 9199      LD	R25,Y+
    0441 9189      LD	R24,Y+
    0442 9119      LD	R17,Y+
    0443 9109      LD	R16,Y+
    0444 9039      LD	R3,Y+
    0445 9029      LD	R2,Y+
    0446 9518      RETI
div32u:
    0447 94E8      BCLR	6
    0448 C001      RJMP	0x044A
mod32u:
    0449 9468      BSET	6
    044A D02F      RCALL	long_div_prolog
    044B 24CC      CLR	R12
    044C C008      RJMP	0x0455
div32s:
    044D 94E8      BCLR	6
    044E C001      RJMP	0x0450
mod32s:
    044F 9468      BSET	6
    0450 D029      RCALL	long_div_prolog
    0451 FD37      SBRC	R19,7
    0452 D053      RCALL	neg_R16_R19
    0453 FDB7      SBRC	R27,7
    0454 D05A      RCALL	neg_R24_R27
    0455 2477      CLR	R7
    0456 2488      CLR	R8
    0457 2499      CLR	R9
    0458 24AA      CLR	R10
    0459 24BB      CLR	R11
    045A D041      RCALL	tst_R16_R19
    045B F0C1      BEQ	0x0474
    045C D044      RCALL	tst_R24_R27
    045D F0B1      BEQ	0x0474
    045E E2E8      LDI	R30,0x28
    045F 0F00      LSL	R16
    0460 1F11      ROL	R17
    0461 1F22      ROL	R18
    0462 1F33      ROL	R19
    0463 1C77      ROL	R7
    0464 1C88      ROL	R8
    0465 1C99      ROL	R9
    0466 1CAA      ROL	R10
    0467 1CBB      ROL	R11
    0468 1688      CP	R8,R24
    0469 0699      CPC	R9,R25
    046A 06AA      CPC	R10,R26
    046B 06BB      CPC	R11,R27
    046C F028      BCS	0x0472
    046D 1A88      SUB	R8,R24
    046E 0A99      SBC	R9,R25
    046F 0AAA      SBC	R10,R26
    0470 0ABB      SBC	R11,R27
    0471 9503      INC	R16
    0472 95EA      DEC	R30
    0473 F759      BNE	0x045F
    0474 F426      BRTC	0x0479
    0475 2D08      MOV	R16,R8
    0476 2D19      MOV	R17,R9
    0477 2D2A      MOV	R18,R10
    0478 2D3B      MOV	R19,R11
    0479 C013      RJMP	long_div_epilog
long_div_prolog:
    047A 927A      ST	R7,-Y
    047B 928A      ST	R8,-Y
    047C 929A      ST	R9,-Y
    047D 92AA      ST	R10,-Y
    047E 92BA      ST	R11,-Y
    047F 92CA      ST	R12,-Y
    0480 93EA      ST	R30,-Y
    0481 938A      ST	R24,-Y
    0482 939A      ST	R25,-Y
    0483 93AA      ST	R26,-Y
    0484 93BA      ST	R27,-Y
    0485 858B      LDD	R24,Y+11
    0486 859C      LDD	R25,Y+12
    0487 85AD      LDD	R26,Y+13
    0488 85BE      LDD	R27,Y+14
    0489 2EC3      MOV	R12,R19
    048A F00E      BRTS	0x048C
    048B 26CB      EOR	R12,R27
    048C 9508      RET
long_div_epilog:
    048D FCC7      SBRC	R12,7
    048E D017      RCALL	neg_R16_R19
    048F 91B9      LD	R27,Y+
    0490 91A9      LD	R26,Y+
    0491 9199      LD	R25,Y+
    0492 9189      LD	R24,Y+
    0493 91E9      LD	R30,Y+
    0494 90C9      LD	R12,Y+
    0495 90B9      LD	R11,Y+
    0496 90A9      LD	R10,Y+
    0497 9099      LD	R9,Y+
    0498 9089      LD	R8,Y+
    0499 9079      LD	R7,Y+
    049A 9624      ADIW	R28,4
    049B 9508      RET
tst_R16_R19:
    049C 2FE0      MOV	R30,R16
    049D 2BE1      OR	R30,R17
    049E 2BE2      OR	R30,R18
    049F 2BE3      OR	R30,R19
    04A0 9508      RET
tst_R24_R27:
    04A1 2FE8      MOV	R30,R24
    04A2 2BE9      OR	R30,R25
    04A3 2BEA      OR	R30,R26
    04A4 2BEB      OR	R30,R27
    04A5 9508      RET
neg_R16_R19:
    04A6 9500      COM	R16
    04A7 9510      COM	R17
    04A8 9520      COM	R18
    04A9 9530      COM	R19
    04AA 5F0F      SUBI	R16,0xFF
    04AB 4F1F      SBCI	R17,0xFF
    04AC 4F2F      SBCI	R18,0xFF
    04AD 4F3F      SBCI	R19,0xFF
    04AE 9508      RET
neg_R24_R27:
    04AF 9580      COM	R24
    04B0 9590      COM	R25
    04B1 95A0      COM	R26
    04B2 95B0      COM	R27
    04B3 5F8F      SUBI	R24,0xFF
    04B4 4F9F      SBCI	R25,0xFF
    04B5 4FAF      SBCI	R26,0xFF
    04B6 4FBF      SBCI	R27,0xFF
    04B7 9508      RET
mod8u:
    04B8 9468      BSET	6
    04B9 C001      RJMP	xdiv8u
div8u:
    04BA 94E8      BCLR	6
xdiv8u:
    04BB 932A      ST	R18,-Y
    04BC 92FA      ST	R15,-Y
    04BD 92EA      ST	R14,-Y
    04BE 24FF      CLR	R15
    04BF 24EE      CLR	R14
    04C0 E120      LDI	R18,0x10
    04C1 0F00      LSL	R16
    04C2 1CFF      ROL	R15
    04C3 1CEE      ROL	R14
    04C4 16E1      CP	R14,R17
    04C5 F010      BCS	0x04C8
    04C6 1AE1      SUB	R14,R17
    04C7 9503      INC	R16
    04C8 952A      DEC	R18
    04C9 F7B9      BNE	0x04C1
    04CA F40E      BRTC	0x04CC
    04CB 2D0E      MOV	R16,R14
    04CC 90E9      LD	R14,Y+
    04CD 90F9      LD	R15,Y+
    04CE 9129      LD	R18,Y+
    04CF 9508      RET
pop_gset2:
    04D0 E0E2      LDI	R30,2
    04D1 940C04E5  JMP	pop
pop_gset3:
    04D3 E0E4      LDI	R30,4
    04D4 940C04E5  JMP	pop
pop_gset4:
    04D6 E0E8      LDI	R30,0x8
    04D7 940C04E5  JMP	pop
push_gset5:
    04D9 92FA      ST	R15,-Y
    04DA 92EA      ST	R14,-Y
push_gset4:
    04DB 92DA      ST	R13,-Y
    04DC 92CA      ST	R12,-Y
push_gset3:
    04DD 92BA      ST	R11,-Y
    04DE 92AA      ST	R10,-Y
push_gset2:
    04DF 937A      ST	R23,-Y
    04E0 936A      ST	R22,-Y
push_gset1:
    04E1 935A      ST	R21,-Y
    04E2 934A      ST	R20,-Y
    04E3 9508      RET
pop_gset1:
    04E4 E0E1      LDI	R30,1
pop:
    04E5 9149      LD	R20,Y+
    04E6 9159      LD	R21,Y+
    04E7 FDE0      SBRC	R30,0
    04E8 9508      RET
    04E9 9169      LD	R22,Y+
    04EA 9179      LD	R23,Y+
    04EB FDE1      SBRC	R30,1
    04EC 9508      RET
    04ED 90A9      LD	R10,Y+
    04EE 90B9      LD	R11,Y+
    04EF FDE2      SBRC	R30,2
    04F0 9508      RET
    04F1 90C9      LD	R12,Y+
    04F2 90D9      LD	R13,Y+
    04F3 FDE3      SBRC	R30,3
    04F4 9508      RET
    04F5 90E9      LD	R14,Y+
    04F6 90F9      LD	R15,Y+
    04F7 9508      RET
asgncblk:
    04F8 93AA      ST	R26,-Y
    04F9 93BA      ST	R27,-Y
    04FA 93EA      ST	R30,-Y
    04FB 93FA      ST	R31,-Y
    04FC 920A      ST	R0,-Y
    04FD 81AF      LDD	R26,Y+7
    04FE 85B8      LDD	R27,Y+8
    04FF 81ED      LDD	R30,Y+5
    0500 81FE      LDD	R31,Y+6
    0501 3000      CPI	R16,0
    0502 0701      CPC	R16,R17
    0503 F031      BEQ	0x050A
    0504 95C8      LPM
    0505 920D      ST	R0,X+
    0506 9631      ADIW	R30,1
    0507 5001      SUBI	R16,1
    0508 4010      SBCI	R17,0
    0509 CFF7      RJMP	0x0501
    050A 9009      LD	R0,Y+
    050B 91F9      LD	R31,Y+
    050C 91E9      LD	R30,Y+
    050D 91B9      LD	R27,Y+
    050E 91A9      LD	R26,Y+
    050F 9624      ADIW	R28,4
    0510 9508      RET

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?