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

📄 caiji.c

📁 msp430单片机c语言应用
💻 C
字号:
#include <MSP430X14X.h>
#include "init.h"

// 定义全局变量
// 模拟采集变量
int nADC_Flag;
int nADC_Count;
// 数字采集变量
int nD_Count;
int nD_Flag;
// 串口发送变量
int nSend_TX1;
static int nTX1_Len;
static char nTX1_Flag;
//串口接收变量
char nRX1_Len_temp;
char nRev_UART1;	// 串口 1 的接收标志
static char nRX1_Len;
// 定义缓冲区
// 模拟采集缓冲区
int ADC_BUF_Temp0[10];
int ADC_BUF0[10];
int ADC_BUF_Temp1[10];
int ADC_BUF1[10];
int ADC_BUF_Temp2[10];
int ADC_BUF2[10];
int ADC_BUF_Temp3[10];
int ADC_BUF3[10];
int ADC_BUF_Temp4[10];
int ADC_BUF4[10];
int ADC_BUF_Temp5[10];
int ADC_BUF5[10];
int ADC_BUF_Temp6[10];
int ADC_BUF6[10];
int ADC_BUF_Temp7[10];
int ADC_BUF7[10];
// 发送缓冲区
char UART1_TX_BUF[50];
// 接收缓冲区
char UART1_RX_BUF[100];
char UART1_RX_TEMP[100];
void main(void)
{
    int i;
    // 关闭看门狗
    WDTCTL = WDTPW + WDTHOLD; 
    // 关闭中断
    _DINT();		      
     // 初始化
     Init_CLK();
     Init_ADC();
     Init_TimerA();
     Init_Port();
     Init_TimerB();
     //初始化变量
     nADC_Flag = 0;
     nADC_Count = 0;
     nSend_TX1 = 0;
     nTX1_Len = 0;
     nTX1_Flag = 0;
     nRX1_Len_temp = 0;
     nRev_UART1 = 0;
     nRX1_Len = 0;
     // 打开中断
    _EINT();                  
    // 开始循环
    for(;;)
    {    	
    	// 处理模拟采集并发送
    	if(nADC_Flag == 1)
    	{
    	    nADC_Flag = 0;
            // 等待缓冲区里的数据发送完毕
    	    while(1)	 
            {
            	if(nTX1_Flag == 1) break;
            }
    	    // 将数据由字转换成字节
    	    for(i = 0;i < 10;i++)
    	    {
                UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp0[i] & 0x00ff);
                UART1_TX_BUF[2*i+1]=(ADC_BUF_Temp0[i]>>8)&0x00ff;
    	    }
    	    // 设置帧结束标记
    	    UART1_TX_BUF[20] = 0xaa;
    	    UART1_TX_BUF[21] = 0xaa;
            //发送数据的长度
    	    nTX1_Len = 22;   
            // 设置中断标志   		    	
            IFG2 |= UTXIFG1;
            // 等待缓冲区里的数据发送完毕
            while(1)	 
            {
            	if(nTX1_Flag == 1) break;
            }
    	    // 将数据由字转换成字节
    	    for(i = 0;i < 10;i++)
    	    {
                UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp1[i] & 0x00ff);
                UART1_TX_BUF[2*i+1]=(ADC_BUF_Temp1[i]>>8)&0x00ff;
    	    }
    	    // 设置帧结束标记
    	    UART1_TX_BUF[20] = 0xaa;
    	    UART1_TX_BUF[21] = 0xaa;
            //发送数据的长度
    	    nTX1_Len = 22;  
            // 设置中断标志    		    	
            IFG2 |= UTXIFG1;
            // 等待缓冲区里的数据发送完毕
            while(1)	 
            {
            	if(nTX1_Flag == 1) break;
            }
    	    // 将数据由字转换成字节
    	    for(i = 0;i < 10;i++)
    	    {
                UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp2[i] & 0x00ff);
                UART1_TX_BUF[2*i+1]=(ADC_BUF_Temp2[i]>>8)&0x00ff;
    	    }
    	    // 设置帧结束标记
    	    UART1_TX_BUF[20] = 0xaa;
    	    UART1_TX_BUF[21] = 0xaa;
            //发送数据的长度
    	    nTX1_Len = 22;   
            // 设置中断标志   		    	
            IFG2 |= UTXIFG1;
            // 等待缓冲区里的数据发送完毕
            while(1)	 
            {
            	if(nTX1_Flag == 1) break;
            }
    	    // 将数据由字转换成字节
    	    for(i = 0;i < 10;i++)
    	    {
                UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp3[i] & 0x00ff);
                UART1_TX_BUF[2*i+1]=(ADC_BUF_Temp3[i]>>8)&0x00ff;
    	    }
    	    // 设置帧结束标记
    	    UART1_TX_BUF[20] = 0xaa;
    	    UART1_TX_BUF[21] = 0xaa;
            //发送数据的长度 
    	    nTX1_Len = 22;     	
            // 设置中断标志	    	
            IFG2 |= UTXIFG1;
            // 等待缓冲区里的数据发送完毕
            while(1)	 
            {
            	if(nTX1_Flag == 1) break;
            }
    	    // 将数据由字转换成字节
    	    for(i = 0;i < 10;i++)
    	    {
                UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp4[i] & 0x00ff);
                UART1_TX_BUF[2*i+1]=(ADC_BUF_Temp4[i]>>8)&0x00ff;
    	    }
    	    // 设置帧结束标记
    	    UART1_TX_BUF[20] = 0xaa;
    	    UART1_TX_BUF[21] = 0xaa;
            //发送数据的长度 
    	    nTX1_Len = 22;
            // 设置中断标志     		    	
            IFG2 |= UTXIFG1;
            // 等待缓冲区里的数据发送完毕
            while(1)	 
            {
            	if(nTX1_Flag == 1) break;
            }
    	    // 将数据由字转换成字节
    	    for(i = 0;i < 10;i++)
    	    {
                UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp5[i] & 0x00ff);
                UART1_TX_BUF[2*i+1]=(ADC_BUF_Temp5[i]>>8)&0x00ff;
    	    }
    	    // 设置帧结束标记
    	    UART1_TX_BUF[20] = 0xaa;
    	    UART1_TX_BUF[21] = 0xaa;
            //发送数据的长度
    	    nTX1_Len = 22;   
            // 设置中断标志   		    	
            IFG2 |= UTXIFG1;
            // 等待缓冲区里的数据发送完毕
            while(1)	 
            {
            	if(nTX1_Flag == 1) break;
            }
    	    // 将数据由字转换成字节
    	    for(i = 0;i < 10;i++)
    	    {
                UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp6[i] & 0x00ff);
                UART1_TX_BUF[2*i+1]=(ADC_BUF_Temp6[i]>>8)&0x00ff;
    	    }
    	    // 设置帧结束标记
    	    UART1_TX_BUF[20] = 0xaa;
    	    UART1_TX_BUF[21] = 0xaa;
            //发送数据的长度
    	    nTX1_Len = 22;    
            // 设置中断标志  		    	
            IFG2 |= UTXIFG1;
            // 等待缓冲区里的数据发送完毕
            while(1)	 
            {
            	if(nTX1_Flag == 1) break;
            }
    	    // 将数据由字转换成字节
    	    for(i = 0;i < 10;i++)
    	    {
                UART1_TX_BUF[2 * i] = (ADC_BUF_Temp7[i] & 0x00ff);
                UART1_TX_BUF[2*i+1]=(ADC_BUF_Temp7[i]>>8)&0x00ff;
    	    }
    	    // 设置帧结束标记
    	    UART1_TX_BUF[20] = 0xaa;
    	    UART1_TX_BUF[21] = 0xaa;
            //发送数据的长度
    	    nTX1_Len = 22; 
            // 设置中断标志     		    	
            IFG2 |= UTXIFG1;
    	}
    	
    	// 处理接收数据
    	if(nRev_UART1 == 1)
    	{
    	    nRev_UART1 = 0;
    	    for(i = 0;i < nRX1_Len;i++)
    	        UART1_RX_TEMP[i] = UART1_RX_BUF[i];
    	}
    	
    }
}

