打印
[PIC®/AVR®/dsPIC®产品]

[紧急求助] PIC单片机如何控制程序运行的时间?急。。

[复制链接]
1258|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luminqi|  楼主 | 2014-4-9 07:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在做一个课程设计,小弟是个新手,刚接触单片机没多久。想问一下如何控制程序运行的时间?
比如说让小灯不停得闪烁10秒。我自己看了一下相关资料,是用定时器来控制吗?
哪位大神能写一段程序说明一下,感激不尽。用PIC16F877A来做,初始化trm0,定义一个全局变量count,每次中断+1,在主程序(控制小灯闪烁while(1){led=~led;  delay_ms(200))中加上if(count = 50)break;这是我的思路。。。。
沙发
luminqi|  楼主 | 2014-4-9 21:03 | 只看该作者
求大神!

使用特权

评论回复
板凳
luminqi|  楼主 | 2014-4-10 19:41 | 只看该作者
求助!

使用特权

评论回复
地板
ZG11211| | 2014-4-10 20:22 | 只看该作者
本帖最后由 ZG11211 于 2014-4-10 20:24 编辑

诀窍就是用定时器设置一个(或N个)计时变量,然后主代码循环里规定他几点上课,几点午休,几点下课就O了。

使用特权

评论回复
5
ayb_ice| | 2014-4-11 09:45 | 只看该作者
用定时器做个滴答,然后对滴答计数

使用特权

评论回复
6
xlsf1048| | 2014-4-11 16:33 | 只看该作者
初始化count为0,可另增设一个标志位例如:Flag_work.当Flag_work为1表示还需要闪烁,0表示不闪烁。在200ms的定时中断服务函数里面
if(Flag_work == 1)
{
  led~=1;
  count++;
  if(count == 50)
  {
    count = 0;
    Flag_work = 0;
    //增加一条指令灭掉灯
  }
}

使用特权

评论回复
7
luminqi|  楼主 | 2014-4-11 20:22 | 只看该作者
ayb_ice 发表于 2014-4-11 09:45
用定时器做个滴答,然后对滴答计数

小灯闪烁的程序是必须放在定时器中断程序里,还是可以放在主程序里,小灯闪烁延时delay_ms(200),和定时器延时是否会有冲突?

使用特权

评论回复
8
luminqi|  楼主 | 2014-4-11 20:23 | 只看该作者
xlsf1048 发表于 2014-4-11 16:33
初始化count为0,可另增设一个标志位例如:Flag_work.当Flag_work为1表示还需要闪烁,0表示不闪烁。在200ms ...

可以把小灯闪烁的程序放在主程序里面,而不是放在中断服务函数里吗?

使用特权

评论回复
9
xlsf1048| | 2014-4-14 09:01 | 只看该作者
if(Flag_work == 1)
{
  led~=1;
  Flag_work = 0;
}//这个放在主函数,当定时产生,且还没到达10S时,产生Flag_work=1;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