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

📄 uart.c

📁 一个msp430与320*240加4*4键盘的菜单程序... ...!
💻 C
字号:
#include <msp430x16x.h>
#include "XITONG.H"

//##############################################################################
void Init_UART1(void)
{
   UCTL1 &=~ SWRST;             // SWRST复位,USART允许
   UCTL1 = 0x10;                // 8位数据位,1位停止位,无校验
   UBR01 = 0x0D;                 
   UBR11 = 0x00;                // 使用32KHz晶振时波特率为2400bps
   UMCTL1 = 0x6B;               // 位调整
   UTCTL1 = 0x10;               // 选定ACLK(32KHz晶振)为时钟源
   ME2 |= 0x30;                 //UART发送及接收模块允许
   //P4SEL = 0x03;                // P3.6 P3.7被USART1发送模块占用
   //P4DIR = 0X01;                // P3.6 输出,P3.7 输入
   IE2 |= URXIE1;               //接收中断允许	
   IE2 |= UTXIE1;	        //使能UART1的TX中断
	
   return;
}
//##############################################################################
void jieshou(void)
{
    int i;    
    char UART1_RX_Temp[60];
    //for(;;)
    //{
    	if(nRev_UART1 == 1)
    	{
    	    nRev_UART1 = 0;
	    // 将接收到的数据拷贝到临时缓冲区
	    for(i = 0;i < nRX1_Len;i++) 
            {
		UART1_RX_Temp[i] = UART1_RX_BUF[i]; 
            }
                if(UART1_RX_Temp[0]!=0xEB) return;
                if(UART1_RX_Temp[1]!=0x90) return;
                //if(UART1_RX_Temp[2]!=0xAA) return;
                //if(UART1_RX_Temp[3]!=0x33) return;
                UART1_TX_BUF[0] = 'O';
    	        UART1_TX_BUF[1] = 'K';
    	        UART1_TX_BUF[2] = 13;
                
                shi = UART1_RX_Temp[2];
                fen = UART1_RX_Temp[3]; 
    	    	nTX1_Len = 3;
		// 设置中断标志,进入发送中断程序
		IFG2 |= UTXIFG1;		
    		nRX1_Len = 0;
            
	}
    //}
}
//##############################################################################
///////////////////////////////////////
// 处理来自串口 1 的接收中断

#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{
    //接收来自的数据
    UART1_RX_BUF[nRX1_Len_temp] = RXBUF1;	
    
    nRX1_Len_temp += 1;
        
    if(UART1_RX_BUF[nRX1_Len_temp - 1] == ' ')
    {
    	nRX1_Len = nRX1_Len_temp;
    	nRev_UART1 = 1;
    	nRX1_Len_temp = 0;
    }
}

///////////////////////////////////////
// 处理来自串口 1 的发送中断
#pragma vector=UART1TX_VECTOR
__interrupt void UART1_TX_ISR(void)
{
    if(nTX1_Len != 0)
    {
        // 表示缓冲区里的数据没有发送完
    	nTX1_Flag = 0;			
    	
    	TXBUF1 = UART1_TX_BUF[nSend_TX1];
    	nSend_TX1 += 1;
    	
    	if(nSend_TX1 >= nTX1_Len)
    	{
    	    nSend_TX1 = 0;
    	    nTX1_Len = 0;
    	    nTX1_Flag = 1;
    	}
    }
}
//##############################################################################

⌨️ 快捷键说明

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