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

📄 uart.lis

📁 一个6缸发动机的ECU控制程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00D0                   .dbline 70
 00D0           ;               } 
 00D0                   .dbline 71
 00D0           ;      } 
 00D0 03C0              rjmp L8
 00D2           L7:
 00D2                   .dbline 72
 00D2           ;   else rx_error0 = 1 ;         
 00D2 81E0              ldi R24,1
 00D4 80930C00          sts _rx_error0,R24
 00D8           L8:
 00D8                   .dbline -2
 00D8           L6:
 00D8                   .dbline 0 ; func end
 00D8 4991              ld R20,y+
 00DA A990              ld R10,y+
 00DC 0990              ld R0,y+
 00DE 0FBE              out 0x3f,R0
 00E0 F991              ld R31,y+
 00E2 E991              ld R30,y+
 00E4 B991              ld R27,y+
 00E6 A991              ld R26,y+
 00E8 9991              ld R25,y+
 00EA 8991              ld R24,y+
 00EC 4991              ld R20,y+
 00EE 3991              ld R19,y+
 00F0 2991              ld R18,y+
 00F2 1991              ld R17,y+
 00F4 0991              ld R16,y+
 00F6 A990              ld R10,y+
 00F8 9990              ld R9,y+
 00FA 8990              ld R8,y+
 00FC 7990              ld R7,y+
 00FE 6990              ld R6,y+
 0100 5990              ld R5,y+
 0102 4990              ld R4,y+
 0104 3990              ld R3,y+
 0106 2990              ld R2,y+
 0108 1990              ld R1,y+
 010A 0990              ld R0,y+
 010C 1895              reti
 010E                   .dbsym r data 10 c
 010E                   .dbsym r status 20 c
 010E                   .dbend
 010E                   .dbfunc e getchar _getchar fc
 010E           ;           data -> R16
 010E           ;          IisOn -> R18
                        .even
 010E           _getchar::
 010E                   .dbline -1
 010E                   .dbline 79
 010E           ; } 
 010E           ; 
 010E           ; 
 010E           ; 
 010E           ; // Get a character from the USART0 Receiver buffer 
 010E           ; char getchar(void) 
 010E           ; { 
 010E                   .dbline 81
 010E           ;   char data; 
 010E           ;   char IisOn = 1;
 010E 21E0              ldi R18,1
 0110                   .dbline 82
 0110           ;   if((SREG & 0x80) == 0x00)  //I之前是否置位
 0110 2FB6              in R2,0x3f
 0112 27FC              sbrc R2,7
 0114 01C0              rjmp L19
 0116           X6:
 0116                   .dbline 83
 0116           ;     IisOn = 0;
 0116 2227              clr R18
 0118           L18:
 0118                   .dbline 85
 0118           ;       
 0118           ;   while (rx_counter0==0); 
 0118           L19:
 0118                   .dbline 85
 0118 20900D00          lds R2,_rx_counter0
 011C 2220              tst R2
 011E E1F3              breq L18
 0120           X7:
 0120                   .dbline 86
 0120           ;   data=rx_buffer0[rx_rd_index0]; 
 0120 80E0              ldi R24,<_rx_buffer0
 0122 90E0              ldi R25,>_rx_buffer0
 0124 E0910E00          lds R30,_rx_rd_index0
 0128 FF27              clr R31
 012A E80F              add R30,R24
 012C F91F              adc R31,R25
 012E 0081              ldd R16,z+0
 0130                   .dbline 87
 0130           ;   if (++rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0; 
 0130 80910E00          lds R24,_rx_rd_index0
 0134 8F5F              subi R24,255    ; addi 1
 0136 282E              mov R2,R24
 0138 20920E00          sts _rx_rd_index0,R2
 013C 8830              cpi R24,8
 013E 19F4              brne L21
 0140           X8:
 0140                   .dbline 87
 0140 2224              clr R2
 0142 20920E00          sts _rx_rd_index0,R2
 0146           L21:
 0146                   .dbline 88
 0146           ;   CLI(); 
 0146 F894              cli
 0148                   .dbline 89
 0148           ;   --rx_counter0; 
 0148 80910D00          lds R24,_rx_counter0
 014C 8150              subi R24,1
 014E 80930D00          sts _rx_counter0,R24
 0152                   .dbline 90
 0152           ;   if(IisOn)
 0152 2223              tst R18
 0154 09F0              breq L23
 0156           X9:
 0156                   .dbline 91
 0156           ;     SEI(); 
 0156 7894              sei
 0158           L23:
 0158                   .dbline 92
 0158           ;   return data; 
 0158                   .dbline -2
 0158           L15:
 0158                   .dbline 0 ; func end
 0158 0895              ret
 015A                   .dbsym r data 16 c
 015A                   .dbsym r IisOn 18 c
 015A                   .dbend
                        .area vector(rom, abs)
                        .org 40
 0028 ADC0              rjmp _uart0_tx_isr
                        .area text(rom, con, rel)
 015A                   .dbfile C:\DOCUME~1\Administrator\桌面\avr1\uart.c
 015A                   .dbfunc e uart0_tx_isr _uart0_tx_isr fV
                        .even
 015A           _uart0_tx_isr::
 015A 2A92              st -y,R2
 015C 8A93              st -y,R24
 015E 9A93              st -y,R25
 0160 EA93              st -y,R30
 0162 FA93              st -y,R31
 0164 2FB6              in R2,0x3f
 0166 2A92              st -y,R2
 0168                   .dbline -1
 0168                   .dbline 101
 0168           ; }
 0168           ; 
 0168           ; 
 0168           ; 
 0168           ; 
 0168           ; // USART0 Transmitter interrupt service routine 
 0168           ; #pragma interrupt_handler uart0_tx_isr:iv_USART0_TXC
 0168           ; void uart0_tx_isr(void)
 0168           ; { 
 0168                   .dbline 102
 0168           ;   if (tx_counter0) 
 0168 20900000          lds R2,_tx_counter0
 016C 2220              tst R2
 016E D1F0              breq L26
 0170           X10:
 0170                   .dbline 103
 0170           ;     { 
 0170                   .dbline 104
 0170           ;       --tx_counter0; 
 0170 80910000          lds R24,_tx_counter0
 0174 8150              subi R24,1
 0176 80930000          sts _tx_counter0,R24
 017A                   .dbline 105
 017A           ;       UDR0=tx_buffer0[tx_rd_index0]; 
 017A 80E0              ldi R24,<_tx_buffer0
 017C 90E0              ldi R25,>_tx_buffer0
 017E E0910100          lds R30,_tx_rd_index0
 0182 FF27              clr R31
 0184 E80F              add R30,R24
 0186 F91F              adc R31,R25
 0188 2080              ldd R2,z+0
 018A 2092C600          sts 198,R2
 018E                   .dbline 106
 018E           ;       if (++tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0; 
 018E 80910100          lds R24,_tx_rd_index0
 0192 8F5F              subi R24,255    ; addi 1
 0194 282E              mov R2,R24
 0196 20920100          sts _tx_rd_index0,R2
 019A 8830              cpi R24,8
 019C 19F4              brne L28
 019E           X11:
 019E                   .dbline 106
 019E 2224              clr R2
 01A0 20920100          sts _tx_rd_index0,R2
 01A4           L28:
 01A4                   .dbline 107
 01A4           ;     }; 
 01A4           L26:
 01A4                   .dbline 107
 01A4                   .dbline -2
 01A4           L25:
 01A4                   .dbline 0 ; func end
 01A4 2990              ld R2,y+
 01A6 2FBE              out 0x3f,R2
 01A8 F991              ld R31,y+
 01AA E991              ld R30,y+
 01AC 9991              ld R25,y+
 01AE 8991              ld R24,y+
 01B0 2990              ld R2,y+
 01B2 1895              reti
 01B4                   .dbend
 01B4                   .dbfunc e putchar _putchar fV
 01B4           ;          IisOn -> R20
 01B4           ;              c -> R16
                        .even
 01B4           _putchar::
 01B4 4A93              st -y,R20
 01B6                   .dbline -1
 01B6                   .dbline 114
 01B6           ; } 
 01B6           ; 
 01B6           ; 
 01B6           ; 
 01B6           ; // Write a character to the USART0 Transmitter buffer 
 01B6           ; void putchar(char c) 
 01B6           ; { 
 01B6                   .dbline 115
 01B6           ;   char IisOn = 1;
 01B6 41E0              ldi R20,1
 01B8                   .dbline 116
 01B8           ;   if((SREG & 0x80) == 0x00)  //I之前是否置位
 01B8 2FB6              in R2,0x3f
 01BA 27FC              sbrc R2,7
 01BC 01C0              rjmp L34
 01BE           X12:
 01BE                   .dbline 117
 01BE           ;     IisOn = 0;
 01BE 4427              clr R20
 01C0           L33:
 01C0                   .dbline 118
 01C0           ;   while (tx_counter0 == TX_BUFFER_SIZE0); 
 01C0           L34:
 01C0                   .dbline 118
 01C0 80910000          lds R24,_tx_counter0
 01C4 8830              cpi R24,8
 01C6 E1F3              breq L33
 01C8           X13:
 01C8                   .dbline 119
 01C8           ;   CLI(); 
 01C8 F894              cli
 01CA                   .dbline 120
 01CA           ;   if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0)) 
 01CA 20900000          lds R2,_tx_counter0
 01CE 2220              tst R2
 01D0 21F4              brne L38
 01D2           X14:
 01D2 2090C000          lds R2,192
 01D6 25FC              sbrc R2,5
 01D8 19C0              rjmp L36
 01DA           X15:
 01DA           L38:
 01DA                   .dbline 121
 01DA           ;     { 
 01DA                   .dbline 122
 01DA           ;       tx_buffer0[tx_wr_index0]=c; 
 01DA 80E0              ldi R24,<_tx_buffer0
 01DC 90E0              ldi R25,>_tx_buffer0
 01DE E0910200          lds R30,_tx_wr_index0
 01E2 FF27              clr R31
 01E4 E80F              add R30,R24
 01E6 F91F              adc R31,R25
 01E8 0083              std z+0,R16
 01EA                   .dbline 123
 01EA           ;       if (++tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0; 
 01EA 80910200          lds R24,_tx_wr_index0
 01EE 8F5F              subi R24,255    ; addi 1
 01F0 282E              mov R2,R24
 01F2 20920200          sts _tx_wr_index0,R2
 01F6 8830              cpi R24,8
 01F8 19F4              brne L39
 01FA           X16:
 01FA                   .dbline 123
 01FA 2224              clr R2
 01FC 20920200          sts _tx_wr_index0,R2
 0200           L39:
 0200                   .dbline 124
 0200           ;       ++tx_counter0; 
 0200 80910000          lds R24,_tx_counter0
 0204 8F5F              subi R24,255    ; addi 1
 0206 80930000          sts _tx_counter0,R24
 020A                   .dbline 125
 020A           ;     } 
 020A 02C0              rjmp L37
 020C           L36:
 020C                   .dbline 127
 020C           ;   else 
 020C           ;     UDR0=c;
 020C 0093C600          sts 198,R16
 0210           L37:
 0210                   .dbline 128
 0210           ;   if(IisOn)           
 0210 4423              tst R20
 0212 09F0              breq L41
 0214           X17:
 0214                   .dbline 129
 0214           ;     SEI(); 
 0214 7894              sei
 0216           L41:
 0216                   .dbline -2
 0216           L30:

⌨️ 快捷键说明

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