You are on page 1of 5

#include<htc.

h>
#include<stdio.h>
__CONFIG(HS & WDTDIS & PWRTEN & MCLREN & UNPROTECT &
DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS);
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 20000000
#endif
void delay(char c);
void guikytu(char c);
void guichuoi(const char* s);
void pwm1(unsigned int a);
void pwm2(unsigned int b);
#define dira RC3
#define dirb RC0
char data;
char f,h,m=0;
int value[16]={1018,1003,979,945,902,850,791,723,723,649,568,482,391,297,200,100};
int val1[8]={1018,1003,979,945,902,850,791,723};
int val2[8]={100,200,297,391,482,568,649,723} ;
//Chuong trinh chinh
void main()
{
//Khoi tao I/Os
TRISC0=TRISC3=0;
//Khoi tao UART
TXSTA=0X24;
RCSTA=0X90;
BRG16=1;
SPBRGH=0X02;
SPBRG=0X08;
//khai bao ngat nhan
RCIE=1;
RCIF=0;
PEIE=1;
GIE=1;
//Khoi tao 2 kenh PWM
TRISC1=1;
TRISC2=1;
T2CKPS1=0;
T2CKPS0=0;
PR2=0XFF;
CCPR2L = 0;
CCP2CON = 0X0C;
CCPR1L=0;
CCP1CON = 0X0C;
TMR2ON=1;
TRISC1 =0;
TRISC2=0;
while(1)
{
dira=dirb=0;
pwm1(1023);
pwm2(0);
delay(10);
pwm2(1023);
pwm1(0);

delay(10);
dira=1;
pwm1(1023);
pwm2(0);
delay(10);
dirb=1;
pwm2(1023);
pwm1(0);
delay(10);
dira=0;
pwm1(1023);
pwm2(0);
delay(10);
}
}
//Chuong trinh ngat
void interrupt isr()
{
if(RCIE&&RCIF)
{
RCIF=0;
data=RCREG;
switch(data)
{
//Start/Stop
//Full step
case 'b':
//while(f<50)
//{
dira=dirb=0;
pwm1(1023);
pwm2(0);
delay(40);
pwm2(1023);
pwm1(0);
delay(40);
dira=1;
pwm1(1023);
pwm2(0);
delay(40);
dirb=1;
pwm2(1023);
pwm1(0);
delay(40);
dira=0;
pwm1(1023);
pwm2(0);
delay(40);
//f++;
//}
break;
//Half step
case 'c':
//while(h<50)
//{
dira=dirb=0;

pwm1(1023);
pwm2(0);
delay(20);
pwm1(723);
pwm2(723);
delay(20);
pwm1(0);
pwm2(1023);
delay(20);
dira=1;
pwm1(723);
pwm2(723);
delay(20);
pwm1(1023);
pwm2(0);
delay(20);
dirb=1;
pwm1(723);
pwm2(723);
delay(20);
pwm1(0);
pwm2(1023);
delay(20);
dira=0;
pwm1(723);
pwm2(723);
delay(20);
pwm1(1023);
pwm2(0);
delay(20);
//h++;
//}
break;
//Micro step
case 'd':
while(m<50)
{
dira=dirb=0;
pwm1(1023);
pwm2(0);
delay(10);
for (char i=0;i<17;i++)
{
v
pwm2(1023);
pwm1(0);
delay(10);
dira=1;
for (char i=0;i<17;i++)
{
pwm2(value[i]);
pwm1(value[16-i]);
delay(10);
}
pwm1(1023);
pwm2(0);
delay(10);
dirb=1;
for (char i=0;i<17;i++)

{
pwm1(value[i]);
pwm2(value[16-i]);
delay(10);
}
pwm2(1023);
pwm1(0);
delay(10);
dira=0;
for (char i=0;i<17;i++)
{
pwm2(value[i]);
pwm1(value[16-i]);
delay(10);
}
m++;
}
break;
default:
break;

}
}
}
//Chuong trinh con
void delay(char c)
{
char x=0;
while(x<c)
{
x++;
__delay_ms(20);
}
}
void guikytu(char c)
{
while(TXIF==0);
TXREG=c;
}
void guichuoi(const char* s)
{
while(*s){
guikytu(*s++);
}
}
void putch (char c)
{
guikytu(c);
}
void pwm1(unsigned int a)
{
DC1B0 = a & 0x01;
DC1B1 = (a>>1)& 0x01;
CCPR1L = (a>>2)& 0XFF ;
return;
}
void pwm2(unsigned int b)
{
CCP2Y = b & 0x01;
CCP2X = (b>>1)& 0x01;
CCPR2L = (b>>2)& 0XFF ;
return;
}

You might also like