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

📄 uart.lis

📁 CS5532的驱动程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module uart.c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\CS5532\firmware\uart.c
 0000                   .dbfunc e uart_init _uart_init fV
                        .even
 0000           _uart_init::
 0000                   .dbline -1
 0000                   .dbline 47
 0000           ; /****************************************Copyright (c)**************************************************
 0000           ; **                                    
 0000           ; **                                   
 0000           ; **                                 
 0000           ; ** 文   件   名: uart.c
 0000           ; ** 最后修改日期: 2007-10-8
 0000           ; ** 描        述: rs232通讯函数
 0000           ; ** 版      本: V1.0
 0000           ; ** 主  控  芯 片:M16 晶振频率:7.37MHZ, 波特率19200
 0000           ; ** IDE:ICCAVR 6.31
 0000           ; **********************************************************************************************************/                                                                                                                                                                                      
 0000           ; 
 0000           ; #define       MCU_M16
 0000           ; #define               MCLK737 
 0000           ; 
 0000           ; 
 0000           ; #ifdef MCU_M8
 0000           ; #include <iom8v.h> 
 0000           ; #endif
 0000           ; 
 0000           ; #ifdef MCU_M16
 0000           ; #include <iom16v.h>
 0000           ; #endif
 0000           ; 
 0000           ; #include <macros.h>
 0000           ; #include "DEFINE.H"
 0000           ; #include "UART.H"
 0000           ; #include "COMMAND.H"
 0000           ; 
 0000           ; 
 0000           ; uint08 uart_tx_buf[UART_BUF_SIZE];                    //发送缓冲
 0000           ; uint08 uart_tx_wr_ptr,uart_tx_rd_ptr;         
 0000           ; uint08 uart_rx_counter,uart_tx_counter;
 0000           ; uint08 uart_rx_buf[UART_BUF_SIZE];                    //接收缓冲,相当于消息体
 0000           ; uint08 seq_number;                                    //顺序数
 0000           ; uint08 check_sum;                                     //和校验
 0000           ; uint08 rx_stu_mac;                                    //接收状态机
 0000           ; uint08 msg_end_flag;                                  //消息体结束标志
 0000           ; uint16 msg_size;                                      //消息尺寸
 0000           ; 
 0000           ; 
 0000           ; /**********************************************************************
 0000           ; functionName:void uart_init(void)
 0000           ; description:uart初始化
 0000           ; **********************************************************************/       
 0000           ; void uart_init(void)
 0000           ; {
 0000                   .dbline 49
 0000           ;       //IO初始化
 0000           ;       SET_BIT(PORTD,PD0);
 0000 909A              sbi 0x12,0
 0002                   .dbline 50
 0002           ;       SET_BIT(PORTD,PD1);
 0002 919A              sbi 0x12,1
 0004                   .dbline 51
 0004           ;       SET_BIT(DDRD,PD1);      
 0004 899A              sbi 0x11,1
 0006                   .dbline 52
 0006           ;       CLR_BIT(DDRD,PD0);      
 0006 8898              cbi 0x11,0
 0008                   .dbline 55
 0008           ;       
 0008           ;       //寄存器初始化
 0008           ;       UCSRB = 0x00;           
 0008 2224              clr R2
 000A 2AB8              out 0xa,R2
 000C                   .dbline 56
 000C           ;       UCSRA = 0x00;
 000C 2BB8              out 0xb,R2
 000E                   .dbline 57
 000E           ;       UCSRC = 0x86;
 000E 86E8              ldi R24,134
 0010 80BD              out 0x20,R24
 0012                   .dbline 58
 0012           ;       UBRRL = BAUD19200;                      //设置拨特率
 0012 87E1              ldi R24,23
 0014 89B9              out 0x9,R24
 0016                   .dbline 59
 0016           ;       UBRRH = 0x00;                           //set baud rate hi
 0016 20BC              out 0x20,R2
 0018                   .dbline 60
 0018           ;       UCSRB = 0x98;                           //使用中断
 0018 88E9              ldi R24,152
 001A 8AB9              out 0xa,R24
 001C                   .dbline 63
 001C           ;       
 001C           ;       //变量初始化
 001C           ;       uart_tx_wr_ptr=uart_tx_rd_ptr=0;
 001C 20921C00          sts _uart_tx_rd_ptr,R2
 0020 20921D00          sts _uart_tx_wr_ptr,R2
 0024                   .dbline 64
 0024           ;       uart_rx_counter=uart_tx_counter=0;
 0024 20921A00          sts _uart_tx_counter,R2
 0028 20921B00          sts _uart_rx_counter,R2
 002C                   .dbline 65
 002C           ;       msg_end_flag=0;                         //表示没有接收到数据
 002C 20920200          sts _msg_end_flag,R2
 0030                   .dbline 66
 0030           ;       rx_stu_mac=ST_START;
 0030 80EF              ldi R24,240
 0032 80930300          sts _rx_stu_mac,R24
 0036                   .dbline -2
 0036           L1:
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbend
                        .area vector(rom, abs)
                        .org 44
 002C 0C941C00          jmp _uart0_rx_isr
                        .area text(rom, con, rel)
 0038                   .dbfile G:\CS5532\firmware\uart.c
 0038                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
 0038           ;      uart_data -> R16
                        .even
 0038           _uart0_rx_isr::
 0038 2A92              st -y,R2
 003A 3A92              st -y,R3
 003C 4A92              st -y,R4
 003E 5A92              st -y,R5
 0040 0A93              st -y,R16
 0042 2A93              st -y,R18
 0044 3A93              st -y,R19
 0046 8A93              st -y,R24
 0048 9A93              st -y,R25
 004A EA93              st -y,R30
 004C FA93              st -y,R31
 004E 2FB6              in R2,0x3f
 0050 2A92              st -y,R2
 0052                   .dbline -1
 0052                   .dbline 78
 0052           ; }
 0052           ; 
 0052           ; 
 0052           ; 
 0052           ; 
 0052           ; /**********************************************************************
 0052           ; functionName:void uart0_rx_isr(void)
 0052           ; description:串口接受中断函数
 0052           ; **********************************************************************/
 0052           ; #pragma interrupt_handler uart0_rx_isr:12
 0052           ; void uart0_rx_isr(void)
 0052           ; {
 0052                   .dbline 80
 0052           ;       uint08 uart_data;
 0052           ;       uart_data=UDR;
 0052 0CB1              in R16,0xc
 0054                   .dbline 81
 0054           ;       switch(rx_stu_mac)
 0054 20910300          lds R18,_rx_stu_mac
 0058 3327              clr R19
 005A 203F              cpi R18,240
 005C E0E0              ldi R30,0
 005E 3E07              cpc R19,R30
 0060 E9F0              breq L6
 0062 213F              cpi R18,241
 0064 E0E0              ldi R30,0
 0066 3E07              cpc R19,R30
 0068 19F1              breq L9
 006A 223F              cpi R18,242
 006C E0E0              ldi R30,0
 006E 3E07              cpc R19,R30
 0070 51F1              breq L10
 0072 233F              cpi R18,243
 0074 E0E0              ldi R30,0
 0076 3E07              cpc R19,R30
 0078 09F4              brne X1
 007A 3AC0              xjmp L11
 007C           X1:
 007C 243F              cpi R18,244
 007E E0E0              ldi R30,0
 0080 3E07              cpc R19,R30
 0082 09F4              brne X2
 0084 4AC0              xjmp L12
 0086           X2:
 0086 253F              cpi R18,245
 0088 E0E0              ldi R30,0
 008A 3E07              cpc R19,R30
 008C 09F4              brne X3
 008E 57C0              xjmp L15
 0090           X3:
 0090 263F              cpi R18,246
 0092 E0E0              ldi R30,0
 0094 3E07              cpc R19,R30
 0096 09F4              brne X4
 0098 73C0              xjmp L18
 009A           X4:
 009A 7DC0              xjmp L3
 009C           X0:
 009C                   .dbline 82
 009C           ;       {
 009C           L6:
 009C                   .dbline 84
 009C           ;               case ST_START:
 009C           ;               {
 009C                   .dbline 85
 009C           ;                       if(uart_data==MESSAGE_START)
 009C 0B31              cpi R16,27
 009E 09F0              breq X5
 00A0 7DC0              xjmp L4
 00A2           X5:
 00A2                   .dbline 86
 00A2           ;                       {
 00A2                   .dbline 87
 00A2           ;                               rx_stu_mac = ST_GET_SEQ_NUM;    
 00A2 81EF              ldi R24,241
 00A4 80930300          sts _rx_stu_mac,R24
 00A8                   .dbline 88
 00A8           ;                               check_sum = MESSAGE_START;
 00A8 8BE1              ldi R24,27
 00AA 80930400          sts _check_sum,R24
 00AE                   .dbline 89
 00AE           ;                       }
 00AE                   .dbline 90
 00AE           ;                       break;
 00AE 76C0              xjmp L4
 00B0           L9:
 00B0                   .dbline 93
 00B0           ;               }
 00B0           ;               case ST_GET_SEQ_NUM:
 00B0           ;               {
 00B0                   .dbline 94
 00B0           ;                       seq_number = uart_data;
 00B0 00930500          sts _seq_number,R16
 00B4                   .dbline 95
 00B4           ;                       check_sum ^= uart_data; 
 00B4 20900400          lds R2,_check_sum
 00B8 2026              eor R2,R16
 00BA 20920400          sts _check_sum,R2
 00BE                   .dbline 96
 00BE           ;                       rx_stu_mac = ST_MSG_SIZE_H;
 00BE 82EF              ldi R24,242
 00C0 80930300          sts _rx_stu_mac,R24
 00C4                   .dbline 97
 00C4           ;                       break;
 00C4 6BC0              xjmp L4
 00C6           L10:
 00C6                   .dbline 100
 00C6           ;               }

⌨️ 快捷键说明

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