?? section4.c
字號(hào):
#include <MSP430X14X.h>
#include "init.h"
// 定義全局變量
// 模擬采集變量
int nADC_Flag;
int nADC_Count;
// 數(shù)字采集變量
int nD_Count;
int nD_Flag;
// 串口發(fā)送變量
int nSend_TX1;
static int nTX1_Len;
static char nTX1_Flag;
//串口接收變量
char nRX1_Len_temp;
char nRev_UART1; // 串口 1 的接收標(biāo)志
static char nRX1_Len;
// 定義緩沖區(qū)
// 數(shù)字采集緩沖區(qū)
char D_BUF_Temp[10];
char D_BUF[10];
// 模擬采集緩沖區(qū)
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];
// 發(fā)送緩沖區(qū)
char UART1_TX_BUF[50];
// 接收緩沖區(qū)
char UART1_RX_BUF[100];
char UART1_RX_TEMP[100]
void main(void)
{
int i;
WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗
_DINT(); // 關(guān)閉中斷
// 初始化
Init_CLK();
Init_ADC();
Init_TimerA();
Init_Port();
Init_TimerB();
//初始化變量
nADC_Flag = 0;
nADC_Count = 0;
nD_Count = 0;
nD_Flag = 0;
nSend_TX1 = 0;
nTX1_Len = 0;
nTX1_Flag = 0;
nRX1_Len_temp = 0;
nRev_UART1 = 0;
nRX1_Len = 0;
_EINT(); // 打開(kāi)中斷
// 開(kāi)始循環(huán)
for(;;)
{
// 處理數(shù)字量采集并發(fā)送
if(nD_Flag == 1)//數(shù)字量數(shù)據(jù)
{
nD_Flag = 0;
for(i = 0;i < 10;i++)
UART1_TX_BUF[i] = D_BUF_Temp[i];
nTX1_Len = 10; //發(fā)送數(shù)據(jù)的長(zhǎng)度
IFG2 |= UTXIFG1;// 設(shè)置中斷標(biāo)志
}
// 處理模擬采集并發(fā)送
if(nADC_Flag == 1)
{
nADC_Flag = 0;
while(1) // 等待緩沖區(qū)里的數(shù)據(jù)發(fā)送完畢
{
if(nTX1_Flag == 1) break;
}
// 將數(shù)據(jù)由字轉(zhuǎn)換成字節(jié)
for(i = 0;i < 10;i++)
{
UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp0[i] & 0x00ff);
UART1_TX_BUF[2 * i + 1] = (char)((ADC_BUF_Temp0[i] >> 8) & 0x00ff);
}
// 設(shè)置幀結(jié)束標(biāo)記
UART1_TX_BUF[20] = 0xaa;
UART1_TX_BUF[21] = 0xaa;
nTX1_Len = 22; //發(fā)送數(shù)據(jù)的長(zhǎng)度
IFG2 |= UTXIFG1;// 設(shè)置中斷標(biāo)志
while(1) // 等待緩沖區(qū)里的數(shù)據(jù)發(fā)送完畢
{
if(nTX1_Flag == 1) break;
}
// 將數(shù)據(jù)由字轉(zhuǎn)換成字節(jié)
for(i = 0;i < 10;i++)
{
UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp1[i] & 0x00ff);
UART1_TX_BUF[2 * i + 1] = (char)((ADC_BUF_Temp1[i] >> 8) & 0x00ff);
}
// 設(shè)置幀結(jié)束標(biāo)記
UART1_TX_BUF[20] = 0xaa;
UART1_TX_BUF[21] = 0xaa;
nTX1_Len = 22; //發(fā)送數(shù)據(jù)的長(zhǎng)度
IFG2 |= UTXIFG1;// 設(shè)置中斷標(biāo)志
while(1) // 等待緩沖區(qū)里的數(shù)據(jù)發(fā)送完畢
{
if(nTX1_Flag == 1) break;
}
// 將數(shù)據(jù)由字轉(zhuǎn)換成字節(jié)
for(i = 0;i < 10;i++)
{
UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp2[i] & 0x00ff);
UART1_TX_BUF[2 * i + 1] = (char)((ADC_BUF_Temp2[i] >> 8) & 0x00ff);
}
// 設(shè)置幀結(jié)束標(biāo)記
UART1_TX_BUF[20] = 0xaa;
UART1_TX_BUF[21] = 0xaa;
nTX1_Len = 22; //發(fā)送數(shù)據(jù)的長(zhǎng)度
IFG2 |= UTXIFG1;// 設(shè)置中斷標(biāo)志
while(1) // 等待緩沖區(qū)里的數(shù)據(jù)發(fā)送完畢
{
if(nTX1_Flag == 1) break;
}
// 將數(shù)據(jù)由字轉(zhuǎn)換成字節(jié)
for(i = 0;i < 10;i++)
{
UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp3[i] & 0x00ff);
UART1_TX_BUF[2 * i + 1] = (char)((ADC_BUF_Temp3[i] >> 8) & 0x00ff);
}
// 設(shè)置幀結(jié)束標(biāo)記
UART1_TX_BUF[20] = 0xaa;
UART1_TX_BUF[21] = 0xaa;
nTX1_Len = 22; //發(fā)送數(shù)據(jù)的長(zhǎng)度
IFG2 |= UTXIFG1;// 設(shè)置中斷標(biāo)志
while(1) // 等待緩沖區(qū)里的數(shù)據(jù)發(fā)送完畢
{
if(nTX1_Flag == 1) break;
}
// 將數(shù)據(jù)由字轉(zhuǎn)換成字節(jié)
for(i = 0;i < 10;i++)
{
UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp4[i] & 0x00ff);
UART1_TX_BUF[2 * i + 1] = (char)((ADC_BUF_Temp4[i] >> 8) & 0x00ff);
}
// 設(shè)置幀結(jié)束標(biāo)記
UART1_TX_BUF[20] = 0xaa;
UART1_TX_BUF[21] = 0xaa;
nTX1_Len = 22; //發(fā)送數(shù)據(jù)的長(zhǎng)度
IFG2 |= UTXIFG1;// 設(shè)置中斷標(biāo)志
while(1) // 等待緩沖區(qū)里的數(shù)據(jù)發(fā)送完畢
{
if(nTX1_Flag == 1) break;
}
// 將數(shù)據(jù)由字轉(zhuǎn)換成字節(jié)
for(i = 0;i < 10;i++)
{
UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp5[i] & 0x00ff);
UART1_TX_BUF[2 * i + 1] = (char)((ADC_BUF_Temp5[i] >> 8) & 0x00ff);
}
// 設(shè)置幀結(jié)束標(biāo)記
UART1_TX_BUF[20] = 0xaa;
UART1_TX_BUF[21] = 0xaa;
nTX1_Len = 22; //發(fā)送數(shù)據(jù)的長(zhǎng)度
IFG2 |= UTXIFG1;// 設(shè)置中斷標(biāo)志
while(1) // 等待緩沖區(qū)里的數(shù)據(jù)發(fā)送完畢
{
if(nTX1_Flag == 1) break;
}
// 將數(shù)據(jù)由字轉(zhuǎn)換成字節(jié)
for(i = 0;i < 10;i++)
{
UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp6[i] & 0x00ff);
UART1_TX_BUF[2 * i + 1] = (char)((ADC_BUF_Temp6[i] >> 8) & 0x00ff);
}
// 設(shè)置幀結(jié)束標(biāo)記
UART1_TX_BUF[20] = 0xaa;
UART1_TX_BUF[21] = 0xaa;
nTX1_Len = 22; //發(fā)送數(shù)據(jù)的長(zhǎng)度
IFG2 |= UTXIFG1;// 設(shè)置中斷標(biāo)志
while(1) // 等待緩沖區(qū)里的數(shù)據(jù)發(fā)送完畢
{
if(nTX1_Flag == 1) break;
}
// 將數(shù)據(jù)由字轉(zhuǎn)換成字節(jié)
for(i = 0;i < 10;i++)
{
UART1_TX_BUF[2 * i] = (char)(ADC_BUF_Temp7[i] & 0x00ff);
UART1_TX_BUF[2 * i + 1] = (char)((ADC_BUF_Temp7[i] >> 8) & 0x00ff);
}
// 設(shè)置幀結(jié)束標(biāo)記
UART1_TX_BUF[20] = 0xaa;
UART1_TX_BUF[21] = 0xaa;
nTX1_Len = 22; //發(fā)送數(shù)據(jù)的長(zhǎng)度
IFG2 |= UTXIFG1;// 設(shè)置中斷標(biāo)志
}
// 處理接收數(shù)據(jù)
if(nRev_UART1 == 1)
{
nRev_UART1 = 0;
for(i = 0;i < nRX1_Len;i++)
UART1_RX_TEMP[i] = UART1_RX_BUF[i];
}
}
}
//////////////////////////////////////////////
// 定時(shí)器中斷,完成 ADC 轉(zhuǎn)換
interrupt [TIMERA0_VECTOR] void TimerA_ISR(void)
{
int results[8];
int i;
ADC12CTL0 &= ~ENC; // 關(guān)閉轉(zhuǎn)換
ADC_BUF0[nADC_Count] = ADC12MEM0; // 讀出轉(zhuǎn)換結(jié)果
ADC_BUF1[nADC_Count] = ADC12MEM1; // 讀出轉(zhuǎn)換結(jié)果
ADC_BUF2[nADC_Count] = ADC12MEM2; // 讀出轉(zhuǎn)換結(jié)果
ADC_BUF3[nADC_Count] = ADC12MEM3; // 讀出轉(zhuǎn)換結(jié)果
ADC_BUF4[nADC_Count] = ADC12MEM4; // 讀出轉(zhuǎn)換結(jié)果
ADC_BUF5[nADC_Count] = ADC12MEM5; // 讀出轉(zhuǎn)換結(jié)果
ADC_BUF6[nADC_Count] = ADC12MEM6; // 讀出轉(zhuǎn)換結(jié)果
ADC_BUF7[nADC_Count] = ADC12MEM7; // 讀出轉(zhuǎn)換結(jié)果
nADC_Count += 1;
if(nADC_Count == 10)
{
nADC_Flag = 1; //設(shè)置標(biāo)志
nADC_Count = 0;
// 將數(shù)據(jù)倒向數(shù)據(jù)緩沖區(qū)
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; // 開(kāi)啟轉(zhuǎn)換
}
///////////////////////////////////////////
// 用于定時(shí)器B中斷,完成數(shù)字量采集
interrupt [TIMERB0_VECTOR] void TimerB_ISR(void)
{
int i;
P4OUT |= BIT0; // 打開(kāi)采集
Delay_us(100); // 延遲一點(diǎn)時(shí)間
D_BUF[nD_Count] = P5IN; // 讀出采集結(jié)果
nD_Count += 1;
if(nD_Count == 10)
{
nD_Flag = 1; //設(shè)置標(biāo)志
nD_Count = 0;
// 將數(shù)據(jù)倒向數(shù)據(jù)緩沖區(qū)
for(i = 0;i < 10;i++) D_BUF_Temp[i] = D_BUF[i];
}
P4OUT &= ~(BIT0); // 關(guān)閉采集
}
///////////////////////////////////////
// 處理來(lái)自串口 1 的接收中斷
interrupt [UART1RX_VECTOR] void UART1_RX_ISR(void)
{
UART1_RX_BUF[nRX1_Len_temp] = RXBUF1; //接收來(lái)自的數(shù)據(jù)
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;
}
}
///////////////////////////////////////
// 處理來(lái)自串口 1 的發(fā)送中斷
interrupt [UART1TX_VECTOR] void UART1_TX_ISR(void)
{
if(nTX1_Len != 0)
{
nTX1_Flag = 0; // 表示緩沖區(qū)里的數(shù)據(jù)沒(méi)有發(fā)送完
TXBUF1 = UART1_TX_BUF[nSend_TX1];
nSend_TX1 += 1;
if(nSend_TX1 >= nTX1_Len)
{
nSend_TX1 = 0;
nTX1_Len = 0;
nTX1_Flag = 1;
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -