0% found this document useful (0 votes)
36 views63 pages

Microcontroller Tutorial: Charles Vanpariya U17EE054

This document contains code for several microcontroller tutorials: 1) It shows code for displaying a decimal number on ports 0, 1, and 2. 2) It shows code for blinking an LED using an interrupt timer. 3) It shows code for displaying strings on a LCD based on input switch states. 4) It shows code for measuring RMS voltage and current using an ADC and displaying the results on an LCD.

Uploaded by

kawhi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
36 views63 pages

Microcontroller Tutorial: Charles Vanpariya U17EE054

This document contains code for several microcontroller tutorials: 1) It shows code for displaying a decimal number on ports 0, 1, and 2. 2) It shows code for blinking an LED using an interrupt timer. 3) It shows code for displaying strings on a LCD based on input switch states. 4) It shows code for measuring RMS voltage and current using an ADC and displaying the results on an LCD.

Uploaded by

kawhi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 63

MICROCONTROLLER

TUTORIAL

Charles Vanpariya
U17EE054
#include<reg51.h>

void main()

unsigned char num = 0xfc,dec[3],i;

for(i=3 ; i>0 ; i--)

dec[i-1] = (num%0x0a) + 0x30;

num/=0x0a;

P0 = dec[0];
P1 = dec[1];
P2 = dec[2];
while(1);

}
#include<reg51.h>

unsigned char num = 0x45 , msb = 0xf4, lsb = 0x00;

sbit out = P1^0;

bit action_flag = 0;

void toisr(void);

void main()

TMOD = 0X01;
TH0 = msb;

TL0 = lsb;
IE = 0X82;
TR0 = 1;

while(1)

if(action_flag == 1)

action_flag = 0;

if((num&1) == 1)

out = 1;

else out = 0;

num = num>>1;

}
#include<reg51.h>

void toisr(void) interrupt 1

TH0 = msb; TL0


= lsb;
action_flag = 1;
return;

}
#include <string.h>

#include <reg51.h>

#define MSB 0XC4

#define LSB 0X00

unsigned char str1[]="Hellow";


unsigned char str2[]="Good Bye";
unsigned char str3[]="OK";
unsigned char str4[]="Do Nothing";
unsigned char l1,l2,l3,l4,i=0;

bit action_flag=0;
sbit in0= P1^0;
sbit in1= P1^1;
void main(void)

in0=1;
in1=1;
P0=0;

l1=strlen(str1);
l2=strlen(str2);
l3=strlen(str3);
l4=strlen(str4);
IE=0X82;
TMOD=0X01;
TH0=MSB;
TL0=LSB;
TR0=1;

while(1)

{
if(in1==0 && in0==0)

for(i=0;i<l1;i++)

while (action_flag==0);
action_flag=0;
P0=str1[i];

if(in1==0 && in0==1)

{
for(i=0;i<l2;i++)

while (action_flag==0);
action_flag=0;
P0=str2[i];

if(in1==1 && in0==0)

for(i=0;i<l3;i++)

while (action_flag==0);
action_flag=0;
P0=str3[i];

if(in1==1 && in0==1)

for(i=0;i<l4;i++)

while (action_flag==0);
action_flag=0;
P0=str4[i];

void t0isr(void) interrupt 1

TH0=MSB;
TL0=LSB;
action_flag=1;
return;

}
#include <reg51.h>

#define MSB 0XC4

#define LSB 0X00


sbit out = P2^0;
bit action_flag=0;

unsigned char d[10]={0xFF,0XAA,0XAB,0XAC,0XAD,0XAE,0XAF,0X88,0X5A,0XFD};

unsigned char check=0,i=0;


unsigned int sum =0,send;
void main(void)

out=0;

for(i=0;i<10;i++)

sum=sum+d[i];

send =sum;
If(sum>0x4A)

send=~sum;

send=send+1;

for(i=0;i<16;i++)

while(action_flag==0);

action_flag=0;

check =send && 0x0001;

if(check==0)
out =0;

else

out=1;

send=send>>1;

while(1);

void t0isr(void) interrupt 1

TH0=MSB;
TL0=LSB;
action_flag=1;

}
#include<reg51.h>

