📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\avr1\uart.c
.area data(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\avr1\uart.c
0000 _SprayNum::
0000 .blkb 2
.area idata
0000 7800 .word 120
.area data(ram, con, rel)
0002 .dbfile C:\DOCUME~1\Administrator\桌面\avr1\uart.c
0002 .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
0002 .dbsym e SprayNum _SprayNum I
0002 _CSprayCyc::
0002 .blkb 4
.area idata
0002 90D00300 .word 53392,3
.area data(ram, con, rel)
0006 .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
0006 .dbsym e CSprayCyc _CSprayCyc l
0006 _CSprayOn::
0006 .blkb 2
.area idata
0006 D007 .word 2000
.area data(ram, con, rel)
0008 .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
0008 .dbsym e CSprayOn _CSprayOn i
0008 _CPivDelay::
0008 .blkb 2
.area idata
0008 E803 .word 1000
.area data(ram, con, rel)
000A .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
000A .dbsym e CPivDelay _CPivDelay i
000A _T1OveForPump::
000A .blkb 2
.area idata
000A CA01 .word 458
.area data(ram, con, rel)
000C .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
000C .dbsym e T1OveForPump _T1OveForPump i
000C _T1OveCnt::
000C .blkb 1
.area idata
000C 00 .byte 0
.area data(ram, con, rel)
000D .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
000D .dbsym e T1OveCnt _T1OveCnt c
000D _ActFlag::
000D .blkb 1
.area idata
000D 00 .byte 0
.area data(ram, con, rel)
000E .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
000E .dbsym e ActFlag _ActFlag c
000E _IsLongCyc::
000E .blkb 1
.area idata
000E 01 .byte 1
.area data(ram, con, rel)
000F .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
000F .dbsym e IsLongCyc _IsLongCyc c
000F _HighByte::
000F .blkb 1
.area idata
000F 03 .byte 3
.area data(ram, con, rel)
0010 .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
0010 .dbsym e HighByte _HighByte c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\avr1\timer1.h
0000 .dbfile C:\DOCUME~1\Administrator\桌面\avr1\uart.c
0000 .dbfunc e FlashRxBuf _FlashRxBuf fV
.even
0000 _FlashRxBuf::
0000 .dbline -1
0000 .dbline 7
0000 ; #include <iom88v.h>
0000 ; #include <macros.h>
0000 ; #include <uart.h>
0000 ; #include <timer1.h>
0000 ;
0000 ; void FlashRxBuf(void)
0000 ; {
0000 .dbline 8
0000 ; rx_error0 = 0;
0000 2224 clr R2
0002 20920C00 sts _rx_error0,R2
0006 .dbline 9
0006 ; rx_counter0 = 0;
0006 20920D00 sts _rx_counter0,R2
000A .dbline 10
000A ; rx_rd_index0 = 0;
000A 20920E00 sts _rx_rd_index0,R2
000E .dbline 11
000E ; FrameHead0 = 0;
000E 20920B00 sts _FrameHead0,R2
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e uart0_init _uart0_init fV
.even
0014 _uart0_init::
0014 .dbline -1
0014 .dbline 20
0014 ; }
0014 ;
0014 ; //UART0 initialize
0014 ; // desired baud rate: 9600
0014 ; // actual: baud rate:9615 (0.2%)
0014 ; // char size: 8 bit
0014 ; // parity: Even
0014 ; void uart0_init(void)
0014 ; {
0014 .dbline 21
0014 ; UCSR0B = 0x00; //disable while setting baud rate
0014 2224 clr R2
0016 2092C100 sts 193,R2
001A .dbline 22
001A ; UCSR0A = 0x00;
001A 2092C000 sts 192,R2
001E .dbline 23
001E ; UCSR0C = 0x26;
001E 86E2 ldi R24,38
0020 8093C200 sts 194,R24
0024 .dbline 24
0024 ; UBRR0L = 0x33; //set baud rate lo
0024 83E3 ldi R24,51
0026 8093C400 sts 196,R24
002A .dbline 25
002A ; UBRR0H = 0x00; //set baud rate hi
002A 2092C500 sts 197,R2
002E .dbline 26
002E ; UCSR0B = 0xD8;
002E 88ED ldi R24,216
0030 8093C100 sts 193,R24
0034 .dbline 27
0034 ; FlashRxBuf();
0034 E5DF rcall _FlashRxBuf
0036 .dbline -2
0036 L2:
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbend
0038 .dbfunc e TestFrameHead _TestFrameHead fc
0038 ; data -> R16
.even
0038 _TestFrameHead::
0038 .dbline -1
0038 .dbline 33
0038 ; }
0038 ;
0038 ;
0038 ;
0038 ; char TestFrameHead(char data)
0038 ; {
0038 .dbline 34
0038 ; if(data == FRAMEFLAG1) //是否和设定的帧标志相等?有多种帧类型时,以或运算添加其他标志
0038 0F3F cpi R16,255
003A 11F4 brne L4
003C X0:
003C .dbline 35
003C ; return 1;
003C 01E0 ldi R16,1
003E 01C0 rjmp L3
0040 L4:
0040 .dbline 37
0040 ; else
0040 ; return 0;
0040 0027 clr R16
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\桌面\avr1\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 20900B00 lds R2,_FrameHead0
008A 2220 tst R2
008C 59F4 brne L9
008E X2:
008E 20900D00 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 A0920B00 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 E0910D00 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 80910D00 lds R24,_rx_counter0
00B8 8F5F subi R24,255 ; addi 1
00BA 282E mov R2,R24
00BC 20920D00 sts _rx_counter0,R2
00C0 8830 cpi R24,8
00C2 51F4 brne L8
00C4 X5:
00C4 .dbline 66
00C4 ; {
00C4 .dbline 67
00C4 ; rx_counter0 = 0;
00C4 2224 clr R2
00C6 20920D00 sts _rx_counter0,R2
00CA .dbline 68
00CA ; rx_error0 = 1;
00CA 81E0 ldi R24,1
00CC 80930C00 sts _rx_error0,R24
00D0 .dbline 69
00D0 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -