會員登陸
帳號:

密碼:

記住我



忘記密碼?

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


正在流覽:   1 名訪客





TIMER0計數器
初級會員
註冊日期:
6月19日 12:25:14
所屬群組:
註冊會員
文章: 26
等級: 3; EXP: 83
HP : 0 / 70
MP : 8 / 71
離線
16F1828使用TIMER0當計數器
已經將WDTE關閉
按鍵怎麼按TMR0都沒加1
程式有問題嗎


#include <xc.h>

void main (void) {
TRISC=0;
LATC=0X00;
OPTION_REG=0b10101000 ;
T0XCS=0;
TMR0=1;
TRISAbits.TRISA2=1;
while(1)
{
if(TMR0==3)
LATC=0XFF;

}
}

7月25日 11:06:02
轉換PDF檔 列印


Re: TIMER0計數器
資深會員
註冊日期:
2009/04/07 13:30
所屬群組:
註冊會員
文章: 158
等級: 11; EXP: 62
HP : 0 / 265
MP : 52 / 6634
離線
没有關閉 PORTA , PORTC 上的類比輸入功能,
輸入訊號沒能有效傳入.

另外, TMR0 是一個硬體,
除非能很確定 "它加1後會保持一段時間不變,然後再加1"
否則使用了 if(TMR0==3) 這種方式,
有可能會 "很快的加1,加1,加1,加1, 剛好跳過沒檢查到"
建議沒太大影響的話, 至少把它改為 if(TMR0>=3) 之類的吧!


沒有輸入方式的明確敘述,
所以, 以下為

RA2 連接 提升電阻 到 VDD,
關開按下時為 RA2 - GND 的方式輸入例子.

(電源 ON 時,
RA2 會先自行變化準位,
如果看得到 PORTC 上的變化,
則代表設定正常,
亮滅 3 次後改為對按鈕輸入變化 )


#include <xc.h>

#pragma config   FOSC = INTOSC
#pragma config   WDTE = ON
#pragma config   PWRTE = ON
#pragma config   MCLRE = ON
#pragma config   CP = OFF
#pragma config   CPD = OFF
#pragma config   BOREN = ON
#pragma config   CLKOUTEN = OFF
#pragma config   IESO = OFF
#pragma config   FCMEN = OFF

#pragma config   WRT = ALL
#pragma config   PLLEN = OFF
#pragma config   STVREN = OFF
#pragma config   BORV = LO
#pragma config   LVP = OFF


unsigned int     test_count;
unsigned int     LED_lamps;
unsigned int     clk_test;

void  main(void)
{
   
LATA = 0;
   
LATC = 0;
   
ANSELA = 0;   /*  Disable the PORTA analog functions  */
   
ANSELC = 0;   /*  Disable the PORTC analog functions  */
   
PORTA = 0;
   
PORTC = 0;
   
TRISA = 0b00000000;   /*  Set RA2 for an Output, and run the self-test  */
   
TRISC = 0B00000000;   /*  Set PORTC all Outputs  */

   
WPUA = 0B11111111;
   
WPUC = 0b00000000;
   
OPTION_REG = 0b00111010;
   
TMR0 = 0;

   
test_count = 0;
   
clk_test = 0;
   while(
1)
        {
          
CLRWDT();

          
clk_test++;
          if(
test_count <= 3)
            {
              
/*  Send a pulse to RA2 for testing  */
              
if(clk_test>1000 && clk_test<2000) LATAbits.LATA2=1;  else  LATAbits.LATA2=0;
            }
          if(
clk_test >= 3000)  clk_test = 0;

          
LED_lamps = 0;
          if(
TMR0 >= 3)   LED_lamps = 0b00000001;
          if(
TMR0 >= 6)   LED_lamps = 0b00000011;
          if(
TMR0 >= 9)   LED_lamps = 0b00000111;
          if(
TMR0 >= 12)  LED_lamps = 0b00001111;
          if(
TMR0 >= 15)  LED_lamps = 0b00011111;
          if(
TMR0 >= 18)
            {
              
LED_lamps = 0;
              
TMR0 = 0;

              
test_count++;
              if(
test_count > 3)
                {
                  
test_count = 9;
                  
TRISA = 0b00000100;   /*  Set RA2 for a Input, a real singal in  */
                
}
            }

          
LATC = LED_lamps;
        }
}

7月25日 16:22:36
轉換PDF檔 列印


Re: TIMER0計數器
初級會員
註冊日期:
6月19日 12:25:14
所屬群組:
註冊會員
文章: 26
等級: 3; EXP: 83
HP : 0 / 70
MP : 8 / 71
離線
請問為何要將PORTA設定為輸出?
WEAK PULL-UP是指?

7月26日 08:39:26
轉換PDF檔 列印


Re: TIMER0計數器
資深會員
註冊日期:
2009/04/07 13:30
所屬群組:
註冊會員
文章: 158
等級: 11; EXP: 62
HP : 0 / 265
MP : 52 / 6634
離線
請問為何要將PORTA設定為輸出?

哈!哈!哈!
哪有什麼為什麼,
不是寫個程式在測試 IC 功能嗎?
多打個幾條這也試試...那也試試...
對於 TMR0 當作 計數器使用時, 是只能設為 input 只接受外部輸入,
或是腳位設為 output 在輸出的同時, 也能替自已計算輸出了幾個 pulse,
全都拿來試試, 不是嗎!?


WEAK PULL-UP是指?
我猜你大概是自學者...
因為相關科系者大多看到不想看了.
數位狀態輸入腳位, 因為輸入端為按鍵...., 或可拆連接器...
當有可能出現不能穩定的訊號狀態,
(例如空接, 這時哪知這空在那裡的是 H 還是 L (因為現代技術, 輸入阻抗極理想))
為了避免這類情形出現, (當然是出現會造成因擾與問題啦)
常在輸入腳位連接一個電阻到 VDD (有時是 VCC) 高電位,
讓按鍵放開時, 能確定它因為電阻連接, 腳位狀態穩定於 H (高電位).
而這個輸入腳接電阻到高電位的作法, 就被稱為 PULL-UP
WEAK PULL-UP, 指一個微弱能力類型的 PULL-UP,
通常就是說用了一個 大電阻.(電阻值大, 不是體積大)
現在它出現在 PIC16F1828 內部敘述中,
是的, 就是指它內部就有同樣功能的電路存在,
依據說明 在相對應 WPA 的 bit 設定 1, 並設定 OPTION_REG 的 bit 7 為 0 .
就可以使 PORTA 上的 PULL-UP 有效,
有著跟自行連接一個大電阻到高電位的效果.

另外, 也有相對所謂 PULL-DOWN 的作法,
指的是連接的電阻往 低電位.
看使用需求目的來選擇作法為何.
(輸入直接接上其它IC輸出腳焊著呢...那就省下吧!)

7月26日 10:38:01
轉換PDF檔 列印






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

[進階搜尋]


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