![]() |
|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Aug 2010
Bài gửi: 7
: |
![]() Em đang làm ứng dụng dùng srf05 để đo khoảng cách code của em như sau:
#include "18F4550.h" #device *=16 #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL5,CPUDIV1,V REGEN #use delay(clock=20000000) #define LCD_ENABLE_PIN PIN_D2 #define LCD_RS_PIN PIN_D0 #define LCD_RW_PIN PIN_D1 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include "lcd.c" #define SRF05_IN PIN_B4 //================================= long rise,fall,pulse_width; int8 tram1,chuc1,donvi1; //int16 d; #int_ccp1 #int_ccp2 void isr(void) { rise = CCP_1; fall = CCP_2; pulse_width =fall-rise; // CCP_1 luu thoi gian xung len muc cao // CCP_2 luu thoi gian xung xuong muc 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; lcd_gotoxy(7,2); lcd_putc(tram1); lcd_gotoxy(8,2); lcd_putc(chuc1); lcd_gotoxy(9,5); lcd_putc(donvi1); lcd_gotoxy(10,2); lcd_putc("cm"); } void main() { LCD_init(); setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise setup_ccp2(CCP_CAPTURE_FE); // Configure CCP2 to capture fall setup_timer_1(T1_INTERNAL); // Start timer 1 //enable_interrupts(INT_CCP1); // Setup interrupt on rising edge enable_interrupts(INT_CCP2); // Setup interrupt on falling edge enable_interrupts(GLOBAL); while (1) { int16 d; //10us cho trigger output_high(SRF05_IN); delay_us(10); output_low(SRF05_IN); d =pulse_width/(12*58); //d =123; printf(lcd_putc,"\f Khoang cach"); convert_bcd1(d); delay_ms(100); } } Em nạp vào mạch thì khoảng cánh đo được nhảy loạn xa lên, bác nào có thể chỉ cho em sai chổ nào không à
__________________
học thầy không tày học bạn |
![]() |
![]() |
|
|