⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 ATMEGA128的串口驱动程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
    01DF E051      LDI	R21,1
(0421) // CLI();
(0422)  status=UCSR0A;
    01E0 B0AB      IN	R10,0x0B
(0423)  data=UDR0;
    01E1 B16C      IN	R22,0x0C
(0424)  //WDR(); //喂狗
(0425)  if((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
    01E2 2D8A      MOV	R24,R10
    01E3 7188      ANDI	R24,0x18
    01E4 F009      BEQ	0x01E6
    01E5 C022      RJMP	0x0208
(0426)  	{
(0427) 	if(RTbuf->R_count<RBUF_SIZE){
    01E6 01FA      MOVW	R30,R20
    01E7 8182      LDD	R24,Z+2
    01E8 3684      CPI	R24,0x64
    01E9 F008      BCS	0x01EB
    01EA C01A      RJMP	0x0205
(0428) 		RTbuf->R_count++;
    01EB 01CA      MOVW	R24,R20
    01EC 9602      ADIW	R24,2
    01ED 01FC      MOVW	R30,R24
    01EE 8180      LDD	R24,Z+0
    01EF 5F8F      SUBI	R24,0xFF
    01F0 8380      STD	Z+0,R24
(0429) 		RTbuf->R_buf[RTbuf->R_rear]=data;
    01F1 01CA      MOVW	R24,R20
    01F2 9604      ADIW	R24,4
    01F3 01FA      MOVW	R30,R20
    01F4 81E1      LDD	R30,Z+1
    01F5 27FF      CLR	R31
    01F6 0FE8      ADD	R30,R24
    01F7 1FF9      ADC	R31,R25
    01F8 8360      STD	Z+0,R22
(0430) 		RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
    01F9 01CA      MOVW	R24,R20
    01FA 9601      ADIW	R24,1
    01FB 011C      MOVW	R2,R24
    01FC E614      LDI	R17,0x64
    01FD 01FC      MOVW	R30,R24
    01FE 8100      LDD	R16,Z+0
    01FF 5F0F      SUBI	R16,0xFF
    0200 940E02F8  CALL	mod8u
    0202 01F1      MOVW	R30,R2
    0203 8300      STD	Z+0,R16
(0431) 		}
    0204 C003      RJMP	0x0208
(0432) 	else 
(0433) 	   {
(0434) 	   RTbuf->R_overflow=1;
    0205 E081      LDI	R24,1
    0206 01FA      MOVW	R30,R20
    0207 8383      STD	Z+3,R24
(0435) 	   }
(0436) 	}
    0208 940E0313  CALL	pop_gset3
    020A 9029      LD	R2,Y+
    020B BE2F      OUT	0x3F,R2
    020C 91F9      LD	R31,Y+
    020D 91E9      LD	R30,Y+
    020E 9199      LD	R25,Y+
    020F 9189      LD	R24,Y+
    0210 9119      LD	R17,Y+
    0211 9109      LD	R16,Y+
    0212 9039      LD	R3,Y+
    0213 9029      LD	R2,Y+
    0214 9518      RETI
_uart0_tx_isr:
  RTbuf                --> R20
    0215 922A      ST	R2,-Y
    0216 923A      ST	R3,-Y
    0217 930A      ST	R16,-Y
    0218 931A      ST	R17,-Y
    0219 938A      ST	R24,-Y
    021A 939A      ST	R25,-Y
    021B 93EA      ST	R30,-Y
    021C 93FA      ST	R31,-Y
    021D B62F      IN	R2,0x3F
    021E 922A      ST	R2,-Y
    021F 940E0321  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;
    0221 E040      LDI	R20,0
    0222 E051      LDI	R21,1
(0447)  if (RTbuf->T_count>0){
    0223 2422      CLR	R2
    0224 01FA      MOVW	R30,R20
    0225 59E6      SUBI	R30,0x96
    0226 4FFF      SBCI	R31,0xFF
    0227 8030      LDD	R3,Z+0
    0228 1423      CP	R2,R3
    0229 F008      BCS	0x022B
    022A C020      RJMP	0x024B
(0448) 	UDR0=RTbuf->T_buf[RTbuf->T_front];
    022B 01CA      MOVW	R24,R20
    022C 5985      SUBI	R24,0x95
    022D 4F9F      SBCI	R25,0xFF
    022E 01FA      MOVW	R30,R20
    022F 59E8      SUBI	R30,0x98
    0230 4FFF      SBCI	R31,0xFF
    0231 81E0      LDD	R30,Z+0
    0232 27FF      CLR	R31
    0233 0FE8      ADD	R30,R24
    0234 1FF9      ADC	R31,R25
    0235 8020      LDD	R2,Z+0
    0236 B82C      OUT	0x0C,R2
(0449) 	RTbuf->T_count--;
    0237 01CA      MOVW	R24,R20
    0238 5986      SUBI	R24,0x96
    0239 4F9F      SBCI	R25,0xFF
    023A 01FC      MOVW	R30,R24
    023B 8180      LDD	R24,Z+0
    023C 5081      SUBI	R24,1
    023D 8380      STD	Z+0,R24
(0450) 	RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
    023E 01CA      MOVW	R24,R20
    023F 5988      SUBI	R24,0x98
    0240 4F9F      SBCI	R25,0xFF
    0241 011C      MOVW	R2,R24
    0242 E614      LDI	R17,0x64
    0243 01FC      MOVW	R30,R24
    0244 8100      LDD	R16,Z+0
    0245 5F0F      SUBI	R16,0xFF
    0246 940E02F8  CALL	mod8u
    0248 01F1      MOVW	R30,R2
    0249 8300      STD	Z+0,R16
(0451) 	}
    024A C005      RJMP	0x0250
(0452)  else RTbuf->T_disabled=1;
    024B E081      LDI	R24,1
    024C 01FA      MOVW	R30,R20
    024D 53E1      SUBI	R30,0x31
    024E 4FFF      SBCI	R31,0xFF
    024F 8380      STD	Z+0,R24
    0250 940E0324  CALL	pop_gset1
    0252 9029      LD	R2,Y+
    0253 BE2F      OUT	0x3F,R2
    0254 91F9      LD	R31,Y+
    0255 91E9      LD	R30,Y+
    0256 9199      LD	R25,Y+
    0257 9189      LD	R24,Y+
    0258 9119      LD	R17,Y+
    0259 9109      LD	R16,Y+
    025A 9039      LD	R3,Y+
    025B 9029      LD	R2,Y+
    025C 9518      RETI
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\USART\source\lib\delay.c
(0001) /************************************************
(0002) 文件:delay.c
(0003) 用途:延时函数
(0004) 注意:系统时钟8M
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) 
(0010) void delay_1us(void)                 //1us延时函数
(0011)   {
(0012)    asm("nop");
_delay_1us:
    025D 0000      NOP
    025E 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    025F 940E031F  CALL	push_gset2
    0261 01B8      MOVW	R22,R16
(0013)   }
(0014) 
(0015) void delay_nus(unsigned int n)       //N us延时函数
(0016)   {
(0017)    unsigned int i=0;
    0262 2744      CLR	R20
    0263 2755      CLR	R21
(0018)    for (i=0;i<n;i++)
    0264 C003      RJMP	0x0268
(0019)    delay_1us();
    0265 DFF7      RCALL	_delay_1us
    0266 5F4F      SUBI	R20,0xFF
    0267 4F5F      SBCI	R21,0xFF
    0268 1746      CP	R20,R22
    0269 0757      CPC	R21,R23
    026A F3D0      BCS	0x0265
    026B 940E0310  CALL	pop_gset2
    026D 9508      RET
(0020)   }
(0021)   
(0022) void delay_1ms(void)                 //1ms延时函数
(0023)   {
(0024)    unsigned int i;
(0025)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    026E 2700      CLR	R16
    026F 2711      CLR	R17
    0270 C002      RJMP	0x0273
    0271 5F0F      SUBI	R16,0xFF
    0272 4F1F      SBCI	R17,0xFF
    0273 3704      CPI	R16,0x74
    0274 E0E4      LDI	R30,4
    0275 071E      CPC	R17,R30
    0276 F3D0      BCS	0x0271
    0277 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0278 940E031F  CALL	push_gset2
    027A 01B8      MOVW	R22,R16
(0026)   }
(0027)   
(0028) void delay_nms(unsigned int n)       //N ms延时函数
(0029)   {
(0030)    unsigned int i=0;
    027B 2744      CLR	R20
    027C 2755      CLR	R21
(0031)    for (i=0;i<n;i++)
    027D C003      RJMP	0x0281
(0032)    delay_1ms();
FILE: <library>
    027E DFEF      RCALL	_delay_1ms
    027F 5F4F      SUBI	R20,0xFF
    0280 4F5F      SBCI	R21,0xFF
    0281 1746      CP	R20,R22
    0282 0757      CPC	R21,R23
    0283 F3D0      BCS	0x027E
    0284 940E0310  CALL	pop_gset2
    0286 9508      RET
div32u:
    0287 94E8      BCLR	6
    0288 C001      RJMP	0x028A
mod32u:
    0289 9468      BSET	6
    028A D02F      RCALL	long_div_prolog
    028B 24CC      CLR	R12
    028C C008      RJMP	0x0295
div32s:
    028D 94E8      BCLR	6
    028E C001      RJMP	0x0290
mod32s:
    028F 9468      BSET	6
    0290 D029      RCALL	long_div_prolog
    0291 FD37      SBRC	R19,7
    0292 D053      RCALL	neg_R16_R19
    0293 FDB7      SBRC	R27,7
    0294 D05A      RCALL	neg_R24_R27
    0295 2477      CLR	R7
    0296 2488      CLR	R8
    0297 2499      CLR	R9
    0298 24AA      CLR	R10
    0299 24BB      CLR	R11
    029A D041      RCALL	tst_R16_R19
    029B F0C1      BEQ	0x02B4
    029C D044      RCALL	tst_R24_R27
    029D F0B1      BEQ	0x02B4
    029E E2E8      LDI	R30,0x28
    029F 0F00      LSL	R16
    02A0 1F11      ROL	R17
    02A1 1F22      ROL	R18
    02A2 1F33      ROL	R19
    02A3 1C77      ROL	R7
    02A4 1C88      ROL	R8
    02A5 1C99      ROL	R9
    02A6 1CAA      ROL	R10
    02A7 1CBB      ROL	R11
    02A8 1688      CP	R8,R24
    02A9 0699      CPC	R9,R25
    02AA 06AA      CPC	R10,R26
    02AB 06BB      CPC	R11,R27
    02AC F028      BCS	0x02B2
    02AD 1A88      SUB	R8,R24
    02AE 0A99      SBC	R9,R25
    02AF 0AAA      SBC	R10,R26
    02B0 0ABB      SBC	R11,R27
    02B1 9503      INC	R16
    02B2 95EA      DEC	R30
    02B3 F759      BNE	0x029F
    02B4 F426      BRTC	0x02B9
    02B5 2D08      MOV	R16,R8
    02B6 2D19      MOV	R17,R9
    02B7 2D2A      MOV	R18,R10
    02B8 2D3B      MOV	R19,R11
    02B9 C013      RJMP	long_div_epilog
long_div_prolog:
    02BA 927A      ST	R7,-Y
    02BB 928A      ST	R8,-Y
    02BC 929A      ST	R9,-Y
    02BD 92AA      ST	R10,-Y
    02BE 92BA      ST	R11,-Y
    02BF 92CA      ST	R12,-Y
    02C0 93EA      ST	R30,-Y
    02C1 938A      ST	R24,-Y
    02C2 939A      ST	R25,-Y
    02C3 93AA      ST	R26,-Y
    02C4 93BA      ST	R27,-Y
    02C5 858B      LDD	R24,Y+11
    02C6 859C      LDD	R25,Y+12
    02C7 85AD      LDD	R26,Y+13
    02C8 85BE      LDD	R27,Y+14
    02C9 2EC3      MOV	R12,R19
    02CA F00E      BRTS	0x02CC
    02CB 26CB      EOR	R12,R27
    02CC 9508      RET
long_div_epilog:
    02CD FCC7      SBRC	R12,7
    02CE D017      RCALL	neg_R16_R19
    02CF 91B9      LD	R27,Y+
    02D0 91A9      LD	R26,Y+
    02D1 9199      LD	R25,Y+
    02D2 9189      LD	R24,Y+
    02D3 91E9      LD	R30,Y+
    02D4 90C9      LD	R12,Y+
    02D5 90B9      LD	R11,Y+
    02D6 90A9      LD	R10,Y+
    02D7 9099      LD	R9,Y+
    02D8 9089      LD	R8,Y+
    02D9 9079      LD	R7,Y+
    02DA 9624      ADIW	R28,4
    02DB 9508      RET
tst_R16_R19:
    02DC 2FE0      MOV	R30,R16
    02DD 2BE1      OR	R30,R17
    02DE 2BE2      OR	R30,R18
    02DF 2BE3      OR	R30,R19
    02E0 9508      RET
tst_R24_R27:
    02E1 2FE8      MOV	R30,R24
    02E2 2BE9      OR	R30,R25
    02E3 2BEA      OR	R30,R26
    02E4 2BEB      OR	R30,R27
    02E5 9508      RET
neg_R16_R19:
    02E6 9500      COM	R16
    02E7 9510      COM	R17
    02E8 9520      COM	R18
    02E9 9530      COM	R19
    02EA 5F0F      SUBI	R16,0xFF
    02EB 4F1F      SBCI	R17,0xFF
    02EC 4F2F      SBCI	R18,0xFF
    02ED 4F3F      SBCI	R19,0xFF
    02EE 9508      RET
neg_R24_R27:
    02EF 9580      COM	R24
    02F0 9590      COM	R25
    02F1 95A0      COM	R26
    02F2 95B0      COM	R27
    02F3 5F8F      SUBI	R24,0xFF
    02F4 4F9F      SBCI	R25,0xFF
    02F5 4FAF      SBCI	R26,0xFF
    02F6 4FBF      SBCI	R27,0xFF
    02F7 9508      RET
mod8u:
    02F8 9468      BSET	6
    02F9 C001      RJMP	xdiv8u
div8u:
    02FA 94E8      BCLR	6
xdiv8u:
    02FB 932A      ST	R18,-Y
    02FC 92FA      ST	R15,-Y
    02FD 92EA      ST	R14,-Y
    02FE 24FF      CLR	R15
    02FF 24EE      CLR	R14
    0300 E120      LDI	R18,0x10
    0301 0F00      LSL	R16
    0302 1CFF      ROL	R15
    0303 1CEE      ROL	R14
    0304 16E1      CP	R14,R17
    0305 F010      BCS	0x0308
    0306 1AE1      SUB	R14,R17
    0307 9503      INC	R16
    0308 952A      DEC	R18
    0309 F7B9      BNE	0x0301
    030A F40E      BRTC	0x030C
    030B 2D0E      MOV	R16,R14
    030C 90E9      LD	R14,Y+
    030D 90F9      LD	R15,Y+
    030E 9129      LD	R18,Y+
    030F 9508      RET
pop_gset2:
    0310 E0E2      LDI	R30,2
    0311 940C0325  JMP	pop
pop_gset3:
    0313 E0E4      LDI	R30,4
    0314 940C0325  JMP	pop
pop_gset4:
    0316 E0E8      LDI	R30,0x8
    0317 940C0325  JMP	pop
push_gset5:
    0319 92FA      ST	R15,-Y
    031A 92EA      ST	R14,-Y
push_gset4:
    031B 92DA      ST	R13,-Y
    031C 92CA      ST	R12,-Y
push_gset3:
    031D 92BA      ST	R11,-Y
    031E 92AA      ST	R10,-Y
push_gset2:
    031F 937A      ST	R23,-Y
    0320 936A      ST	R22,-Y
push_gset1:
    0321 935A      ST	R21,-Y
    0322 934A      ST	R20,-Y
    0323 9508      RET
pop_gset1:
    0324 E0E1      LDI	R30,1
pop:
    0325 9149      LD	R20,Y+
    0326 9159      LD	R21,Y+
    0327 FDE0      SBRC	R30,0
    0328 9508      RET
    0329 9169      LD	R22,Y+
    032A 9179      LD	R23,Y+
    032B FDE1      SBRC	R30,1
    032C 9508      RET
    032D 90A9      LD	R10,Y+
    032E 90B9      LD	R11,Y+
    032F FDE2      SBRC	R30,2
    0330 9508      RET
    0331 90C9      LD	R12,Y+
    0332 90D9      LD	R13,Y+
    0333 FDE3      SBRC	R30,3
    0334 9508      RET
    0335 90E9      LD	R14,Y+
    0336 90F9      LD	R15,Y+
    0337 9508      RET

⌨️ 快捷键说明

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