#include <p18f2520.h>
// High priority interrupt vector
void chk_isr(void);
void InitTimer1(void);
void Run_Motor1(void);
#pragma interrupt chk_isr
void chk_isr(void)
{
if(PIR1bits.TMR1IF) Run_Motor1();
}
#pragma code isr = 0x08 // store the below code at address 0x08
void isr(void)
{
_asm
GOTO chk_isr
_endasm
}
#pragma code
char FullStepForward [4]={0x03, 0x09, 0x0C, 0x06};
char FullStepBackward[4]={0x06, 0x0C, 0x09, 0x03};
void main ()
{
TRISA=0xDF;
TRISB=0x07;
TRISC=0x00;
ADCON0=0x01;
ADCON1=0x0D;
ADCON2=0xAE;
T0CON=0x06;
delay_1sec();
LCD_Init();
Str_LCD(" Initializing...");
delay_1sec();
GetDigitFormEEPROM();
Time_10ms();
SowDeskTop();
InitTimer1();
while(1)
{
if(DeskTop==1)
{
SowDeskTop();
DeskTop=0;
}
if(loop==0)ADC_ALL();
if(EnterKey==1) WaitMode();
loop++;
Time_10ms();
TempSow();
if(loop>100)loop=0;
}
}
//************************************************************************************
void InitTimer1(){
T1CON = 0x19;
PIR1bits.TMR1IF = 0;
TMR1H = 0x48; // Delay for 300ms (1 rpm)
TMR1L = 0xE5;
T1CONbits.TMR1ON = 1;
}
void Run_Motor1(){
union u_type //Setup a Union
{
unsigned int IntVar;
unsigned char Bytes[2];
}temp; //Assign a var name to the Union
temp.IntVar = 65536-((M1_ADC * 42.11425)+18661);
HighByte=temp.Bytes[1]; //Get the High Byte (xxx)
LowByte=temp.Bytes[0]; //Get the Low Byte (xxx)
PIR1bits.TMR1IF = 0;
TMR1H = HighByte;
TMR1L = LowByte;
if(M1Forward)PORTC = FullStepForward[Index];
else {PORTC = FullStepBackward[Index];}
Index++;
if(Index >=4) Index = 0;
}
//*******************************************************************************
void delay_1sec()
{
TMR0H=0x67;
TMR0L=0x69;
T0CONbits.TMR0ON=1;
while(INTCONbits.TMR0IF==0);
T0CONbits.TMR0ON=0;
INTCONbits.TMR0IF=0;
}
void Time_10ms()
{
TMR0H=0xFE;
TMR0L=0x7A;
T0CONbits.TMR0ON=1;
while(INTCONbits.TMR0IF==0);
T0CONbits.TMR0ON=0;
INTCONbits.TMR0IF=0;
}