PDA

View Full Version : điều khiển xung PIC16F877a mà không sử dụng CCP1 và CCP2


tungk1
20-11-2014, 03:54 PM
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);

}
}
}