Mình đã nạp vào pic nhưng ko điều khiển portB dc, cũng ko thấy xung pwm trên chân ccp1, ccp2 lun. Mình đã kiểm tra nhiều lần rồi, ko bik là trình dịch bị lỗi hay pic bị hư hay tại code mình nữa. Mọi ng xem giúp mình cái nha, thanks.
Code:
#include <16F877A.h> #FUSES HS,NOWDT,NOPUT,NODEBUG,NOPROTECT,NOBROWNOUT,NOLVP, NOCPD,NOWRT #use delay(clock=20000000) #use fast_io(b) #use fast_io(d) #byte portb=0x06 #byte portd=0x08 #bit RB4=portb.4 #bit RB5=portb.5 #bit RB6=portb.6 #bit RB7=portb.7 #bit RD0=portd.0 #bit RD1=portd.1 #bit RD2=portd.2 #bit RD3=portd.3 void forward() { RB4=1; RB5=0; RB6=0; RB7=1; } void backward() { RB4=0; RB5=1; RB6=1; RB7=0; } void right() { RB4=1; RB5=0; RB6=1; RB7=0; } void left() { RB4=0; RB5=1; RB6=0; RB7=1; } void stop() { RB4=0; RB5=0; RB6=0; RB7=0; } int16 duty; int p; void main() {duty=75; set_tris_b(0x0F); set_tris_d(0x00); portb=0; portd=0; setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); setup_timer_2(T2_div_by_4,124,1); set_pwm1_duty(duty); set_pwm2_duty(duty); while(1) { if((RD0==0)&(RD1==0)&(RD2==1)&(RD3==1))p=1; else if((RD0==0)&(RD1==1)&(RD2==0)&(RD3==0))p=2; else if((RD0==0)&(RD1==1)&(RD2==0)&(RD3==1))p=3; else if((RD0==0)&(RD1==1)&(RD2==1)&(RD3==0))p=4; else if((RD0==0)&(RD1==1)&(RD2==1)&(RD3==1))p=5; else if((RD0==0)&(RD1==0)&(RD2==0)&(RD3==1)&(duty<125)) {duty+=25; while((RD0==0)&(RD1==0)&(RD2==0)&(RD3==1)); } else if((RD0==0)&(RD1==0)&(RD2==1)&(RD3==0)&(duty>0)) {duty-=25; while((RD0==0)&(RD1==0)&(RD2==1)&(RD3==0)); } switch(p) { case 1:forward();break; case 2:backward();break; case 3:right();break; case 4:left();break; case 5:stop();break; } } }
Comment