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

📄 com1rx.c

📁 IAR Embedded Workbench下编译的sst25lf080a操作的MSP430程序包括串口通讯
💻 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 + -