Ðề tài: nhờ xe, giúp e
View Single Post
Old 05-11-2010, 12:27 AM   #1
robotpic
Đệ tử 4 túi
 
Tham gia ngày: Jun 2010
Bài gửi: 79
:
nhờ xe, giúp e

e viêt chương trình sau có 2 lổi e chưa hiểu nguyên nhân:

đặt câu hỏi trước gởi code sau:

chương trình e dùng ngắt ngoài chân rc3 rc4 rc5 của pic 4331 để đọc encoder

câi 1: nếu encoder quay thì xung tang theo theo tốc đọ của encoder , nhưng mà e không quay encoder thì nó cũng tăng lên?
câu 2: còng if nếu e viết :
while(TRUE)
{
IF(XUNG>1000||xung1>1000||xung2>1000) RA0=0;
else IF(XUNG>1200||xung1>1200||xung2>1200) RA1=0;
else IF(XUNG>1300||xung1>1300||xung2>1300) RA2=0;
else IF(XUNG>1400||xung1>1400||xung2>1400) RA3=0;
else IF(XUNG>1500||xung1>1500||xung2>1500) RA4=0;
else IF(XUNG>1600||xung1>1600||xung2>1600) RA5=0;
else IF(XUNG>2000||xung1>2000||xung2>2000) CT_PWM_POWER();
else IF(XUNG>3000||xung1>3000||xung2>3000) CT_PWM_CCP ();
else IF(XUNG>3000||xung1>3000||xung2>3000)
{
RD0=0;
DELAY_MS(500);
RD1=0;
DELAY_MS(500);
RD2=0;
DELAY_MS(500);
RD3=0;
DELAY_MS(500);
RD4=0;
DELAY_MS(500);
}
}
thì nó khi encoder quay mấy vòng đi chăng nữa nó cũng chỉ dừng lệnh if đầu tiên tức chỉ có ra0 sáng.

còn khí e viết như thế nầy thì nhận hết ok:
while(TRUE)
{
IF(XUNG>1000||xung1>1000||xung2>1000) RA0=0;
IF(XUNG>1200||xung1>1200||xung2>1200) RA1=0;
IF(XUNG>1300||xung1>1300||xung2>1300) RA2=0;
IF(XUNG>1400||xung1>1400||xung2>1400) RA3=0;
IF(XUNG>1500||xung1>1500||xung2>1500) RA4=0;
IF(XUNG>1600||xung1>1600||xung2>1600) RA5=0;
IF(XUNG>2000||xung1>2000||xung2>2000) CT_PWM_POWER();
IF(XUNG>3000||xung1>3000||xung2>3000) CT_PWM_CCP ();
IF(XUNG>3000||xung1>3000||xung2>3000)
{
RD0=0;
DELAY_MS(500);
RD1=0;
DELAY_MS(500);
RD2=0;
DELAY_MS(500);
RD3=0;
DELAY_MS(500);
RD4=0;
DELAY_MS(500);
}
}


đây là toàn bộ code của e:


#include <18f4331.h>
#INCLUDE <def_4331.h>

#FUSES HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOPUT,NOCPD,NO DEBUG,NOFCMEN,NOCPB,STVREN,NOPWMPIN,HPOL_LOW
#FUSES MCLR,NOWINEN,NOIESO,NOWRTC,NOWRTB,NOWRTD,NOEBTR,NO WRT,NOEBTRB,EXCLKD0,T1STANDARD

#use delay(clock=20000000)

#use fast_io(a)
#use fast_io(d)
#use fast_io(c)
#use fast_io(e)

long XUNG,XUNG1,XUNG2;

#INT_EXT //RC3
VOID DEM_NGAT()
{
XUNG++;
return ;
}

#INT_EXT1 //RC4
VOID DEM_NGAT_1()
{
XUNG1++;
return ;
}

#INT_EXT2 //RC5

VOID DEM_NGAT_2()
{

XUNG2++;
return;
}

VOID CT_PWM_POWER()
{
SET_POWER_PWM0_DUTY(100);

SET_POWER_PWM2_DUTY(500);

SET_POWER_PWM4_DUTY(200);

SET_POWER_PWM6_DUTY(500);

}
VOID CT_PWM_CCP ()
{

SET_PWM2_DUTY(250);
SET_PWM1_DUTY(500);
}


void main()
{
trisa=0x00;
porta=0xff;

trisb=0x00;
portb=0x00;

trisc=0b00111000;
portC=0x0f;

trisd=0x00;
portd=0xff;

trise=0x00;
porte=0xff;

setup_power_pwm_pins( PWM_ODD_ON,PWM_ODD_ON,PWM_ODD_ON,PWM_ODD_ON);
setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,1 24,0,1,0);
set_power_pwm_override(1, false, 0);
set_power_pwm_override(3, false, 0);
set_power_pwm_override(5, false, 0);
set_power_pwm_override(7, false, 0);

SETUP_CCP1(CCP_PWM);
SETUP_CCP2(CCP_PWM);
setup_timer_2(T2_DIV_BY_4,124,1);

enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
enable_interrupts( INT_EXT2);
ext_int_edge(0, L_TO_H );
ext_int_edge(1, L_TO_H );
ext_int_edge(2, L_TO_H );


xung=0;
xung1=0;
xung2=0;

while(TRUE)
{
IF(XUNG>1000||xung1>1000||xung2>1000) RA0=0;
IF(XUNG>1200||xung1>1200||xung2>1200) RA1=0;
IF(XUNG>1300||xung1>1300||xung2>1300) RA2=0;
IF(XUNG>1400||xung1>1400||xung2>1400) RA3=0;
IF(XUNG>1500||xung1>1500||xung2>1500) RA4=0;
IF(XUNG>1600||xung1>1600||xung2>1600) RA5=0;
IF(XUNG>2000||xung1>2000||xung2>2000) CT_PWM_POWER();
IF(XUNG>3000||xung1>3000||xung2>3000) CT_PWM_CCP ();
IF(XUNG>3000||xung1>3000||xung2>3000)
{
RD0=0;
DELAY_MS(500);
RD1=0;
DELAY_MS(500);
RD2=0;
DELAY_MS(500);
RD3=0;
DELAY_MS(500);
RD4=0;
DELAY_MS(500);
}
}

}
robotpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn