![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| 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 |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
|
#1 |
|
Đệ 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);
}
|
|
|
|
|
|
#2 | |
|
Trưởng lão PIC bang
|
Trích:
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
}
};
}
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 |
|
|
|
|
![]() |
|
|