Microcontroller Tutorial: Charles Vanpariya U17EE054

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 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