📄 uart_main.lis
字号:
.module uart_main.c
.area text(rom, con, rel)
0000 .dbfile D:\ICCTES~1\1128\uart_main.c
0000 .dbfunc e test _test fV
.even
0000 _test::
0000 .dbline -1
0000 .dbline 13
0000 ; // ICC-AVR application builder : 2007-11-28 8:53:26
0000 ; // Target : M48
0000 ; // Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom48v.h>
0000 ; #include <macros.h>
0000 ; #include "main.h"
0000 ; #include "modbus.h"
0000 ; #include "timer2.h"
0000 ; #include "led.h"
0000 ;
0000 ; void test(void)
0000 ; {
0000 .dbline 15
0000 ; // LedShowLink = 5678;
0000 ; testVarAnalog = 0x0102;
0000 82E0 ldi R24,258
0002 91E0 ldi R25,1
0004 90930100 sts _testVarAnalog+1,R25
0008 80930000 sts _testVarAnalog,R24
000C .dbline 16
000C ; testVarPoint = 0x0304;
000C 84E0 ldi R24,772
000E 93E0 ldi R25,3
0010 90930100 sts _testVarPoint+1,R25
0014 80930000 sts _testVarPoint,R24
0018 .dbline 17
0018 ; testVarInputUp = 0x0506;
0018 86E0 ldi R24,1286
001A 95E0 ldi R25,5
001C 90930100 sts _testVarInputUp+1,R25
0020 80930000 sts _testVarInputUp,R24
0024 .dbline 18
0024 ; testVarInputDown = 0x0708;
0024 88E0 ldi R24,1800
0026 97E0 ldi R25,7
0028 90930100 sts _testVarInputDown+1,R25
002C 80930000 sts _testVarInputDown,R24
0030 .dbline -2
0030 L5:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbend
0032 .dbfunc e delay _delay fV
0032 ; num -> R16,R17
.even
0032 _delay::
0032 .dbline -1
0032 .dbline 22
0032 ; }
0032 ;
0032 ; void delay(uint num)
0032 ; {
0032 L7:
0032 .dbline 24
0032 L8:
0032 .dbline 23
0032 ; while(num-->0)
0032 1801 movw R2,R16
0034 0150 subi R16,1
0036 1040 sbci R17,0
0038 2220 tst R2
003A D9F7 brne L7
003C 3320 tst R3
003E C9F7 brne L7
0040 X0:
0040 .dbline -2
0040 L6:
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r num 16 i
0042 .dbend
0042 .dbfunc e port_init _port_init fV
.even
0042 _port_init::
0042 .dbline -1
0042 .dbline 28
0042 ; ;
0042 ; }
0042 ;
0042 ; void port_init(void)
0042 ; {
0042 .dbline 29
0042 ; PORTB = 0x00;
0042 2224 clr R2
0044 25B8 out 0x5,R2
0046 .dbline 30
0046 ; DDRB = 0x00;
0046 24B8 out 0x4,R2
0048 .dbline 31
0048 ; PORTC = 0x00; //m103 output only
0048 28B8 out 0x8,R2
004A .dbline 32
004A ; DDRC = 0x00;
004A 27B8 out 0x7,R2
004C .dbline 33
004C ; PORTD = 0x00;
004C 2BB8 out 0xb,R2
004E .dbline 34
004E ; DDRD = 0x00;
004E 2AB8 out 0xa,R2
0050 .dbline -2
0050 L10:
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbend
.area vector(rom, abs)
.org 18
0012 29C0 rjmp _timer2_ovf_isr
.area text(rom, con, rel)
0052 .dbfile D:\ICCTES~1\1128\uart_main.c
0052 .dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
.even
0052 _timer2_ovf_isr::
0052 8A93 st -y,R24
0054 8FB7 in R24,0x3f
0056 8A93 st -y,R24
0058 .dbline -1
0058 .dbline 39
0058 ; }
0058 ;
0058 ; #pragma interrupt_handler timer2_ovf_isr:10
0058 ; void timer2_ovf_isr(void)
0058 ; {
0058 .dbline 40
0058 ; TCNT2 = 0x83; //reload counter value
0058 83E8 ldi R24,131
005A 8093B200 sts 178,R24
005E .dbline 42
005E ;
005E ; timeBase.bits.bt1ms = 1;
005E 80910000 lds R24,_timeBase
0062 8260 ori R24,2
0064 80930000 sts _timeBase,R24
0068 .dbline -2
0068 L11:
0068 8991 ld R24,y+
006A 8FBF out 0x3f,R24
006C 8991 ld R24,y+
006E .dbline 0 ; func end
006E 1895 reti
0070 .dbend
.area vector(rom, abs)
.org 36
0024 38C0 rjmp _uart0_rx_isr
.area text(rom, con, rel)
0070 .dbfile D:\ICCTES~1\1128\uart_main.c
0070 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
0070 ; tmp -> R16
.even
0070 _uart0_rx_isr::
0070 2A92 st -y,R2
0072 0A93 st -y,R16
0074 8A93 st -y,R24
0076 9A93 st -y,R25
0078 EA93 st -y,R30
007A FA93 st -y,R31
007C 2FB6 in R2,0x3f
007E 2A92 st -y,R2
0080 .dbline -1
0080 .dbline 47
0080 ; }
0080 ;
0080 ; #pragma interrupt_handler uart0_rx_isr:19
0080 ; void uart0_rx_isr(void)
0080 ; {
0080 .dbline 49
0080 ; uint8 tmp;
0080 ; receTimeOut = 10; //通讯超时值
0080 8AE0 ldi R24,10
0082 80930000 sts _receTimeOut,R24
0086 .dbline 53
0086 ; //PORTC ^= 0x02;
0086 ;
0086 ;
0086 ; if(UCSR0A&BIT(FE0) != 0) //帧错. //if(FERR==1)
0086 2090C000 lds R2,192
008A 20FE sbrs R2,0
008C 12C0 rjmp L13
008E .dbline 54
008E ; {
008E .dbline 55
008E ; UCSR0B &= ~BIT(RXEN0); //CREN = 0;
008E 8091C100 lds R24,193
0092 8F7E andi R24,239
0094 8093C100 sts 193,R24
0098 .dbline 56
0098 ; UCSR0A &= ~BIT(FE0); //FERR = 0;
0098 8091C000 lds R24,192
009C 8F7E andi R24,239
009E 8093C000 sts 192,R24
00A2 .dbline 57
00A2 ; UCSR0B |= BIT(RXEN0); //CREN = 1;
00A2 8091C100 lds R24,193
00A6 8061 ori R24,16
00A8 8093C100 sts 193,R24
00AC .dbline 58
00AC ; tmp = UDR0;
00AC 0091C600 lds R16,198
00B0 .dbline 60
00B0 ; //PORTC ^= 0x02;
00B0 ; }
00B0 34C0 rjmp L14
00B2 L13:
00B2 .dbline 62
00B2 ; //else if(OERR==1)
00B2 ; else if(UCSR0A&BIT(DOR0)) //溢出错.
00B2 2090C000 lds R2,192
00B6 23FE sbrs R2,3
00B8 12C0 rjmp L15
00BA .dbline 63
00BA ; {
00BA .dbline 64
00BA ; UCSR0B &= ~BIT(RXEN0); //CREN = 0;
00BA 8091C100 lds R24,193
00BE 8F7E andi R24,239
00C0 8093C100 sts 193,R24
00C4 .dbline 65
00C4 ; UCSR0A &= ~BIT(DOR0); //OERR = 0;
00C4 8091C000 lds R24,192
00C8 877F andi R24,247
00CA 8093C000 sts 192,R24
00CE .dbline 66
00CE ; UCSR0B |= BIT(RXEN0); //CREN = 1;
00CE 8091C100 lds R24,193
00D2 8061 ori R24,16
00D4 8093C100 sts 193,R24
00D8 .dbline 67
00D8 ; tmp = UDR0;
00D8 0091C600 lds R16,198
00DC .dbline 69
00DC ; //PORTC ^= 0x02;
00DC ; }
00DC 1EC0 rjmp L16
00DE L15:
00DE .dbline 71
00DE ; else //奇偶校验的问题.
00DE ; {
00DE .dbline 74
00DE ; // RX9DBuf = RX9D;
00DE ; // 读取接受寄存器中的数据.
00DE ; receBuf[receCount] = UDR0; // RCREG;
00DE 80E0 ldi R24,<_receBuf
00E0 90E0 ldi R25,>_receBuf
00E2 E0910000 lds R30,_receCount
00E6 FF27 clr R31
00E8 E80F add R30,R24
00EA F91F adc R31,R25
00EC 2090C600 lds R2,198
00F0 2082 std z+0,R2
00F2 .dbline 77
00F2 ; // 奇校验判断.
00F2 ; //if(RX9DBuf != ParityBit(&receBuf[receCount]))
00F2 ; if(UCSR0A&BIT(UPE0)!=0) //奇校验硬件完成.
00F2 2090C000 lds R2,192
00F6 20FE sbrs R2,0
00F8 08C0 rjmp L17
00FA .dbline 78
00FA ; {
00FA .dbline 80
00FA ; //PORTC ^= 0x02;
00FA ; UCSR0A |= BIT(UPE0);
00FA 8091C000 lds R24,192
00FE 8460 ori R24,4
0100 8093C000 sts 192,R24
0104 .dbline 81
0104 ; checkoutError = 1;
0104 81E0 ldi R24,1
0106 80930000 sts _checkoutError,R24
010A .dbline 82
010A ; }
010A L17:
010A .dbline 83
010A ; receCount++; // 接收地址偏移寄存器加1.
010A 80910000 lds R24,_receCount
010E 8F5F subi R24,255 ; addi 1
0110 80930000 sts _receCount,R24
0114 .dbline 84
0114 ; receCount &= 0x0f; // 最多接受16个字节.
0114 8F70 andi R24,15
0116 80930000 sts _receCount,R24
011A .dbline 86
011A ; // PORTC ^= 0x02;
011A ; } //
011A L16:
011A L14:
011A .dbline -2
011A L12:
011A 2990 ld R2,y+
011C 2FBE out 0x3f,R2
011E F991 ld R31,y+
0120 E991 ld R30,y+
0122 9991 ld R25,y+
0124 8991 ld R24,y+
0126 0991 ld R16,y+
0128 2990 ld R2,y+
012A .dbline 0 ; func end
012A 1895 reti
012C .dbsym r tmp 16 c
012C .dbend
.area vector(rom, abs)
.org 40
0028 96C0 rjmp _uart0_udre_isr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -