串口调试助手通信调试原理图PCB及使用手册文档格式.docx
《串口调试助手通信调试原理图PCB及使用手册文档格式.docx》由会员分享,可在线阅读,更多相关《串口调试助手通信调试原理图PCB及使用手册文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
【原理图】
【PCB图】
【元件清单】
【应用举例】
【应用举例2】
例如:
将下面一组数据通过串口发送给电脑。
波特率是9600,电脑用串口助手显示出来。
数据是:
A0B2CCFFEFD89088
第一步:
板子供电,串口连接电脑,查看串口号。
如下图:
我的电脑--属性--硬件---设备管理器---端口设备。
第二步:
打开串口助手,设置对应的串口号和十六进制显示。
第三步:
从发送板,按下下面一组数据,数据是:
A0B2CCFFEFD89088数据按完之后,按发送键“S2”,如果数据输入错误,可以按”S1”按键清零,重新输入。
如果要发送多遍,重复按“S2”按键。
单遍发送如下图。
【源代码程序】
/*
一次最多发送20组数据,大于这个数据就不再发送
*/
#include<
STC12C5A60S2.H>
#defineucharunsignedchar
#defineuintunsignedint
/**************************************************************/
unsignedcharT0RH=0;
//T0重载值的高字节
unsignedcharT0RL=0;
//T0重载值的低字节
externvoidUartDriver();
//串口驱动函数,监测数据帧的接收,调度功能函数,需在主循环中调用
externvoidConfigUART(unsignedintbaud);
//串口配置函数,baud-通信波特率
externvoidConfigUART1(unsignedintbaud1);
//串口配置函数,baud-通信波特率
externvoidUartRxMonitor(unsignedcharms);
//串口接收监控,由空闲时间判定帧结束,需在定时中断中调用,ms-定时间隔
externvoidSendString(char*s);
externvoidUartWrite(unsignedchar*buf,unsignedcharlen);
//串口数据写入,即串口发送函数,buf-待发送数据的指针,len-指定的发送长度
externvoidfengming();
ucharzh[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
ucharjieshou[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
ucharjj=0;
/*****************************************************************/
sbitout0=P2^0;
sbitout1=P2^1;
sbitout2=P2^2;
sbitout3=P2^3;
sbitin0=P2^4;
sbitin1=P2^5;
sbitin2=P2^6;
sbitin3=P2^7;
sbitsmgk=P3^6;
sbitboma1=P1^1;
sbitboma2=P1^0;
bitd1=1;
bitd2=1;
sbitin4=P1^6;
sbitin5=P1^5;
ucharcodexianshi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
uchardangqianzhuangtai[4][4]={{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
voidt0()interrupt1
{
uchari;
staticucharlie=0;
staticucharsao[2]={1,1};
staticucharsaomiaobaocun[4][4]={{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff}};
TH0=0xfc;
TL0=0x67;
UartRxMonitor
(1);
//串口接收监控
sao[0]=(sao[0]<
<
1)|in4;
sao[1]=(sao[1]<
1)|in5;
saomiaobaocun[lie][0]=(saomiaobaocun[lie][0]<
1)|in0;
saomiaobaocun[lie][1]=(saomiaobaocun[lie][1]<
1)|in1;
saomiaobaocun[lie][2]=(saomiaobaocun[lie][2]<
1)|in2;
saomiaobaocun[lie][3]=(saomiaobaocun[lie][3]<
1)|in3;
if(sao[0]==0x00)
{
d1=0;
}
elseif(sao[0]==0xff)
d1=1;
if(sao[1]==0x00)
d2=0;
elseif(sao[1]==0xff)
d2=1;
for(i=0;
i<
4;
i++)
if((saomiaobaocun[lie][i]&
0x0f)==0x00)
dangqianzhuangtai[lie][i]=0;
elseif((saomiaobaocun[lie][i]&
0x0f)==0x0f)
dangqianzhuangtai[lie][i]=1;
lie++;
lie=lie&
0x03;
switch(lie)
case0:
out1=1;
out2=1;
out3=1;
out0=0;
break;
case1:
out0=1;
out1=0;
case2:
out2=0;
case3:
out3=0;
}
voidmain()
uchari,j;
bitq1=1;
bitq2=1;
ucharqianyicizhuangtai[4][4]={{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
smgk=0;
TMOD=0x01;
TR0=1;
EA=1;
ET0=1;
P0=xianshi[16];
//ConfigUART(9600);
//配置波特率为9600
while
(1)
UartDriver();
//调用串口驱动
if((boma1==0)&
&
(boma2!
=0))
ConfigUART(2400);
//配置波特率为1200
if((boma2==0)&
(boma1!
ConfigUART(4800);
//配置波特率为4800
(boma2==0))
ConfigUART(9600);
//配置波特率为9600
if((boma1!
=0)&
ConfigUART1(19200);
//配置波特率为19200
if(d1!
=q1)
q1=d1;
if(d1==0)
{
if((jj!
(jj<
=2))
{
zh[0]=jieshou[0]|jieshou[1];
UartWrite(zh,1);
fengming();
}
if((jj>
2)&
=4))
zh[1]=jieshou[2]|jieshou[3];
UartWrite(zh,2);
4)&
=6))
zh[2]=jieshou[4]|jieshou[5];
UartWrite(zh,3);
6)&
=8))
zh[3]=jieshou[6]|jieshou[7];
UartWrite(zh,4);
8)&
=10))
zh[4]=jieshou[8]|jieshou[9];
UartWrite(zh,5);
10)&
=12))
zh[5]=jieshou[10]|jieshou[11];
UartWrite(zh,6);
if((jj>
12)&
=14))
zh[6]=jieshou[12]|jieshou[13];
UartWrite(zh,7);
14)&
=16))
zh[7]=jieshou[14]|jieshou[15];
UartWrite(zh,8);
if((jj>
16)&
=18))
zh[8]=jieshou[16]|jieshou[17];
UartWrite(zh,9);
if((jj>
18)&
=20))
zh[9]=jieshou[18]|jieshou[19];
UartWrite(zh,10);
}
if(d2!
=q2)
q2=d2;
if(d2==0)
jj=0;
jieshou[0]=0x00;
jieshou[1]=0x00;
jieshou[2]=0x00;
jieshou[3]=0x00;
jieshou[4]=0x00;
jieshou[5]=0x00;
jieshou[6]=0x00;
jieshou[7]=0x00;
jieshou[8]=0x00;
jieshou[9]=0x00;
P0=xianshi[16];
fengming();
for(j=0;
j<
j++)
{
if(dangqianzhuangtai[i][j]!
=qianyicizhuangtai[i][j])
qianyicizhuangtai[i][j]=dangqianzhuangtai[i][j];
if(qianyicizhuangtai[i][j]!
=0)
jj++;
if((i*4+j)<
9)
{
P0=xianshi[i*4+j+1];
}
if((i*4+j)==9)
P0=xianshi[0];
if((i*4+j)>
P0=xianshi[i*4+j];
fengming();
/******************1组**************************/
if(jj==1)
//jieshou[0]=i*4+j;
//jieshou[0]=jieshou[0]<
4;
if((i*4+j)<
{
jieshou[0]=i*4+j+1;
}
if((i*4+j)==9)
jieshou[0]=0;
if((i*4+j)>
jieshou[0]=i*4+j;
jieshou[0]=jieshou[0]<
if(jj==2)
//jieshou[1]=i*4+j;
jieshou[1]=i*4+j+1;
jieshou[1]=0;
jieshou[1]=i*4+j;
/******************2组**************************/
if(jj==3)
//jieshou[2]=i*4+j;
jieshou[2]=i*4+j+1;
jieshou[2]=0;
jieshou[2]=i*4+j;
jieshou[2]=jieshou[2]<
if(jj==4)
//jieshou[3]=i*4+j;
jieshou[3]=i*4+j+1;
jieshou[3]=0;
jieshou[3]=i*4+j;
}
/******************3组**************************/
if(jj==5)
//jieshou[4]=i*4+j;
jieshou[4]=i*4+j+1;
jieshou[4]=0;
jieshou[4]=i*4+j;
jieshou[4]=jieshou[4]<
if(jj==6)
//jieshou[5]=i*4+j;