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

📄 sio.lis

📁 bootloader
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module sio.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\桌面\avr程序设计\串口通讯范例\sio.c
 0000                   .dbfunc e Com_init _Com_init fV
                        .even
 0000           _Com_init::
 0000                   .dbline -1
 0000                   .dbline 39
 0000           ; 
 0000           ; 
 0000           ; #include "config.h"
 0000           ; 
 0000           ; #if USEUART0
 0000           ; siocirqueue RTbuf_UART0;
 0000           ; #endif
 0000           ; #if USEUART1
 0000           ; siocirqueue RTbuf_UART1;
 0000           ; #endif
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; #if (CPU_TYPE == M32)||(CPU_TYPE == M16)||(CPU_TYPE == M8)
 0000           ; #define USEUART0  TRUE
 0000           ; #define USEUART1  FALSE
 0000           ; #define iv_USART0_RXC   iv_USART_RXC
 0000           ; #define iv_USART0_TXC   iv_USART_TXC
 0000           ; #define UDR0            UDR 
 0000           ; #define UCSR0A    UCSRA
 0000           ; #define UCSR0B    UCSRB
 0000           ; #define UCSR0C          UCSRC
 0000           ; #define UBRR0H          UBRRH
 0000           ; #define UBRR0L          UBRRL
 0000           ; #define RXCIE0          RXCIE
 0000           ; #define TXCIE0          TXCIE
 0000           ; #endif
 0000           ; 
 0000           ; 
 0000           ; /*********************************************************************************************************
 0000           ; ** 函数名称: Com_init
 0000           ; ** 功能描述: 初始化串行口
 0000           ; ** 输 入: 
 0000           ; ** 全局变量: 无
 0000           ; ** 调用模块: Com_baudrate
 0000           ; ** 说明:
 0000           ; ** 注意:
 0000           ; ********************************************************************************************************/
 0000           ; void Com_init (void) {        
 0000                   .dbline 43
 0000           ; //WDR(); //喂狗 
 0000           ; //CLI();                     // 关中断
 0000           ; #if USEUART0
 0000           ; Tbuf_init(&RTbuf_UART0);              //初始化接收缓冲
 0000 00E0              ldi R16,<_RTbuf_UART0
 0002 10E0              ldi R17,>_RTbuf_UART0
 0004 B9D0              xcall _Tbuf_init
 0006                   .dbline 44
 0006           ; Rbuf_init(&RTbuf_UART0);
 0006 00E0              ldi R16,<_RTbuf_UART0
 0008 10E0              ldi R17,>_RTbuf_UART0
 000A ADD0              xcall _Rbuf_init
 000C                   .dbline 45
 000C           ; UCSR0B = 0x00; //disable while setting baud rate
 000C 2224              clr R2
 000E 2AB8              out 0xa,R2
 0010                   .dbline 46
 0010           ; UCSR0A=0x00;
 0010 2BB8              out 0xb,R2
 0012                   .dbline 49
 0012           ; 
 0012           ; #if CPU_TYPE <= M32
 0012           ; UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
 0012 86E8              ldi R24,134
 0014 80BD              out 0x20,R24
 0016                   .dbline 50
 0016           ; UCSR0B = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);  // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1
 0016 88ED              ldi R24,216
 0018 8AB9              out 0xa,R24
 001A                   .dbline 67
 001A           ; #else
 001A           ; UCSR0C=0x06;  //8 DATA ,1 STOP, NO PARITY
 001A           ; UCSR0B = (1<<RXCIE0)|(1<<TXCIE0)|(1<<RXEN0)|(1<<TXEN0);  // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1
 001A           ; #endif
 001A           ; 
 001A           ; #endif
 001A           ; 
 001A           ; 
 001A           ; #if USEUART1
 001A           ; Tbuf_init(&RTbuf_B);              //初始化接收缓冲
 001A           ; Rbuf_init(&RTbuf_B);
 001A           ; UCSR1B = 0x00; //disable while setting baud rate
 001A           ; UCSR1A = 0x00;
 001A           ; UCSR1C = 0x06;
 001A           ; UCSR1B = 0xD8;
 001A           ; #endif
 001A           ; Com_baudrate (9600);           // 
 001A 00E8              ldi R16,9600
 001C 15E2              ldi R17,37
 001E 01D0              xcall _Com_baudrate
 0020                   .dbline -2
 0020           L2:
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbend
 0022                   .dbfunc e Com_baudrate _Com_baudrate fV
 0022           ;            tmp -> R10,R11
 0022           ;       baudrate -> R10,R11
                        .even
 0022           _Com_baudrate::
 0022 0E940000          xcall push_gset3
 0026 5801              movw R10,R16
 0028                   .dbline -1
 0028                   .dbline 80
 0028           ; 
 0028           ; //SEI();                     // 开中断
 0028           ; }
 0028           ; /*********************************************************************************************************
 0028           ; ** 函数名称: Com_baudrate
 0028           ; ** 功能描述: 利用定时器T1产生由参数baudrate指定的波特率
 0028           ; ** 输 入: baudrate指定的波特率
 0028           ; ** 全局变量: 无
 0028           ; ** 调用模块: 无
 0028           ; ** 说明:
 0028           ; ** 注意:
 0028           ; ********************************************************************************************************/
 0028           ; void Com_baudrate (uint16 baudrate) {
 0028                   .dbline 82
 0028           ; uint16 tmp;
 0028           ; tmp= F_CPU/baudrate/16-1;
 0028 1501              movw R2,R10
 002A 4424              clr R4
 002C 5524              clr R5
 002E 40E0              ldi R20,0
 0030 50E8              ldi R21,128
 0032 60E7              ldi R22,112
 0034 70E0              ldi R23,0
 0036 5A92              st -y,R5
 0038 4A92              st -y,R4
 003A 3A92              st -y,R3
 003C 2A92              st -y,R2
 003E 8A01              movw R16,R20
 0040 9B01              movw R18,R22
 0042 0E940000          xcall div32s
 0046 40E1              ldi R20,16
 0048 50E0              ldi R21,0
 004A 60E0              ldi R22,0
 004C 70E0              ldi R23,0
 004E 7A93              st -y,R23
 0050 6A93              st -y,R22
 0052 5A93              st -y,R21
 0054 4A93              st -y,R20
 0056 0E940000          xcall div32s
 005A 1801              movw R2,R16
 005C 2901              movw R4,R18
 005E 41E0              ldi R20,1
 0060 50E0              ldi R21,0
 0062 60E0              ldi R22,0
 0064 70E0              ldi R23,0
 0066 241A              sub R2,R20
 0068 350A              sbc R3,R21
 006A 460A              sbc R4,R22
 006C 570A              sbc R5,R23
 006E 5101              movw R10,R2
 0070                   .dbline 84
 0070           ; #if USEUART0
 0070           ; UBRR0H=(uint8)(tmp>>8);
 0070 232C              mov R2,R3
 0072 3324              clr R3
 0074 20BC              out 0x20,R2
 0076                   .dbline 85
 0076           ; UBRR0L=(uint8)tmp;
 0076 A9B8              out 0x9,R10
 0078                   .dbline -2
 0078           L3:
 0078 0E940000          xcall pop_gset3
 007C                   .dbline 0 ; func end
 007C 0895              ret
 007E                   .dbsym r tmp 10 i
 007E                   .dbsym r baudrate 10 i
 007E                   .dbend
 007E                   .dbfunc e Com_putchar _Com_putchar fc
 007E                   .dbstruct 0 28 .1
 007E                   .dbfield 0 R_front c
 007E                   .dbfield 1 R_rear c
 007E                   .dbfield 2 R_count c
 007E                   .dbfield 3 R_overflow c
 007E                   .dbfield 4 R_buf A[10:10]c
 007E                   .dbfield 14 T_front c
 007E                   .dbfield 15 T_rear c
 007E                   .dbfield 16 T_count c
 007E                   .dbfield 17 T_buf A[10:10]c
 007E                   .dbfield 27 T_disabled c
 007E                   .dbend
 007E           ;          RTbuf -> R22,R23
 007E           ;              c -> R20
                        .even
 007E           _Com_putchar::
 007E 0E940000          xcall push_gset2
 0082 B901              movw R22,R18
 0084 402F              mov R20,R16
 0086                   .dbline -1
 0086                   .dbline 102
 0086           ; #endif
 0086           ; #if USEUART1
 0086           ; UBRR1H=(uint8)(tmp>>8);
 0086           ; UBRR1L=(uint8)tmp;
 0086           ; #endif
 0086           ; }
 0086           ; /*********************************************************************************************************
 0086           ; ** 函数名称: Com_putchar
 0086           ; ** 功能描述: 从串行口输出一个字符c
 0086           ; ** 输 入: c:输出字符
 0086           ; ** 输出        : 0:失败 1:成功
 0086           ; ** 全局变量: 无
 0086           ; ** 调用模块: 
 0086           ; ** 说明:
 0086           ; ** 注意:
 0086           ; ********************************************************************************************************/
 0086           ; uint8 Com_putchar (uint8 c,siocirqueue *RTbuf) {
 0086                   .dbline 104
 0086           ; //WDR(); //喂狗
 0086           ; if (Tbuf_full(RTbuf)) 
 0086 8B01              movw R16,R22
 0088 91D0              xcall _Tbuf_full
 008A 0023              tst R16
 008C 11F0              breq L5
 008E                   .dbline 105
 008E           ;    return(0);
 008E 0027              clr R16
 0090 04C0              xjmp L4
 0092           L5:
 0092                   .dbline 106
 0092           ; else{
 0092                   .dbline 107
 0092           ;       Tbuf_putchar(c,RTbuf);                          // 将数据加入到发送缓冲区并开中断
 0092 9B01              movw R18,R22
 0094 042F              mov R16,R20
 0096 99D0              xcall _Tbuf_putchar
 0098                   .dbline 108
 0098           ;       return(1);
 0098 01E0              ldi R16,1
 009A                   .dbline -2
 009A           L4:
 009A 0E940000          xcall pop_gset2
 009E                   .dbline 0 ; func end
 009E 0895              ret
 00A0                   .dbsym r RTbuf 22 pS[.1]
 00A0                   .dbsym r c 20 c
 00A0                   .dbend
 00A0                   .dbfunc e Com_putstring _Com_putstring fV
 00A0           ;              i -> R12
 00A0           ;          RTbuf -> R22,R23
 00A0           ;            len -> R10
 00A0           ;              p -> R20,R21
                        .even
 00A0           _Com_putstring::
 00A0 0E940000          xcall push_gset4
 00A4 A22E              mov R10,R18
 00A6 A801              movw R20,R16
 00A8 6885              ldd R22,y+8
 00AA 7985              ldd R23,y+9
 00AC                   .dbline -1
 00AC                   .dbline 121
 00AC           ;       }
 00AC           ; }
 00AC           ; /*********************************************************************************************************
 00AC           ; ** 函数名称: Com_putstring
 00AC           ; ** 功能描述: 从串行口输出一个字符串
 00AC           ; ** 输 入: p:指向输出字符串 len:输出长度
 00AC           ; ** 输出        : 
 00AC           ; ** 全局变量: 无
 00AC           ; ** 调用模块: 
 00AC           ; ** 说明:
 00AC           ; ** 注意:
 00AC           ; ********************************************************************************************************/
 00AC           ; void Com_putstring (uint8 *p,uint8 len,siocirqueue *RTbuf) {
 00AC                   .dbline 124
 00AC           ; uint8 i;
 00AC           ; //WDR(); //喂狗
 00AC           ; if (len!=0 ){
 00AC AA20              tst R10
 00AE 79F0              breq L21
 00B0                   .dbline 124
 00B0                   .dbline 125
 00B0           ;       for(i=0;i<len;i++)
 00B0 CC24              clr R12
 00B2 0AC0              xjmp L13
 00B4           L14:
 00B4                   .dbline 126
 00B4           L15:
 00B4                   .dbline 126
 00B4 9B01              movw R18,R22
 00B6 EC2D              mov R30,R12
 00B8 FF27              clr R31
 00BA E40F              add R30,R20
 00BC F51F              adc R31,R21
 00BE 0081              ldd R16,z+0
 00C0 DEDF              xcall _Com_putchar
 00C2 0023              tst R16
 00C4 B9F3              breq L14
 00C6           L11:
 00C6                   .dbline 125
 00C6 C394              inc R12
 00C8           L13:
 00C8                   .dbline 125
 00C8 CA14              cp R12,R10
 00CA A0F3              brlo L15
 00CC                   .dbline 127
 00CC           ;       while(Com_putchar(p[i],RTbuf)==0);//WDR(); //喂狗;
 00CC           ;       }
 00CC 0BC0              xjmp L9
 00CE           X0:
 00CE                   .dbline 128

⌨️ 快捷键说明

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