會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





pic16f1507-Timer1設定問題
高級會員
註冊日期:
2007/03/24 09:21
所屬群組:
註冊會員
文章: 74
等級: 7; EXP: 53
HP : 0 / 163
MP : 24 / 5443
離線
請教大家,目前使用Timer1作計時,按照計算應該1秒後,RC7 1秒後要亮起來,但我測試後30幾秒才會亮,是否哪裡有弄錯了

----------------------------------------------------------
#include <htc.h>

int AD_NTC_value1,ad_h_tmp,ad_l_tmp,ad_tmp;
char mode_3_tmp,t2_scale3,t2_scale2;
unsigned short TMR1cnt;
unsigned short min,sec;
unsigned char seg_value;

int adc(int channel);
void delay(int num);
void interrupt t1(void);

__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_ON & CP_OFF & BOREN_OFF & CLKOUTEN_OFF);
__CONFIG(WRT_OFF & STVREN_OFF & BORV_LO & LPBOR_OFF & LVP_OFF);



void main()
{
//--------Oscillation---------
OSCCON=01111011; // internal osc 16M
OSCSTAT=00010001;
//--------I/O----------------
ANSELA=0b00000100; //RA2 analog
TRISA=0b00000100; //RA2 input
PORTA=0b00000000; //all low
ANSELB=0b00000000; //all digital
TRISB=0b00010000; //RB4 in
PORTB=0b00000000; //all low
ANSELC=0x00; //all digital
TRISC=0x00; //all Output
//PORTC=0x00; //all low
//---------Interrupt Timer1-----------

//TMR2IE=1;
//T2CON=0b00000100;
T1CON=0b00000100;

TMR1IF=0; //?埃TMR1い耞篨??
//TMR1H =(65536-40000)/256; //?﹚10msい耞???
//TMR1L =(65536-40000)%256;
GIE=1;
PEIE=1;
TMR1IE=0; //開啟Timer1
TMR1ON=0; //set-up timer1
TMR1GE=0;
//----------A/D---------------
ADCON1=0b01100000;
FVRCON=00000000;

//----------------------
delay(20);
RC3=1; //red led
delay(20);
RC3=0;
delay(5);
RC4=1; //green led
delay(20);
RC4=0;

TMR1cnt=0;
mode_3_tmp=0;
seg_value=0;
min=0;
sec=0;
// RC7=0;

while(1)
{
AD_NTC_value1=adc(2);
delay(5);
if( AD_NTC_value1>=405) //check battery in
{
delay(5);
if( AD_NTC_value1>=405)
{
RC5=0;
TMR1ON=1; //set-up timer1
TMR1IE=1; //開啟Timer1
}
}

else
{
RC5=1;
RC6=0;
RC7=0;
TMR1ON=0; //set-up timer1
TMR1IE=0; //開啟Timer1
}

/*

RC5=1; //test (battery in)
if(RB4)
{
delay(3);
if(RB4)
{
RC4=1; //Green led
}
}
else
{
RC4=0;
}
}
}

else
{
RC5=0; // (battery in)
RC4=0;
}
*/
}
}



//================================================
int adc(int channel)
{

ADCON0=0b10000001 | (channel<<2);

GO=1;
while(GO)
{}
GO=1;
while(GO)
{}
ad_h_tmp=ADRESH<<2;
ad_l_tmp=ADRESL>>6;
ad_tmp=ad_h_tmp+ad_l_tmp;
return(ad_tmp);
}
/*
void interrupt t2(void)
{

TMR2IF=0;
if (mode_3_tmp)
{
if (t2_scale3>=17) //AC送電後,先等待2-3秒
{
t2_scale3=0;

if(t2_scale2>=1) //wait time choise
{
t2_scale2=0;
//tmp^=1;
//RB4=tmp;


}
t2_scale2++;
}
t2_scale3++;
}
}
*/

void interrupt t1(void)
{
if(TMR1IF==1)
{
TMR1IF = 0; // 埃TMR1い耞篨?TMR1IF
TMR1H =(65536-40000)/256 ; //?﹚10msい耞???
TMR1L =(65536-40000)%256 ;
TMR1cnt++;
if (TMR1cnt>=100) //100*10ms=1s
{
RC6=1;
TMR1cnt = 0;
sec++;
if(sec>=1) //1秒(1秒1次))
{
RC7=1;
sec=0;
}
}
}
}




