打印

小弟请教16F57定时器问题。

[复制链接]
4053|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hzocce|  楼主 | 2010-3-26 13:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hzocce 于 2010-3-29 14:03 编辑

#include<pic16f5x.h>

void main()
{
        TRISB=0;
        PORTB=0;     
        TMR0 =1;
        OPTION = 0b00000111;  
        while(1)
        {        
                 if (TMR0 > 250)
             {
                 TMR0 =1;
                 RB7=!RB7;
             }
        }
}



用的是12M的晶振。RB端攻接了8个LED。如上程序,应该是RB7端口翻转,相对应的LED 闪烁才对!可认为什么就没有反应呢 ?一直灭的????




但是发现初始化的时候,我把PORTB=0; 给成 PORTB=0xff; ,   那8个LED 却都奇怪的闪了起来,而且是当然闪的速度相当的快。



为什么呢? 我是哪里弄错了呢????????

16f5x-CN.pdf

1.73 MB

沙发
hzocce|  楼主 | 2010-3-27 17:02 | 只看该作者
没人理?

使用特权

评论回复
板凳
h304061981| | 2010-3-27 18:27 | 只看该作者
!!!

使用特权

评论回复
地板
zhaoyu2005| | 2010-3-29 10:25 | 只看该作者
没有中断就查询呗,查询定时器的计数器的值,可以设定一个初值,计数到0将IO翻转并赋初值

使用特权

评论回复
5
xymxym| | 2010-3-29 10:30 | 只看该作者
这样子是没有人帮你写的。

你的意思是指如果这个单片机有中断,那你就知道怎么弄了吗?我建议,你就把它当成是有中断的,先把程序写出来,贴到这来,那时候得到的帮助会更多,也会更直接。

使用特权

评论回复
6
hzocce|  楼主 | 2010-3-29 11:05 | 只看该作者
没有中断,溢出了也没法查询

使用特权

评论回复
7
hzocce|  楼主 | 2010-3-29 11:08 | 只看该作者
#include<htc.h>

void main()
{
TRISA=0;
PORTA=0;
OPTION=0x07;
TMR0=1;
while(1)
        {       
         if(TMR0==255)
                {
                        TMR0=1;
                        RA0=!RA0;
                       
                }
       
       
        }
}

使用特权

评论回复
8
hzocce|  楼主 | 2010-3-29 11:10 | 只看该作者
是上面那样写吗?
根据楼上的给我的思路,就是那么写的,可是结果没有出来啊 ?

还是哪里的问题呢?请指导一下。

使用特权

评论回复
9
hzocce|  楼主 | 2010-3-29 11:14 | 只看该作者
附上图

TIMER0.jpg (50.75 KB )

TIMER0.jpg

选项寄存器.jpg (190.98 KB )

选项寄存器.jpg

使用特权

评论回复
10
qnmdsb2008| | 2010-3-29 11:22 | 只看该作者
查询就可以

使用特权

评论回复
11
xymxym| | 2010-3-29 11:53 | 只看该作者
没错了,就是这样,不过要把if(TMR0==255)改成if(TMR0>250)会更好,因为如果程序复杂点的话,跳到判断那一句的时候,TMR0可能已经从255变成0了,而造成漏检.

/*---------------------------------
模拟定时器,在主程序中循环扫描
每50ms处理事件一次
---------------------------------*/
void SimulateTimer(void)
{
     if (TMR0 > 250)
     {                             //为防止TMR0归0时漏检,在它归0之前的(256-250)*256=1.536ms内检测都有效
          TMR0 = 65;
               .....                //需要定时执行的程序
              .....
     }
}

/*------------------------------------
//主程序
------------------------------------*/
main()
{
     init();                       //器件初始化
     TMR0 = 65;                    //预设值,使TMR0在50ms左右归零一次
     OPTION = 0b00000111;          //分频器切换给定时器使用,分频比256   
     while(1)
     {
          SimulateTimer();         //模拟定时器中断,在主程序中不断扫描
          ....                          //可以是其它的程序,或者全部放在SimulateTimer中按时间执行
     }

使用特权

评论回复
12
hzocce|  楼主 | 2010-3-29 13:59 | 只看该作者
本帖最后由 hzocce 于 2010-3-29 17:49 编辑

#include<pic16f5x.h>

void main()
{
        TRISB=0;
        PORTB=0;     
        TMR0 =1;
        OPTION = 0b00000111;  
        while(1)
        {   
               
           if (TMR0 > 250)
             {
                 TMR0=1;
                  RB0=!RB0;
              }

        }
}



按照楼上的大哥给我的指导,我写了如上程序。用的是12M的晶振。RB端攻接了8个LED。如上程序,应该是RB7端口翻转,相对应的LED 闪烁才对!可认为什么就没有反应呢 ?一直灭的????

但是发现初始化的时候,我把PORTB=0; 给成 PORTB=0xff; ,   那8个LED 却都奇怪的闪了起来,而且是当然闪的速度相当的快。

为什么呢? 我是哪里弄错了呢????????

使用特权

评论回复
13
xymxym| | 2010-3-29 14:49 | 只看该作者
LED灯的限流电阻是多大?共阴还是共阳接**

另外,你清不清楚你用12M晶振时,TMR0初值为1,256分频,那么,多长时间RB7会被取反一次呢?

使用特权

评论回复
14
hzocce|  楼主 | 2010-3-29 15:56 | 只看该作者
本帖最后由 hzocce 于 2010-3-29 17:48 编辑

10K的电阻亮度搞好能接受!阻值小了,那灯太亮了,太刺眼;
共阴;
5V.


12M/4=3M。
时钟周期就是1/3 us.

(251-1)*256*(1/3)=250*256*(1/3)=6400*(1/3)=   大概是 21333us .  大概是22ms是这样吗?

程序再次更改后如上面 12楼 所示。
电阻也有10K换到了1K,但实验结果还是跟原来我所描述的一个样子。

说明了以下问题:

1.跟电阻无关;
2.跟延时时间也无关,假如是时间太快了,但至少给我们人眼的幻觉就是常亮,可出现的现象是灭!根本就没有亮!




到底是说明问题呢 ????????????????????????????????????????????

使用特权

评论回复
15
xymxym| | 2010-3-29 16:58 | 只看该作者
应该是(256-1)*256*0.33us=22ms.
:L是5V吗?10K的LED限流电阻?LED的驱动电流应该在5~10mA比较合适.

别折腾了,赶紧减小限流电阻,延长LED的显示时间.

使用特权

评论回复
16
hzocce|  楼主 | 2010-3-30 08:02 | 只看该作者
没人看???

使用特权

评论回复
17
xymxym| | 2010-3-30 09:49 | 只看该作者
出现这种情况,你自己的想法呢?

你确定你的程序在芯片肚里跑起来了吗?怎么确定的?

使用特权

评论回复
18
hzocce|  楼主 | 2010-3-30 14:23 | 只看该作者
呵呵,我现在找到问题了。我在CONFIGURE BIT 没有吧 WDT 关掉。


谢谢 xymxym 一直以来对我的指导!!!

使用特权

评论回复
19
电子三极管| | 2010-6-23 10:13 | 只看该作者
:shutup:

使用特权

评论回复
20
Mary_luo| | 2010-6-23 13:05 | 只看该作者
热心人还是蛮多的,创造美好环境,共同进步。:)

使用特权

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

本版积分规则

127

主题

561

帖子

4

粉丝