单片机/MCU论坛
登录
直播中
szlcw
13年用户
5经验值
擅长:基础元器件
私信
关注
[问答]
单片机串口通信带奇偶校验的问题
开启该帖子的消息推送
奇偶校验
单片机
串口通信
为什么我用两个
单片机
做实验,一个很简单的程序,让甲发送信息(0x60)给乙,在没收到乙的反馈信息(0x50)前,甲一直发送数据,而乙接收到数据后就发送个反馈信息给甲。为什么乙每次都能收到甲的信息,但乙的反馈信息却传不回甲处?极少数情况能传回甲处。
另外,不知我的奇校验子程序是否有问题呢?能提供个串口
通信
带奇偶校验例程吗?!
这是我的程序:
甲单片机:
#include
#define uchar unsigned char
#define uint unsigned int
***it start=P0^0;//发光二极管,用来检测数据是否在发送
unsigned char a=0xff,i=100,b,jieshou;
void delay(unsigned int m) //延时程序
{
unsigned int i,j;
for(i=0; i
for(j=0; j<110; j++);
}
bit jiaoyan(uchar m)//奇校验
{
int i;
bit tmp;
for(i=0;i<8;i++)
{
tmp=tmp^m&0x01;
m>>=1;
}
tmp=~tmp;
return tmp;
}
void main()
{
SCON=0xd0;//串口通信方式3
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;//开计数器
EA=1;
ES=1;//开串口中断
ti
=0;
RI=0;
while(jieshou!=0x50)
{
TB8=jiaoyan(0x60);
SBUF=0x60;
delay(1100);
start=0;
delay(1100);
start=1;
}
start=0;
while(1);
}
void ser0() interrupt 4//串口中断
{
uchar temp;
ES=0;
if(TI==1)
{ TI=0;
}
if(RI==1)
{
temp=SBUF;
if(RB8==jiaoyan(temp))
{
jieshou=temp;
}
// else
// {jieshou=0xff;}
RI=0;
}
ES=1;
}
乙单片机:
#include
#define uchar unsigned char
#define uint unsigned int
***it start=P0^0;//发光二极管,用来检测数据是否在发送
unsigned char a=0xff,i=100,b,jieshou,xh=1;
void delay(unsigned int m) //延时程序
{
unsigned int i,j;
for(i=0; i
for(j=0; j<110; j++);
}
bit jiaoyan(uchar m)//奇校验
{
int i;
bit tmp;
for(i=0;i<8;i++)
{
tmp=tmp^m&0x01;
m>>=1;
}
tmp=~tmp;
return tmp;
}
void main()
{
SCON=0xd0;//串口通信方式3
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;//开计数器
EA=1;
ES=1;//开串口中断
TI=0;
RI=0;
while(jieshou!=0x60);
while(jieshou==0x60)(这个语句总是判断不到,当接收到甲的信号后,就直接跳到下一个语句停在while(1);处了,而不是进行循环发送,而我如果改成while(i--);就能进行循环,但要在发送几十次后才能成功让甲单片机收到信号)
{
TB8=jiaoyan(0x50);
SBUF=0x50;
start=0;
delay(2200);
start=1;
delay(1100);
}
start=0;
while(1);
}
void ser0() interrupt 4//串口中断
{
uchar temp;
ES=0;
if(TI==1)
{ TI=0;
}
if(RI==1)
{
temp=SBUF;
if(RB8==jiaoyan(temp))
{
jieshou=temp;
}
// else
// {jieshou=0xff;}
RI=0;
}
ES=1;
}
回帖
(10)
z00
2014-4-23 11:25:42
甲一直发送数据,而乙接收到数据后就发送个反馈信息给甲。
-------------------
甲不能一直处于发送状态,应该是发送完成后立即进入接收状态才能及时收到乙方反馈的信息
甲一直发送数据,而乙接收到数据后就发送个反馈信息给甲。
-------------------
甲不能一直处于发送状态,应该是发送完成后立即进入接收状态才能及时收到乙方反馈的信息
举报
z00
2014-4-23 11:26:18
单片机间的串口通信方式3带奇偶校验的通信:
bit jiaoyan(uchar m)//奇校验
{
int i;
bit tmp;
for(i=0;i<8;i++)
{
tmp=tmp^m&0x01;
m>>=1;
}
tmp=~tmp;
return tmp;
}
for(i=0;i<16;i++) //使其一次发送 15个数据
{
while (!TI0); // 等待发送1个字节数据完成
TI0=0; // 清除中断标志
ACC=T_Sbuf[i]; // 发送数据到ACC
ACC +=Zero;
TB80=P; //奇效验
SBUF0=T_Sbuf[i]; // 发送数据到uart0
}
单片机间的串口通信方式3带奇偶校验的通信:
bit jiaoyan(uchar m)//奇校验
{
int i;
bit tmp;
for(i=0;i<8;i++)
{
tmp=tmp^m&0x01;
m>>=1;
}
tmp=~tmp;
return tmp;
}
for(i=0;i<16;i++) //使其一次发送 15个数据
{
while (!TI0); // 等待发送1个字节数据完成
TI0=0; // 清除中断标志
ACC=T_Sbuf[i]; // 发送数据到ACC
ACC +=Zero;
TB80=P; //奇效验
SBUF0=T_Sbuf[i]; // 发送数据到uart0
}
举报
陈锐文
2014-4-24 14:40:58
有一个问题,就是你主函数和中断函数都调用了校验这个函数。有可能产生混乱。你可以先试一下用方式1。看看有没问题再用方式2。
有一个问题,就是你主函数和中断函数都调用了校验这个函数。有可能产生混乱。你可以先试一下用方式1。看看有没问题再用方式2。
举报
331933
2014-4-26 14:39:43
这个。。。。是不是不该在中断函数中,调用奇偶校验的运算?在中断函数中,应该尽可能做少的事吧?
if(RB8==jiaoyan(temp)) 这句话改掉试试看
这个。。。。是不是不该在中断函数中,调用奇偶校验的运算?在中断函数中,应该尽可能做少的事吧?
if(RB8==jiaoyan(temp)) 这句话改掉试试看
举报
331933
2014-4-26 14:48:24
我去!!这贴是2011年发的啊???!!!
我去!!这贴是2011年发的啊???!!!
举报
youzizhile
2014-4-26 19:11:39
while(jieshou!=0x60);
while(jieshou==0x60)。。。
while(1);
这几个while循环一旦退出后就不会在进入了,可以在检查下编程和测试流程
while(jieshou!=0x60);
while(jieshou==0x60)。。。
while(1);
这几个while循环一旦退出后就不会在进入了,可以在检查下编程和测试流程
举报
松菇
2015-12-9 22:41:21
。。。。。。
。。。。。。
举报
1103533351
2015-12-10 08:01:25
这个。。。。是不是不该在中断函数中,调用奇偶校验的运算?在中断函数中,应该尽可能做少的事吧?
if(RB8==jiaoyan(temp)) 这句话改掉试试看
这个。。。。是不是不该在中断函数中,调用奇偶校验的运算?在中断函数中,应该尽可能做少的事吧?
if(RB8==jiaoyan(temp)) 这句话改掉试试看
举报
h1654155960.8359
2017-2-21 16:05:31
不错的文档,很受用
不错的文档,很受用
举报
让我
2017-9-20 16:03:47
好在艰难慢了无数倍
好在艰难慢了无数倍
举报
更多回帖
rotate(-90deg);
回复
相关问答
奇偶校验
单片机
串口通信
STM32F103
单片机
串口
通信
带
奇偶校验
位的代码分享
2021-12-03
2209
串口
收发
奇偶校验
问题的解决办法?
2020-08-21
2198
如何应用ARM
串口
通信
奇偶校验
功能实现9位方式的多
机
通信
?
2021-04-27
2212
STM32
串口
通信
如何使用
奇偶校验
?
2021-12-10
1921
如何解决STM32使用
串口
奇偶校验
遇到的问题?
2021-12-06
1888
串口
调试助手的
奇偶校验
测试方法
2015-04-28
9737
STM32是怎样使用
带
奇偶校验
位的
串口
一次发送9位数据的
2021-12-10
2528
stm8s
串口
奇偶校验
学习笔记分享,错过绝对后悔
2021-12-16
917
PIC24FJ在标记
奇偶校验
时唤醒,
奇偶校验
位设置为1
2019-10-08
1520
STM32移植freemodbus后测试时设置
奇偶校验
时无法与上位
机
通讯怎么解决?
2021-12-03
668
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分