标题:
关于加通讯协议的串口通讯问题
[打印本页]
作者:
a2466923922
时间:
2015-10-25 15:50
标题:
关于加通讯协议的串口通讯问题
想在串口助手输入55 aa 03 01 02 03 06 在接收区收到01 02 03 试了好多次 不能成功 求大神帮助
/*-----------------------------------------------
名称:串口通信
编写:shifang
日期:2009.5
修改:无
内容:连接好串口或者usb转串口至电脑,下载该程序,打开电源
打开串口调试程序,将波特率设置为9600,无奇偶校验
晶振11.0592MHz,发送和接收使用的格式相同,如都使用
字符型格式,按复位重启程序,可以看到接收到 UART test, 请在发送区输入任意信
然后在发送区发送任意信息,接收区返回同样信息,表明串口收发无误
------------------------------------------------*/
/*-----------------------------------------------
名称:串口通信
编写:shifang
日期:2009.5
修改:无
内容:连接好串口或者usb转串口至电脑,下载该程序,打开电源
打开串口调试程序,将波特率设置为9600,无奇偶校验
晶振11.0592MHz,发送和接收使用的格式相同,如都使用
字符型格式,按复位重启程序,可以看到接收到 UART test, 请在发送区输入任意信
然后在发送区发送任意信息,接收区返回同样信息,表明串口收发无误
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/*------------------------------------------------
函数声明
------------------------------------------------*/
void SendStr(unsigned char *s);
/*------------------------------------------------
串口初始化
------------------------------------------------*/
unsigned char re[30];
unsigned char tx[30];
unsigned char sum[30];
int i=0,j=0,k=0,a=0,b=0,c=0;
unsigned char DataLong,and;
void InitUART (void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
// ES = 1; //打开串口中断
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
InitUART();
SendStr("UART test,请在发送区输入任意信息");
ES = 1; //打开串口中断
while (1)
{
SendStr("UART test,请在发送区输入任意信息");
}
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}
/*------------------------------------------------
串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
// unsigned char Temp; //定义临时变量
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
re[i]=SBUF; //读入缓冲区的值
if(j=0)
{
if(re[0]==0x55) j=1;
else j=0;
while(!TI);
TI = 0;
}
else if(j=1)
{
if(re[1]==0xaa) j=2;
else j=0;
while(!TI);
TI = 0;
}
else if(j==2)
{
DataLong=re[2];
j=3;
while(!TI);
TI = 0;
}
else if((j>=3)&&j<=(3+DataLong))
{
sum[k++]=re[i];
j++;
while(!TI);
TI = 0;
}
else if(j==4+DataLong)
{
tx[0]=re[i];
for(a=0;a<DataLong;a++)
{
and+=sum[a];
and=and&&0xff;
}
if(and==tx[0])
for(c=0;c<DataLong;c++)
{
SBUF =sum[c++];
while(!TI);
TI = 0;
}
else j=0;
}
i++,j++;
if(i=30) i=0;
if(j=30) j=0;
if(TI) //如果是发送标志位,清零
TI=0;
}
}
}
复制代码
作者:
匠人匠心
时间:
2015-10-25 19:22
TL1 = 1;
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1