- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51串口通信C程序--模块集合.doc
本文以51单片机控制四路开关量输入/六路开关量输出为例,设计了一个简单的上位机下位机通信作品,作为模块学习和整理,供读者参考!
难为,2010-11-28,于上海!
四路开关量输入/六路开关量输出C语言程序
#includereg51.h
#define uint unsigned int
#define uchar unsigned char
uchar indata[4];
uchar outdata[4];
volatile uchar temp1 = 0,temp2 = 0;
uchar i,j;
void initial_comm(void)
{
SCON = 0x50; //设定串行口工作方式:mode 1 ; 8-bit UART,enable ucvr
TMOD = 0x21; //TIMER 1;mode 2 ;8-Bit Reload
PCON = 0x80; //波特率不加倍SMOD = 1
TH1 = 0xfa; //baud: 9600;fosc = 11.0596
IE = 0x90; // enable serial interrupt
TR1 = 1; // timer 1
}
void uart_send(void)
{
ES = 0;
if(indata[3] == indata[0]^indata[1]^indata[2])
{
if(indata[1]== 0x01)
{
temp1 = P0;
temp1 = temp10x0f;
outdata[0] = 0xee;
outdata[1] = 0x02;
outdata[2] = temp1;
outdata[3] = outdata[0]^outdata[1]^outdata[2];
for(i=0;i4;i++)
{
SBUF = outdata[i];
while(TI == 0);
TI = 0;
}
}
if(indata[1]== 0x03)
{
temp2 = indata[2];
P1 = temp2;
}
if(indata[1]==0x04)
{
outdata[0] = 0xee;
outdata[1] = 0x05;
outdata[2] = temp2;
outdata[3] = outdata[0]^outdata[1]^outdata[2];
for(i=0;i4;i++)
{
SBUF = outdata[i];
while(TI == 0);
TI = 0;
}
}
}
ES = 1;
}
void main()
{
initial_comm();
ES = 1;
while(1)
{
uart_send();
}
}
void uart_receive(void) interrupt 4
{
RI = 0;
for(j=0;j4;j++)
{
indata[j] = SBUF;
while(RI==0);
RI =0;
}
}
四路开关量输入/六路开关量输出通讯协议
通信设置: 波特率 9600b/s
1位起始位 8位数据位 无校验位 1位停止位
命令格式:
区别码(1字节) + Command(1字节) + Content(1字节)+ Xor(1字节)
区别码: 上位发送/单片机接收:0xff
单片机发送/上位机接收 :0xee
Command = 0x01 上位机命令单片机读取四路输入开关量的输入状态
如:0xff + 0x01 + 0x00 + Xor
Command = 0x02 单片机返回四路输入状态给上位机
此时,Content 的1字节中的低四位分别表示四路开关量的输入状态
1表示输入高电平,0表示输入低电平
第一路输入(第0位)
第二位输入(第1位)
第三路输入(第2位)
第四路输入(第3位)
如:假设某一时刻四路输入开关量的输入状态为0x03,上位机读取其状态为:
0xee + 0x02 + 0x03 + Xor
Command = 0x03 上位机命令单片机控制六路输出的输出状态
此时
文档评论(0)