2011-09-28 138 views
1

我幾乎是全新的PIC32及其在C編程,所以我有點難以解決如何解決以下問題。我被要求打開和關閉PIC32的LED,我可以做得很好;不過,我現在希望在切換之間添加0.25秒的延遲。我被告知假設我正在使用72MHz系統時鐘和36MHz外設總線時鐘。我現在知道Timer2是一個B型定時器,我應該將它配置爲16位非門操作。我認爲在設置TON開始時間之前,我可以首先根據需要在T2CON中設置TMR2,PR2和其他位的初始值,然後通過清零TON並重置初始值來結束它。使用PIC32的Timer2來設置延遲

那麼,如果上述聽起來不錯,我怎麼能用C來做到這一點?我可以從參考手冊收集的是,它可能看起來像以下:

T2CON = 0x0;   // Stop Timer and clear control register, 
         // set prescaler at 1:1, internal clock source 
TMR2 = 0x0;   // Clear timer register 
PR2 = 0xFFFF;   // Load period register 
T2CONSET = 0x8000;  // Start Timer 

現在,怎麼可能我設置了分頻,什麼不能讓我可以實現我的0.25秒延遲?我只是不擅長涵蓋C所需要的東西,而且我仍然不太擅長在彙編中進行這種事情......任何指導都是值得讚賞的。這裏是我的代碼迄今:

#include <p32xxxx.h> 

int main() 
{ 
    while(1) 
    { 
     PORTDbits.RD0 = 1; // Turns LED On? 
     // Delay...? 
     PORTDbits.RD0 = 0; // Turns LED Off? 
     // Delay...? 
    } 
    return 0; 
} 

頭文件:p32mx360f512l.h,如果沒有任何用處的。

回答

0

頭文件的名稱是使用...根據該文件名我猜這是你有一個頁面上一起工作... http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en532441

你可以找到一些C代碼示例芯片,所以應該涵蓋像

所以對於您的一般辦法「如何與這個芯片在C工作」的問題:

一個循環是一個不錯的主意,但因爲你被賦予在非門控模式下的b類定時器,我認爲這應該是一個暗示,使用中斷處理程序來完成工作...看看http://ww1.microchip.com/downloads/en/DeviceDoc/61105E.pdf(第14.4節)瞭解如何在這種情況下,你需要知道何時所需的時間已經到了,以便翻轉位

在ISR中比較定時器/計數器的值與一個必須根據時鐘頻率和預分頻器設置計算的值

該位被翻轉後,爲下一個週期重置定時器

+0

是的,我想過使用中斷,但我相信教授會要求我們改變什麼應該是一個循環延遲一個爲下一個實驗室使用中斷。我想我設法弄清楚了。我在回憶什麼的PRx持有的問題......我想這樣的事情會的工作: 'T2CON =爲0x0;'' TMR2 = 0;'' PR2 = 0xFFFF的;'' = TCONSET 0x8000' ' while(TRM2 <(SysClockSpeed * SecondsOfDelay)){}' 'TCONCLR = 0x8000' –