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

📄 sio.lis

📁 ATMEGA128的PCF8536驱动程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module sio.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\sio.c
 0000                   .dbfunc e Com_init _Com_init fV
                        .even
 0000           _Com_init::
 0000                   .dbline -1
 0000                   .dbline 43
 0000           ; /************************************************
 0000           ; 文件:sio.c
 0000           ; 用途:结构化串口通信程序
 0000           ; 注意:
 0000           ; 创建:2008.1.26
 0000           ; 修改:2008.1.26
 0000           ; Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
 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           ; #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 47
 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 BBD0              xcall _Tbuf_init
 0006                   .dbline 48
 0006           ; Rbuf_init(&RTbuf_UART0);
 0006 00E0              ldi R16,<_RTbuf_UART0
 0008 10E0              ldi R17,>_RTbuf_UART0
 000A AFD0              xcall _Rbuf_init
 000C                   .dbline 49
 000C           ; UCSR0B = 0x00; //disable while setting baud rate
 000C 2224              clr R2
 000E 2AB8              out 0xa,R2
 0010                   .dbline 50
 0010           ; UCSR0A=0x00;
 0010 2BB8              out 0xb,R2
 0012                   .dbline 56
 0012           ; 
 0012           ; #if CPU_TYPE <= M32
 0012           ; UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
 0012           ; UCSR0B = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);  // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1
 0012           ; #else
 0012           ; UCSR0C=0x06;  //8 DATA ,1 STOP, NO PARITY
 0012 86E0              ldi R24,6
 0014 80939500          sts 149,R24
 0018                   .dbline 57
 0018           ; UCSR0B = (1<<RXCIE0)|(1<<TXCIE0)|(1<<RXEN0)|(1<<TXEN0);  // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1
 0018 88ED              ldi R24,216
 001A 8AB9              out 0xa,R24
 001C                   .dbline 71
 001C           ; #endif
 001C           ; 
 001C           ; #endif
 001C           ; 
 001C           ; 
 001C           ; #if USEUART1
 001C           ; Tbuf_init(&RTbuf_B);              //初始化接收缓冲
 001C           ; Rbuf_init(&RTbuf_B);
 001C           ; UCSR1B = 0x00; //disable while setting baud rate
 001C           ; UCSR1A = 0x00;
 001C           ; UCSR1C = 0x06;
 001C           ; UCSR1B = 0xD8;
 001C           ; #endif
 001C           ; Com_baudrate (9600);           // 
 001C 00E8              ldi R16,9600
 001E 15E2              ldi R17,37
 0020 01D0              xcall _Com_baudrate
 0022                   .dbline -2
 0022           L2:
 0022                   .dbline 0 ; func end
 0022 0895              ret
 0024                   .dbend
 0024                   .dbfunc e Com_baudrate _Com_baudrate fV
 0024           ;            tmp -> R10,R11
 0024           ;       baudrate -> R10,R11
                        .even
 0024           _Com_baudrate::
 0024 0E940000          xcall push_gset3
 0028 5801              movw R10,R16
 002A                   .dbline -1
 002A                   .dbline 84
 002A           ; 
 002A           ; //SEI();                     // 开中断
 002A           ; }
 002A           ; /*********************************************************************************************************
 002A           ; ** 函数名称: Com_baudrate
 002A           ; ** 功能描述: 利用定时器T1产生由参数baudrate指定的波特率
 002A           ; ** 输 入: baudrate指定的波特率
 002A           ; ** 全局变量: 无
 002A           ; ** 调用模块: 无
 002A           ; ** 说明:
 002A           ; ** 注意:
 002A           ; ********************************************************************************************************/
 002A           ; void Com_baudrate (unsigned int baudrate) {
 002A                   .dbline 86
 002A           ; unsigned int tmp;
 002A           ; tmp= F_CPU/baudrate/16-1;
 002A 1501              movw R2,R10
 002C 4424              clr R4
 002E 5524              clr R5
 0030 40E0              ldi R20,0
 0032 52E1              ldi R21,18
 0034 6AE7              ldi R22,122
 0036 70E0              ldi R23,0
 0038 5A92              st -y,R5
 003A 4A92              st -y,R4
 003C 3A92              st -y,R3
 003E 2A92              st -y,R2
 0040 8A01              movw R16,R20
 0042 9B01              movw R18,R22
 0044 0E940000          xcall div32s
 0048 40E1              ldi R20,16
 004A 50E0              ldi R21,0
 004C 60E0              ldi R22,0
 004E 70E0              ldi R23,0
 0050 7A93              st -y,R23
 0052 6A93              st -y,R22
 0054 5A93              st -y,R21
 0056 4A93              st -y,R20
 0058 0E940000          xcall div32s
 005C 1801              movw R2,R16
 005E 2901              movw R4,R18
 0060 41E0              ldi R20,1
 0062 50E0              ldi R21,0
 0064 60E0              ldi R22,0
 0066 70E0              ldi R23,0
 0068 241A              sub R2,R20
 006A 350A              sbc R3,R21
 006C 460A              sbc R4,R22
 006E 570A              sbc R5,R23
 0070 5101              movw R10,R2
 0072                   .dbline 88
 0072           ; #if USEUART0
 0072           ; UBRR0H=(unsigned char)(tmp>>8);
 0072 232C              mov R2,R3
 0074 3324              clr R3
 0076 20929000          sts 144,R2
 007A                   .dbline 89
 007A           ; UBRR0L=(unsigned char)tmp;
 007A A9B8              out 0x9,R10
 007C                   .dbline -2
 007C           L3:
 007C 0E940000          xcall pop_gset3
 0080                   .dbline 0 ; func end
 0080 0895              ret
 0082                   .dbsym r tmp 10 i
 0082                   .dbsym r baudrate 10 i
 0082                   .dbend
 0082                   .dbfunc e Com_putchar _Com_putchar fc
 0082                   .dbstruct 0 208 .1
 0082                   .dbfield 0 R_front c
 0082                   .dbfield 1 R_rear c
 0082                   .dbfield 2 R_count c
 0082                   .dbfield 3 R_overflow c
 0082                   .dbfield 4 R_buf A[100:100]c
 0082                   .dbfield 104 T_front c
 0082                   .dbfield 105 T_rear c
 0082                   .dbfield 106 T_count c
 0082                   .dbfield 107 T_buf A[100:100]c
 0082                   .dbfield 207 T_disabled c
 0082                   .dbend
 0082           ;          RTbuf -> R22,R23
 0082           ;              c -> R20
                        .even
 0082           _Com_putchar::
 0082 0E940000          xcall push_gset2
 0086 B901              movw R22,R18
 0088 402F              mov R20,R16
 008A                   .dbline -1
 008A                   .dbline 106
 008A           ; #endif
 008A           ; #if USEUART1
 008A           ; UBRR1H=(unsigned char)(tmp>>8);
 008A           ; UBRR1L=(unsigned char)tmp;
 008A           ; #endif
 008A           ; }
 008A           ; /*********************************************************************************************************
 008A           ; ** 函数名称: Com_putchar
 008A           ; ** 功能描述: 从串行口输出一个字符c
 008A           ; ** 输 入: c:输出字符
 008A           ; ** 输出        : 0:失败 1:成功
 008A           ; ** 全局变量: 无
 008A           ; ** 调用模块: 
 008A           ; ** 说明:
 008A           ; ** 注意:
 008A           ; ********************************************************************************************************/
 008A           ; unsigned char Com_putchar (unsigned char c,siocirqueue *RTbuf) {
 008A                   .dbline 108
 008A           ; //WDR(); //喂狗
 008A           ; if (Tbuf_full(RTbuf)) 
 008A 8B01              movw R16,R22
 008C 99D0              xcall _Tbuf_full
 008E 0023              tst R16
 0090 11F0              breq L5
 0092                   .dbline 109
 0092           ;    return(0);
 0092 0027              clr R16
 0094 04C0              xjmp L4
 0096           L5:
 0096                   .dbline 110
 0096           ; else{
 0096                   .dbline 111
 0096           ;       Tbuf_putchar(c,RTbuf);                          // 将数据加入到发送缓冲区并开中断
 0096 9B01              movw R18,R22
 0098 042F              mov R16,R20
 009A A3D0              xcall _Tbuf_putchar
 009C                   .dbline 112
 009C           ;       return(1);
 009C 01E0              ldi R16,1
 009E                   .dbline -2
 009E           L4:
 009E 0E940000          xcall pop_gset2
 00A2                   .dbline 0 ; func end
 00A2 0895              ret
 00A4                   .dbsym r RTbuf 22 pS[.1]
 00A4                   .dbsym r c 20 c
 00A4                   .dbend
 00A4                   .dbfunc e Com_putstring _Com_putstring fV
 00A4           ;              i -> R12
 00A4           ;          RTbuf -> R22,R23
 00A4           ;            len -> R10
 00A4           ;              p -> R20,R21
                        .even
 00A4           _Com_putstring::
 00A4 0E940000          xcall push_gset4
 00A8 A22E              mov R10,R18
 00AA A801              movw R20,R16
 00AC 6885              ldd R22,y+8
 00AE 7985              ldd R23,y+9
 00B0                   .dbline -1
 00B0                   .dbline 125
 00B0           ;       }
 00B0           ; }
 00B0           ; /*********************************************************************************************************
 00B0           ; ** 函数名称: Com_putstring
 00B0           ; ** 功能描述: 从串行口输出一个字符串
 00B0           ; ** 输 入: p:指向输出字符串 len:输出长度
 00B0           ; ** 输出        : 
 00B0           ; ** 全局变量: 无
 00B0           ; ** 调用模块: 
 00B0           ; ** 说明:
 00B0           ; ** 注意:
 00B0           ; ********************************************************************************************************/
 00B0           ; void Com_putstring (unsigned char *p,unsigned char len,siocirqueue *RTbuf) {
 00B0                   .dbline 128
 00B0           ; unsigned char i;
 00B0           ; //WDR(); //喂狗
 00B0           ; if (len!=0 ){
 00B0 AA20              tst R10
 00B2 79F0              breq L21
 00B4                   .dbline 128
 00B4                   .dbline 129
 00B4           ;       for(i=0;i<len;i++)
 00B4 CC24              clr R12
 00B6 0AC0              xjmp L13
 00B8           L14:
 00B8                   .dbline 130
 00B8           L15:
 00B8                   .dbline 130
 00B8 9B01              movw R18,R22
 00BA EC2D              mov R30,R12
 00BC FF27              clr R31
 00BE E40F              add R30,R20
 00C0 F51F              adc R31,R21
 00C2 0081              ldd R16,z+0
 00C4 DEDF              xcall _Com_putchar
 00C6 0023              tst R16
 00C8 B9F3              breq L14
 00CA           L11:
 00CA                   .dbline 129
 00CA C394              inc R12
 00CC           L13:
 00CC                   .dbline 129
 00CC CA14              cp R12,R10
 00CE A0F3              brlo L15
 00D0                   .dbline 131
 00D0           ;       while(Com_putchar(p[i],RTbuf)==0);//WDR(); //喂狗;
 00D0           ;       }
 00D0 0BC0              xjmp L9
 00D2           X0:
 00D2                   .dbline 132
 00D2           ;       else {
 00D2                   .dbline 133
 00D2           ;               do{
 00D2           L20:

⌨️ 快捷键说明

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