找回密码
 立即注册
查看: 1389|回复: 25

【已解决】为何ISP中定时器计算器给的程序没有用

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-06-27 10:16:38

12

主题

97

回帖

311

积分

中级会员

积分
311
发表于 2024-11-28 16:28:20 | 显示全部楼层 |阅读模式
本帖最后由 wszjw2 于 2024-11-29 10:40 编辑

现在用开天斧三.2,用下面这段,是51教学视频上用的方式,P20可以正常一秒闪一下
  1. void time1_init(void)
  2. {
  3.         TMOD|=0X10;//选择为定时器0模式,工作方式1
  4.         TH1=0XFC;        //给定时器赋初值,定时1ms
  5.         TL1=0X18;        
  6.         ET1=1;//打开定时器1中断允许
  7.         EA=1;//打开总中断
  8.         TR1=1;//打开定时器               
  9. }
  10. void main()
  11. {        
  12.                   P0M0 = 0x00; P0M1 = 0x00;
  13.     P1M0 = 0x00; P1M1 = 0x00;
  14.     P2M0 = 0x00; P2M1 = 0x00;
  15.     P3M0 = 0x00; P3M1 = 0x00;
  16.     P4M0 = 0x00; P4M1 = 0x00;
  17.     P5M0 = 0x00; P5M1 = 0x00;
  18.     P6M0 = 0x00; P6M1 = 0x00;
  19.     P7M0 = 0x00; P7M1 = 0x00;
  20.         
  21.         time1_init();//定时器1中断配置
  22.         while(1)
  23.         {                        
  24.                                                         
  25.         }               
  26. }
  27. void time1() interrupt 3 //定时器1中断函数
  28. {
  29.         static u16 i;//定义静态变量i
  30.         TH1=0XFC;        //给定时器赋初值,定时1ms
  31.         TL1=0X18;
  32.         i++;
  33.         if(i==1000)
  34.         {
  35.                 i=0;
  36.                 LED1=!LED1;        
  37.         }                                                
  38. }
复制代码
但是用ISP中的代码就不行,见附图。请各位大佬帮忙看看是为啥
捕获.PNG
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:471
  • 最近打卡:2025-06-27 10:50:20

33

主题

2437

回帖

5186

积分

论坛元老

积分
5186
发表于 2024-11-28 16:53:03 | 显示全部楼层
不行是怎么个不行法?不闪?还是不是按照1s间隔闪?
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:471
  • 最近打卡:2025-06-27 10:50:20

33

主题

2437

回帖

5186

积分

论坛元老

积分
5186
发表于 2024-11-28 16:53:51 | 显示全部楼层
至少你也得把你用ISP的代码改完之后的程序发一下吧
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:471
  • 最近打卡:2025-06-27 10:50:20

33

主题

2437

回帖

5186

积分

论坛元老

积分
5186
发表于 2024-11-28 16:54:33 | 显示全部楼层
猜一个没开总中断
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-06-27 10:16:38

12

主题

97

回帖

311

积分

中级会员

积分
311
发表于 2024-11-28 16:56:23 | 显示全部楼层
_奶*** 发表于 2024-11-28 16:53
至少你也得把你用ISP的代码改完之后的程序发一下吧

就是用了ISP的定时器设置,其他没改,本来也就一句话原来是1s闪烁,换了之后直接不亮了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-06-27 10:16:38

12

主题

97

回帖

311

积分

中级会员

积分
311
发表于 2024-11-28 16:57:33 | 显示全部楼层
_奶*** 发表于 2024-11-28 16:54
猜一个没开总中断

还真是,大意了

点评

哈哈哈,棒!  发表于 2024-11-28 17:43
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-06-27 10:16:38

12

主题

97

回帖

311

积分

中级会员

积分
311
发表于 2024-11-28 17:01:36 | 显示全部楼层
_奶*** 发表于 2024-11-28 16:54
猜一个没开总中断

另外想问一下,如果想定时15分钟,什么办法比较好呀,目前是想定时器1s然后标志位+1,判断标志位。然后我看定时器的TMOD说明T1/T0要在INT1/INT0为高电平时才能打开,那是不是可以用硬件控制定时器T1/T0

点评