#include<math.h>
sbit ALE=P3^1;
sbit EOC=P3^2;
sbit OE=P3^3;
sbit SOC=P3^4;
sbit a=P3^5;
sbit b=P3^6;
sbit c=P3^7;

sbit rs = P2^7;
sbit rw = P2^6;
sbit en = P2^5;
sbit busy = P0^7;

bit takesample = 1;

unsigned char value,V[4] = {0}, I[4] = {0};


unsigned char str1[7] = "Vrms : ";
unsigned char str2[7] = "Irms : ";

double volt,sqV=0,current,sqC=0;
unsigned char nv=0,nc=0;
unsigned int finalV,finalC;

void adc(bit,bit,bit,bit);

void calculate(void);

void lcdcmd(unsigned char);


void lcddata(unsigned char);
void ready(void);

void lcdinit(void);

void display(void);

void delay(unsigned int);

void t0_isr(void);

void main()

unsigned char i;
P1 = 0xff;
EOC = 1;
ALE = 0;
SOC = 0;
OE = 0;

TMOD = 0x01; // 20ms timer

TH0 = 0X10;
TL0 = 0X00;
IE = 0X82;

lcdinit();

lcdcmd(0x80);
for(i=0 ; i< 7 ; i++)

lcddata(str1[i]);

lcdcmd(0xC0);

for(i=0 ; i< 7 ; i++)

lcddata(str2[i]);

TR0 = 1;

while(takesample) //taking samples for 20 ms

adc(0 , 0 , 0 , 0); //voltage samples In 0


adc(1 , 0 , 0 , 1); //current samples In 1

calculate();
display();
while(1);

void adc(bit x, bit y, bit z , bit VorI)

a = x;
b = y;
c = z;

delay(1);
ALE = 1;
delay(1);
SOC = 1;

delay(1);
ALE = 0;
SOC = 0;

while(EOC == 1);

OE = 1;

delay(1);

value = P1;
OE = 0;

if(VorI == 0)

{// VOLTAGE CALCULATION

volt = (value - 128)*(2.5/127); //5 volt corresponds to 255 value


volt = volt*volt;

sqV += volt;

nv++; // number of voltage samples

else

{// CURRENT CALCULATION

current = (value - 128)*(2.5/127);

current = current*current;

sqC += current;

nc++; // number of current samples

return;

void calculate(void)

unsigned char i;
sqV = sqV/nv;
sqV = sqrt(sqV);

finalV = sqV*1000;

for(i=4 ; i>0 ; i--)

V[i-1] = finalV%10;

finalV/=10;

sqC = sqC/nc; sqC


= sqrt(sqC); finalC
= sqC*1000;
for(i=4 ; i>0 ; i--)

I[i-1] = finalC%10;

finalC/=10;

return;

void t0_isr(void) interrupt 0

TR0 = 0;
takesample = 0;
return;

void lcdcmd(unsigned char cmd)

ready();
P0 = cmd;
rs = 0; rw
= 0; en =
1;
delay(1);
en = 0;
return;

void lcddata(unsigned char d)

ready();
P0 = d;
rs = 1;
rw = 0;
en = 1;

delay(1);
en = 0;
return;

void ready(void)

busy = 1;

rs = 0; rw = 1;
while(busy == 1)

en = 0;
delay(1);
en = 1;

return;

}
void lcdinit(void)

lcdcmd(0x38);
lcdcmd(0x01);
lcdcmd(0x0c);
lcdcmd(0x06);

void display(void)

lcdcmd(0x87);
lcddata(V[0] + 0x30);
lcddata('.');
lcddata(V[1] + 0x30);
lcddata(V[2] + 0x30);

lcddata(V[3] + 0x30);

lcdcmd(0xC7);
lcddata(I[0] + 0x30);
lcddata('.');
lcddata(I[1] + 0x30);
lcddata(I[2] + 0x30);
lcddata(I[3] + 0x30);

return;

void delay(unsigned int n)

unsigned int i,j;


for(i=0 ; i<n ; i++)
for(j=0 ; j<100 ; j++);
return;

}
#include<reg51.h>

