Mình dùng Timer1 nhưng không được như mong muốn, code như sau:
Code:
#include <p24FJ256GB106.h>
//Configs, EC clock, No protect, Watchdog Off
_CONFIG1 (JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx1 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS1)
_CONFIG2 (IESO_OFF & PLLDIV_DIV5 & PLL_96MHZ_ON & FNOSC_PRIPLL & FCKSM_CSDCMD & OSCIOFNC_ON & IOL1WAY_OFF & DISUVREG_OFF & POSCMOD_HS)
int main ()
{
TRISE = 0;
LATE = 0;
T1CON = 0x0000;
T1CONbits.TCKPS1 = 0;
T1CONbits.TCKPS0 = 0;
TMR1 = 0x0000;
PR1 = 0x0002;
_T1IP = 0x01;
_T1IF = 0;
_T1IE = 1;
_TON = 1;
while (1)
{
}
return 1;
}
void __attribute__((interrupt, auto_psv)) _T1Interrupt(void)
{
_T1IF = 0;
TMR1 = 0x0000;
_LATE0 = !_LATE0;
}
Với đoạn code trên mình dùng máy đo thì tín hiệu trên chân RE0 thay đổi mỗi 2us.
Nếu thay đổi
T1CONbits.TCKPS1 = 0;
T1CONbits.TCKPS0 = 1;
Cũng không thay đổi, dù theo datasheet thì tần số sẽ 1:8
Có bạn nào có kinh nghiệm đã làm rồi thì hướng dẫn giúp mình.