PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và 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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 27-04-2009, 06:36 PM   #1
nhanh0112
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 81
:
Đâ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.
Code:
#include <12F683.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)   // defind crystal = 4MHz

void main()
{
   setup_timer_2(T2_DIV_BY_1,25,1);//setup_TIMER_2(mode, period, postscale);
   setup_ccp1(CCP_PWM);
   set_pwm1_duty(52); //50%duty, 38462Hz
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER2);

while(TRUE);
}
nhanh0112 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2009, 08:06 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
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
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à 05:46 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