#include<math.h>

sbit ALE=P3^1;
sbit EOC=P2^0;
sbit OE=P2^1;
sbit SOC=P3^4;
sbit a=P3^5;
sbit b=P3^6;
sbit c=P3^7;

sbit rs = P2^7;
sbit rw = P2^6;
sbit en = P2^5;
sbit busy = P0^7;

unsigned char value , V[4],I[4];


unsigned char str1[7] = "VRMS : ";
unsigned char str2[7] = "IRMS : ";
double vm,im;

unsigned char flag=0;


unsigned int vrms,irms;

void adc(bit,bit,bit);

void calculate(void);

void lcdcmd(unsigned char);


void lcddata(unsigned char);
void ready(void);

void lcdinit(void);

void display(void);

void delay(unsigned int);

void ex0_isr(void);
void t0_isr(void);
void ex1_isr(void);
void t1_isr(void);

void main()

P1 = 0xff;
EOC = 1;
ALE = 0;
SOC = 0;
OE = 0;

TMOD = 0x11; // 5ms timer

TH0 = 0XC4;
TL0 = 0X00;
TH1 = 0XC4;
TL1 = 0X00;

IE = 0X8F; // enabling both external and timer interrupts

IE0 = 1;
IE1 = 1;

lcdinit();

while(1)
{
while(flag<2);
flag = 0;
calculate();
display();

void ex0_isr (void) interrupt 0

TR0 = 1;

return;

}
void t0_isr(void) interrupt 1

adc(0,0,0);

vm = value*(5/255);
TR0 = 0;

flag++;

return;

void ex1_isr(void) interrupt 2

TR1 = 1;

return;

void tr1_isr (void) interrupt 3

TR1 = 0;

adc(1,0,0);

im = value*(5/255);

flag++;

return;

void adc(bit x, bit y, bit z )

a = x;
b = y;
c = z;
delay(1);
ALE = 1;

delay(1);
SOC = 1;

delay(1);
ALE = 0;
SOC = 0;

while(EOC == 1);

OE = 1;

delay(1);

value = P1;
OE = 0;

return;
}

void calculate(void)

unsigned char i;

vrms = vm*1000/sqrt(2);

irms = im*1000/sqrt(2);

for(i=4 ; i>0 ; i--)

V[i-1] = vrms%10;

vrms/=10;

I[i-1] = irms%10;

irms/=10;

return;

void lcdcmd(unsigned char cmd)

ready();
P0 = cmd;
rs = 0;

rw = 0;
en = 1;
delay(1);
en = 0;
return;

}
void lcddata(unsigned char d)

ready();
P0 = d;
rs = 1;
rw = 0;
en = 1;

delay(1);
en = 0;
return;

void ready(void)

busy = 1;

rs = 0; rw = 1;
while(busy == 1)
{

en = 0;
delay(1);
en = 1;

return;

void lcdinit(void)

unsigned char i;
lcdcmd(0x38);
lcdcmd(0x01);
lcdcmd(0x0c);
lcdcmd(0x06);

lcdcmd(0x80);

for(i=0 ; i< 7 ; i++)

lcddata(str1[i]);

lcdcmd(0xC0);

for(i=0 ; i< 7 ; i++)

lcddata(str2[i]);

return;

}
void display(void)

lcdcmd(0x87);
lcddata(V[0] + 0x30);
lcddata('.');
lcddata(V[1] + 0x30);
lcddata(V[2] + 0x30);
lcddata(V[3] + 0x30);

lcdcmd(0xC7);
lcddata(I[0] + 0x30);
lcddata('.');
lcddata(I[1] + 0x30);
lcddata(I[2] + 0x30);
lcddata(I[3] + 0x30);
return;

}
void delay(unsigned int n)

unsigned int i,j;


for(i=0 ; i<n ; i++)
for(j=0 ; j<100 ; j++);
return;

}
#include<reg51.h>

#include<math.h>

sbit ALE=P3^1;
sbit EOC=P3^2;
sbit OE=P3^3;
sbit SOC=P3^4;
sbit a=P3^5;
sbit b=P3^6;
sbit c=P3^7;

