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

📄 uart.lis

📁 双龙公司开发版源程序
💻 LIS
字号:
                        .module uart.c
                        .area data(ram, con, rel)
 0000           _rd_index::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
 0001                   .dbsym e rd_index _rd_index c
 0001           _wr_index::
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002                   .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
 0002                   .dbsym e wr_index _wr_index c
                        .area vector(rom, abs)
                        .org 22
 0016 00C0              rjmp _uart_rxc
                        .area data(ram, con, rel)
 0002                   .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
 0000                   .dbfunc e uart_rxc _uart_rxc fV
                        .even
 0000           _uart_rxc::
 0000 2A92              st -y,R2
 0002 8A93              st -y,R24
 0004 9A93              st -y,R25
 0006 EA93              st -y,R30
 0008 FA93              st -y,R31
 000A 2FB6              in R2,0x3f
 000C 2A92              st -y,R2
 000E                   .dbline -1
 000E                   .dbline 19
 000E           ; /******************************************/
 000E           ; /*           广州天河双龙电子公司         */
 000E           ; /*           http://www.sl.com.cn         */
 000E           ; /*        RS232通信驱动程序(中断方式)     */ 
 000E           ; /*            作者:ntzwq@wx88.net         */
 000E           ; /*               2003年3月28日            */
 000E           ; /*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
 000E           ; /******************************************/
 000E           ; #include <iom8v.h>
 000E           ; #include "Twi.h"
 000E           ; #define fosc 8000000 //晶振8MHZ
 000E           ; #define baud 19200     //波特率
 000E           ; #define buffsize 64
 000E           ; unsigned char buff[buffsize];
 000E           ; unsigned char rd_index=0;
 000E           ; unsigned char wr_index=0;
 000E           ; #pragma interrupt_handler uart_rxc:iv_USART_RXC
 000E           ; void uart_rxc(void)
 000E           ; {
 000E                   .dbline 20
 000E           ;  buff[wr_index]=UDR;
 000E 80E0              ldi R24,<_buff
 0010 90E0              ldi R25,>_buff
 0012 E0910100          lds R30,_wr_index
 0016 FF27              clr R31
 0018 E80F              add R30,R24
 001A F91F              adc R31,R25
 001C 2CB0              in R2,0xc
 001E 2082              std z+0,R2
 0020                   .dbline 21
 0020           ;  if(wr_index<(buffsize-1))
 0020 80910100          lds R24,_wr_index
 0024 8F33              cpi R24,63
 0026 20F4              brsh L2
 0028                   .dbline 22
 0028           ;     wr_index++;
 0028 8F5F              subi R24,255    ; addi 1
 002A 80930100          sts _wr_index,R24
 002E 03C0              rjmp L3
 0030           L2:
 0030                   .dbline 24
 0030           ;  else
 0030           ;     wr_index=0; 
 0030 2224              clr R2
 0032 20920100          sts _wr_index,R2
 0036           L3:
 0036                   .dbline 25
 0036           ;  TWI_STATE=TWI_WR;//接收数据进入主机传输状态                  
 0036 80EF              ldi R24,240
 0038 80930000          sts _TWI_STATE,R24
 003C                   .dbline -2
 003C                   .dbline 26
 003C           ; }
 003C           L1:
 003C 2990              ld R2,y+
 003E 2FBE              out 0x3f,R2
 0040 F991              ld R31,y+
 0042 E991              ld R30,y+
 0044 9991              ld R25,y+
 0046 8991              ld R24,y+
 0048 2990              ld R2,y+
 004A                   .dbline 0 ; func end
 004A 1895              reti
 004C                   .dbend
 004C                   .dbfunc e putchar _putchar fV
 004C           ;              c -> R16
                        .even
 004C           _putchar::
 004C                   .dbline -1
 004C                   .dbline 29
 004C           ; /*            字符输出函数             */
 004C           ; void putchar(unsigned char c)
 004C           ;       {        
 004C           L5:
 004C                   .dbline 30
 004C           L6:
 004C                   .dbline 30
 004C           ;      while (!(UCSRA&(1<<UDRE)));
 004C 5D9B              sbis 0xb,5
 004E FECF              rjmp L5
 0050                   .dbline 31
 0050           ;        UDR=c;    
 0050 0CB9              out 0xc,R16
 0052                   .dbline -2
 0052                   .dbline 32
 0052           ;       }
 0052           L4:
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r c 16 c
 0054                   .dbend
 0054                   .dbfunc e getchar _getchar fc
 0054           ;           temp -> R16
                        .even
 0054           _getchar::
 0054                   .dbline -1
 0054                   .dbline 35
 0054           ; /*            字符输入函数             */     
 0054           ; unsigned char getchar(void)
 0054           ;  {
 0054                   .dbline 37
 0054           ;        unsigned char temp;
 0054           ;        if(wr_index==rd_index)
 0054 20900000          lds R2,_rd_index
 0058 30900100          lds R3,_wr_index
 005C 3214              cp R3,R2
 005E 11F4              brne L9
 0060                   .dbline 38
 0060           ;           temp=0;
 0060 0027              clr R16
 0062 13C0              rjmp L10
 0064           L9:
 0064                   .dbline 40
 0064           ;        else
 0064           ;          {
 0064                   .dbline 41
 0064           ;           temp=buff[rd_index];
 0064 80E0              ldi R24,<_buff
 0066 90E0              ldi R25,>_buff
 0068 E0910000          lds R30,_rd_index
 006C FF27              clr R31
 006E E80F              add R30,R24
 0070 F91F              adc R31,R25
 0072 0081              ldd R16,z+0
 0074                   .dbline 42
 0074           ;               if(rd_index<(buffsize-1))
 0074 80910000          lds R24,_rd_index
 0078 8F33              cpi R24,63
 007A 20F4              brsh L11
 007C                   .dbline 43
 007C           ;          rd_index++;
 007C 8F5F              subi R24,255    ; addi 1
 007E 80930000          sts _rd_index,R24
 0082 03C0              rjmp L12
 0084           L11:
 0084                   .dbline 45
 0084           ;         else
 0084           ;            rd_index=0;        
 0084 2224              clr R2
 0086 20920000          sts _rd_index,R2
 008A           L12:
 008A                   .dbline 46
 008A           ;          }  
 008A           L10:
 008A                   .dbline 47
 008A           ;       return temp;   
 008A                   .dbline -2
 008A           L8:
 008A                   .dbline 0 ; func end
 008A 0895              ret
 008C                   .dbsym r temp 16 c
 008C                   .dbend
 008C                   .dbfunc e puts _puts fV
 008C           ;              s -> R20,R21
                        .even
 008C           _puts::
 008C 00D0              rcall push_gset1
 008E A801              movw R20,R16
 0090                   .dbline -1
 0090                   .dbline 51
 0090           ;  }            
 0090           ; /*                    字符串输出函数           */     
 0090           ; void puts(char *s)
 0090           ;       {
 0090 05C0              rjmp L15
 0092           L14:
 0092                   .dbline 53
 0092                   .dbline 54
 0092 FA01              movw R30,R20
 0094 0081              ldd R16,z+0
 0096 DADF              rcall _putchar
 0098                   .dbline 55
 0098 4F5F              subi R20,255  ; offset = 1
 009A 5F4F              sbci R21,255
 009C                   .dbline 56
 009C           L15:
 009C                   .dbline 52
 009C           ;       while (*s)
 009C FA01              movw R30,R20
 009E 2080              ldd R2,z+0
 00A0 2220              tst R2
 00A2 B9F7              brne L14
 00A4                   .dbline 57
 00A4           ;               {
 00A4           ;               putchar(*s);
 00A4           ;               s++;
 00A4           ;               }       
 00A4           ;     putchar(0x0a);//回车换行
 00A4 0AE0              ldi R16,10
 00A6 D2DF              rcall _putchar
 00A8                   .dbline 58
 00A8           ;       putchar(0x0d);
 00A8 0DE0              ldi R16,13
 00AA D0DF              rcall _putchar
 00AC                   .dbline -2
 00AC                   .dbline 59
 00AC           ;       }
 00AC           L13:
 00AC 00D0              rcall pop_gset1
 00AE                   .dbline 0 ; func end
 00AE 0895              ret
 00B0                   .dbsym r s 20 pc
 00B0                   .dbend
 00B0                   .dbfunc e uart_init _uart_init fV
                        .even
 00B0           _uart_init::
 00B0                   .dbline -1
 00B0                   .dbline 62
 00B0           ; /*                    UART初始化                              */      
 00B0           ; void uart_init(void)
 00B0           ; {
 00B0                   .dbline 64
 00B0           ;  //OSCCAL=read_flash(0x1f20);
 00B0           ;  UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送、接收及接收中断
 00B0 88E9              ldi R24,152
 00B2 8AB9              out 0xa,R24
 00B4                   .dbline 65
 00B4           ;  UBRRL=(fosc/16/(baud+1))%256;
 00B4 8AE1              ldi R24,26
 00B6 89B9              out 0x9,R24
 00B8                   .dbline 66
 00B8           ;  UBRRH=(fosc/16/(baud+1))/256;
 00B8 2224              clr R2
 00BA 20BC              out 0x20,R2
 00BC                   .dbline 67
 00BC           ;  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
 00BC 86E8              ldi R24,134
 00BE 80BD              out 0x20,R24
 00C0                   .dbline -2
 00C0                   .dbline 68
 00C0           ; }
 00C0           L17:
 00C0                   .dbline 0 ; func end
 00C0 0895              ret
 00C2                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
 0000           _buff::
 0000                   .blkb 64
 0040                   .dbsym e buff _buff A[64:64]c

⌨️ 快捷键说明

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