📄 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 + -