sbit rs = P2^7;
sbit rw = P2^6;
sbit en = P2^5;
sbit busy = P0^7;

bit takesample = 1;
unsigned char value,V[4], I[4];
unsigned char str1[7] = "Vrms : ";
unsigned char str2[7] = "Irms : ";
double volt,current;

unsigned int vrms,irms;


void adc(bit,bit,bit);

void calculate(void);

void lcdcmd(unsigned char);


void lcddata(unsigned char);
void ready(void);

void lcdinit(void);

void display(void);

void delay(unsigned int);

void main()

unsigned char i;
P1 = 0xff;

EOC = 1;
ALE = 0;
SOC = 0;
OE = 0;

lcdinit();

while(1)

adc(0,0,0);

volt = (value*5)/(255*0.9);
vrms = volt*1000;
adc(1,0,0);

current = (value*5)/(255*0.9);
irms = current*1000;
calculate();

void adc(bit x, bit y, bit z )

{
a = x;
b = y;
c = z;

delay(1);
ALE = 1;

delay(1);
SOC = 1;

delay(1);
ALE = 0;
SOC = 0;

while(EOC == 1);
OE = 1;
delay(1);
value = P1;
OE = 0;

return;

void calculate(void)

unsigned char i;

for(i=4 ; i>0 ; i--)

V[i-1] = vrms%10;

vrms/=10;

I[i-1] = irms%10;

irms/=10;

return;

void lcdcmd(unsigned char cmd)

ready();
P0 = cmd;
rs = 0;

rw = 0;
en = 1;
delay(1);
en = 0;
return;

void lcddata(unsigned char d)

ready();
P0 = d;
rs = 1;
rw = 0;
en = 1;

delay(1);
en = 0;
return;

void ready(void)
{

busy = 1;

rs = 0; rw = 1;
while(busy == 1)

en = 0;
delay(1);
en = 1;

return;

void lcdinit(void)

unsigned char i;
lcdcmd(0x38);
lcdcmd(0x01);
lcdcmd(0x0c);
lcdcmd(0x06);

lcdcmd(0x80);

for(i=0 ; i< 7 ; i++)

lcddata(str1[i]);

lcdcmd(0xC0);

for(i=0 ; i< 7 ; i++)

lcddata(str2[i]);
}

void display(void)

lcdcmd(0x87);
lcddata(V[0] + 0x30);
lcddata('.');
lcddata(V[1] + 0x30);
lcddata(V[2] + 0x30);
lcddata(V[3] + 0x30);

lcdcmd(0xC7);
lcddata(I[0] + 0x30);
lcddata('.');
lcddata(I[1] + 0x30);
lcddata(I[2] + 0x30);
lcddata(I[3] + 0x30);

return;

void delay(unsigned int n)

unsigned int i,j;


for(i=0 ; i<n ; i++)
for(j=0 ; j<100 ; j++);
return;

}
#include<reg51.h>

#include<math.h>

sbit ALE=P3^1;
sbit EOC=P2^0;
sbit OE=P2^1;
sbit SOC=P3^4;
sbit a=P3^5;
sbit b=P3^6;
sbit c=P3^7;

sbit rs = P2^7;
sbit rw = P2^6;
sbit en = P2^5;
sbit busy = P0^7;

unsigned char value , Z[3],R[3],X[3],PF[3];

unsigned char str1[3] = "R: ";


unsigned char str2[3] = "X: ";
unsigned char str3[3] = "Z: ";
unsigned char str4[4] = "pf: ";
double vm,imcp,vmsp,im;
unsigned char flag=0;
unsigned int z0,r0,x0,pf0;

void adc(bit,bit,bit);

void calculate(void);

void lcdcmd(unsigned char);


void lcddata(unsigned char);
void ready(void);

void lcdinit(void);

void display(void);

void delay(unsigned int);

void ex0_isr(void);
void t0_isr(void);
void ex1_isr(void);
void t1_isr(void);

void main()

P1 = 0xff;
EOC = 1;
ALE = 0;
SOC = 0;
OE = 0;

