找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1370|回复: 2
打印 上一主题 下一主题
收起左侧

关于单片机串口的一些问题(一只菜鸟的学习51记录贴(2))

[复制链接]
跳转到指定楼层
楼主
ID:395354 发表于 2018-9-9 17:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
----一只菜鸟的学习51记录贴(2)----
------关于一点串口的理解--轻喷--求大神指点-哦耶----
1.串口通信和串行通信不一样,概念不要混淆!(自己一直没有发现这一点)-------简单说串口是一种数据传输的手段,串行是一种概念。
2.串行通信->异步传输的几个要点
2.1字符格式:
异步传输时候数据是以帧为单位传送的,各帧字符之间存在空闲位,而不是连续发送。
(补充帧:一帧理解成
包括起始位+8个数据位+奇偶校验位+结束位)

2.2波特率个人理解:1.1定义:每秒传送二进制代码的速度
                              1.2为什么设置波特率:为了保证数据没有错误
(好比两个人行走,中间有条绳子挂在两个人身上,如果两个人的速度不一样,绳子肯定会在一个时间点断掉)

2.3波特率和字符格式一旦有问题异步传输就gg。
3.串口通信(针对异步传输)
/********************************************************************************************/

PC和单片机

void delay(int i)
{
  while(i--)
  {}
}
void ser_init()
{
SCON=0X50;   
TMOD=0X20;   
PCON=0X80;   
TH1=0XF3;   
TL1=0XF3;
ES=1;     
EA=1;   
TR1=1;   
}
void ser() interrupt 4
{
    unsigned char  receivedata;
receivedata=SBUF;
RI = 0;
SBUF=receivedata;
while(!TI);
TI=0;
delay(10000);          **** //问题//*****
}
main()
{
  ser_init();
  while(1)
  {
  
  }
}

/********************************************************************************************/
想法一:
我在中断函数里面加了延时
发现发送“123456789”
结果只能发送“12” 后面的数据就丢失了
能不能理解为:
单片机产生中断的时候 PC也正在以之前的波特率发送数据,当单片机中断完成时候,之前的数据就被覆盖了。可是按我这个理解单片机应该收到“19”而不是“12”啊
想法二:
1.既然中断会占用单片机的时间,是不是可以说单片机的波特率事实上是有误差,中断的时间越长,波特率的误差也就越大。
2.所以说传送很大的数据的时候,通过串口这样的方法会产生数据的丢失??



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:394504 发表于 2018-9-9 20:08 | 只看该作者
应该是程序崩溃了  如果你在串口中断延时 则中断程序未返回保留在栈段  下一个中断又来了 继续进入栈段 多次后 栈段一直未释放 栈段溢出 程序就蹦了 所以一般 串口中断 和定时器中断 函数中 要关闭中断允许位在延时  
回复

使用道具 举报

板凳
ID:387733 发表于 2018-9-10 08:29 | 只看该作者
中断里面加延时是很不好的习惯,一定要克服。中断是暂停别的工作,临时处理应急事项,应该尽快完成,否则会影响别的工作。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表