?? main1.c
字號:
/*
無線通信協議服務器端 (SEVER)
*/
#include "in430.h"
#include "io430x13x.h"
//服務器端通信協議棧
#define COMMUNICATION_OK 1 //握手信號連接正常
#define COMMUNICATION_FAIL 2 //握手信號連接異常
#define RESEND_DATA 3 //要求重新發送
#define SEND_DATA 4 //要求發送
#define RECEIVE_CONFLICT 5 //接收沖突
#define LINK_REQ 6 //連接請求來自客戶端
#define LinkHandFlg 0X01 //通信握手標志
#define ResetDataFlg 0X02 //讀指令字
#define WriteFlg 0X04 //讀指令字
#define Format_1 0X08 //指令結束格式 ?
#define Format_2 0X10 //指令結束格式 :
#define Format_3 0X20 //指令結束格式 ~
#define CheckOk 0X40 //指令校驗正確標志
#define SendDataFlg 0X80 //發送數據指令
//波特率定義
#define Baud1 115200 //波特率12
#define Baud2 76800 //波特率2
#define Baud3 57600 //波特率2
#define Baud4 38400 //波特率3
#define Baud5 19200 //波特率4
#define Baud6 9600 //波特率5
#define Baud7 4800 //波特率6
#define BaudDefault 0X05 //設定默認波特率為 9600bps
//地址段一
#define GroupNumber 20 //通信組號
#define Address 0X5F //服務器地址,終端接收均要處理
//常量定義
unsigned char const ADDRESS[100] ={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b',
'c','d','e','f','g','h','i','j','k','l','m','n','o','p',
'q','r','s','t','u','v','w','x','y','z'
};
unsigned long const Baud[] = {115200,76800,57600,38400,19200,9600,4800};
unsigned char const BaudRate[][3] = {{0x22,0x00,0xED}, {0x34,0x00,0x40}, {0x45,0x00,0x4A}, {0x68,0x00,0x40},
{0xD0,0x00,0x40}, {0xA0,0x01,0xC0}, {0x41,0x03,0x00}};
unsigned char const CodeTable[][8] = {{Address,Address, '<','{','?',':','+','~'}, //握手指令
{Address,Address, '<','z','?',':','*','~'}, // 讀不良品數據指令
{Address,Address, '<','b','?',':','"','~'}, //不良品數據清零指令
{Address,Address, '>','z'}, //寫不良品數據指令
{Address,Address, '0','~'} //數據發送錯誤指令
};
unsigned char const AsciiTable[] = {0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39}; //ASCII編碼表
//變量定義
unsigned char ClientID; //終端地址
unsigned char ReceiveBuff[100]; //接收緩沖
unsigned char TransmitBuff[100]; //發送緩沖
unsigned char TotalProTemp[9][4]; //用于數據拆包臨時變量
unsigned int TotalPro[10]; //數據存放數組
unsigned int Flag; //標志
//函數的聲明
void Init();
void SysInit();
void Send(char* buff, unsigned char counter); //發送函數
void DataPack(); //數據轉換函數
int main( void )
{
return 0;
}
void Init()
{
//利用P2、P3口實現按鍵掃描
_DINT();
SysInit(); //打開主震蕩器
P1IE = 0X70; //允許P1.4中斷
P1SEL = 0X00;
P1IES = 0X70; //下降沿觸發
P1IFG = 0X00;
P1DIR = 0X80; //P1口設置為鍵盤輸入口,可中斷
P1OUT |= P1OUT_7; // 八腳拉高。置位輸出
P3DIR = 0X1F; //輸出端口驅動LED
P3OUT = 0X1F;
P3SEL = 0X30; //使用外部模塊用于UART串行口通信
P5DIR = 0XFF; //輸出端口驅動LED
P5OUT = 0X00;
P6DIR = 0X00; //監測p6.4電源端狀態
TACTL = TASSEL_1 + MC_1; //定時器A 32768HZ 中斷
TACCTL0 = CCIE; //允許定時器A中斷
TACCR0 = 3276; //定時時間為100ms
U0CTL &= ~SWRST; // Release USART
ME1 |= UTXE0 + URXE0; //使能RX TX
U0CTL = 0;
U0CTL = CHAR+PENA; //一位停止位\8位數據位\奇校驗允許
U0TCTL = 0;
U0TCTL = SSEL1; //主時鐘選擇MCLK, 4MHZ
U0RCTL = URXEIE; //發送錯誤允許中斷
IE1 |= URXIE0 ; //允許RX TX中斷
U0BR0 = BaudRate[BaudDefault][0]; //默認波特率為 19200
U0BR1 = BaudRate[BaudDefault][1];
UMCTL0 = BaudRate[BaudDefault][2];
_EINT();
}
void SysInit()
{
unsigned int iq0;
BCSCTL1 &= ~XT2OFF; //打開XT2振蕩器
do
{
IFG1 &= ~OFIFG; // 清除振蕩器失效標志
for(iq0=0xFF; iq0>0; iq0--); // 延時,等待XT2起振
}
while((IFG1 & OFIFG) != 0); // 判斷XT2是否起振
BCSCTL2 = SELM_2 + SELS; //選擇MCLK為XT2
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -