PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 19-12-2008, 11:51 AM   #1
datk45d
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 13
:
Lỗi timer2 của 16F886

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é:
Code:
//---------------------------------------------------
#include <pic16f887.h>
unsigned char dem;
void main()
{
	TRISC=0;//C out
//max frequency:
//OSCCON=(7<<IRCF0)|(1<<SCS)|(1<<HTS);
//OSCTUNE=15;
//timer2:
T2CON=(1<<TMR2ON)|(15<<TOUTPS0)|(1<<T2CKPS1);//dòng này chuối
PR2=10;
while(1)
{
	if((PIR1&(1<<TMR2IF))!=0)
	{
		PIR1=PIR1&(255-(1<<TMR2IF));
		if(++dem==10)
			PORTC=0;
		else if(dem==20)
		{
			dem=0;
			PORTC=7;
		}
	}
}
}
//========================================
Nếu thay dòng chuối như sau thì không chạy:
T2CON=(1<<TMR2ON);
hoặc:
T2CON=(1<<TMR2ON)|(9<<TOUTPS0)|(1<<T2CKPS1);//postscaler 16
hoặc:
T2CON=(1<<TMR2ON)|(15<<TOUTPS0);

Các bác xem giúp em lỗi gì với.

thay đổi nội dung bởi: namqn, 19-12-2008 lúc 04:37 PM.
datk45d vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-12-2008, 04:38 PM   #2
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
Bạn cho biết đang dùng trình biên dịch nào luôn.

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
Old 19-12-2008, 05:17 PM   #3
datk45d
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 13
:
em dùng Hi-Tech ANSI C compiler, bản lite
datk45d vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-12-2008, 06:00 PM   #4
datk45d
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 13
:
không biết có đúng là nó không, lúc build thì có dòng này, hi vọng bác nhìn nó sẽ rõ hơn:
//--------------------------------------------------------------
HI-TECH C PRO for the PIC10/12/16 MCU family (Lite) V9.60PL3
Copyright (C) 1984-2008 HI-TECH SOFTWARE
(1273) Omniscient Code Generation not available in Lite mode
//--------------------------------------------------------------
Tiện thể cho em hỏi luôn là muốn tìm phần giải thích chi tiết tập lệnh asm cho một con pic thì tìm ở đâu ạ.

thay đổi nội dung bởi: datk45d, 19-12-2008 lúc 06:07 PM.
datk45d vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-12-2008, 08:14 PM   #5
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
...
Tiện thể cho em hỏi luôn là muốn tìm phần giải thích chi tiết tập lệnh asm cho một con pic thì tìm ở đâu ạ.
Datasheet của PIC đều có phần nói về tập lệnh hợp ngữ. Chẳng hạn như trong datasheet của PIC16F886 (PIC16F88x nói chung), mục 15 có trình bày đầy đủ về tập lệnh hợp ngữ.

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
Old 19-12-2008, 10:35 PM   #6
datk45d
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 13
:
Trích:
Nguyên văn bởi namqn View Post
Datasheet của PIC đều có phần nói về tập lệnh hợp ngữ. Chẳng hạn như trong datasheet của PIC16F886 (PIC16F88x nói chung), mục 15 có trình bày đầy đủ về tập lệnh hợp ngữ.

Thân,
Cảm ơn bác. Chắc tại lúc trước xem lướt qua thấy nó nói ít quả em tưởng chỉ là summary.
datk45d vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
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
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 09:55 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam