📄 main.lis
字号:
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 + -