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

📄 main.c

📁 《MSP430单片机常用模块与综合系统实例精讲》整书的源代码有30个
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <MSP430X14X.h>
#include "modem.h"
#include "uart.h"
#include "process.h"
#include "const.h"
#include "sm.h"
#include "ad_init.h"

//定义全局变量
static char nComm;
int *pFlash;
//定义串口操作变量
char nRev_UART0;	// 串口 0 的接收标志
char nRev_UART1;	// 串口 1 的接收标志
char UART0_TX_BUF[112];	// 串口 0 的发送缓冲区
char UART0_RX_BUF[20];	// 串口 0 的接收缓冲区
char UART1_TX_BUF[112];	// 串口 1 的发送缓冲区
char UART1_RX_BUF[50];	// 串口 1 的接收缓冲区
char pBuf0[512];
static int nTX1_Len;
static char nRX1_Len;
char nRX1_Len_temp;
static int nTX0_Len;
static int nRX0_Len;
int nRX0_Len_temp;
static char nTX0_Flag;
static char nTX1_Flag;
int nSend_TX0;
int nSend_TX1;
static char nComm_Command;
char nBusy;
char nDial;

// 模拟采集变量
int nADC_Flag;
int nADC_Count;
// 模拟采集缓冲区
int ADC_BUF_Temp0[30];
int ADC_BUF0[30];
int ADC_BUF_Temp1[30];
int ADC_BUF1[30];
int ADC_BUF_Temp2[30];
int ADC_BUF2[30];
int ADC_BUF_Temp3[30];
int ADC_BUF3[30];
int ADC_BUF_Temp4[30];
int ADC_BUF4[30];
int ADC_BUF_Temp5[30];
int ADC_BUF5[30];
int ADC_BUF_Temp6[30];
int ADC_BUF6[30];
int ADC_BUF_Temp7[30];
int ADC_BUF7[30];

