[PIC®/AVR®/dsPIC®产品] PIC12f509没有定时器中断?

[复制链接]
 楼主| WT418995874 发表于 2014-4-29 15:42 | 显示全部楼层 |阅读模式
怎么看手册没说到定时器中断,也没用定时器溢出标志?
我想产生38k的方波,定时13us取反。
今天刚接触PIC,终于把工程建立了,但是不知道定时器怎么用:dizzy:


yewuyi 发表于 2014-4-29 16:18 | 显示全部楼层
没有,都没有。

将定时器设置自动增量+1,自己用软件检测定时器计数值是否发生逆转来判定。

这个型号是很老的型号了,可以看后来出的一些新型号芯片,后来的那些芯片都有该有的东西。
wangch_sh 发表于 2014-4-29 16:20 | 显示全部楼层
貌似只能用查询方式。
 楼主| WT418995874 发表于 2014-4-29 16:28 | 显示全部楼层
yewuyi 发表于 2014-4-29 16:18
没有,都没有。

将定时器设置自动增量+1,自己用软件检测定时器计数值是否发生逆转来判定。

懂了。今天刚接触,看的晕晕的。因为我只要8个脚的。
12F629这款也是8脚的
 楼主| WT418995874 发表于 2014-4-29 16:29 | 显示全部楼层
wangch_sh 发表于 2014-4-29 16:20
貌似只能用查询方式。

谢谢,懂了
lx911gt 发表于 2014-5-4 09:20 | 显示全部楼层
本帖最后由 yewuyi 于 2014-5-7 10:03 编辑

这个真没有...我们单位用509做延时版,本来我想用中断的,结果发现没有
 楼主| WT418995874 发表于 2014-5-6 11:15 | 显示全部楼层
lx911gt 发表于 2014-5-4 09:20
这个真没有...我们单位用509做延时版,本来我想用中断的,结果发现没有...SHIT... ...

那你们还用着芯片么?这个是得判断定时器计数是否到了是吧
lx911gt 发表于 2014-5-6 14:38 | 显示全部楼层
WT418995874 发表于 2014-5-6 11:15
那你们还用着芯片么?这个是得判断定时器计数是否到了是吧

用,我们就是用查询的方法查看TMR0==0XFF? 满足就执行里面的程序....
zbcai 发表于 2014-5-6 19:05 | 显示全部楼层
可以用新的12F1501、1552等,也是8脚,但有中断等外设
yewuyi 发表于 2014-5-7 10:07 | 显示全部楼层
lx911gt 发表于 2014-5-6 14:38
用,我们就是用查询的方法查看TMR0==0XFF? 满足就执行里面的程序....

不能用查询是否等于0这种方式,而应该设置一个计数值缓冲寄存器,将当前计数值和缓冲比较是否发生数值从小到大或从大到小的数值反转,如果反转则意味着定时器溢出了一次,定时时间+1.

查询是否等于0很容易产生非常严重的错误。
lx911gt 发表于 2014-5-7 13:55 | 显示全部楼层
yewuyi 发表于 2014-5-7 10:07
不能用查询是否等于0这种方式,而应该设置一个计数值缓冲寄存器,将当前计数值和缓冲比较是否发生数值从 ...

哦,这样啊,设置一个技术缓冲寄存器这句我不太理解,能麻烦大神写个大概么让我有个概念,谢谢
yewuyi 发表于 2014-5-7 14:35 | 显示全部楼层
lx911gt 发表于 2014-5-7 13:55
哦,这样啊,设置一个技术缓冲寄存器这句我不太理解,能麻烦大神写个大概么让我有个概念,谢谢 ...

就是把定时器计数值保存到缓冲寄存器,在一次执行判断定时器是否溢出等代码时,先把定时器当前的计数值和上次保存的数值进行比较,如果当前计数值比上次保存的数值大,说明定时器没有发生溢出,如果当前计数值比上次保存的数值小,说明定时器已经发生了溢出,比较完之后,把当前计数值更新到缓冲寄存器。
lx911gt 发表于 2014-5-7 15:06 | 显示全部楼层
yewuyi 发表于 2014-5-7 14:35
就是把定时器计数值保存到缓冲寄存器,在一次执行判断定时器是否溢出等代码时,先把定时器当前的计数值和 ...

哦,谢谢,大致明白些了:lol
 楼主| WT418995874 发表于 2014-5-9 10:36 | 显示全部楼层
zbcai 发表于 2014-5-6 19:05
可以用新的12F1501、1552等,也是8脚,但有中断等外设

在用12f683/675/629这类
wang47987146 发表于 2014-7-29 11:15 | 显示全部楼层
yewuyi 发表于 2014-5-7 14:35
就是把定时器计数值保存到缓冲寄存器,在一次执行判断定时器是否溢出等代码时,先把定时器当前的计数值和 ...

您好,前辈,我用PIC12F509做定时取反测试,每次上电测得的定时都相差0.1ms

//PIC12F509定时程序
#include<pic.h>
#define uchar unsigned char
#define uint  unsigned int
#define Cap_V GP2
#define LED   GP4
  __CONFIG(0x0fea);          //也可以在编译环境里设置,打开《PIC12F508_509.pdf》第42页,会有"Special Fetures Of The CPU",配置位
//初始化函数
void init()
{
    TRIS=0X00;                   //全部输出
    OPTION=0X00;                 //设置所有I/O走做普通I/O口
        TMR0 = 56;
}

void main()
{
        uchar i;
        init();
        while(1)
        {
                if(TMR0 > 150)
                {
                        TMR0 = 56;
                        if(i)
                        {
                                i = 0;
                                LED = 1;
                        }
                        else
                        {
                                i = 1;
                                LED = 0;
                        }
                }
        }
}

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

本版积分规则

20

主题

78

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

20

主题

78

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部