View Single Post
Old 19-12-2008, 08:11 PM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi datk45d View Post
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,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn