View Single Post
Old 28-04-2009, 08:06 PM   #8
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 nhanh0112 View Post
Đây là toàn bộ code (với mục đích đầu tiên là chỉ tạo xung 38kHz) đã đc sửa như chỉ dẫn. Ko biết còn thiếu xót gì ko, các bác chỉnh giùm em. Đo tại chân CCP1(chân 5) luôn là mức 1. Phần cứng đc sử dụng crystal = 4MHz lắp vào chân 2 & 3, chân 1 & 8 cấp nguồn, các chân còn lại bỏ trống.
...
Tôi không dùng CCS C, và tôi cũng không thích dùng các hàm thư viện cho ngoại vi nếu không nắm được mã nguồn của chúng. Do đó, với yêu cầu tạo xung 38 kHz tại chân CCP1 của PIC12F683, từ clock 4 MHz, tôi thường viết code như sau (tôi dùng HTPIC C PRO for PIC10/PIC2/PIC16 ở Lite mode, theo link sau: http://www.microchip.com/stellent/id...cName=en535448):
Code:
#include <htc.h>
#include <pic12f683.h>

__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);

void Init_CCP1(void)
{
	//Assuming 4 MHz system clock (from the internal oscillator)
	PR2 = 25;	//for 38.46 kHz PWM output at CCP1 pin
	T2CON = 0x00;	//with 1:1 prescaler, 1:1 postscaler
	TMR2IF = 0;
	CCP1CON = 0x0C;	//PWM mode, active high
	CCPR1L = 13;	//50% duty cycle (2 LSBs are '00' in CCP1CON)
	TMR2ON = 1;	//Turn on Timer 2
}

void main(void)
{
	GPIO = 0x00;
	CMCON0 = 0x07;		//Turn off comparator, GP0 .. GP2 are I/O pins
	ANSEL &= 0xF0;		//GP0 .. GP2 and GP4 are digital pins
	TRISIO = 0xFA;		//GP0 and GP2 are outputs
	Init_CCP1();
	while (1)
	{
		if (TMR2IF == 1)
		{
			GPIO0 = GPIO0 ^ 1;;	//Toggle every Timer 2 cycle
			TMR2IF = 0;		//Clear Timer 2 IF for next cycle
		}
	};
}
Chú ý: Tôi dùng bộ dao động nội của PIC12F683 (vì không muốn hàn thêm thạch anh vào mạch ứng dụng). Tần số tại chân GP0 sẽ bằng một nửa tần số tại chân GP2/CCP1. Code đã được thử nghiệm trên mạch thực.

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