1.如果想定时比较长的,可以使用单片机的RTC功能。 2.一般是用来做PPM(脉宽控制,舵机常见控制信号)的,你说的这个用法确实是可以的  详情 回复 发表于 2024-11-28 17:10
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:471
  • 最近打卡:2025-06-27 10:50:20

33

主题

2437

回帖

5186

积分

论坛元老

积分
5186
发表于 2024-11-28 17:05:53 | 显示全部楼层
wsz*** 发表于 2024-11-28 17:01
另外想问一下,如果想定时15分钟,什么办法比较好呀,目前是想定时器1s然后标志位+1,判断标志位。然后我 ...

1.定时15分钟这个 可以这么做。通过计数变量的方式你可以定义到天荒地老
2.你说的这个功能我没有测试过,,没法提供太多的想法。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:508
  • 最近打卡:2025-06-28 10:05:05
已绑定手机
已实名认证

113

主题

2423

回帖

6157

积分

版主

积分
6157
发表于 2024-11-28 17:10:31 | 显示全部楼层
wsz*** 发表于 2024-11-28 17:01
另外想问一下,如果想定时15分钟,什么办法比较好呀,目前是想定时器1s然后标志位+1,判断标志位。然后我 ...

1.如果想定时比较长的,可以使用单片机的RTC功能。
2.一般是用来做PPM(脉宽控制,舵机常见控制信号)的,你说的这个用法确实是可以的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-06-27 10:16:38

12

主题

97

回帖

311

积分

中级会员

积分
311
发表于 2024-11-28 17:11:00 | 显示全部楼层
_奶*** 发表于 2024-11-28 17:05
1.定时15分钟这个 可以这么做。通过计数变量的方式你可以定义到天荒地老
2.你说的这个功能我没有测试过, ...

刚刚发现ISP的程序还是不行灯一直亮着
  1. #include "stc8h.h"
  2. typedef unsigned int u16;        //对系统默认数据类型进行重定义
  3. typedef unsigned char u8;
  4. u8 pump_flag=0;
  5. u16 sec=0;
  6. /*******************************************************************************
  7. * 函 数 名       : delay_10us
  8. * 函数功能                 : 延时函数,ten_us=1时,大约延时10us
  9. * 输    入       : ten_us
  10. * 输    出             : 无
  11. *******************************************************************************/
  12. void delay_10us(u16 ten_us)
  13. {
  14.         while(ten_us--);       
  15. }
  16. /*******************************************************************************
  17. * 函 数 名       : time0_init
  18. * 函数功能                 : 定时器0中断配置函数,通过设置TH和TL即可确定定时时间
  19. * 输    入       : 无
  20. * 输    出             : 无
  21. *******************************************************************************/
  22. void time1_init(void)
  23. {
  24.         AUXR |= 0x40;                        //定时器时钟1T模式
  25.         TMOD &= 0x0F;                        //设置定时器模式
  26.         TL1 = 0xCD;                                //设置定时初始值
  27.         TH1 = 0xD4;                                //设置定时初始值
  28.         TF1 = 0;                                //清除TF1标志
  29.         TR1 = 1;                                //定时器1开始计时
  30.         ET1 = 1;                                //使能定时器1中断
  31. }
  32. /*******************************************************************************
  33. * 函 数 名       : main
  34. * 函数功能                 : 主函数
  35. * 输    入       : 无
  36. * 输    出             : 无
  37. *******************************************************************************/
  38. void main()
  39. {       
  40.        
  41.                 P0M0 = 0x00; P0M1 = 0x00;
  42.     P1M0 = 0x00; P1M1 = 0x00;
  43.     P2M0 = 0x00; P2M1 = 0x00;
  44.     P3M0 = 0x00; P3M1 = 0x00;
  45.     P4M0 = 0x00; P4M1 = 0x00;
  46.     P5M0 = 0x00; P5M1 = 0x00;
  47.     P6M0 = 0x00; P6M1 = 0x00;
  48.     P7M0 = 0x00; P7M1 = 0x00;
  49.         EA=1;
  50.         P_SW2|=0X80;
  51.        
  52.         while(1)
  53.         {                       
  54.                 time1_init();//定时器0中断配置
  55.         }               
  56. }
  57. void time1() interrupt 3 //定时器0中断函数
  58. {
  59.         P20=~P20;
  60. }
复制代码
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-30 03:52 , Processed in 0.138833 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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