Vous êtes sur la page 1sur 7

include<at89x52.h> // plz ad the reg51 .

h file

#include<string.h> // plz ad the string . h file

//heart beat monitor 8051 based

#define lcdport P2 // chnage it for ur hardware

sbit rw = P3^7; // LCD connection may be different

sbit rs=P3^6; // LCD interface with microcontroller

sbit en=P3^5; // Enable pin of LCD

unsigned char sec,sec100;

unsigned int bt,tick,r,bpm;

void lcdinit();

void lcdcmd(unsigned char);

void lcddata(unsigned char);

void send_string(unsigned char *s);

void msdelay(unsigned int);

void extrint (void) interrupt 0 // external Interrupt to detect the heart pulse

bt=tick; // number of ticks are picked

tick=0; // reset for next counting

void timer0 (void) interrupt 1 using 1 // Timer 0 for one second time

TH0 = 0xdc; //The value is taken for Ssc/100 at crystal 11.0592MHz

sec100++; // It is incremented every Ssc/100 at crystal 11.0592MHz

tick++; // This variable counts the time period of incoming pulse in Sec/100
if(tick>=3500){tick=0;} // tick are limited to less trhan 255 for valid calculation

if(sec100 >=100) // 1 sec = sec100 * 100

sec++;

sec100=0;

void main()

P0=0xff;

P1=0xff;

P2=0xff;

P3=0xff;

rw=0;

EA = 1;

TMOD = 0x21;

IT0 = 1;

EX0 = 1;

ET0 = 1;

TR0 = 1;

msdelay(1000);

lcdinit();

msdelay(1000);
send_string("Heart beat ");

msdelay(1500);

msdelay(500);

//delay(15000);

bpm=0;bt=0;

while(1)

if(sec >=1)

sec=0;

/*

The sampling time is fixed 1 sec.

A variable "tick" is incremented with one tick per 100mSc in the timer 0 interrupt routine.

Each on occurring of external interrupt the value in the "tick" is picked up

and it is set to zero for recounting.

The process continues till next external interrupt.

Formula for calculating beats per minutes (microcontroller based heartbeat monitor ) is

as tick is the time period in Sec/100. so extract the frequency of pulses at external interrupt

Frequency = (1/tick)* 100 i.e pulses /sec


Then

bpm = frequency * 60 for one minutes i.e pulses per minute

in short we can do it as

bpm = 6000/ bt

*/

lcdcmd(0x02);

if(bt >=7){

bpm = 6000/bt; // for valid output bt is limited so that it should be greater than 6

msdelay(500);

send_string("Pulse. ");

lcddata((bpm/100)+0x30);

r=bpm%100;

lcddata((r/10)+0x30);

lcddata((r%10)+0x30);

send_string(" bpm ");

else {

send_string("out of range");} // otherwise bpm will be shown zero, if limit does not fit for your project
you can change it.

void lcdinit()

msdelay(100);
lcdcmd(0x01);

msdelay(500);

lcdcmd(0x38);

msdelay(500);

lcdcmd(0x38);

msdelay(500);

lcdcmd(0x38);

msdelay(500);

lcdcmd(0x06);

msdelay(500);

lcdcmd(0x0c);

msdelay(500);

lcdcmd(0x03);

msdelay(500);

msdelay(500);

void lcdcmd(unsigned char value)

rs=0;

lcdport=value;

msdelay(100);

en=1;

msdelay(100);

en=0;

msdelay(100);
rs=1;

void lcddata(unsigned char value)

//heart beat monitoring system using microcontroller

rs=1;

lcdport=value;

msdelay(10);

en=1;

msdelay(100);

en=0;

rs=0;

void msdelay(unsigned int i)

//unsigned int i;

while(i --);

void send_string(unsigned char *s)

unsigned char l,i;

l = strlen(s); // get the length of string

for(i=1;i <=l;i++)

lcddata(*s); // write every char one by one


s++;

Vous aimerez peut-être aussi