📄 uart.lis
字号:
.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 + -