giúp em làm đề tài dộng cơ bước
Em dang làm đề tài về động cơ bước và có ngâm cứu vài code viết sẵn ,e đã sửa lại nhưng sau nó không chạy dúng , mong mấy huynh giúp đở , phím stop(B0),forward (B2),Reverse(B4)
nhưng mạch khi mô phổng lại không đúng ,
Code đây :
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use fast_io(B)
#use fast_io(D)
#define stop input(pin_B0)
#define forward input(pin_B2)
#define reverse input(pin_B4)
int8 bienxoay=0x99,sovong,sobuoc,dem=0;
////////////////Chuong Trinh Con////////////////////////////////////
/*================================================= =================*/
void dung()
{
delay_us(100);
while(stop==0) {};
sobuoc=0;
sovong=0;
output_D(0);
output_A(0);
output_C(0xFF);
}
/*================================================= =================*/
void quaythuan()
{
while(true)
{
output_D(bienxoay);
sobuoc++;
if(sobuoc==97)
{
sobuoc=0;
sovong++;
if (sovong==100)
{
sobuoc=0;
sovong=0;
}
}
rotate_right(&bienxoay,1);
if(stop==0)
{
dung();
break;
}
delay_ms(10);
}
}
/*================================================= =================*/
void quaynghich()
{
while(true)
{
output_D(bienxoay);
sobuoc++;
if(sobuoc==97)
{
sobuoc=0;
sovong++;
if (sovong==100)
{
sobuoc=0;
sovong=0;
}
}
rotate_left( &bienxoay,1);
if(stop==0)
{
dung();
break;
}
delay_ms(10);
}
}
/*======================Chuong Trinh Chinh================================*/
void main()
{
set_tris_B(0xFF);
set_tris_D(0);
while(true)
{
if (forward==0)
{
delay_us(100);
while(forward==0)
{
sobuoc=0;
sovong=0;
};
quaythuan();
}
else if (reverse==0)
{
delay_us(100);
while(reverse==0)
{
sobuoc=0;
sovong=0;
};
quaynghich();
}
}
}
|