初学者请教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;
}
}
}
}
}
搞不定,只好帮顶一下
恳请大家的指点,
为什么不与外部时钟同步
改成同步了,还是不行。
把配置字里的时钟选择位改一下试试
