|
Tài trợ cho PIC Vietnam |
Những câu hỏi thường gặp Những lỗi cơ bản thường gặp khi làm việc với PIC hoặc những vấn đề cơ bản nhất thường được hỏi trong những năm qua |
|
Ðiều Chỉnh | Xếp Bài |
29-11-2010, 08:08 PM | #23 |
Đệ tử 4 túi
|
code chua co encoder
#include <16F877A.h> #include <def_877a.h> #fuses NOWDT,NOPUT,HS,NOPROTECT,NOLVP,xt #use delay(clock=10000000) #use fast_io(b) #define tocdo0 0 //toc do bang 0 #define td_macdinh 80 //toc do mac dinh #define tocdo1 124 //1/5 toc do cuc dai #define tocdo2 248 //2/5 toc do cuc dai #define tocdo3 372 //3/5 toc do cuc dai #define tocdo4 496 //4/5 toc do cuc dai #define tocdo5 620 //toc do cuc dai int16 duty1=0; int16 duty2=0; int8 bientocdo=0; int1 bienthuan=0; int1 biennghich=0; #define low 0 #define high 1 void main() //bo PMW1 dk dco quay thuan { //bo PMW2 dk dco quay nghich TRISB=0xff; //khoi tao port B la port nhap setup_ccp1(CCP_PWM); //khoi tao bo PWM1 setup_ccp2(CCP_PWM); //khoi tao bo PWM2 setup_timer_2(T2_div_by_16,154,1); //tao chu ky xung 1ms //(1/clock)*4*t2div*(period+1) //(1/10e6)*4*16*(154+1)=1e-3=1ms set_pwm1_duty(duty1); set_pwm2_duty(duty2); //gia tri duty cua PWM duoc tinh theo cong thuc duty1*t2div/clock //khoi tao duty=0 -> tat dong co while(true) { if (input(pin_b1)== low) //neu nhan phim FO : chay thuan { set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de set_pwm2_duty(duty2); //tat dong co //delay 1s de giam quan tinh dong co { duty1 = tocdo0; } switch (bientocdo) { case 1: duty2= tocdo1; break; case 2: duty2= tocdo2; break; case 3: duty2= tocdo3; break; case 4: duty2= tocdo4; break; case 5: duty2= tocdo5; break; default : duty2 = td_macdinh; break; } set_pwm1_duty(duty1); //cho dco chay nghich set_pwm2_duty(duty2); } if (input(pin_b2)== low) //neu nhan phim RE : chay nghich { set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de set_pwm2_duty(duty2); //tat dong co //delay 1s de giam quan tinh dco { duty2 = tocdo0; } switch (bientocdo) { case 1: duty1= tocdo1; break; case 2: duty1= tocdo2; break; case 3: duty1= tocdo3; break; case 4: duty1= tocdo4; break; case 5: duty1= tocdo5; break; default : duty1 = td_macdinh; break; } set_pwm1_duty(duty1); //cho dco chay thuan set_pwm2_duty(duty2); } if (input(pin_b3)== low) //nhan phim toc do 1 { bientocdo=1; } if (input(pin_b4)== low) //nhan phim toc do 2 { bientocdo=2; } if (input(pin_b5)== low) //nhan phim toc do 3 { bientocdo=3; } if (input(pin_b6)== low) //nhan phim toc do 4 { bientocdo=4; } if (input(pin_b7)== low) //nhan phim toc do 5 bientocdo=5; if (input(pin_b0)== low) //neu nhan phim OFF { duty1=tocdo0; duty2=tocdo0; set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de set_pwm2_duty(duty2); //tat dong co } } } |
|
|