![]() |
|
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 |
|
![]() |
![]() |
![]() |
|
|