找回密码
 立即注册
查看: 820|回复: 8

8H1K08,串口通讯后改变了系统延时时间 | 已解决

[复制链接]

3

主题

10

回帖

43

积分

新手上路

积分
43
发表于 2023-8-25 20:30:50 | 显示全部楼层 |阅读模式
程序中对时钟的初始化如下:


    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多毫秒,而中断里面的延时函数正常。)
如果没有串口通讯,则主循环和中断中的延时函数都正常。
请问造成延时函数不准的原因是什么?
回复

使用道具 举报 送花

3

主题

10

回帖

43

积分

新手上路

积分
43
发表于 2023-8-25 20:32:02 | 显示全部楼层
    IRC22M = (char idata *)0xfa;

    IRC24M = (char idata *)0xfb;

    IRTRIM = *IRC24M;                             //装载24MHz的IRC参数


    P_SW2 = 0x80;

    CLKDIV = 0;                                 //主时钟不预分频
   
  P_SW2 = 0x00;
回复 支持 反对

使用道具 举报 送花

3

主题

10

回帖

43

积分

新手上路

积分
43
发表于 2023-8-25 20:41:25 | 显示全部楼层
好奇怪的现象,麻烦工程师帮忙解释一下。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

积分
4501
发表于 2023-8-25 22:23:49 | 显示全部楼层
串口是有中断的,收发数据需要耗费时间
回复 支持 反对

使用道具 举报 送花

3

主题

10

回帖

43

积分

新手上路

积分
43
发表于 2023-8-26 13:02:14 | 显示全部楼层
kk*** 发表于 2023-8-25 22:23
串口是有中断的,收发数据需要耗费时间

只通讯了一次,之后主循环里的延时都被改变了10几倍。
回复 支持 反对

使用道具 举报 送花

3

主题

10

回帖

43

积分

新手上路

积分
43
发表于 2023-8-28 13:43:51 | 显示全部楼层
本帖最后由 mars1479 于 2023-8-28 16:20 编辑

已解决。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:519
  • 最近打卡:2025-05-02 07:55:51
已绑定手机

46

主题

1694

回帖

2544

积分

金牌会员

积分
2544
发表于 2023-8-28 20:40:43 | 显示全部楼层
中断里面就不要用延时了吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2025-03-26 09:09:59

6

主题

104

回帖

351

积分

中级会员

积分
351
发表于 2024-9-26 17:46:23 | 显示全部楼层

求教怎么解决的,我现在也遇到这个问题了
回复 支持 反对

使用道具 举报 送花

0

主题

5

回帖

16

积分

新手上路

积分
16
发表于 2024-10-6 19:43:59 | 显示全部楼层
mars*** 发表于 2023-8-25 20:41
好奇怪的现象,麻烦工程师帮忙解释一下。

延时函数有这么写的吗?对于是系统你让CPU空转来延时,不但卡而且很不准确
用定时器做延时,设立N个标志  就是N个延时函数 。不但准确,而且不占用机器周期
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:43 , Processed in 0.207505 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表