单片机的中断响应
从事计算机编程(PC,Workstation,IBM3380/390)几十年了,编过硬件驱动程序(DOS/WINDOWS/LINUX, 磁带机,绘图仪,甚至8-90年代的汉字输入系统),也编过大型的应用软件(C/C++, FORTRAN),单片机只是业余爱好,自己设计电路板,自己焊接,自己编程,用过STC,也用过STM32。在intel的架构下,硬件中断是可以屏蔽的,进入中断服务后,可以设置中断屏蔽。但STC单片机不知有否此机制,反正前段时间在编写SIM卡模块接口时,很是折腾了半天。单片机用串口与SIM模块链接,模块发送到单片机的数据后半段,总是丢失几个短信字节,而前面的信息却不丢,一度怀疑人家的模块有问题,和店家讨论后又否定了,我在串口中断里也没有做过多少处理,就是把几十个字节从一个缓冲区拷贝到另一个缓冲区,但就是这么个操作,对于11059200时钟的STC12C5A60S2来说,尽管是1T时钟的单片机,压力还是很大的。结果就导致了数据的丢失。所以,在中断服务程序里还是要尽可能的缩短占用的时间。毕竟,这不是前面提及的机器。STC12C5A60S2两个串口同时做115200bps全双工通信,一点压力都没有。楼主的串口缓冲区设置足够大即可,这个MCU有1024字节的XDATA与256字节的DATA+IDATA。串口接收中断进入读出SBUF并在在接收缓冲中,一般几个us即可完成,而115200波特率接收字节中断间隔为86.6us,完全轻松处理。
如果嫌慢,可以跑22.1184MHz或33.1776MHz。 本帖最后由 l888 于 2022-12-17 06:55 编辑
可能是1: 大概率是程序结构设计问题。 串口1、2的绝对优选级可能不对,这种主打程序是通讯的干活时不能被干扰,记得有串口辅助寄存器,需仔细设置。当初我用Stc12做一个设备232串口网关装置时还纠结过哪个方向信号用在串口1哪个用在串口2上,当然我那个波特率因下位机的限制定在9600上。
2. 硬件问题,晶振是否偏移过大,双方波特率是否稳定无干扰,若用232的芯片传输数据,232芯片是否稳定合格……
3. 还有一个双串口之间收发缓存区相互安全传递数值/指针管理,处理不当会出数据相互干扰/覆盖/清零问题
4. 打算应用一款芯片做产品,先仔细研读芯片说明书和例程。
无意间翻到的帖子,辛苦楼主能分享下STC单片机和SIM卡通信的程序不 海盗克里斯 发表于 2024-3-25 15:47
无意间翻到的帖子,辛苦楼主能分享下STC单片机和SIM卡通信的程序不
这个大部分通过AT指令通讯的 这种情况,我怀疑是串口的波特率没有对准,所以数据长了,就变形丢失。
51MCPU的每一个中断都是可以单独屏蔽的,如果你怀疑是其他中断引起的问题,可以查手册一个一个单独关掉。
页:
[1]