📄 com1rx.c
字号:
/************************************************************************************
**函数名 :Com1Rx.c
**描 述 :串口1处理子程序
**版 本 :
**备 注 :
**时 间 :2007-5-25
**设 计 :
**修 改 :
************************************************************************************/
#include "msp430x14x.h"
#include "in430.h"
#include "main.h"
#include "m430io.h"
unsigned char ucTax_Rcv_Stage ;
unsigned int ex_uart_tx_pointer;
unsigned char ex_tx_data_go_flag;
unsigned int tax_tx_num;
unsigned char tax_rx[MAX_RECV_LEN],tax_tx[MAX_SEND_LEN];
unsigned int tax_uart_var;
extern unsigned char ucOut_Shift_Data;
extern unsigned long ulCurrent_Time;
extern unsigned long ulStart_Db_Address;
void ex_tx_data(void);
void empt_ex_cmd(void);
void read_ex_uart(void);
void write_ex_uart(void);
void ex_shift_reg(unsigned char ex_data);
void set_ex_adr_out(unsigned char adr);
/************************************************************************************
**函数名 :usart1_rx
**描 述 :usart1中断方式接收
**时 间 :2007-5-25
**修 改 :
**备 注 :
************************************************************************************/
interrupt[UART1RX_VECTOR] void usart1_rx (void)
{
read_ex_uart();
}
/************************************************************************************
**函数名 :usart1_tx
**描 述 :usart1中断方式发送数据
**时 间 :2007-5-25
**修 改 :
**备 注 :
************************************************************************************/
interrupt[UART1TX_VECTOR] void usart1_tx (void)
{
write_ex_uart();
}
/************************************************************************************
**函数名 :ex_tx_data
**描 述 :使能串口中断发送
**时 间 :2007-5-25
**修 改 :
**备 注 :
************************************************************************************/
void ex_tx_data(void)
{
if(!ex_tx_data_go_flag)
{
IE2 |= UTXIE1;
ex_tx_data_go_flag = 1;
}
}
/************************************************************************************
**函数名 :read_ex_uart
**描 述 :read_ex_uart中断方式接收
**时 间 :2007-5-25
**修 改 :
**备 注 :
************************************************************************************/
void read_ex_uart(void)
{
unsigned char uart_rx;
uart_rx = RXBUF1;
switch(P4IN & 0x07)
{
case 0:
break;
case 1: /****** receive Yuliu data *****/
{
if((ucTax_Rcv_Stage==COM0_RCV_STAGE_IDLE)&&(uart_rx==DEL))
{
ucTax_Rcv_Stage=COM0_RCV_STAGE_STX;
tax_uart_var=0;
}
else if((ucTax_Rcv_Stage==COM0_RCV_STAGE_STX)&&(uart_rx==STX))
{
ucTax_Rcv_Stage=COM0_RCV_STAGE_DATA;
tax_uart_var=0;
}
else if((ucTax_Rcv_Stage==COM0_RCV_STAGE_DATA)&&(uart_rx==DEL))
{
ucTax_Rcv_Stage=FR_ZHUAN_YI;
}
else if((ucTax_Rcv_Stage==FR_ZHUAN_YI)&&(uart_rx==DEL))
{
ucTax_Rcv_Stage=COM0_RCV_STAGE_DATA;
tax_rx[tax_uart_var]=uart_rx;
tax_uart_var++;
}
else if((ucTax_Rcv_Stage==COM0_RCV_STAGE_DATA)&&(uart_rx!=DEL))
{
if(tax_uart_var<2000)
{
tax_rx[tax_uart_var]=uart_rx;
ucTax_Rcv_Stage=COM0_RCV_STAGE_DATA;
tax_uart_var++;
}
else
{
ucTax_Rcv_Stage=COM0_RCV_STAGE_IDLE;
tax_uart_var=0;
}
}
else if((ucTax_Rcv_Stage==FR_ZHUAN_YI)&&(uart_rx==EXT))
{
ucTax_Rcv_Stage=COM0_RCV_STAGE_FULL;
}
else if(ucTax_Rcv_Stage!=COM0_RCV_STAGE_FULL)
{
ucTax_Rcv_Stage=COM0_RCV_STAGE_IDLE;
}
}
break;
default:
break;
}
}
/************************************************************************************
**函数名 :Snd_Repon_Cmd
**描 述 :发送回应命令
**时 间 :2007-5-25
**修 改 :
**备 注 :
************************************************************************************/
void Snd_Repon_Cmd(void)
{
unsigned long tmps_time;
tax_tx[0]=0x03;
tax_tx[1]=0x10;
tax_tx[5]=((ulStart_Db_Address>>24)&0xff);
tax_tx[4]=((ulStart_Db_Address>>16)&0xff);
tax_tx[3]=((ulStart_Db_Address>>8)&0xff);
tax_tx[2]=(ulStart_Db_Address&0xff); //回应地址
tax_tx[6]=0x4f;
tax_tx[7]=0x4b;
tax_tx[8]=0x02;
tax_tx[9]=0x10;
tax_tx_num=10;
ex_tx_data();
tmps_time=ulCurrent_Time;
while(tmps_time+5>ulCurrent_Time)
{
}
}
void write_ex_uart(void)
{
switch(ex_uart_tx_pointer)
{
case 0:
{
ex_uart_tx_pointer++;
empt_ex_cmd();
}
break;
case 1:
{
ex_uart_tx_pointer++;
if(tax_tx_num == 0)
{
empt_ex_cmd();
}
else
{
set_ex_adr_out(1);
TXBUF1 = tax_tx[tax_tx_num-1];
tax_tx_num--;
}
}
break;
case 2:
{
ex_uart_tx_pointer++;
empt_ex_cmd();
}
break;
case 3:
{
ex_uart_tx_pointer++;
empt_ex_cmd();
}
break;
case 4:
{
ex_uart_tx_pointer++;
empt_ex_cmd();
}
break;
case 5:
{
ex_uart_tx_pointer = 0;
empt_ex_cmd();
}
break;
default:
break;
}
if(tax_tx_num == 0)
{
IE2 &= ~UTXIE1;
ex_tx_data_go_flag = 0;
}
}
void empt_ex_cmd(void)
{
set_ex_adr_out(5);
TXBUF1 = 0x00;
_NOP();
}
void set_ex_adr_out(unsigned char adr)
{
unsigned char tmp_adr;
tmp_adr=adr;
switch(tmp_adr)
{
case 0:
{
ucOut_Shift_Data &=0xf3;
ex_shift_reg(ucOut_Shift_Data);
}
break;
case 1:
{
ucOut_Shift_Data |=0x04;
ucOut_Shift_Data &=0xe7;
ex_shift_reg(ucOut_Shift_Data);
}
break;
case 2:
{
ucOut_Shift_Data |=0x08;
ucOut_Shift_Data &=0xeb;
ex_shift_reg(ucOut_Shift_Data);
}
break;
case 3:
{
ucOut_Shift_Data |=0x0c;
ucOut_Shift_Data &=0xef;
ex_shift_reg(ucOut_Shift_Data);
}
break;
case 4:
{
ucOut_Shift_Data |=0x10;
ucOut_Shift_Data &=0xf3;
ex_shift_reg(ucOut_Shift_Data);
}
break;
case 5:
{
ucOut_Shift_Data |=0x14;
ucOut_Shift_Data &=0xf7;
ex_shift_reg(ucOut_Shift_Data);
}
break;
default:
break;
}
}
void ex_shift_reg(unsigned char ex_data)
{
unsigned char i;
for(i=0; i<8; i++)
{
if(ex_data & 0x80)
{
P5OUT |= SDATA;
}
else
{
P5OUT &= ~SDATA;
}
P5OUT |= SCLK;
_NOP();
P5OUT &= ~SCLK;
ex_data = ex_data<<1;
}
P5OUT |= LATCH;
_NOP();
P5OUT &= ~LATCH;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -