|
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 |
20-11-2014, 03:54 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Nov 2011
Bài gửi: 1
: |
điều khiển xung PIC16F877a mà không sử dụng CCP1 và CCP2
help: em đang làm đề tài điều khiển xung để chỉnh độ sáng của bóng đèn dựa vào cảm biến siêu âm. nhưng em lấy 2 chân ccp1 và ccp2 để đếm sườn lên xuống chân ECHO của SRF05 nhưng em không đê điều chế xung thành 1 chu kỳ lặp đi lặp lại ah. đoạn code như sau:
#include <def_16f877a.h> #device *=16 adc=8 #FUSES NOWDT,XT,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP, NOCPD,NOWRT #USE delay(clock=20000000) //#use fast_io(b) float s,time; #int_ccp1 void ccp1() { set_timer1(0);// bat dau dem khi co xung muc cao o e cho } #int_ccp2 void ccp2() { time=get_timer1();//doc ket qu kh cam bien co tin hieu song phan hoi } void kich() { output_high(pin_c0); delay_us(15); output_low(pin_c0); } void main() { //set_tris_b(0x00);//xac lap chan b setup_ccp1(ccp_capture_re); //ba´t ca?ch lên setup_ccp2(ccp_capture_fe); //ba´t ca?ch xuô´ng setup_timer_1(t1_internal|t1_div_by_1); //khai ba´o su? du?ng timer1 enable_interrupts(int_ccp1); //cho phe´p nga´t ccp1 enable_interrupts(int_ccp2); // cho phe´p nga´t ccp2 enable_interrupts(global); //cho phe´p nga´t toa`n cu?c while(true) { delay_ms(50); // cho tat xung kich(); //ba´t dâ`u do?c ca?m biê´n delay_ms(200); //cho` kê´t qua? s=(time)/58; //ti´nh toa´n khoa?n ca´ch if(time>=30000) //sau 30ms xung tu dong xuong muc 0 neu khong co vat can { output_high(pin_b0);// dc 70% delay_us(700); output_low(pin_b0); delay_us(300); } else { output_high(pin_b0);//dc 90% delay_us(900); output_low(pin_b0); delay_us(100); } } } |
|
|