8-bit PIC:: PIC16F1503 timer 計數 每秒開+每秒關LED 循環
請教PIC16F1503 TIMER1設定的問題,以下是我的程式,使用RC2控制LED,1秒亮燈,1秒關燈,循環,不知道是我哪邊沒有設定好,以至於都無法動作,只會停在初始狀態的LED亮燈,無法進行我需求的動作,請有經驗的高手幫幫忙,謝謝!
/*
功能:
ON 1S + OFF 1S cycle mode
-----------------------------------------------------------------------------
Fosc = 1MHz
Tosc = 1μs
TMR1 預分頻比 = 8
MCU : PIC16F1503
*/
#include<pic.h>
__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_OFF&BOREN_OFF);
#define LED RC2
void system_initial(void);
unsigned char seconds=0;
void main(void)
{
system_initial();
while (1)
{
while(!TMR1IF); //檢查 Timer1 1S 計時溢位了嗎? (沒有,繼續等待)
TMR1IF=0; //時間溢位,清除旗號
TMR1H=0x85; //TMR1H 133,預載入 MSB (1S) (重新載入Timer1 120mS 的計時)
TMR1L=0xEE; //TMR1L 238,同時載入載入 1S 計數值到 Timer1(16-bit 載入)
seconds+=1; //seconds 計數 seconds 加一
if(LED=1)
{
if(seconds==1)
{
seconds=0;
LED=0;
}
}
if(LED=0)
{
if(seconds==1)
{
seconds=0;
LED=1;
}
}
}
}
void system_initial(void)
{
TRISA=0b00111111; //設定RA0~RA5皆為輸入腳,1設為輸入,0設為輸出
TRISC=0b00001000; //設定RC3為輸入腳,RC0、RC1、RC2、RC4、RC5皆為輸出腳,1設為輸入,0設為輸出
ANSELC=0b00001000; //設定RC0~RC2皆為Digital I/O,RC3類比
OSCCON=0b01011011; //內部振盪器頻率設為1MHz
LED=1;
seconds=0;
T1CON=0b00110111; //Timer1時鐘源為指令時鐘(FOSC/4, 時鐘預分頻比=8, 異步時鐘輸入, Timer1 ON
PIE1=0b00000001; //Timer1溢出中斷ON
INTCON=0b11000000; //允許所有有效中斷, 允許所有有效外設中斷
TMR1H=0x85; //TMR1H 133, 預載入 MSB (1S)
TMR1L=0xEE; //TMR1L 238, 同時載入 1S 計數值到 Timer1(16-bit 載入)
}
請教PIC16F1503 TIMER1設定的問題,以下是我的程式,使用RC2控制LED,1秒亮燈,1秒關燈,循環,不知道是我哪邊沒有設定好,以至於都無法動作,只會停在初始狀態的LED亮燈,無法進行我需求的動作,請有經驗的高手幫幫忙,謝謝!
/*
功能:
ON 1S + OFF 1S cycle mode
-----------------------------------------------------------------------------
Fosc = 1MHz
Tosc = 1μs
TMR1 預分頻比 = 8
MCU : PIC16F1503
*/
#include<pic.h>
__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_OFF&BOREN_OFF);
#define LED RC2
void system_initial(void);
unsigned char seconds=0;
void main(void)
{
system_initial();
while (1)
{
while(!TMR1IF); //檢查 Timer1 1S 計時溢位了嗎? (沒有,繼續等待)
TMR1IF=0; //時間溢位,清除旗號
TMR1H=0x85; //TMR1H 133,預載入 MSB (1S) (重新載入Timer1 120mS 的計時)
TMR1L=0xEE; //TMR1L 238,同時載入載入 1S 計數值到 Timer1(16-bit 載入)
seconds+=1; //seconds 計數 seconds 加一
if(LED=1)
{
if(seconds==1)
{
seconds=0;
LED=0;
}
}
if(LED=0)
{
if(seconds==1)
{
seconds=0;
LED=1;
}
}
}
}
void system_initial(void)
{
TRISA=0b00111111; //設定RA0~RA5皆為輸入腳,1設為輸入,0設為輸出
TRISC=0b00001000; //設定RC3為輸入腳,RC0、RC1、RC2、RC4、RC5皆為輸出腳,1設為輸入,0設為輸出
ANSELC=0b00001000; //設定RC0~RC2皆為Digital I/O,RC3類比
OSCCON=0b01011011; //內部振盪器頻率設為1MHz
LED=1;
seconds=0;
T1CON=0b00110111; //Timer1時鐘源為指令時鐘(FOSC/4, 時鐘預分頻比=8, 異步時鐘輸入, Timer1 ON
PIE1=0b00000001; //Timer1溢出中斷ON
INTCON=0b11000000; //允許所有有效中斷, 允許所有有效外設中斷
TMR1H=0x85; //TMR1H 133, 預載入 MSB (1S)
TMR1L=0xEE; //TMR1L 238, 同時載入 1S 計數值到 Timer1(16-bit 載入)
}





