Trích:
Nguyên văn bởi datk45d
Chào các bác.
Em vừa mua mấy con 16f886 về dùng thử, em cũng mới học về PIC. Em làm một chương trình phát xung nho nhỏ ra mấy chân PORTC, dùng timer2. Tuy nhiên nếu dùng prescaler và postscaler cùng tỉ lệ 1:16 thì mới chạy, còn không thì không chạy. Các bác xem code nhé:
...
Các bác xem giúp em lỗi gì với.
|
Tôi dùng prescale = 1:1, postscale = 1:16 với chương trình sau thì Timer2 làm việc bình thường:
Code:
#include <htc.h>
#include <pic16f887.h>
__CONFIG(HS & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS & DEBUGDIS);
__CONFIG(BORV21);
unsigned char cnt;
void interrupt PIC16_ISR(void)
{
}
void Init_Ports(void)
{
TRISB = 0xFE;
ANSELH = 0x00;
}
void Init_Timer2(void)
{
T2CON = 0x78; //1:1 prescaler, 1:16 postscaler
PR2 = 249;
// TMR2IE = 1;
TMR2IF = 0;
TMR2ON = 1;
// PEIE = 1;
// GIE = 1;
}
void main(void)
{
Init_Ports();
Init_Timer2();
cnt = 250;
RB0 = 0;
while (1)
{
if (cnt == 0)
{
RB0 = RB0 ^ 1;; //Toggle every 1 milion inst. cycles
cnt = 250;
}
if (TMR2IF == 1)
{
cnt--;
TMR2IF = 0;
}
};
}
Tôi chưa dùng ngắt. Chương trình đã thử nghiệm trên mạch thực, dùng PIC16F886.
Thân,