chào mọi người
mọi người xem giúp em phần code nàyem dùng sr04
echo-pinC2
trig-pinA1
nối 2 chân ccp1 &ccp2 với echo(16 &17 -echo)
dùng 2 ccp:ccp1 & ccp2
ccp1-bắt sung cạnh lên
ccp2-bắt sung cạnh xuống
khi kích chân A1 sung 10us .nếu echo có xung cạch lên tại thời điểm đó set_timer1 .echo có xung cạnh xuống có được thời gian truyền xung time=get_timer1
đây là code
Code:
#include <main.h> #include <lcd_lib_4bit.c> #include <defs_16f877a.h> #define SRF05_IN PIN_A1 /// #define SRF05_OUT PIN_C2 #define CONVERT_TO_MICROSECONDS (20000000/((4)*1000000)) //khai bao cac bien long t; int16 tram1,chuc1,donvi1; #int_ccp1 //khi say ra ngat ham theo sau duoc thuc thi void len(){ //chuong trinh set_timer1(0);//dat timer1 vi tri ngay khi co xung canh len } #int_ccp2 void xuong(){ t=get_timer1();//doc ket qua khi cam bien co tin hieu ve echomuc thap } void convert_bcd1(int16 x) { donvi1=(((x%1000)%100)%10) + 0x30; //chia lay phan du, so hang don vi tram1=((x%1000)/100) + 0x30; //tach hang tram va hang chuc chuc1=((x%1000)%100)/10 + 0x30; ///// hien thi len gia tri LCD////// LCD_putcmd(0xC5); LCD_putchar(tram1); LCD_putcmd(0xc6); LCD_putchar(chuc1); LCD_putcmd(0xC7); LCD_putchar(donvi1); } void main() { LCD_init(); //---hien thi LCD--- LCD_putcmd(0x85); LCD_putchar("phu dtd"); LCD_putcmd(0xC0); LCD_putchar("S = "); // Configure CCP1 to capture rise setup_ccp1(CCP_CAPTURE_RE); // thiet lap ccp1 do canh len setup_ccp2(CCP_CAPTURE_FE); // thiet lap ccp1 do canh xuong setup_timer_1(T1_INTERNAL|T1_DIV_BY_4); //20 MHz thì tràn trong 52ms (t?i da xung c?a SRF05 là 30ms) enable_interrupts(INT_CCP1); // Setup interrupt on falling edge enable_interrupts(INT_CCP2); // Setup interrupt on falling edge enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); int16 mm2; while(TRUE) { delay_ms(100);//cho 0.1s // 10us cho trigger output_high(SRF05_IN); delay_us(10); output_low(SRF05_IN); //tinh ra quang duong mm2=(t*0.028+1.093);//khoang cach can do convert_bcd1(mm2); delay_ms(100); } }
kiểm tra code LCD khi em đặt s=cont thì lcd hiển thị
kiểm tra sr04 có tín hiệu chân echo(còn sống)
vậy em nghĩ là phần while có vấn đề mọi người xem giúp em!
mọi người có thể viết em phần kiểm tra ngắt được không?
em đang tập tành với pic nên gà lắm
em cảm ơn mọi người đã đọc!
Comment