Question:
can someone help me with my pic microcontroller project???
2007-04-06 05:02:33 UTC
can anyone pls explain this program to me?its an emergency n this is very important for my final yr engnr project.I need the explaination by thursday.so pls help..
#include
#include
#include

static void interrupt IntRoutine();
void Send();
short int Flg=0;
int Cnt = 0,Oflow=0,Mytime=0,Adval,Hbc,Hbr;
char St1[4],St2[4],St4[3];


void main()
{

TRISB = 0x00;
PORTB = 0x00;
TRISD = 0x00;
PORTD = 0x00;
TRISE = 0x00;
TRISC = 0xbf;

ADCON0 = 0x81;
ADCON1 = 0x82;

SPBRG = 64;

TXEN = 1;
SYNC = 0;
BRGH = 1;
SPEN = 1;
CREN = 1;

DelayMs(200);
DelayMs(200);
DelayMs(200);
DelayMs(200);
DelayMs(200);

LCD_SendCmd(0x01);

LCD_SendCmd(0x80);
LCD_puts("Ebc:");

LCD_SendCmd(0x88);
LCD_puts("Tim:");

LCD_SendCmd(0xc3);
LCD_puts("Ebr: Bpm");

T1CON = 0x00; // Enable Timer1
PEIE = 1;
GIE = 1;

TMR1IF = 0;
TMR1IE = 1;
TMR1L = 0xaf;
TMR1H = 0x3c;
TMR1ON = 1;

for(;;)
{

if(Oflow)
{
Oflow = 0;
Mytime++;
}


ADCON0 = 0x81;
DelayUs(50);
ADGO = 1;
while(ADGO) continue;

Adval = (ADRESH * 256) + ADRESL;

if(Adval < 100 && Flg == 0)
{
Hbc++;
Flg = 1;
}

if(Adval > 100 && Flg == 1)
{
Flg = 0;
}

if(Mytime > 3 && Mytime < 60) RD0 = 0;

if(Mytime >= 60)
{
Mytime = 0;
Ebr = Ebc;
if(Ebc > 15)
{
RD0 = 1;
}
Ebc = 0;
}

sprintf(St1,"%3d",Ebc);
LCD_SendCmd(0x84);
LCD_puts(St1);

sprintf(St2,"%3d",Ebr);
LCD_SendCmd(0xc8);
LCD_puts(St2);

sprintf(St4,"%02d",Mytime);
LCD_SendCmd(0x8c);
LCD_puts(St4);

Send();
DelayMs(2);

}

}





static void interrupt IntRoutine()
{

if(TMR1IF)
{
TMR1IF = 0;
Cnt++;
if(Cnt >= 50)
{
Cnt = 0;
Oflow = 1;
}

TMR1ON = 0;
TMR1L = 0xaf;
TMR1H = 0x3c;
TMR1ON = 1;

}

}
Three answers:
2007-04-06 05:08:22 UTC
Do I earn your degree, if I answer your question? Please post your degree on your 360 page, so I can conveniently download it.



Thanks
justme
2007-04-06 05:49:16 UTC
well, theres a lot missing, but these lines are setting up the micro.



TRISB = 0x00;

PORTB = 0x00;

TRISD = 0x00;

PORTD = 0x00;

TRISE = 0x00;

TRISC = 0xbf;



ADCON0 = 0x81;

ADCON1 = 0x82;



SPBRG = 64;



TXEN = 1;

SYNC = 0;

BRGH = 1;

SPEN = 1;

CREN = 1;





this is initializing an LCD display after some delay time, and setting up the timer interrupt.

DelayMs(200);

DelayMs(200);

DelayMs(200);

DelayMs(200);

DelayMs(200);



LCD_SendCmd(0x01);



LCD_SendCmd(0x80);

LCD_puts("Ebc:");



LCD_SendCmd(0x88);

LCD_puts("Tim:");



LCD_SendCmd(0xc3);

LCD_puts("Ebr: Bpm");



this is setting up a timer interrupt

T1CON = 0x00; // Enable Timer1

PEIE = 1;

GIE = 1;



TMR1IF = 0;

TMR1IE = 1;

TMR1L = 0xaf;

TMR1H = 0x3c;

TMR1ON = 1;





this is the timer interrupt, just setting Oflow to 1 when it reaches a certain time

static void interrupt IntRoutine()

{



if(TMR1IF)

{

TMR1IF = 0;

Cnt++;

if(Cnt >= 50)

{

Cnt = 0;

Oflow = 1;

}



TMR1ON = 0;

TMR1L = 0xaf;

TMR1H = 0x3c;

TMR1ON = 1;



}



}



this is a never ending loop, and it looks like it is reading in an A/D converter every Mytime amount of time and probably displaying the results on the LCD. its hard to tell without the rest of the code though.



for(;;)

{



if(Oflow)

{

Oflow = 0;

Mytime++;

}





ADCON0 = 0x81;

DelayUs(50);

ADGO = 1;

while(ADGO) continue;



Adval = (ADRESH * 256) + ADRESL;



if(Adval < 100 && Flg == 0)

{

Hbc++;

Flg = 1;

}



if(Adval > 100 && Flg == 1)

{

Flg = 0;

}



if(Mytime > 3 && Mytime < 60) RD0 = 0;



if(Mytime >= 60)

{

Mytime = 0;

Ebr = Ebc;

if(Ebc > 15)

{

RD0 = 1;

}

Ebc = 0;

}



sprintf(St1,"%3d",Ebc);

LCD_SendCmd(0x84);

LCD_puts(St1);



sprintf(St2,"%3d",Ebr);

LCD_SendCmd(0xc8);

LCD_puts(St2);



sprintf(St4,"%02d",Mytime);

LCD_SendCmd(0x8c);

LCD_puts(St4);



Send();

DelayMs(2);



}



}
2007-04-06 05:09:10 UTC
We can help you

contact us at expert.myitcareer .org


This content was originally posted on Y! Answers, a Q&A website that shut down in 2021.
Loading...