搜索
bottom↓
回复: 13

pic单片机定时器0问题

[复制链接]

出0入0汤圆

发表于 2015-3-17 18:57:04 | 显示全部楼层 |阅读模式
用PIC16F685这个型号,发现定时器0没有开启停止位(第一次玩这个单片机),而且写了个代码,发现定时器溢出标志一直没置位。用中断方式,中断也进不去大家给看看。
#include <pic16f685.h>
unsigned int i;

void Init_Fosc(void)
{
           OSCCON=0x67;//内部时钟 4M
}
void Init_GPIO(void)
{
     PORTC =0;
    TRISCbits.TRISC1=0; //RC1口设置成输出 用来控制继电器
     PORTCbits.RC1=0;
}
void Init_Timer0(void)
{
        OPTION_REG=0x87; //预分频为256
}

/*void interrupt isr(void)//中断程序,interrupt是个关键字说明该函数,是中断函数。
{
       
        i++;
        if(i==20)
        {
                    PORTCbits.RC1=1;
                i=0;
        }
    INTCONbits.T0IF=0;//清零中断标志位 如果在离开中断程序前没有清零,程序将不停的中断。
    TMR0=61;//给TMR0付初始值61 ,开始下一个50ms计时做准备。
  
}*/
void main()
{
        unsigned char i;
        Init_Fosc();
        Init_GPIO();
        Init_Timer0();
//INTCONbits.GIE=1;//开启总中断
        INTCONbits.T0IF=0;//清零TMR0溢出中断标志位
//INTCONbits.T0IE=1;//开启TMR0溢出中断
       TMR0=61;//50ms
        while(1)
        {
                if(T0IF==1)
                {
                        i++;
                        T0IF=0;//清除T0IF中断标志位
                        TMR0=61;//设置中断初始值61为下次50ms定时做准备                               
                        if(i==20)
                        {
                                i=0;
                                RC1=0;
                        }
                        else
                        {
                                RC1=1;
                        }
                }
               
        }
       
}

出10入10汤圆

发表于 2015-3-17 20:04:33 | 显示全部楼层
i++;
        if(i==20)
        {
                    PORTCbits.RC1=1;
                i=0;
        }
    INTCONbits.T0IF=0;//清零中断标志位 如果在离开中断程序前没有清零,程序将不停的中断。
    TMR0=61;//给TMR0付初始值61 ,开始下一个50ms计时做准备。

  if(T0IF==1)
                {
                        i++;
                        T0IF=0;//清除T0IF中断标志位
                        TMR0=61;//设置中断初始值61为下次50ms定时做准备                                
                        if(i==20)
                        {
                                i=0;
                                RC1=0;
                        }
                        else
                        {
                                RC1=1;
                        }


中断程序和main循环程序同时操作中断标志位、RC1口?

出0入0汤圆

发表于 2015-3-17 21:58:25 | 显示全部楼层
楼主怎么确认没有进中断,没有置溢出标志位的?
还是在线调试看看的好,提醒下,PORTC口的要设置为数字模式,模拟关掉

出0入0汤圆

发表于 2015-3-17 23:05:26 | 显示全部楼层
任何一个中断都是指向同一个中断向量,要在中断里面判断是哪个产生的 中断 如TMR0IF

出0入0汤圆

发表于 2015-3-17 23:07:00 | 显示全部楼层
你确认主程序里的while有用吗?用MPLAB仿真一下吧,RC1总是等于1,中断里已经把T0IF清零了。

出0入0汤圆

 楼主| 发表于 2015-3-18 08:30:40 | 显示全部楼层
szxszx 发表于 2015-3-17 20:04
i++;
        if(i==20)
        {

中断服务函数前面我有注释了,不好意思没删掉

出0入0汤圆

 楼主| 发表于 2015-3-18 08:35:21 | 显示全部楼层
yklstudent 发表于 2015-3-17 21:58
楼主怎么确认没有进中断,没有置溢出标志位的?
还是在线调试看看的好,提醒下,PORTC口的要设置为数字模式 ...

用示波器看RC1的电平状态的,不用定时器,用软件延时可以RC1可以实现方波。用这个程序,先将RC1置1,然后用定时器定时的方法,在定时到了以后置0,用示波器看没置0,所以确定没执行if(T0IF==1),没置位中断也就进不去了,我原来一直在找是不是需要开启定时器,但是这款单片机好像没有这个功能

出0入0汤圆

 楼主| 发表于 2015-3-18 08:37:01 | 显示全部楼层
xinbihui 发表于 2015-3-17 23:05
任何一个中断都是指向同一个中断向量,要在中断里面判断是哪个产生的 中断 如TMR0IF ...

这个是的,这里的程序我没用中断,这款单片机好像中断是用interrupt这个关键字进入的

出0入0汤圆

发表于 2015-3-18 08:42:33 | 显示全部楼层
chenweigang 发表于 2015-3-18 08:35
用示波器看RC1的电平状态的,不用定时器,用软件延时可以RC1可以实现方波。用这个程序,先将RC1置1,然后 ...

确认引脚端口设置为数字模式,否则没法设置高、设置低的

出0入0汤圆

 楼主| 发表于 2015-3-18 08:55:06 | 显示全部楼层
yklstudent 发表于 2015-3-18 08:42
确认引脚端口设置为数字模式,否则没法设置高、设置低的

嗯,试过单独置高置低可以的

出10入10汤圆

发表于 2015-3-18 09:18:52 | 显示全部楼层
本帖最后由 szxszx 于 2015-3-18 09:20 编辑

当i=20时,RC1=0,当i=1~19时,RC1=1,所以RC1=0只能维持50ms时间,继电器无法动作

出0入0汤圆

 楼主| 发表于 2015-3-18 09:42:56 | 显示全部楼层
szxszx 发表于 2015-3-18 09:18
当i=20时,RC1=0,当i=1~19时,RC1=1,所以RC1=0只能维持50ms时间,继电器无法动作 ...

现在不是功能有没有实现,而是RC1现在没有输出50ms的低电平

出10入10汤圆

发表于 2015-3-18 10:00:09 | 显示全部楼层
RC1上电默认为模拟输入,要对ANSEL进行初始化

出0入0汤圆

 楼主| 发表于 2015-3-18 10:35:50 | 显示全部楼层
szxszx 发表于 2015-3-18 10:00
RC1上电默认为模拟输入,要对ANSEL进行初始化

不用定时器的时候,能正常输出高低,端口配置没问题的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-1 17:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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