void delay(int num)
{
int aa,bb;
aa=num;
while(aa)
{
bb=num;
while(bb)
{bb--;}
aa--;
}
}

5月05日 08:36:50
轉換PDF檔 列印


Re: pic16f1507-Timer1設定問題
高級會員
註冊日期:
2007/03/24 09:21
所屬群組:
註冊會員
文章: 74
等級: 7; EXP: 53
HP : 0 / 163
MP : 24 / 5443
離線
想請問大家.

PIC16F1507 timer1 使用於計時的算法是否與pic16f877a相同

TMRIH=(65536-初值)/256

TMRIL=(65536-初值)&256

5月06日 21:30:08
轉換PDF檔 列印


Re: pic16f1507-Timer1設定問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14432
等級: 72; EXP: 95
HP : 1079 / 1798
MP : 4810 / 75194
離線
我看不太懂你的程式架構,感覺很亂有直接使用暫存器的設定且沒有說明,這必須對照 Data Sheet 一個一個暫存器來看。

T1CON=0b00000100;

TMR1IF=0; //?埃TMR1い耞篨??
//TMR1H =(65536-40000)/256; //?﹚10msい耞???
//TMR1L =(65536-40000)%256;


以 16MHz 執行,Timer1 的 Clock Source 選用 Fosc/4, Prescable 為 1:1,所以計數周期為 0.25uS (Fcy = 4MHz).
(65536-40000) x 0.25uS = 6.384mS 中斷一次。所以請確認一下你的中斷時間設定。


中斷裡:
if (TMR1cnt>=100) //100*10ms=1s
{
RC6=1;
TMR1cnt = 0;
sec++;
if(sec>=1) //1秒(1秒1次))
{
RC7=1;
sec=0;
}
}


sec++ 後,一定滿足 (sec>=1) 的條件,看不懂你的寫法? 試著將 RC6=1 改成 RC6 = !RC6 做轉態測試看看。

5月07日 11:35:53
轉換PDF檔 列印


Re: pic16f1507-Timer1設定問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14432
等級: 72; EXP: 95
HP : 1079 / 1798
MP : 4810 / 75194
離線
你現在用的是暫存器的最基本的寫法。

使用 PIC16F1xxx 的人幾乎都用 MCC 來撰寫周邊的設定及使用。
參考一下右邊教育訓練光碟的連結:
在 8-Bits MCU 相關課程 下:
PIC101 X IDE & MCC & XC8 的綜合基礎課程 New!


看一下 PIC101 X IDE & MCC 的課程鳩知道妻鐘的差異了。

5月07日 11:40:04
轉換PDF檔 列印


Re: pic16f1507-Timer1設定問題
高級會員
註冊日期:
2007/03/24 09:21
所屬群組:
註冊會員
文章: 74
等級: 7; EXP: 53
HP : 0 / 163
MP : 24 / 5443
離線
hi Ryan,

我單純想寫一個50min定時功能

5月07日 22:40:50
轉換PDF檔 列印


Re: pic16f1507-Timer1設定問題
高級會員
註冊日期:
2007/03/24 09:21
所屬群組:
註冊會員
文章: 74
等級: 7; EXP: 53
HP : 0 / 163
MP : 24 / 5443
離線
Hi Ryang,

與您請教PIC16F1507如果使用外部振盪器,電容值須放多少?pF
另外除了__config須設定外,還有地方需要設定嗎?我一直在spec內找不到相關

5月07日 23:24:32
轉換PDF檔 列印


Re: pic16f1507-Timer1設定問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14432
等級: 72; EXP: 95
HP : 1079 / 1798
MP : 4810 / 75194
離線
Crystal 所接的電容器一般自 5pF ~ 25pF 視 Crystal 廠商而定。

一般來說 32768Hz 可以使用 25pF,4MHz 莫約 20pF,10MHz 15pF。

可以振盪並不見的就可以了,建議使用最低供電壓及最高工作電壓測試一下振盪是否可以全電壓範圍內工作。

先不要管 50 秒的計時,建議先完成使用 Timer1 完成 100mS 的中斷計時後再加入延長時間程式。

5月09日 09:59:10
轉換PDF檔 列印


Re: pic16f1507-Timer1設定問題
高級會員
註冊日期:
2007/03/24 09:21
所屬群組:
註冊會員
文章: 74
等級: 7; EXP: 53
HP : 0 / 163
MP : 24 / 5443
離線
hi Ryang,

明白~~感謝您的指導

5月09日 23:07:17
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project