标题:
关于单片机串口的一些问题(一只菜鸟的学习51记录贴(2))
[打印本页]
作者:
一念逐光
时间:
2018-9-9 17:23
标题:
关于单片机串口的一些问题(一只菜鸟的学习51记录贴(2))
-
---一只菜鸟的学习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.所以说传送很大的数据的时候,通过串口这样的方法会产生数据的丢失??
作者:
qingfengyu
时间:
2018-9-9 20:08
应该是程序崩溃了 如果你在串口中断延时 则中断程序未返回保留在栈段 下一个中断又来了 继续进入栈段 多次后 栈段一直未释放 栈段溢出 程序就蹦了 所以一般 串口中断 和定时器中断 函数中 要关闭中断允许位在延时
作者:
sxhwdz
时间:
2018-9-10 08:29
中断里面加延时是很不好的习惯,一定要克服。中断是暂停别的工作,临时处理应急事项,应该尽快完成,否则会影响别的工作。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1