//////////////////////////////////////////////
// 定时器中断,完成 ADC 转换
interrupt [TIMERA0_VECTOR] void TimerA_ISR(void)
{
    int results[8];
    int i;
    // 关闭转换
    ADC12CTL0 &= ~ENC;		      
    // 读出转换结果      	
    ADC_BUF0[nADC_Count] = ADC12MEM0; 
    // 读出转换结果 
    ADC_BUF1[nADC_Count] = ADC12MEM1;  
    // 读出转换结果
    ADC_BUF2[nADC_Count] = ADC12MEM2; 
    // 读出转换结果 
    ADC_BUF3[nADC_Count] = ADC12MEM3; 
    // 读出转换结果  
    ADC_BUF4[nADC_Count] = ADC12MEM4; 
    // 读出转换结果 
    ADC_BUF5[nADC_Count] = ADC12MEM5; 
    // 读出转换结果 
    ADC_BUF6[nADC_Count] = ADC12MEM6; 
    // 读出转换结果
    ADC_BUF7[nADC_Count] = ADC12MEM7;  
            
    nADC_Count += 1;     
    if(nADC_Count == 10)
    {
         //设置标志
         nADC_Flag = 1;            
         nADC_Count = 0; 
         // 将数据倒向数据缓冲区
         for(i = 0;i < 10;i++) ADC_BUF_Temp0[i] = ADC_BUF0[i];  
         for(i = 0;i < 10;i++) ADC_BUF_Temp1[i] = ADC_BUF1[i];
         for(i = 0;i < 10;i++) ADC_BUF_Temp2[i] = ADC_BUF2[i];
         for(i = 0;i < 10;i++) ADC_BUF_Temp3[i] = ADC_BUF3[i];
         for(i = 0;i < 10;i++) ADC_BUF_Temp4[i] = ADC_BUF4[i];
         for(i = 0;i < 10;i++) ADC_BUF_Temp5[i] = ADC_BUF5[i];
         for(i = 0;i < 10;i++) ADC_BUF_Temp6[i] = ADC_BUF6[i];
         for(i = 0;i < 10;i++) ADC_BUF_Temp7[i] = ADC_BUF7[i];    
    }
    // 开启转换            
    ADC12CTL0 |= ENC + ADC12SC;	   
}
///////////////////////////////////////
// 处理来自串口 1 的接收中断
interrupt [UART1RX_VECTOR] void UART1_RX_ISR(void)
{
    
    UART1_RX_BUF[nRX1_Len_temp] = RXBUF1;	//接收来自的数据
    
    nRX1_Len_temp += 1;
        
    if(UART1_RX_BUF[nRX1_Len_temp - 1] == 13)
    {
    	nRX1_Len = nRX1_Len_temp;
    	nRev_UART1 = 1;
    	nRX1_Len_temp = 0;
    }
}
///////////////////////////////////////
// 处理来自串口 1 的发送中断
interrupt [UART1TX_VECTOR] 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 + -