haishi28 发表于 2023-10-10 11:28:32

(已解决)咨询:STC12C5204AD串口通信问题

本帖最后由 haishi28 于 2024-3-15 15:33 编辑

一款老的STC12C52芯片,串口通信问题很奇怪,大家帮忙看看。
前两张图,发送结果与理论一致;后两张图,发送的最后一个字节,变成0x00,是什么原因造成的呢?

神农鼎 发表于 2023-10-10 14:21:40

烧录程序时一定要选择【下次重新上电使用外部晶振】




haishi28 发表于 2023-10-10 17:19:18

神农鼎 发表于 2023-10-10 14:21
烧录程序时一定要选择【下次重新上电使用外部晶振】

感谢你的回复。我目前的确是使用的内部晶振,是会出现由于内部晶振偏差导致的数据乱码,但我不太理解的是为什么在连续调用SendData(temp)时,会出现第二次调用,就是00,如果我在调用SendData(temp)之前对temp赋值,则发送结果就不会错。上午我跟梁工沟通过,他觉得是我的变量不是全局的,可能被中途改写了。
后面我会使用外部晶振,temp也改成全局试一下。
会不会是我的编译器,配置的不对呢?
或者是芯片损坏了?

haishi28 发表于 2023-10-10 17:27:31

神农鼎 发表于 2023-10-10 14:21
烧录程序时一定要选择【下次重新上电使用外部晶振】

再补充一个疑问:如果我用内部晶振,是不是只是应该影响发送的数据的波特率会有偏移,而不是不发送数据了?

神农鼎 发表于 2023-10-10 17:50:13

只是波特率不对,你可以换 STC12H1K16--内部时钟准





https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=4522&pid=30443

haishi28 发表于 2024-3-12 11:22:53

解密问题!
这个问题并不是代码导致的,也不是晶振不准导致的。
原因是Keil里的工程配置:
使用的芯片和Memory Model不匹配。有小伙伴遇到同样问题,可以联系我,一起探讨,
我也没太理解这个配置的正确用法。
我现在是配置成small。

soma 发表于 2024-3-15 09:58:44

keil配置还会影响运行结果{:4_164:}

_奶咖君_ 发表于 2024-3-15 10:09:21

haishi28 发表于 2024-3-12 11:22
解密问题!
这个问题并不是代码导致的,也不是晶振不准导致的。
原因是Keil里的工程配置:


我记得这个small 和 large 会改变编译器编译代码的时候变量的内存位置,,small 是存放在data区,large模式是优先存放在xdata,,我感觉你可以看看map地址,,看看你的那个temp变量地址在什么地方又被使用了,,主要是观察中断函数,,
页: [1]
查看完整版本: (已解决)咨询:STC12C5204AD串口通信问题