Em đang làm đồ án môn học, mạch chống trộm bằng cảm biến siêu âm. Em tự thiết kế mạch và code thế này không biết nó có chạy không? Phiền mọi người cho ý kiến ^^
RB0 em đấu dây ra loa, tín hiệu mức 0 thì loa kêu. Loa em cấp 12V.
Code:
#include <16F887.h> #include <def_877a.h> #device *=16 adc=10 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #include <string.h> #define mod RD2 #define TRIGGER pin_d0 //chan phat song sieu am //chan ECHO nhan tin hieu ve noi vao RC2 float dist,getvar; int1 has_echo=0; //////////////////////////////////////////////// #INT_CCP1 void ccp1_isr() { IF (input (pin_c2)) { //Nếu là xung cạnh lên set_timer1 (0); //Reset timer1 về 0 setup_ccp1 (CCP_CAPTURE_FE); //Chuyển Capture 1 đo cạnh xuống } ELSE { //Nếu là xung cạnh xuống getvar=CCP_1; //Đọc giá trị timer 1 dist= (getvar*0.8)/58; //Mổi 1 nhịp của timer 1 tương ứng vs 0.8 us, lấy us chia cho 58 ra cm setup_ccp1 (CCP_CAPTURE_RE); //Chuyển Capture 1 đo xung lên has_echo=1; //disable_interrupts (INT_TIMER1); } } //----Ngat timer 1---- #INT_TIMER1 void TIMER1_isr(VOID) { IF (has_echo==0) { has_echo=1; //Tràn timer mà ko có echo thì cho wa (tối đa của SRF05 là 30ms, tràn timer là 52ms) } } //----10us cho trigger---- void trig() { output_high (TRIGGER); delay_us (10); output_low (TRIGGER); } //------------ //----------------------------------------------------------------- void main() { TRISC=0xff; TRISB=0; TRISD=0; //Khoi tao cho ngat ngoai setup_timer_1 (T1_INTERNAL|T1_DIV_BY_4); //20 MHz thì tràn trong 52ms (tối đa xung của SRF05 là 30ms) setup_ccp1 (CCP_CAPTURE_RE); //Thiet lap Capture 1 đo canh lên enable_interrupts (INT_TIMER1); //Ngat timer 1, đe phong trưong hop ko có echo enable_interrupts (INT_CCP1); //Ngat Capture 1 enable_interrupts (GLOBAL); WHILE (TRUE) { has_echo=0; //Xác lap lai echo trig ();//Trigger WHILE (has_echo==0) {} //cho đến khi nhận het echo IF (dist>40&&dist<210) { RB0=0; delay_ms (1); RB0=1; } } }
Comment