搜索
bottom↓
回复: 10

PIC18F46K22单片机的定时器问题

[复制链接]

出0入0汤圆

发表于 2013-5-3 10:34:48 | 显示全部楼层 |阅读模式
本帖最后由 Lu.Shi 于 2013-5-3 14:47 编辑

刚学习PIC单片机,想使用Timer4做一个定时器,定时1s,但是按照Timer0的思路做不对,然后我就读Datasheet,但是看Datasheet后知道使用定时器要和PR4匹配才中断,但是程序里面的中断标志位TMR4IF一直为1,进不了中断里面,所以请教一下Timer4做一个定时器怎样使用,下面是我的程序初始化,哪有问题请知情人提出来,谢谢!
外部晶振:40MHz。
#include"pic18.h"
void main(void)
{
       
        TMR4IF=0;  //中断标志初始化
        TMR4IP=0; //中断优先级低优先级
        T4CON&=0x04;  //无预分频,无后分频
        TMR4=0;  //Timer4的计数初值
        PR4=0xED;  //设置与TMR4匹配值,还有这部分不知道要初值赋多少,打算先能产生中断,然后软件仿真之后才确定初始值
        GIE=1;    //使能中断
        TMR4IE=1;   //使能Timer4
        TMR4ON=1; //启动Timer4
        while(1)
        {
                ;
        }
       
}
void interrupt Timer4()
{
        if(TMR4IF)
        {
                TMR4IF=0;
                TMR4=0;
                PR4=0xED;
               
               /*执行中断内容*/
        }               
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2013-5-3 11:01:34 | 显示全部楼层
各位大牛人物,不要只看不说呀,哪有问题还行多多指教。。。。

出0入0汤圆

发表于 2013-5-3 13:33:34 | 显示全部楼层
pic16系列有46k22????
麻烦问问题 认真点
自己多想想 估计自己也能找出答案的

出0入0汤圆

 楼主| 发表于 2013-5-3 14:48:13 | 显示全部楼层
yklstudent 发表于 2013-5-3 13:33
pic16系列有46k22????
麻烦问问题 认真点
自己多想想 估计自己也能找出答案的 ...

不好意思,写错了,是18F46K22

出0入0汤圆

 楼主| 发表于 2013-5-5 14:58:12 | 显示全部楼层
还是没人指点吗?!自己给自己顶一下,还是盼回复!!!

出0入0汤圆

发表于 2013-5-5 15:50:57 | 显示全部楼层
可怜的楼主 PEIE你不置1  你怪谁

出0入0汤圆

发表于 2013-9-6 11:24:08 | 显示全部楼层
本帖最后由 wangqh1983 于 2013-9-6 11:25 编辑

LZ你用的是MCC18吗?可以将你的编译器上传吗?我使用的编译器在安装目录下没有这个lkr文件?
刚看到,你用的是HI-TECH PICC编译器.算了,谢谢!

出0入0汤圆

发表于 2013-9-7 03:01:26 | 显示全部楼层
  1.      
  2.         T4CON&=0x04;  //无预分频,无后分频
复制代码
that piece of code has no meaning.

        PR4=0xED;  //设置与TMR4匹配值,还有这部分不知道要初值赋多少,打算先能产生中断,然后软件仿真之后才确定初始值


that determines the duration between each tmr4 interrupt. With the cpu frequency, you can easily determine its duration.
  1.         GIE=1;    //使能中断
  2.         TMR4IE=1;   //使能Timer4
复制代码
Look at the interrupt tree and you will see what's wrong.

  1. void interrupt Timer4()
  2. {
  3.         if(TMR4IF)
  4.         {
  5.                 TMR4IF=0;
  6.                 TMR4=0;
  7.                 PR4=0xED;
复制代码
the last two statements are meaningless.

出0入0汤圆

发表于 2013-9-7 17:36:53 | 显示全部楼层
yklstudent 发表于 2013-5-5 15:50
可怜的楼主 PEIE你不置1  你怪谁

对头

出0入0汤圆

发表于 2013-9-13 10:19:36 来自手机 | 显示全部楼层
应该好好看资料……学习了……

出0入0汤圆

发表于 2013-9-13 10:27:18 | 显示全部楼层
PEIE要置1,允许外部中断
RP4的作用是与TMR4比较,一致则触发中断
另外RP4如果不需要改变不需要重复赋值
还有中断中不要TMR4=0,TMR4的值在与RP4想等候会被自动归零,你这样中断中在清零会造成定时不准
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-25 22:49

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

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