stc12c5a60s2的芯片做了一个程序,主要用到两个串口和两个定时器,c编写的, 为什么程序
答案:2 悬赏:80
解决时间 2021-04-27 05:20
- 提问者网友:柠檬香
- 2021-04-27 02:23
stc12c5a60s2的芯片做了一个程序,主要用到两个串口和两个定时器,c编写的, 为什么程序跑个半个多小时就跑飞了??半个小时以后,有时候好的,有时候直接失控!引起程序跑飞的因素有哪些?代码大概六七千行左右!
最佳答案
- 二级知识专家网友:伤口狠精致
- 2021-04-27 03:10
引起程序跑飞的因素主要有三个:
其一是软件错误,比如汇编语言编程使用了直接地址跳转(没有使用标号),而地址输入或计算错误,产生错误跳转(目标地址落入数据区或者不在指令起始位置),或者操作堆栈不匹配等。这在C语言中不容易出现。
其二是编译器错误,即编译器有BUG,这个我遇到过(汇编语言)。也是小概率事件。
其三是干扰造成,这个最普遍。干扰信号造成程序计数器值错乱,后果难于预期。
其一是软件错误,比如汇编语言编程使用了直接地址跳转(没有使用标号),而地址输入或计算错误,产生错误跳转(目标地址落入数据区或者不在指令起始位置),或者操作堆栈不匹配等。这在C语言中不容易出现。
其二是编译器错误,即编译器有BUG,这个我遇到过(汇编语言)。也是小概率事件。
其三是干扰造成,这个最普遍。干扰信号造成程序计数器值错乱,后果难于预期。
全部回答
- 1楼网友:走,耍流氓去
- 2021-04-27 04:21
如果是默认时钟源的话,也就是你没有写任何代码去修改寄存器配置,那么stc12c5a60s2也是默认时钟源=晶振频率/12,那么机器周期=1/时钟源=12/fosc。stc12c5a60s2是一个指令周期等于一个机器周期吧,也就是执行一条指令需要12/fosc秒,假如晶振频率为12mhz,那么执行一条指令需要1us。1s = 1 000 000 us,所以计数个数为1百万个。
辅助寄存器auxr的t0x12和t1x12可以设置定时器的时钟源是否为12分频。建议你多查看这款mcu的datasheet。
以上字字手打,希望对你有帮助
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