![]() |
|
Tài trợ cho PIC Vietnam |
Cảm biến Camera, siêu âm, hồng ngoại, gyro, la bàn... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Nov 2012
Bài gửi: 19
: |
giao tiếp 16f877a với cảm biến siêu âm srf05
Mọi người giúp em với ạ. E có biết là dùng 1 chân I/O, 1 chân RB0 dùng timer 1 để tính thời gian (2 chân CCP để điều khiển động cơ). Nhưng em không biết chuyển từ bắt cạnh lên sang bắt cạnh xuống thế nào ạ. Mong mọi người giúp em với, thanks
|
![]() |
![]() |
![]() |
#2 |
Đệ tử 1 túi
Tham gia ngày: Nov 2012
Bài gửi: 19
: |
code nay do em viet nhung no khong chay. Moi nguoi sua giup em voi a
#include <16f877a.h> #fuses HS,NOWDT,NOLVP,NOPROTECT #use delay(clock=12000000) int8 i,j,k,led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0},dv,chuc,tram; float time,kc; #define trig pin_B1 #define echo pin_B0 #int_TIMER1 void trantimer1() { set_timer1(0); } #INT_EXT void ngatngoai() { if(input(pin_b0)) //neu la xung canh len { set_timer1(0); ext_int_edge(H_to_L); } else // neu la xung canh xuong { time=get_timer1(); // doc gia tri timer 1 kc=((time*(4*4/12))/58); // tinh khoang cach. moi nhip timer1 ung voi 1.33us ext_int_edge(L_to_H); // chuyen sang do canh len disable_interrupts(int_timer1); // khong cho phep ngat timer1 output_a(255); for(i=0;i<50;i++) { dv=(int8)kc%10; chuc=(int8)(kc/10)%10; tram=(int8)(kc/100)%10; output_d(led[dv]); output_a(0xfe); delay_ms(1); output_a(0xfd); output_d(led[chuc]); delay_ms(1); output_a(0xfb); output_d(led[tram]); delay_ms(1); } } } void trigger() { output_high(trig); delay_us(12); output_low(trig); } void main() { set_tris_a(0); set_tris_d(0); set_tris_b(0); setup_timer_1(T1_INTERNAL|T1_DIV_BY_4); enable_interrupts(INT_TIMER1); enable_interrupts(INT_EXT); ext_int_edge(L_to_H); enable_interrupts(global); while(1) { trigger(); delay_ms(50); } } |
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|