8H1K08,串口通讯后改变了系统延时时间 | 已解决
程序中对时钟的初始化如下:IRC22M = (char idata *)0xfa; IRC24M = (char idata *)0xfb; //IRTRIM = *IRC22M; //装载22.1184MHz的IRC参数 IRTRIM = *IRC24M; //装载24MHz的IRC参数 P_SW2 = 0x80; CLKDIV = 0; //主时钟不预分频 P_SW2 = 0x00;
#define MAIN_Fosc 24000000L //定义主时钟
所用延时函数为:
void delay_ms(unsigned char ms){ unsigned int i; do{ i = MAIN_Fosc / 10000; while(--i); }while(--ms);}
在程序的主循环中和中断中都使用了延时函数,突然发现如果程序启动后和外系统有过串口通讯的话(115200波特率),主循环里面的延时函数会增大18倍多(6毫秒变成100多毫秒,而中断里面的延时函数正常。)
如果没有串口通讯,则主循环和中断中的延时函数都正常。
请问造成延时函数不准的原因是什么?
IRC22M = (char idata *)0xfa;
IRC24M = (char idata *)0xfb;
IRTRIM = *IRC24M; //装载24MHz的IRC参数
P_SW2 = 0x80;
CLKDIV = 0; //主时钟不预分频
P_SW2 = 0x00; 好奇怪的现象,麻烦工程师帮忙解释一下。 串口是有中断的,收发数据需要耗费时间 kksk 发表于 2023-8-25 22:23
串口是有中断的,收发数据需要耗费时间
只通讯了一次,之后主循环里的延时都被改变了10几倍。 本帖最后由 mars1479 于 2023-8-28 16:20 编辑
已解决。 中断里面就不要用延时了吧
mars1479 发表于 2023-8-28 13:43
已解决。
求教怎么解决的,我现在也遇到这个问题了 mars1479 发表于 2023-8-25 20:41
好奇怪的现象,麻烦工程师帮忙解释一下。
延时函数有这么写的吗?对于是系统你让CPU空转来延时,不但卡而且很不准确
用定时器做延时,设立N个标志就是N个延时函数 。不但准确,而且不占用机器周期
页:
[1]