迪文科技论坛

 找回密码
 立即注册
搜索
查看: 342|回复: 10

【提问】可以帮我看一下这个延时函数吗,

[复制链接]

6

主题

10

回帖

87

积分

注册会员

Rank: 2

积分
87
发表于 2022-8-17 11:30:35 | 显示全部楼层 |阅读模式
我用迪文客服给我的串口通信协议,然后把我的写的倒计时代码加进去时,出现了问题,我试了试,发现是这个延时函数没有起作用,我的延时函数是直接用的熊老师的代码
回复

使用道具 举报

6

主题

10

回帖

87

积分

注册会员

Rank: 2

积分
87
 楼主| 发表于 2022-8-17 11:33:54 | 显示全部楼层

  1. //ÀûÓö¨Ê±Æ÷2½øÐо«È·ÑÓʱ,µ¥Î»ms
  2. void sys_delay_ms(u16 ms)
  3. {
  4.         delay_tick = ms;
  5.         while(delay_tick);
  6. }
复制代码
回复

使用道具 举报

2

主题

1228

回帖

9359

积分

论坛元老

Rank: 8Rank: 8

积分
9359
发表于 2022-8-17 12:54:04 | 显示全部楼层
  1. static u16 data SysTick=0;
  2. //初始化定时器2
  3. void T2_Init(void){
  4.         T2CON = 0x70;
  5.         TH2 = 0x00;
  6.         TL2 = 0x00;
  7.         TRL2H = 0xBC;                        //1ms的定时器
  8.         TRL2L = 0xCD;
  9.         ET2 = 1;                                        //开启定时器
  10.         TR2 = 1;
  11.         EA=1;
  12. }
  13. //开启中断
  14. void T2_ISR_PC(void)    interrupt 5
  15. {
  16.         u8 i=0;
  17.         TF2 = 0;
  18.         if(SysTick)        SysTick--;
  19.         
  20. }
  21. //延时函数
  22. void delay_ms(u16 n){
  23.         SysTick = n;
  24.         while(SysTick);
  25. }
复制代码

回复

使用道具 举报

6

主题

10

回帖

87

积分

注册会员

Rank: 2

积分
87
 楼主| 发表于 2022-8-17 15:01:25 | 显示全部楼层

我把这段代码加上去一直报错,然后我发现了官方的里面是有一个delayus的函数的,我就用了这个,但是时间好像不太对
回复

使用道具 举报

2

主题

1228

回帖

9359

积分

论坛元老

Rank: 8Rank: 8

积分
9359
发表于 2022-8-17 15:06:47 | 显示全部楼层
VWNM 发表于 2022-8-17 15:01
我把这段代码加上去一直报错,然后我发现了官方的里面是有一个delayus的函数的,我就用了这个,但是时间 ...

针对你的程序改下,SFR寄存器,问题描述清除一下比如报的什么错。
回复

使用道具 举报

2

主题

1228

回帖

9359

积分

论坛元老

Rank: 8Rank: 8

积分
9359
发表于 2022-8-17 15:08:36 | 显示全部楼层
//软件大致延时,单位ms
//如果修改了优化等级,那么此函数内部的参数需要重新调试
void sys_delay_about_ms(u16 ms)
{
        u16 i,j;
        for(i=0;i<ms;i++)
                        for(j=0;j<3000;j++);   
}

要是用死定时的话和你程序优化级别有关了,不建议用这种方法,用硬件定时器来定时
回复

使用道具 举报

6

主题

10

回帖

87

积分

注册会员

Rank: 2

积分
87
 楼主| 发表于 2022-8-17 15:50:07 | 显示全部楼层
zzs999k 发表于 2022-8-17 15:08
//软件大致延时,单位ms
//如果修改了优化等级,那么此函数内部的参数需要重新调试
void sys_delay_about_ms( ...

谢谢大佬!我就暂时用这个大致延时吧,因为我不太会改寄存器,我把这个数值改了改,大致延时误差也不打了
回复

使用道具 举报

2

主题

1228

回帖

9359

积分

论坛元老

Rank: 8Rank: 8

积分
9359
发表于 2022-8-17 15:50:47 | 显示全部楼层
能用还是用定时器
回复

使用道具 举报

9

主题

118

回帖

3837

积分

论坛元老

Rank: 8Rank: 8

积分
3837
发表于 2022-8-17 17:25:04 | 显示全部楼层
疯了?居然用延时,拿来练手倒是可以
回复

使用道具 举报

2

主题

1228

回帖

9359

积分

论坛元老

Rank: 8Rank: 8

积分
9359
发表于 2022-8-17 17:27:16 | 显示全部楼层
15231197670 发表于 2022-8-17 17:25
疯了?居然用延时,拿来练手倒是可以

是的,要用定时器,玩的话可以
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-23 01:04 , Processed in 0.057758 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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