TMOD = 0x11; // 5ms timer

TH0 = 0XC4;
TL0 = 0X00;
TH1 = 0XC4;
TL1 = 0X00;

IE = 0X8F; // enabling both external and timer interrupts

IE0 = 1;
IE1 = 1;
lcdinit();

while(1)

{
while(flag<3);
flag = 0;
calculate();
display();

void ex0_isr (void) interrupt 0

TR0 = 1;
return;

void t0_isr(void) interrupt 1

adc(0,0,0);

vm = value*(5/255);

adc(1,0,0);

imcp = value*(5/255);
TR0 = 0;

flag++;

return;

void ex1_isr(void) interrupt 2

TR1 = 1;

adc(0,0,0);

vmsp = value*(5/255);

flag++;

return;

void tr1_isr (void) interrupt 3

TR1 = 0;

adc(1,0,0);

im = value*(5/255);

flag++;
}

void adc(bit x, bit y, bit z )

a = x;
b = y;
c = z;

delay(1);
ALE = 1;

delay(1);
SOC = 1;

delay(1);
ALE = 0;
SOC = 0;

while(EOC == 1);
OE = 1;
delay(1);
value = P1;
OE = 0;

return;

void calculate(void)

unsigned char i;

z0 = (vm*100)/im;

x0 = (vmsp*100)/im;

r0 = sqrt(vm*vm - vmsp*vmsp)*100/im;

pf0 = imcp*100/im;

for(i=3 ; i>0 ; i--)

return;
Z[i-1] = z0%10; X[i-1] = x0%10;

z0/=10; x0/=10;

R[i-1] = r0%10; PF[i-1] = pf0%10;

r0/=10; pf0/=10;

void lcdcmd(unsigned char cmd)

ready();
P0 = cmd;
rs = 0;

rw = 0;
en = 1;
delay(1);
en = 0;
return;

void lcddata(unsigned char d)

ready();
P0 = d;
rs = 1;
rw = 0;
en = 1;
delay(1);
en = 0;
return;

void ready(void)

busy = 1;

rs = 0; rw = 1;
while(busy == 1)

en = 0;
delay(1);
en = 1;

return;

void lcdinit(void)

unsigned char i;
lcdcmd(0x38);
lcdcmd(0x01);
lcdcmd(0x0c);
lcdcmd(0x06);

lcdcmd(0x80);

for(i=0 ; i< 3 ; i++)

{
lcddata(str1[i]);

lcdcmd(0x88);

for(i=0 ; i< 3 ; i++)

lcddata(str2[i]);

lcdcmd(0xC0);

for(i=0 ; i< 3 ; i++)

lcddata(str3[i]);

lcdcmd(0xC8);
for(i=0 ; i< 4 ; i++)

lcddata(str4[i]);

void display(void)

lcdcmd(0x83);
lcddata(R[0] + 0x30);
lcddata('.');
lcddata(R[1] + 0x30);
lcddata(R[2] + 0x30);

lcdcmd(0x8B);
lcddata(X[0] + 0x30);
lcddata('.');
lcddata(X[1] + 0x30);
lcddata(X[2] + 0x30);

lcdcmd(0xC3);
lcddata(Z[0] + 0x30);
lcddata('.');
lcddata(Z[1] + 0x30);
lcddata(Z[2] + 0x30);

lcdcmd(0xCC);
lcddata(PF[0] + 0x30);
lcddata('.');
lcddata(PF[1] + 0x30);
lcddata(PF[2] + 0x30);
return;

}
void delay(unsigned int n)

unsigned int i,j;


for(i=0 ; i<n ; i++)
for(j=0 ; j<100 ; j++);
return;

}
#include<reg51.h>

#include<math.h>

sbit ALE=P3^1;
sbit EOC=P3^2;
sbit OE=P3^3;
sbit SOC=P3^4;
sbit a=P3^5;
sbit b=P3^6;
sbit c=P3^7;

sbit rs = P2^7;
sbit rw = P2^6;
sbit en = P2^5;
sbit busy = P0^7;

bit takesample = 1;