void main(void)
{

    int i;
    int n;
    int nTemp;
    char nRes_UART1;
    char nRes_UART0;
    char PhoneNumber[8];
    char UART1_RX_Temp[50];
    char UART0_RX_Temp[30];    
    char nPhoneOK;
    int nPhone;
    long row;
    
    WDTCTL = WDTPW + WDTHOLD;   // 关闭看门狗    
    
    _DINT();			// 关闭中断
    
    nBusy = 0;
    nDial = 0;
    nComm_Command = 0;
    nSend_TX1 = 0;
    nSend_TX0 = 0;
    nTX1_Flag = 0;
    nTX0_Flag = 0;
    nTX0_Len = 0;
    nTX1_Len = 0;
    nRX1_Len = 0;
    nRX0_Len = 0;
    nRev_UART1 = 0;
    nRev_UART0 = 0;
    nComm = 0;
    /////////////////////////////////
    // 初始化
    Init_CLK();
    Init_Process();
    Init_UART0();
    Init_UART1();
    Init_TimerA(4000);
    _EINT(); 			// 打开中断
    // 读配置信息
    nPhone = ReadPhoneNum(PhoneNumber);
    // 等待配置信息
    if(nPhone == 2)
    {
    	for(;;)
    	{
    	    if(nRev_UART1 == 1)
    	    {
    	        nRev_UART1 = 0;
    	        for(i = 0;i < nRX1_Len;i++) 
    	            UART1_RX_Temp[i] = UART1_RX_BUF[i];
    	        nRes_UART1 = ProcessUART1(UART1_RX_Temp,nRX1_Len);
    	        switch(nRes_UART1)
    	        {
    	            case 0:
    	            {
    	            	SetOK(UART1_TX_BUF,&nTX1_Len);
    	            	nRX1_Len = 0;    	    	    
                        IFG2 |= UTXIFG1; // 设置中断标志,进入发送中断程序
    	            	break;
    	            }
    	            case 1:
    	            {
    	            	QueryPhone(UART1_TX_BUF,&nTX1_Len);
    	            	nRX1_Len = 0;    	    	    
                        IFG2 |= UTXIFG1; // 设置中断标志,进入发送中断程序
    	            	break;
    	            }
    	            case 2:
    	            {
    	            	nTemp = 0;
    	            	nTemp = SetPhone(UART1_RX_Temp);
    	            	if(nTemp == 1)
    	            	{
    	            	    SetOK(UART1_TX_BUF,&nTX1_Len);
    	    	    	
    	    	    	    nPhone = (char)(UART1_RX_Temp[12] - 0x30);
    	    	    	    for(i = 0;i < 8;i++) 
    	    	    	        PhoneNumber[i] = UART1_RX_Temp[13 + i];
    	    	    	
    	    	    	    nPhoneOK = 1;
    	            	}
    	            	else
    	            	{
    	            	    SetError(UART1_TX_BUF,&nTX1_Len);
    	            	}
    	            	nRX1_Len = 0;    	    	    
                        IFG2 |= UTXIFG1; // 设置中断标志,进入发送中断程序
    	            	break;
    	            }
    	            default:break;
    	        }
    	    }
    	    if(nPhoneOK == 1) break;
    	}
    	
    }
    
    row = 1;
    for(;;)
    {
        //进行存储处理
        if(nADC_Flag == 1)
        {
            nADC_Flag = 0;
            n = 0;
            //1通道
            //通道号
            pBuf0[0] = 1;
            for(i = 0;i < 30;i++)
            {
                //高字节
                pBuf0[2 * i] = ADC_BUF_Temp0[i] / 256;
                //低字节
                pBuf0[2 * i + 1] = (ADC_BUF_Temp0[i] & 0xFF);
            }
            //通道结束标志
            pBuf0[61] = 0xaa;
            n += 62;
            
            //2通道
            pBuf0[n + 0] = 1;
            for(i = 0;i < 30;i++)
            {
                //高字节
                pBuf0[n + 2 * i] = ADC_BUF_Temp1[i] / 256;
                //低字节
                pBuf0[n + 2 * i + 1] = (ADC_BUF_Temp1[i] & 0xFF);
            }
            //通道结束标志
            pBuf0[n + 61] = 0xaa;
            n += 62;
            
            //3通道
            pBuf0[n + 0] = 1;
            for(i = 0;i < 30;i++)
            {
                //高字节
                pBuf0[n + 2 * i] = ADC_BUF_Temp2[i] / 256;
                //低字节
                pBuf0[n + 2 * i + 1] = (ADC_BUF_Temp2[i] & 0xFF);
            }
            //通道结束标志
            pBuf0[n + 61] = 0xaa;
            n += 62;
            
            //4通道
            pBuf0[n + 0] = 1;
            for(i = 0;i < 30;i++)
            {
                //高字节
                pBuf0[n + 2 * i] = ADC_BUF_Temp3[i] / 256;
                //低字节
                pBuf0[n + 2 * i + 1] = (ADC_BUF_Temp3[i] & 0xFF);
            }
            //通道结束标志
            pBuf0[n + 61] = 0xaa;
            n += 62;
            
            //5通道
            pBuf0[n + 0] = 1;
            for(i = 0;i < 30;i++)
            {
                //高字节
                pBuf0[n + 2 * i] = ADC_BUF_Temp4[i] / 256;
                //低字节
                pBuf0[n + 2 * i + 1] = (ADC_BUF_Temp4[i] & 0xFF);
            }
            //通道结束标志
            pBuf0[n + 61] = 0xaa;
            n += 62;
            
            //6通道
            pBuf0[n + 0] = 1;
            for(i = 0;i < 30;i++)
            {
                //高字节
                pBuf0[n + 2 * i] = ADC_BUF_Temp5[i] / 256;
                //低字节
                pBuf0[n + 2 * i + 1] = (ADC_BUF_Temp5[i] & 0xFF);
            }
            //通道结束标志
            pBuf0[n + 61] = 0xaa;
            n += 62;
            
            //7通道
            pBuf0[n + 0] = 1;
            for(i = 0;i < 30;i++)
            {
                //高字节
                pBuf0[n + 2 * i] = ADC_BUF_Temp6[i] / 256;
                //低字节
                pBuf0[n + 2 * i + 1] = (ADC_BUF_Temp6[i] & 0xFF);
            }
            //通道结束标志
            pBuf0[n + 61] = 0xaa;
            n += 62;
            
            //8通道
            pBuf0[n + 0] = 1;
            for(i = 0;i < 30;i++)
            {
                //高字节
                pBuf0[n + 2 * i] = ADC_BUF_Temp7[i] / 256;
                //低字节
                pBuf0[n + 2 * i + 1] = (ADC_BUF_Temp7[i] & 0xFF);
            }
            //通道结束标志
            pBuf0[n + 61] = 0xaa;
            n += 62;
        }
        
        //写入数据
        if(row >= 10000) row = 1;
        PageWrite(0,row,pBuf0);
        row += 1;
               
        //进行通信处理
        //首先初始化MODEM
        if(nComm == 1 && nComm_Command == 0 && nBusy == 0)
        {		    
            // 将p1.0设置成高电平
            P2OUT |= BIT0;
            for(i = 0;i < 3;i++)
            {    
                nTX0_Len = ModemInit(UART0_TX_BUF);
                
                nBusy = 1;
                IFG1 |= UTXIFG0; // 设置中断标志,进入发送中断程序
                Delay_ms(500);
            }
        }//if(nComm == 1 && nComm_Command == 0 && nBusy == 0)

        // 拨号
        if(nComm == 1 && nDial == 0 && nComm_Command == 1 && nBusy == 0)
        {
            nBusy = 1;

    	    nTX0_Len = SetPhoneNum(UART0_TX_BUF,nPhone,PhoneNumber);    
            IFG1 |= UTXIFG0; // 设置中断标志,进入发送中断程序
	    	    
        }//if(nComm == 1 && nDial == 0 && nComm_Command == 1 && nBusy == 0)
        // 往MODEM传送数据
        if(nComm == 1 && nDial == 1)	
        {
     
            for(i = 0;i < 50;i++)
            {
            	for(n = 0;n < 100;n++)

⌨️ 快捷键说明

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