|
Tài trợ cho PIC Vietnam |
Công nghệ robot Tất cả các vấn đề về robot di động, tay máy, haptics.... |
|
Ðiều Chỉnh | Xếp Bài |
05-04-2013, 11:16 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: Apr 2013
Bài gửi: 4
: |
Xe dò đường Pic 16f877A
Em đang làm đề tài môn học về xe dò đường theo vạch trắng bằng pic 16f877A.Xe đơn giản là chỉ chạy theo vạch thôi ạ,khi nào gặp 1 vạch ngang thì xe dừng lại.Em đã vẽ mạch,code và làm mạch thực tế nhưng em nó quyết tâm không chạy,mong các bác giúp đỡ ạ.
đây là code và mạch http://www.mediafire.com/?fd5y7b6ntd0i44p #include <16F877A.h> #device adc=10 #FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz) #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection #FUSES WRT_50% //Lower half of Program Memory is Write Protected #use delay(clock=20000000) #define dc_t(x) set_pwm1_duty(x) #define dc_p(x) set_pwm2_duty(x) int8 sensor=0; int1 left=0,right=0; VOID scan() { int8 k; sensor=0; for(k=0;k<=5;k++) { set_adc_channel(k); delay_ms(10); if(read_adc()>700) bit_set(sensor,k); } } VOID TU_DONG_TIEN() { if (sensor==0b00100000){dc_t(0);dc_p(70);left=0;right =1;} if (sensor==0b00010000){dc_t(0);dc_p(60);left=0;right =1;} if (sensor==0b00001000){dc_t(0);dc_p(50);left=0;right =1;} if (sensor==0b00001100){dc_t(60);dc_p(60);} if (sensor==0b00000100){dc_t(50);dc_p(0);left=1;right =0;} if (sensor==0b00000010){dc_t(60);dc_p(0);left=1;right =0;} if (sensor==0b00000001){dc_t(70);dc_p(0);left=1;right =0;} if(sensor==0) { if(right){dc_t(0);dc_p(50);} if(left){dc_t(50);dc_p(0);} } if(sensor==0xff){dc_t(0);dc_p(0);} } void main() { setup_adc_ports(ALL_ANALOG); setup_adc(ADC_CLOCK_INTERNAL); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_16,100,1); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); set_pwm1_duty(0); set_pwm2_duty(0); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); // TODO: USER CODE!! while(1) { scan(); //sensor=0b00001100; tu_dong_tien(); } } thay đổi nội dung bởi: chinhan_92, 11-04-2013 lúc 10:42 PM. |
|
|