📄 atmega16l_uart.lis
字号:
0026 3490 lpm R3,Z
0028 2501 movw R4,R10
002A 542C mov R5,R4
002C 4424 clr R4
002E 4224 eor R4,R2
0030 5324 eor R5,R3
0032 F801 movw R30,R16
0034 5182 std z+1,R5
0036 4082 std z+0,R4
0038 .dbline -2
0038 L2:
0038 .dbline 0 ; func end
0038 B990 ld R11,y+
003A A990 ld R10,y+
003C 0895 ret
003E .dbsym r tmp 10 i
003E .dbsym r chr 18 c
003E .dbsym r crc 16 pi
003E .dbend
003E .dbfunc e Uart0_Init _Uart0_Init fV
.even
003E _Uart0_Init::
003E .dbline -1
003E .dbline 299
003E ; }
003E ;
003E ; //------------------------------------------------------------------------------
003E ; //串口初始化
003E ; void Uart0_Init(void)
003E ; {
003E .dbline 300
003E ; UCSRB = 0x00; //disable while setting baud rate
003E 2224 clr R2
0040 2AB8 out 0xa,R2
0042 .dbline 301
0042 ; UCSRA = 0x00;
0042 2BB8 out 0xb,R2
0044 .dbline 303
0044 ; /*设置帧格式:8个数据位 1个停止位*/
0044 ; UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
0044 86E8 ldi R24,134
0046 80BD out 0x20,R24
0048 .dbline 305
0048 ; /*设置波特率 9600*/
0048 ; UBRRL = 0x67; //set baud rate lo
0048 87E6 ldi R24,103
004A 89B9 out 0x9,R24
004C .dbline 306
004C ; UBRRH = 0x00; //set baud rate hi
004C 20BC out 0x20,R2
004E .dbline 308
004E ; /*接收结束中断使能/发送结束中断使能/接收器与发送器使能*/
004E ; UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
004E 88ED ldi R24,216
0050 8AB9 out 0xa,R24
0052 .dbline -2
0052 L3:
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbend
.area vector(rom, abs)
.org 44
002C 0C942A00 jmp _Uart0_rx_isr
.area text(rom, con, rel)
0054 .dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ATmega16L_Uart.C
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ATmega16L_Uart.C
0000 L5:
0000 .blkb 1
0001 L6:
0001 .blkb 2
0003 L7:
0003 .blkb 2
0005 L8:
0005 .blkb 2
.area text(rom, con, rel)
0054 .dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ATmega16L_Uart.C
0054 .dbfunc e Uart0_rx_isr _Uart0_rx_isr fV
0054 .dbstruct 0 260 StructOfProtocol
0054 .dbfield 0 Address c
0054 .dbfield 1 Length i
0054 .dbfield 3 Command c
0054 .dbfield 4 Data A[256:256]c
0054 .dbend
0054 .dbstruct 0 4 data
0054 .dbfield 0 pc_rxd c
0054 .dbfield 1 pc_txd c
0054 .dbfield 2 c51_rxd c
0054 .dbfield 3 c51_txd c
0054 .dbend
0054 .dbsym s p_uart L8 pc
0054 .dbsym s Count L7 i
0054 .dbsym s CRC L6 i
0054 .dbsym s Status L5 c
0054 ; communication -> R10,R11
0054 ; p_buf -> R20,R21
0054 ; tmp -> R22
.even
0054 _Uart0_rx_isr::
0054 0A92 st -y,R0
0056 1A92 st -y,R1
0058 2A92 st -y,R2
005A 3A92 st -y,R3
005C 4A92 st -y,R4
005E 5A92 st -y,R5
0060 6A92 st -y,R6
0062 7A92 st -y,R7
0064 8A92 st -y,R8
0066 9A92 st -y,R9
0068 0A93 st -y,R16
006A 1A93 st -y,R17
006C 2A93 st -y,R18
006E 3A93 st -y,R19
0070 8A93 st -y,R24
0072 9A93 st -y,R25
0074 AA93 st -y,R26
0076 BA93 st -y,R27
0078 EA93 st -y,R30
007A FA93 st -y,R31
007C 0FB6 in R0,0x3f
007E 0A92 st -y,R0
0080 0E940000 xcall push_xgsetF03C
0084 .dbline -1
0084 .dbline 315
0084 ; }
0084 ;
0084 ; //------------------------------------------------------------------------------
0084 ; //接收数据
0084 ; #pragma interrupt_handler Uart0_rx_isr:12
0084 ; void Uart0_rx_isr(void)
0084 ; {
0084 .dbline 322
0084 ; unsigned char tmp;
0084 ; static unsigned char Status;
0084 ; static unsigned int CRC,Count;
0084 ; static unsigned char *p_uart;
0084 ; struct StructOfProtocol *p_buf;
0084 ; struct data *communication;
0084 ; tmp = UDR; //接收数据
0084 6CB1 in R22,0xc
0086 .dbline 323
0086 ; switch (Status)
0086 40910000 lds R20,L5
008A 5527 clr R21
008C 4030 cpi R20,0
008E 4507 cpc R20,R21
0090 41F1 breq L12
0092 X0:
0092 4130 cpi R20,1
0094 E0E0 ldi R30,0
0096 5E07 cpc R21,R30
0098 79F1 breq L13
009A X1:
009A 4230 cpi R20,2
009C E0E0 ldi R30,0
009E 5E07 cpc R21,R30
00A0 09F4 brne X18
00A2 45C0 xjmp L18
00A4 X18:
00A4 X2:
00A4 4330 cpi R20,3
00A6 E0E0 ldi R30,0
00A8 5E07 cpc R21,R30
00AA 09F4 brne X19
00AC 58C0 xjmp L21
00AE X19:
00AE X3:
00AE 4430 cpi R20,4
00B0 E0E0 ldi R30,0
00B2 5E07 cpc R21,R30
00B4 09F4 brne X20
00B6 66C0 xjmp L22
00B8 X20:
00B8 X4:
00B8 4530 cpi R20,5
00BA E0E0 ldi R30,0
00BC 5E07 cpc R21,R30
00BE 09F4 brne X21
00C0 74C0 xjmp L23
00C2 X21:
00C2 X5:
00C2 4630 cpi R20,6
00C4 E0E0 ldi R30,0
00C6 5E07 cpc R21,R30
00C8 09F4 brne X22
00CA 98C0 xjmp L26
00CC X22:
00CC X6:
00CC 4730 cpi R20,7
00CE E0E0 ldi R30,0
00D0 5E07 cpc R21,R30
00D2 09F4 brne X23
00D4 B4C0 xjmp L29
00D6 X23:
00D6 X7:
00D6 4830 cpi R20,8
00D8 E0E0 ldi R30,0
00DA 5E07 cpc R21,R30
00DC 09F4 brne X24
00DE B9C0 xjmp L30
00E0 X24:
00E0 X8:
00E0 D6C0 xjmp L9
00E2 L12:
00E2 .dbline 326
00E2 ; {
00E2 ; case 0: /*接收初始化*/
00E2 ; Count = 0; /*清计数器*/
00E2 2224 clr R2
00E4 3324 clr R3
00E6 30920400 sts L7+1,R3
00EA 20920300 sts L7,R2
00EE .dbline 327
00EE ; Status++;
00EE 80910000 lds R24,L5
00F2 8F5F subi R24,255 ; addi 1
00F4 80930000 sts L5,R24
00F8 L13:
00F8 .dbline 329
00F8 ; case 1: /*引导码接收*/
00F8 ; if (tmp == BOOT_CODE) /*引导码字符确认*/
00F8 6E3F cpi R22,254
00FA A9F4 brne L14
00FC X9:
00FC .dbline 330
00FC ; {
00FC .dbline 331
00FC ; if (++Count >= 2) Status++; /*引导码长度确认*/
00FC 80910300 lds R24,L7
0100 90910400 lds R25,L7+1
0104 0196 adiw R24,1
0106 1C01 movw R2,R24
0108 30920400 sts L7+1,R3
010C 20920300 sts L7,R2
0110 8230 cpi R24,2
0112 E0E0 ldi R30,0
0114 9E07 cpc R25,R30
0116 08F4 brsh X25
0118 BDC0 xjmp L10
011A X25:
011A X10:
011A .dbline 331
011A 80910000 lds R24,L5
011E 8F5F subi R24,255 ; addi 1
0120 80930000 sts L5,R24
0124 .dbline 332
0124 ; }
0124 B7C0 xjmp L10
0126 L14:
0126 .dbline 333
0126 ; else Status = 0;
0126 2224 clr R2
0128 20920000 sts L5,R2
012C .dbline 334
012C ; break;
012C B3C0 xjmp L10
012E L18:
012E .dbline 336
012E ; case 2: /*设备号接收*/
012E ; if (tmp == DEVICE_NUMBER) /*设备号确认*/
012E 6230 cpi R22,2
0130 91F4 brne L19
0132 X11:
0132 .dbline 337
0132 ; {
0132 .dbline 338
0132 ; CRC = 0xffff; /*初始化校验码*/
0132 8FEF ldi R24,65535
0134 9FEF ldi R25,255
0136 90930200 sts L6+1,R25
013A 80930100 sts L6,R24
013E .dbline 339
013E ; p_uart = Buffer485; /*初始化数据接收指针*/
013E 80E0 ldi R24,<_Buffer485
0140 90E0 ldi R25,>_Buffer485
0142 90930600 sts L8+1,R25
0146 80930500 sts L8,R24
014A .dbline 340
014A ; Status++;
014A 80910000 lds R24,L5
014E 8F5F subi R24,255 ; addi 1
0150 80930000 sts L5,R24
0154 .dbline 341
0154 ; }
0154 9FC0 xjmp L10
0156 L19:
0156 .dbline 342
0156 ; else Status = 0;
0156 2224 clr R2
0158 20920000 sts L5,R2
015C .dbline 343
015C ; break;
015C 9BC0 xjmp L10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -