You are on page 1of 2

volatile unsigned long ctr=0, rev=0;

volatile unsigned short time = 0;


unsigned long prev;
char read=0, percent[7], rpm[7];
float x=0, pct=0;
int i=0;
void interrupt() {
if(INTF_bit) {
++ctr;
INTF_bit = 0;
}
if(T0IF_bit) {
++time;
if(time==30) {
rev = ctr*60;
ctr = 0;
time=0;
}
TMR0 = 0;
T0IF_bit = 0;
}
}
void main() {
ANSEL = 0x02;
ANSELH = 0;
TRISC=~0X44;
UART1_Init(9600);
Delay_ms(100);

// Configure AN pins as digital


// Initialize UART module at 9600 bps
// Wait for UART module to stabilize

GIE_bit=1;
INTEDG_bit=0;
INTE_bit=1;
T0CS_bit = 0;
PSA_bit = 0;
PS2_bit = 1;
PS1_bit = 1;
PS0_bit = 1;
TMR0 = 0;
T0IE_bit = 1;
GIE_bit = 1;
UART1_Write_Text("Start");
UART1_Write(10);
UART1_Write(13);
PWM1_init(3000);
PWM1_start();
while (1) {
if(rev!=prev){
FloatToStr(rev, rpm);
UART1_Write_Text("SPEED =");
UART1_Write_Text(rpm);
UART1_Write_Text("RPM");
UART1_Write(13);
}

// Endless loop

prev=rev;
PWM1_set_duty(255-x);
if (UART1_Data_Ready()) {
// If data is received,
read = UART1_Read();
// read the received data,
if(read=='Q')
{
if(x==255){UART1_Write_text("MAX SPEED");}
else{
x=x+5;
pct=x*100/255;
FloatToStr(pct, percent);
UART1_Write_text("SPEED @");
UART1_Write_text(percent);
UART1_Write_text("%");
}
}
else if(read=='A')
{
if(x==0){UART1_Write_text("MOTOR STOPPED");}
else{
x=x-5;
pct=x*100/255;
FloatToStr(pct, percent);
UART1_Write_text("SPEED @");
UART1_Write_text(percent);
UART1_Write_text("%");
}
}
else
{
UART1_Write_text("Q AND A ONLY!!");
}
UART1_Write(13);
}
}
}

You might also like