微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 初学者请教PIC16f877a定时器1的问题

初学者请教PIC16f877a定时器1的问题

时间:10-02 整理:3721RD 点击:

刚开始学习PIC16F877A单片机,用定时器0做了一个秒表,现在想改为定时器1,直接用定时器1的辅助振荡器,频率为32KHZ,这样就可以直接1s中断一次了,但是程序修改后,无法实现中断,我用小灯测试了,是进不了中断,到底是哪里出问题了呢?这个问题困扰我很久了,恳请前辈们指点,感激不尽!下面是我写的程序:
/*timer1 每1s中断一次,数码管显示秒分时间*/
#include "pic.h"
__CONFIG(0xFF32);      
void Timer1_RTC_Init(void);
void PORT_Init(void);
void interrupt ISR(void);
void Timer1_RTC_disp(void);
void delay( int n);
int Timer1_second;
int Timer1_minute;
int Timer1_hour;
int num_table1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int num_table2[10]={0xBf,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};
void main()
{
  PORT_Init();
  Timer1_RTC_Init();
   while(1)
  {
   Timer1_RTC_disp();
  }
}
void PORT_Init(void)
{
  TRISD=0x00;    //PORTD为输出端口
  TRISA=0x00;    //PORTA为输出端口
}

void Timer1_RTC_Init(void)
{
  TMR1H=0x80;      //装载初值(65536-32.768K)
  TMR1L=0x00;
  TMR1CS=1;        //External clock from pin RC0/T1OSO/T1CKI (on the rising edge)
  T1SYNC=0;        //不与外部时钟同步
  T1OSCEN=1;       //使能Timer1振荡器振荡
  T1CKPS1=0;
  T1CKPS0=0;       //分频1:1
  TMR1ON=1;        //使能Timer1
  TMR1IF=0;
  GIE=1;           //开总中断
  PEIE=1;          //开外部中断
  TMR1IE=1;        //使能Timer1中断
}
void Timer1_RTC_disp(void)
{
  PORTA=0b00000001;
  PORTD=num_table1[Timer1_second%10];
  delay(80);
  PORTA=0b00000010;
  PORTD=num_table1[Timer1_second/10];
  delay(80);
  PORTA=0b00000100;
  PORTD=num_table2[Timer1_minute%10];
  delay(80);
  PORTA=0b00001000;
  PORTD=num_table1[Timer1_minute/10];
  delay(80);
  PORTA=0b00010000;
  PORTD=num_table2[Timer1_hour%10];
  delay(80);
  PORTA=0b00100000;
  PORTD=num_table1[Timer1_hour/10];
  delay(80);
}
void delay( int n )
{
   int i;
   for(i=n;i>0;i--);
}
void interrupt ISR(void)
{
if(TMR1IF&&TMR1IE)         //TMR0IF中断溢出标志位为1
{
  TMR1H=0x80;          //重新装载初值
  TMR1IF=0;            //中断溢出标志位置0      
  Timer1_second++;
  if(60==Timer1_second)  //计时到60s
  {
    Timer1_second=0;
    Timer1_minute++;
    if(60==Timer1_minute) //计时到60分钟
     {
       Timer1_minute=0;
       Timer1_hour++;
       if(24==Timer1_hour)
        {
         Timer1_hour=0;   
        }
     }
   }
}
}





搞不定,只好帮顶一下

恳请大家的指点,

为什么不与外部时钟同步

改成同步了,还是不行。

把配置字里的时钟选择位改一下试试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top