unsigned char value,V1[3], V2[3], V3[3];


unsigned char str1[4] = "Arms";
unsigned char str2[4] = "Brms";
unsigned char str3[4] = "Crms";

double volt,sqV1=0, sqV2=0 , sqV3=0;

unsigned char n=0;

unsigned int arms,brms,crms;

void adc(bit,bit,bit);

void calculate(void);

void lcdcmd(unsigned char);


void lcddata(unsigned char);
void ready(void);

void lcdinit(void);

void display(void);

void delay(unsigned int);

void t0_isr(void);

void main()

P1 = 0xff;
EOC = 1;
ALE = 0;
SOC = 0;
OE = 0;

TMOD = 0x01; // 20ms timer


TH0 = 0X10;
TL0 = 0X00;
IE = 0X82;

lcdinit();

TR0 = 1;

while(takesample) //taking samples for 20 ms

adc(0 , 0 , 0);

volt = (value - 128)*(2.5/127); //5 volt corresponds to 255 value


volt = volt*volt;

sqV1 += volt;

adc(1 , 0 , 0);
volt = (value - 128)*(2.5/127); //5 volt corresponds to 255 value
volt = volt*volt;

sqV2 += volt;

adc(0 , 1 , 0);

volt = (value - 128)*(2.5/127); //5 volt corresponds to 255 value


volt = volt*volt;

sqV3 += volt;

n++;

calculate();
display();
while(1);

void adc(bit x, bit y, bit z )

a = x;
b = y;
c = z;

delay(1);
ALE = 1;

delay(1);
SOC = 1;
delay(1);
ALE = 0;
SOC = 0;

while(EOC == 1);

OE = 1;

delay(1);

value = P1;
OE = 0;

return;

void calculate(void)

unsigned char i;

sqV1 = sqV1/n;
sqV1 = sqrt(sqV1);

arms = sqV1*100;

sqV2 = sqV2/n;
sqV2 = sqrt(sqV2);
brms = sqV2*100;

sqV3 = sqV3/n;
sqV3 = sqrt(sqV3);
crms = sqV3*100;

for(i=3 ; i>0 ; i--)

V1[i-1] = arms%10;

arms/=10;

V2[i-1] = brms%10;

brms/=10;

V3[i-1] = brms%10;

brms/=10;

return;

void t0_isr(void) interrupt 0

{
TR0 = 0;
takesample = 0;
return;

void lcdcmd(unsigned char cmd)

ready();
P0 = cmd;
rs = 0;

rw = 0;
en = 1;
delay(1);
en = 0;
return;

void lcddata(unsigned char d)

ready();
P0 = d;
rs = 1; rw
= 0; en =
1;
delay(1);
en = 0;
return;

void ready(void)

busy = 1;

rs = 0; rw = 1;
while(busy == 1)

en = 0;
delay(1);
en = 1;

return;

void lcdinit(void)

unsigned char i;
lcdcmd(0x38);
lcdcmd(0x01);
lcdcmd(0x0c);
lcdcmd(0x06);

lcdcmd(0x80);

for(i=0 ; i< 4 ; i++)

{
lcddata(str1[i]);

lcdcmd(0x85);

for(i=0 ; i< 4 ; i++)

lcddata(str2[i]);

lcdcmd(0x8A);

for(i=0 ; i< 4 ; i++)

lcddata(str3[i]);

return;
}

void display(void)

lcdcmd(0xC0);
lcddata(V1[0] + 0x30);
lcddata('.');
lcddata(V1[1] + 0x30);
lcddata(V1[2] + 0x30);

lcdcmd(0xC5);
lcddata(V2[0] + 0x30);
lcddata('.');
lcddata(V2[1] + 0x30);
lcddata(V2[2] + 0x30);

lcdcmd(0xCA);
lcddata(V3[0] + 0x30);
lcddata('.');
lcddata(V3[1] + 0x30);
lcddata(V3[2] + 0x30);

return;

void delay(unsigned int n)

unsigned int i,j;


for(i=0 ; i<n ; i++)
for(j=0 ; j<100 ; j++);
return;

You might also like