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

📄 atmega16l_uart.lis

📁 电梯楼层采集器代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -