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

📄 uart-16sm.lis

📁 大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多功能
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module uart-16sm.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\+samples-16small\UART-16sm\uart-16sm.c
                        .area vector(rom, abs)
                        .org 44
 002C 0C940000          jmp _uart_rx_isr
                        .area text(rom, con, rel)
 0000                   .dbfile C:\+samples-16small\UART-16sm\uart-16sm.c
                        .area data(ram, con, rel)
 0000                   .dbfile C:\+samples-16small\UART-16sm\uart-16sm.c
 0000           _rec_head::
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .dbfile C:\+samples-16small\UART-16sm\uart-16sm.c
 0002                   .dbsym e rec_head _rec_head I
 0002           _rec_tail::
 0002                   .blkb 2
                        .area idata
 0002 0000              .word 0
                        .area data(ram, con, rel)
 0004                   .dbfile C:\+samples-16small\UART-16sm\uart-16sm.c
 0004                   .dbsym e rec_tail _rec_tail I
                        .area text(rom, con, rel)
 0000                   .dbfile C:\+samples-16small\UART-16sm\uart-16sm.c
 0000                   .dbfunc e uart_rx_isr _uart_rx_isr fV
                        .even
 0000           _uart_rx_isr::
 0000 2A92              st -y,R2
 0002 3A92              st -y,R3
 0004 8A93              st -y,R24
 0006 9A93              st -y,R25
 0008 EA93              st -y,R30
 000A FA93              st -y,R31
 000C 2FB6              in R2,0x3f
 000E 2A92              st -y,R2
 0010                   .dbline -1
 0010                   .dbline 52
 0010           ; // Title:             UART-16sm.c
 0010           ; // Operation:
 0010           ; //                        This program make echo to PC sending in Baudrate 38400
 0010           ; //                                     it receives sending from PC and sends the received one back to PC
 0010           ; //                            The LED group1 (the left one) makes counting on received data
 0010           ; //                            The LED group2 display the received data in binary
 0010           ; // Attention: A terminal program "Tera Term Pro" is contained in CD 
 0010           ; //                              for PC to communicate with the AVR Study Board        
 0010           ;        
 0010           ; /* UCSRA: Control & Status Register A
 0010           ;    b7-RXC:    USART receive complete
 0010           ;    b6-TXC:    USART transmit complete
 0010           ;    b5-UDRE:   USART Data register empty
 0010           ;    b4-FE:     Frame Error
 0010           ;    b3-DOR:  Data overtun
 0010           ;    b2-PE:     Parity error
 0010           ;    b1-U2X:    double the USART transmission speed
 0010           ;    b0-MPCM: multi-processor communication mode
 0010           ;    
 0010           ;    USARB
 0010           ; *  b7-RXCIE: RX complete interrupt enable
 0010           ;    b6-TXCIE: TX complete interrupt enable
 0010           ;    b5-UDRIE: USART data register empty interrupt enable
 0010           ; *  b4-RXEN:    Receiver enable
 0010           ; *  b3-TXEN:  Transmitter enable
 0010           ;    b2-UCSZ2: chracter size             ------->0
 0010           ;    b1-RXB8     receive data bit 8
 0010           ;    b0-TXB8:    Transmit data 8
 0010           ;    
 0010           ;    UCSRC
 0010           ; *  b7-URSEL: register select           0/UBRRH,         1/UCSRC
 0010           ;    b6-UMSEL: USART mode select         0/Asyn           1/Synchronous
 0010           ;    b5-UPM1:  -------- Parity mode 00/disable, 01 reserved
 0010           ;    b4-UPM0:    --------                         10 even,        11 odd 
 0010           ;    b3-USBS:   stop bit selection 0/1-bit, 1/2-bit
 0010           ; *  b2-UCSZ1                                      --------> 1
 0010           ; *  b1-UCSZ0                              --------> 1
 0010           ;    b0-UCPOL: clock polarity     0 rising XCK edge, 1 falling XCK edge  
 0010           ; */
 0010           ; 
 0010           ; 
 0010           ; #include <iom16v.h>
 0010           ; #include <macros.h>
 0010           ; 
 0010           ; #pragma interrupt_handler uart_rx_isr: 12
 0010           ; 
 0010           ; unsigned char RecBuf[40];
 0010           ; int rec_head=0, rec_tail=0;
 0010           ; unsigned rec_data;
 0010           ; 
 0010           ; void uart_rx_isr(void)
 0010           ; {
 0010                   .dbline 53
 0010           ;  RecBuf[rec_head]=UDR;
 0010 80E0              ldi R24,<_RecBuf
 0012 90E0              ldi R25,>_RecBuf
 0014 E0910000          lds R30,_rec_head
 0018 F0910100          lds R31,_rec_head+1
 001C E80F              add R30,R24
 001E F91F              adc R31,R25
 0020 2CB0              in R2,0xc
 0022 2082              std z+0,R2
 0024                   .dbline 54
 0024           ;  rec_head++;
 0024 80910000          lds R24,_rec_head
 0028 90910100          lds R25,_rec_head+1
 002C 0196              adiw R24,1
 002E 90930100          sts _rec_head+1,R25
 0032 80930000          sts _rec_head,R24
 0036                   .dbline 55
 0036           ;  if(rec_head>=40)
 0036 8832              cpi R24,40
 0038 E0E0              ldi R30,0
 003A 9E07              cpc R25,R30
 003C 34F0              brlt L2
 003E           X0:
 003E                   .dbline 56
 003E           ;       rec_head=0;                       
 003E 2224              clr R2
 0040 3324              clr R3
 0042 30920100          sts _rec_head+1,R3
 0046 20920000          sts _rec_head,R2
 004A           L2:
 004A                   .dbline -2
 004A           L1:
 004A                   .dbline 0 ; func end
 004A 2990              ld R2,y+
 004C 2FBE              out 0x3f,R2
 004E F991              ld R31,y+
 0050 E991              ld R30,y+
 0052 9991              ld R25,y+
 0054 8991              ld R24,y+
 0056 3990              ld R3,y+
 0058 2990              ld R2,y+
 005A 1895              reti
 005C                   .dbend
 005C                   .dbfunc e port_init _port_init fV
                        .even
 005C           _port_init::
 005C                   .dbline -1
 005C                   .dbline 60
 005C           ; }
 005C           ; 
 005C           ; void port_init(void)
 005C           ; {
 005C                   .dbline 61
 005C           ;  DDRA  = 0xFF;                //set PortA output
 005C 8FEF              ldi R24,255
 005E 8ABB              out 0x1a,R24
 0060                   .dbline 62
 0060           ;  DDRB  = 0xff;                //set PORTB output
 0060 87BB              out 0x17,R24
 0062                   .dbline 63
 0062           ;  DDRC  = 0x00;                //set PORTC output
 0062 2224              clr R2
 0064 24BA              out 0x14,R2
 0066                   .dbline 64
 0066           ;  PORTC = 0xff;
 0066 85BB              out 0x15,R24
 0068                   .dbline 65
 0068           ;  DDRD  = 0x7f;                //set PD.7 input for RX
 0068 8FE7              ldi R24,127
 006A 81BB              out 0x11,R24
 006C                   .dbline -2
 006C           L4:
 006C                   .dbline 0 ; func end
 006C 0895              ret
 006E                   .dbend
 006E                   .dbfunc e USART_init _USART_init fV
                        .even
 006E           _USART_init::
 006E 2297              sbiw R28,2
 0070                   .dbline -1
 0070                   .dbline 69
 0070           ; }
 0070           ; 
 0070           ; void USART_init(void)
 0070           ; {
 0070                   .dbline 70
 0070           ;  UCSRB=0x00;
 0070 2224              clr R2
 0072 2AB8              out 0xa,R2
 0074                   .dbline 71
 0074           ;  UCSRA=0x00;
 0074 2BB8              out 0xb,R2
 0076                   .dbline 72
 0076           ;  UCSRB=0b10011000;     //b7: RXCIE enabeled, b4: RXEN enabled, B3: TXEN enabled
 0076 88E9              ldi R24,152
 0078 8AB9              out 0xa,R24
 007A                   .dbline 73
 007A           ;  UBRRH=0x00;           //
 007A 20BC              out 0x20,R2
 007C                   .dbline 77
 007C           ;                                        //Crystal=16MHx
 007C           ;  //UBRRL=103;          //Bausdrate=9600 tested work fine
 007C           ;  //UBRRL=51;           //Baudrate=19200 tested work fine
 007C           ;  UBRRL=25;                     //Baudrate=38400 tested work fine
 007C 89E1              ldi R24,25
 007E 89B9              out 0x9,R24
 0080                   .dbline 79
 0080           ;  //UBRRL=8;                    //Baurate=115200 tested work fine
 0080           ;  UCSRC=0b10000110;     //Asyn, No parity, 1-stop, 8-bit, rising edge
 0080 86E8              ldi R24,134
 0082 80BD              out 0x20,R24
 0084                   .dbline 80
 0084           ;  memset(RecBuf, 0, sizeof(RecBuf));
 0084 88E2              ldi R24,40
 0086 90E0              ldi R25,0
 0088 9983              std y+1,R25
 008A 8883              std y+0,R24
 008C 2227              clr R18
 008E 3327              clr R19
 0090 00E0              ldi R16,<_RecBuf
 0092 10E0              ldi R17,>_RecBuf
 0094 0E940000          xcall _memset
 0098                   .dbline 81
 0098           ;  rec_head=0;
 0098 2224              clr R2
 009A 3324              clr R3
 009C 30920100          sts _rec_head+1,R3
 00A0 20920000          sts _rec_head,R2
 00A4                   .dbline 82
 00A4           ;  rec_tail=0;
 00A4 30920300          sts _rec_tail+1,R3
 00A8 20920200          sts _rec_tail,R2
 00AC                   .dbline -2
 00AC           L5:
 00AC                   .dbline 0 ; func end
 00AC 2296              adiw R28,2
 00AE 0895              ret
 00B0                   .dbend
 00B0                   .dbfunc e delay _delay fV

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -