📄 sio.lis
字号:
023E FB01 movw R30,R22
0240 E081 ldd R30,z+0
0242 FF27 clr R31
0244 E80F add R30,R24
0246 F91F adc R31,R25
0248 4081 ldd R20,z+0
024A .dbline 376
024A ; REV_DIS();
024A .dbline 376
024A 5798 cbi 0xa,7
024C .dbline 376
024C .dbline 376
024C .dbline 377
024C ; RTbuf->R_count--;
024C CB01 movw R24,R22
024E 0296 adiw R24,2
0250 FC01 movw R30,R24
0252 8081 ldd R24,z+0
0254 8150 subi R24,1
0256 8083 std z+0,R24
0258 .dbline 378
0258 ; RTbuf->R_front=(RTbuf->R_front+1) % RBUF_SIZE;
0258 1AE0 ldi R17,10
025A FB01 movw R30,R22
025C 0081 ldd R16,z+0
025E 0F5F subi R16,255 ; addi 1
0260 0E940000 xcall mod8u
0264 FB01 movw R30,R22
0266 0083 std z+0,R16
0268 .dbline 379
0268 ; REV_EN();
0268 579A sbi 0xa,7
026A .dbline 380
026A ; }
026A L53:
026A .dbline 381
026A ; return (Btemp);
026A 042F mov R16,R20
026C .dbline -2
026C L52:
026C 0E940000 xcall pop_gset2
0270 .dbline 0 ; func end
0270 0895 ret
0272 .dbsym r Btemp 20 c
0272 .dbsym r RTbuf 22 pS[.1]
0272 .dbend
.area vector(rom, abs)
.org 44
002C 0C943901 jmp _uart0_rx_isr
.area text(rom, con, rel)
0272 .dbfile D:\桌面\avr程序设计\串口通讯范例\sio.c
0272 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
0272 ; data -> R22
0272 ; status -> R10
0272 ; RTbuf -> R20,R21
.even
0272 _uart0_rx_isr::
0272 2A92 st -y,R2
0274 3A92 st -y,R3
0276 0A93 st -y,R16
0278 1A93 st -y,R17
027A 8A93 st -y,R24
027C 9A93 st -y,R25
027E EA93 st -y,R30
0280 FA93 st -y,R31
0282 2FB6 in R2,0x3f
0284 2A92 st -y,R2
0286 0E940000 xcall push_gset3
028A .dbline -1
028A .dbline 413
028A ;
028A ; }
028A ; /*********************************************************************************************************
028A ; ** 函数名称: Tbuf_getchar
028A ; ** 功能描述: 从发送缓冲区读一个字符
028A ; ** 输 入:
028A ; ** 输出 : 读字符
028A ; ** 全局变量: 无
028A ; ** 调用模块:
028A ; ** 说明:
028A ; ** 注意:
028A ; ********************************************************************************************************
028A ; uint8 Tbuf_getchar(void){
028A ; uint8 Btemp;
028A ; if (!Tbuf_empty()){
028A ; Btemp=RTbuf->T_buf[RTbuf->T_front];
028A ; TXC_DIS();
028A ; RTbuf->T_count--;
028A ; RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
028A ; TXC_EN();
028A ; return (Btemp);
028A ; }
028A ; }
028A ; */
028A ;
028A ; /******************************* 中断处理函数 ***************************
028A ; * 功能:完成数据得的接收和发送
028A ; ***********************************************************************/
028A ; #if USEUART0
028A ; #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
028A ; void uart0_rx_isr(void)
028A ; {
028A .dbline 416
028A ; uint8 status,data;
028A ; siocirqueue *RTbuf;
028A ; RTbuf=&RTbuf_UART0;
028A 40E0 ldi R20,<_RTbuf_UART0
028C 50E0 ldi R21,>_RTbuf_UART0
028E .dbline 418
028E ; // CLI();
028E ; status=UCSR0A;
028E ABB0 in R10,0xb
0290 .dbline 419
0290 ; data=UDR0;
0290 6CB1 in R22,0xc
0292 .dbline 421
0292 ; //WDR(); //喂狗
0292 ; if((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
0292 8A2D mov R24,R10
0294 8871 andi R24,24
0296 09F0 breq X2
0298 22C0 xjmp L56
029A X2:
029A .dbline 422
029A ; {
029A .dbline 423
029A ; if(RTbuf->R_count<RBUF_SIZE){
029A FA01 movw R30,R20
029C 8281 ldd R24,z+2
029E 8A30 cpi R24,10
02A0 08F0 brlo X3
02A2 1AC0 xjmp L58
02A4 X3:
02A4 .dbline 423
02A4 .dbline 424
02A4 ; RTbuf->R_count++;
02A4 CA01 movw R24,R20
02A6 0296 adiw R24,2
02A8 FC01 movw R30,R24
02AA 8081 ldd R24,z+0
02AC 8F5F subi R24,255 ; addi 1
02AE 8083 std z+0,R24
02B0 .dbline 425
02B0 ; RTbuf->R_buf[RTbuf->R_rear]=data;
02B0 CA01 movw R24,R20
02B2 0496 adiw R24,4
02B4 FA01 movw R30,R20
02B6 E181 ldd R30,z+1
02B8 FF27 clr R31
02BA E80F add R30,R24
02BC F91F adc R31,R25
02BE 6083 std z+0,R22
02C0 .dbline 426
02C0 ; RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
02C0 CA01 movw R24,R20
02C2 0196 adiw R24,1
02C4 1C01 movw R2,R24
02C6 1AE0 ldi R17,10
02C8 FC01 movw R30,R24
02CA 0081 ldd R16,z+0
02CC 0F5F subi R16,255 ; addi 1
02CE 0E940000 xcall mod8u
02D2 F101 movw R30,R2
02D4 0083 std z+0,R16
02D6 .dbline 427
02D6 ; }
02D6 03C0 xjmp L59
02D8 L58:
02D8 .dbline 429
02D8 ; else
02D8 ; {
02D8 .dbline 430
02D8 ; RTbuf->R_overflow=1;
02D8 81E0 ldi R24,1
02DA FA01 movw R30,R20
02DC 8383 std z+3,R24
02DE .dbline 431
02DE ; }
02DE L59:
02DE .dbline 432
02DE L56:
02DE .dbline -2
02DE L55:
02DE 0E940000 xcall pop_gset3
02E2 2990 ld R2,y+
02E4 2FBE out 0x3f,R2
02E6 F991 ld R31,y+
02E8 E991 ld R30,y+
02EA 9991 ld R25,y+
02EC 8991 ld R24,y+
02EE 1991 ld R17,y+
02F0 0991 ld R16,y+
02F2 3990 ld R3,y+
02F4 2990 ld R2,y+
02F6 .dbline 0 ; func end
02F6 1895 reti
02F8 .dbsym r data 22 c
02F8 .dbsym r status 10 c
02F8 .dbsym r RTbuf 20 pS[.1]
02F8 .dbend
.area vector(rom, abs)
.org 52
0034 0C947C01 jmp _uart0_tx_isr
.area text(rom, con, rel)
02F8 .dbfile D:\桌面\avr程序设计\串口通讯范例\sio.c
02F8 .dbfunc e uart0_tx_isr _uart0_tx_isr fV
02F8 ; RTbuf -> R20,R21
.even
02F8 _uart0_tx_isr::
02F8 2A92 st -y,R2
02FA 3A92 st -y,R3
02FC 0A93 st -y,R16
02FE 1A93 st -y,R17
0300 8A93 st -y,R24
0302 9A93 st -y,R25
0304 EA93 st -y,R30
0306 FA93 st -y,R31
0308 2FB6 in R2,0x3f
030A 2A92 st -y,R2
030C 0E940000 xcall push_gset1
0310 .dbline -1
0310 .dbline 438
0310 ; }
0310 ; //SEI();
0310 ; }
0310 ;
0310 ; #pragma interrupt_handler uart0_tx_isr: iv_USART0_TXC
0310 ; void uart0_tx_isr(void)
0310 ; {
0310 .dbline 442
0310 ; //CLI();
0310 ; siocirqueue *RTbuf;
0310 ; //WDR(); //喂狗
0310 ; RTbuf=&RTbuf_UART0;
0310 40E0 ldi R20,<_RTbuf_UART0
0312 50E0 ldi R21,>_RTbuf_UART0
0314 .dbline 443
0314 ; if (RTbuf->T_count>0){
0314 2224 clr R2
0316 FA01 movw R30,R20
0318 3088 ldd R3,z+16
031A 2314 cp R2,R3
031C 08F0 brlo X4
031E 1BC0 xjmp L61
0320 X4:
0320 .dbline 443
0320 .dbline 444
0320 ; UDR0=RTbuf->T_buf[RTbuf->T_front];
0320 CA01 movw R24,R20
0322 4196 adiw R24,17
0324 FA01 movw R30,R20
0326 E685 ldd R30,z+14
0328 FF27 clr R31
032A E80F add R30,R24
032C F91F adc R31,R25
032E 2080 ldd R2,z+0
0330 2CB8 out 0xc,R2
0332 .dbline 445
0332 ; RTbuf->T_count--;
0332 CA01 movw R24,R20
0334 4096 adiw R24,16
0336 FC01 movw R30,R24
0338 8081 ldd R24,z+0
033A 8150 subi R24,1
033C 8083 std z+0,R24
033E .dbline 446
033E ; RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
033E CA01 movw R24,R20
0340 0E96 adiw R24,14
0342 1C01 movw R2,R24
0344 1AE0 ldi R17,10
0346 FC01 movw R30,R24
0348 0081 ldd R16,z+0
034A 0F5F subi R16,255 ; addi 1
034C 0E940000 xcall mod8u
0350 F101 movw R30,R2
0352 0083 std z+0,R16
0354 .dbline 447
0354 ; }
0354 03C0 xjmp L62
0356 L61:
0356 .dbline 448
0356 81E0 ldi R24,1
0358 FA01 movw R30,R20
035A 838F std z+27,R24
035C L62:
035C .dbline -2
035C L60:
035C 0E940000 xcall pop_gset1
0360 2990 ld R2,y+
0362 2FBE out 0x3f,R2
0364 F991 ld R31,y+
0366 E991 ld R30,y+
0368 9991 ld R25,y+
036A 8991 ld R24,y+
036C 1991 ld R17,y+
036E 0991 ld R16,y+
0370 3990 ld R3,y+
0372 2990 ld R2,y+
0374 .dbline 0 ; func end
0374 1895 reti
0376 .dbsym r RTbuf 20 pS[.1]
0376 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\桌面\avr程序设计\串口通讯范例\sio.c
0000 _RTbuf_UART0::
0000 .blkb 28
001C .dbsym e RTbuf_UART0 _RTbuf_UART0 S[.1]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -