Projeto 6: Acionamento de Motor de Passo

28/12/2016

PIC18F4431

#include<p18f4431.h>
#include<timers.h>
#define S1 PORTAbits.RA0
#define S2 PORTAbits.RA1
unsigned int timer=0, real_timer=0;
void config_io()
{
TRISA=0X03;
ANSEL0=0X00;
TRISD=0X00;
}
void stepmotor_clockwise()
{
timer=ReadTimer0();
if(timer==3125) //intevalo de 200mseg
{
real_timer++;
WriteTimer0(0);
}
switch(real_timer)
{
case 1:
PORTD=0X01;
break;
case 2:
PORTD=0X02;
break;
case 3:
PORTD=0X04;
break;
case 4:
PORTD=0X08;
WriteTimer0(0);
real_timer=0;
break;
}
}
void stepmotor_anti_clockwise()
{
timer=ReadTimer0();
if(timer==3125) //intevalo de 200mseg
{
real_timer++;
WriteTimer0(0);
}
switch(real_timer)
{
case 1:
PORTD=0X01;
break;
case 2:
PORTD=0X08;
break;
case 3:
PORTD=0X04;
break;
case 4:
PORTD=0X02;
WriteTimer0(0);
real_timer=0;
break;
}
}
void stepmotor_reset()
{
WriteTimer0(0);
PORTD=PORTD; //mantém na posição
real_timer=real_timer; //mantém na posição
}
void main()
{
OSCCON=0X72;
config_io();
OpenTimer0(TIMER_INT_OFF
&T0_16BIT
&T0_SOURCE_INT
&T0_PS_1_128);
while(1)
{
if((S1==1)&&(S2==0))
{
stepmotor_clockwise();
}
else if((S1==0)&&(S2==1))
{
stepmotor_anti_clockwise();
}
else
{
stepmotor_reset();
}
}
}

© 2016 Dnl Silva. São Paulo - SP
Desenvolvido por Webnode
Crie seu site grátis! Este site foi criado com Webnode. Crie um grátis para você também! Comece agora