STC12C5A16S2通讯问题
芯片是STC12C5A16S2,通讯波特率为115200BPS,串口中断优先级设为最高(其它的都比串口低)。现在连续接收100字节存在内存数组里。总也收不正常,是不是速度太快了,来不及处理。 这要看程序怎么写的,直接放队列里好些 本帖最后由 tianxiongweitxw 于 2020-11-30 15:30 编辑char order;
uchar i=0;
USERT RECEIVE()
{
RI=0;
if(i<100) ///每次处理了串口数据,i会清一次0.
{
order=SBUF;
}
i++;
} 都看不懂你的程序,如果正在处理数组,来一个串口中断咋办?如果没有保护机制不就丢数据了吗? tianxiongweitxw 发表于 2020-11-30 12:16
char xdata order;
uchar i=0;
USERT RECEIVE()
如果协议是严格的一问一答这样是可以的 order=SBUF;
这是啥意思? gx_huang 发表于 2020-11-30 12:41
都看不懂你的程序,如果正在处理数组,来一个串口中断咋办?如果没有保护机制不就丢数据了吗? ...
串口是同级中断啊,必须执行完串口中断函数才会响应下一个中断。 tianxiongweitxw 发表于 2020-11-30 14:06
串口是同级中断啊,必须执行完串口中断函数才会响应下一个中断。
和串口同级中断啥意思?你处理数据的程序在哪里执行?不是主程序吗?
order=SBUF,order是数组的名称或者是首地址,这么赋值啥意思?我C语言不行,不好理解。 本帖最后由 tianxiongweitxw 于 2020-11-30 15:41 编辑
gx_huang 发表于 2020-11-30 14:17
和串口同级中断啥意思?你处理数据的程序在哪里执行?不是主程序吗?
order=SBUF,order是数组的名称或者 ...
order{I} STC12C5A16S2我用过最快460800都没问题。这么MCU是快速51内核,115200波特率,也是86.8us中断一次(一位停止位,10位一个字节),对于这个MCU来说,速度不快,跑22.1184MHz,轻松支持双串口。 11.0592MHz的时候,跑230400bps,全双工,满带宽持续接收数据流还带分析,并驱动DS18B20,全部正常。
https://bbs.21ic.com/icview-2867776-1-1.html 你那个大写和小写混合在一起用是怎么回事?
C语言是严格区分大小写的。 速度调低试试。
看看晶振是不是不对? 还是有dma好。。。 本帖最后由 qinlu123 于 2020-12-2 14:29 编辑
是偶尔收错还是固定位置收错,开启中断嵌套了吗 今天在中断里面加个变量,看到底有没有进入中断。 char order;
uchar i=0;
USERT RECEIVE()
{
RI=0;
if(i<100) ///每次处理了串口数据,i会清一次0.
{
order=SBUF;
}
i=i++; //这里改成i++,程序就正常了,太奇怪了,不就多几个US的执行时间
}
i=i++; //这里改成i++,程序就正常了,太奇怪了,不就多几个US的执行时间 tianxiongweitxw 发表于 2020-12-2 19:42
char order;
uchar i=0;
USERT RECEIVE()
I=I++与 I=I+1,完成不同,I每次都清了0 ,所以程序就不正常了。 本帖最后由 谭翬 于 2020-12-4 09:09 编辑
uchar order;//无符号数组,100个字节
uchar i=0; //i的最大值99
USERT RECEIVE()
{
RI=0;
order=SBUF;
i++;
if(i>99){i=0;}//接收缓存区长度不能超过100
}
页:
[1]