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

📄 main.lis

📁 一个6缸发动机的ECU控制程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0042                   .dbline -2
 0042           L3:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbsym r data 16 c
 0044                   .dbend
                        .area vector(rom, abs)
                        .org 36
 0024 22C0              rjmp _uart0_rx_isr
                        .area text(rom, con, rel)
 0044                   .dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\uart.c
 0044                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
 0044           ;           data -> R10
 0044           ;         status -> R20
                        .even
 0044           _uart0_rx_isr::
 0044 0A92              st -y,R0
 0046 1A92              st -y,R1
 0048 2A92              st -y,R2
 004A 3A92              st -y,R3
 004C 4A92              st -y,R4
 004E 5A92              st -y,R5
 0050 6A92              st -y,R6
 0052 7A92              st -y,R7
 0054 8A92              st -y,R8
 0056 9A92              st -y,R9
 0058 AA92              st -y,R10
 005A 0A93              st -y,R16
 005C 1A93              st -y,R17
 005E 2A93              st -y,R18
 0060 3A93              st -y,R19
 0062 4A93              st -y,R20
 0064 8A93              st -y,R24
 0066 9A93              st -y,R25
 0068 AA93              st -y,R26
 006A BA93              st -y,R27
 006C EA93              st -y,R30
 006E FA93              st -y,R31
 0070 0FB6              in R0,0x3f
 0072 0A92              st -y,R0
 0074 AA92              st -y,R10
 0076 4A93              st -y,R20
 0078                   .dbline -1
 0078                   .dbline 42
 0078           ; }
 0078           ; // USART0 Receiver interrupt service routine 
 0078           ; #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
 0078           ; void uart0_rx_isr(void) 
 0078           ; { 
 0078                   .dbline 44
 0078           ;   char status,data; 
 0078           ;   status=UCSR0A; 
 0078 4091C000          lds R20,192
 007C                   .dbline 45
 007C           ;   data=UDR0; 
 007C A090C600          lds R10,198
 0080                   .dbline 50
 0080           ; //             putchar(251);  //回传接收成功标志 debug
 0080           ; //         putchar(251);  //回传接收成功标志debug
 0080           ; //  if(data == 0xFF)  //DEBUG
 0080           ; //    UDR0 = data;   //DEBUG
 0080           ;   if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) 
 0080 842F              mov R24,R20
 0082 8C71              andi R24,28
 0084 31F5              brne L7
 0086           X1:
 0086                   .dbline 51
 0086           ;     { 
 0086                   .dbline 52
 0086           ;         if(FrameHead0 == 0 && rx_counter0 == 0)  //判断是否帧头
 0086 20901700          lds R2,_FrameHead0
 008A 2220              tst R2
 008C 59F4              brne L9
 008E           X2:
 008E 20901900          lds R2,_rx_counter0
 0092 2220              tst R2
 0094 39F4              brne L9
 0096           X3:
 0096                   .dbline 53
 0096           ;          {
 0096                   .dbline 54
 0096           ;           if(TestFrameHead(data))    //数据有效才设置FrameHead        
 0096 0A2D              mov R16,R10
 0098 CFDF              rcall _TestFrameHead
 009A 0023              tst R16
 009C E9F0              breq L8
 009E           X4:
 009E                   .dbline 55
 009E           ;                {
 009E                   .dbline 56
 009E           ;              FrameHead0 = data;
 009E A0921700          sts _FrameHead0,R10
 00A2                   .dbline 57
 00A2           ;                }  
 00A2                   .dbline 58
 00A2           ;          } 
 00A2 1AC0              rjmp L8
 00A4           L9:
 00A4                   .dbline 61
 00A4           ;               
 00A4           ;         else 
 00A4           ;           {   
 00A4                   .dbline 62
 00A4           ;          rx_buffer0[rx_counter0]=data;  
 00A4 80E0              ldi R24,<_rx_buffer0
 00A6 90E0              ldi R25,>_rx_buffer0
 00A8 E0911900          lds R30,_rx_counter0
 00AC FF27              clr R31
 00AE E80F              add R30,R24
 00B0 F91F              adc R31,R25
 00B2 A082              std z+0,R10
 00B4                   .dbline 65
 00B4           ; //             putchar(251);  //回传接收成功标志 debug
 00B4           ; //         putchar(251);  //回传接收成功标志debug
 00B4           ;          if (++rx_counter0 == RX_BUFFER_SIZE0) 
 00B4 80911900          lds R24,_rx_counter0
 00B8 8F5F              subi R24,255    ; addi 1
 00BA 282E              mov R2,R24
 00BC 20921900          sts _rx_counter0,R2
 00C0 8431              cpi R24,20
 00C2 51F4              brne L8
 00C4           X5:
 00C4                   .dbline 66
 00C4           ;           { 
 00C4                   .dbline 67
 00C4           ;             rx_counter0 = 0; 
 00C4 2224              clr R2
 00C6 20921900          sts _rx_counter0,R2
 00CA                   .dbline 68
 00CA           ;             rx_error0 = 1; 
 00CA 81E0              ldi R24,1
 00CC 80931800          sts _rx_error0,R24
 00D0                   .dbline 69
 00D0           ;           } 
 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 80931800          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 20901900          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 E0911A00          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 80911A00          lds R24,_rx_rd_index0
 0134 8F5F              subi R24,255    ; addi 1
 0136 282E              mov R2,R24
 0138 20921A00          sts _rx_rd_index0,R2
 013C 8431              cpi R24,20
 013E 19F4              brne L21
 0140           X8:
 0140                   .dbline 87
 0140 2224              clr R2
 0142 20921A00          sts _rx_rd_index0,R2
 0146           L21:
 0146                   .dbline 88
 0146           ;   CLI(); 
 0146 F894              cli
 0148                   .dbline 89
 0148           ;   --rx_counter0; 
 0148 80911900          lds R24,_rx_counter0
 014C 8150              subi R24,1
 014E 80931900          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\桌面\程序\油泵油嘴实验台\可用\油泵油~2\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 8431              cpi R24,20

⌨️ 快捷键说明

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