|
大家好~ 我又来了~
这个程序也很简单,串口调试助手发给单片机,单片机再发回串口调试助手~ 那么接收区就应该是发送区的吧~
现在是用RS485传输了~ 计算机串口接了个RS232转485的转换器~ 然后单片机这边是通过75176芯片~~~
我写的程序这样的、、
#include<reg52.h>
sbit RandD=P3^5;
unsigned char flag,a;
void main()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1; //至此为设置波特率
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
RandD=0; //接收
while(1)
{
if(flag==1) //此时接收的数据在a中
{
ES=0; //关串口中断,防止发送中断再次进入中断函数
flag=0;
SBUF=a; //a中的数发送到发送缓冲器中
while(!TI); //TI为1时,继续~ 即发送完毕
TI=0;
ES=1;
RandD=0;
}
}
}
void ser() interrupt 4 //串口接收中断
{
RI=0; //软件清零
a=SBUF; //SBUF中接收到的数据赋给a
RandD=1;
flag=1;
}
那个RandD是使能,高电平发送,低电平接收~~~
问题出来了,串口调试助手里,16进制收发~~ 如果发01,收到81,发02,收到82~~ 发45,收到C5; 发7F,收到FF,比这大的数才收发正常~
这是什么原因呢? 不知道各位有没有碰到这样的情况~~ 我调试助手的波特率是9600~~~~ |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|