打印
[51单片机]

51单片机定时器启动问题

[复制链接]
2659|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
15627235939|  楼主 | 2014-4-14 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2014-4-14 16:18 | 只看该作者
那是你认为而已

使用特权

评论回复
板凳
15627235939|  楼主 | 2014-4-14 16:20 | 只看该作者
我是想满足某个条件再启动定时器,但当我写出来放进while里就不知道为啥不行了

使用特权

评论回复
地板
nickyamw| | 2014-4-14 16:36 | 只看该作者
15627235939 发表于 2014-4-14 16:20
我是想满足某个条件再启动定时器,但当我写出来放进while里就不知道为啥不行了 ...

你有没有调试过,你确定定时器真的启动了?

使用特权

评论回复
5
15627235939|  楼主 | 2014-4-14 16:38 | 只看该作者
我把程序烧写放实物上实验,假如直接把tr0=1;还有其他初始化的东西放main里,一切正常。但放while里 其他部分也不运行了

使用特权

评论回复
6
15627235939|  楼主 | 2014-4-14 16:42 | 只看该作者
void int0( )  interrupt 0
{
  if(INT0==0)
  {
   LED_POWER=0;          
   a++;

   }
}
void main()
{   

INT0_init( );
led_power();  

EA=1;
  TMOD = 0x01;
  IE   = 0x82;
  TH0=(65535-50000)/256;   
  TL0=(65536-50000)%256;
  ET0=1;
//TR0= 0;
  
  while(1)
  {         
   switch(a)
           {
       case 0:led_power();break;
       default:
         { LED_POWER=0;
          if(a>1&&a<10)
             {
              MODE_1();break;
              a=10;
             }
         if(a>10)
            {
             TR0=1;
             }
       }

}        //while  
} //main  

使用特权

评论回复
7
15627235939|  楼主 | 2014-4-14 16:43 | 只看该作者
其他部分太长没贴出来

使用特权

评论回复
8
命中注定0818| | 2014-4-14 17:05 | 只看该作者
没启动吧,或者在while语句中定时器初始化不对

使用特权

评论回复
9
ayb_ice| | 2014-4-14 17:21 | 只看该作者
括号都差一个,不知编译过了没有啊

使用特权

评论回复
10
15627235939|  楼主 | 2014-4-14 17:25 | 只看该作者
少了括号可能我刚才弄走了,其他地方有什么问题。

使用特权

评论回复
11
nickyamw| | 2014-4-14 17:38 | 只看该作者
if(a>1&&a<10)
             {
              MODE_1();break;
              a=10;
             }

这里面的a=10就执行不了


还有就是,你的定时器用来干嘛的?

使用特权

评论回复
12
15627235939|  楼主 | 2014-4-14 17:39 | 只看该作者
给a重新赋个值为啥不行?

使用特权

评论回复
13
15627235939|  楼主 | 2014-4-14 17:49 | 只看该作者
我用定时器来亮灯,亮不同亮度

使用特权

评论回复
14
ayb_ice| | 2014-4-14 18:40 | 只看该作者
你都没有定时器中断服务程序

使用特权

评论回复
15
畅游天涯| | 2014-4-14 20:19 | 只看该作者
本帖最后由 畅游天涯 于 2014-4-14 20:20 编辑

定时器0的中断应该是void int0( )  interrupt 1  
而不是void int0( )  interrupt 0

使用特权

评论回复
16
qq2512262471| | 2014-4-14 20:48 | 只看该作者
全套原厂同步伺服驱动器方案研发生产技术方案资料转让:
包括产品程序源代码 PCB文件 BOM物料清单  SCH原理图 开发文件等  
产品已经大量投产,质量稳定可靠。
有样机可供客户检测,可供研发、学习、生产使用。
提升你的产品开发效率,促进你的产品早日上市,争夺市场先机。

使用特权

评论回复
17
通宵敲代码| | 2014-4-14 21:06 | 只看该作者
15627235939 发表于 2014-4-14 17:39
给a重新赋个值为啥不行?

前面的break已经将循环跳出了,所以a=10永远得不到执行。

使用特权

评论回复
18
通宵敲代码| | 2014-4-14 21:09 | 只看该作者
while中一般不放初始化的代码,容易出问题,这是个习惯问题。

再就是中断一定要有,哪怕只是执行了一个空指令,写出来只是会让人知道这个中断已经使用了。

使用特权

评论回复
19
dirtwillfly| | 2014-4-14 21:21 | 只看该作者
通宵敲代码 发表于 2014-4-14 21:06
前面的break已经将循环跳出了,所以a=10永远得不到执行。

说的是,若要执行a=10,要把break放到a=10后面

使用特权

评论回复
20
一清如水| | 2014-4-14 21:39 | 只看该作者
幸福啊,有这么多人指导,当年自己摸索。。。

使用特权

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

本版积分规则

2

主题

11

帖子

0

粉丝