Sie sind auf Seite 1von 59

MICROCONTROLLER LAB

PART 1- PROGRAMMING
I. Data Transfer
1. Write an ALP to transfer n=5 bytes of data from location 8035h to
location 8041h (without overlap)
org 9000h
mov dph,#80h
mov r0,#35h
mov r1,#41h
mov r3,#05h
back:mov dpl,r0
movx a,@dptr
mov dpl,r1
movx @dptr,a
inc r0
inc r1
djnz r3,back
lcall 0003h
org 8035h
db 01h
db 02h
db 03h
db 04h
db 05h
end
Result: 8041: 01, 02,03,04,05

R.Y.M.E.C,BELLARY

DEPT OF ECE

MICROCONTROLLER LAB

2. Write an ALP to exchange n=5 bytes of data at location 35h & at location
41h.
org 9000h
mov r0,#35h
mov r1,#41h
mov r3,#05h
back:mov a,@r0
mov r2,a
mov a,@r1
mov @r0,a
mov a,r2
mov @r1,a
inc r0
inc r1
djnz r3,back
l
call 0003h
org 35h
db 01h,02h,03h,04h,05h
org 41h
db 06h,07h,08h,09h,0ah
end
Result:
0035:06,07,08,09,0a
0041:01,02,03,04,05

R.Y.M.E.C,BELLARY

DEPT OF ECE

MICROCONTROLLER LAB

3.Write an ALP to exchange n=5 bytes of data at location 35h & at


location 41h using Xch instructions.
org 9000h
mov r0,#35h
mov r1,#41h
mov r3,#05h
back:mov a,@r0
mov r2,a
mov a,@r1
xch a,r2
mov @r1,a
xch a,r2
mov @r0,a
inc r0
inc r1
djnz r3,back
lcall 0003h
org 35h
db 01h,02h,03h,04h,05h
org 41h
db 06h,07h,08h,09h,0ah
end
Result:
003506,07,08,09,0a
004101,02,03,04,05

R.Y.M.E.C,BELLARY

DEPT OF ECE

MICROCONTROLLER LAB

4. Write an ALP to sort an array of n=6 bytes of data in ascending


order(using bubble sort algorithm).
org 8000h
mov r0,#05
l1:mov dptr,#9000h
mov a,r0
mov r1,a
l2:movx a,@dptr
mov b,a
inc dptr
movx a,@dptr
clr c
mov r2,a
subb a,b
jnc noexchg
mov a,b
movx @dptr,a
dec dpl
mov a,r2
movx @dptr,a
inc dptr
noexchg:djnz r1,l2
djnz r0,l1
lcall 0003h
org 9000h
db 2,5,1,9,7,6
end
Result:
9000:01, 02, 05,06,07,09

R.Y.M.E.C,BELLARY

DEPT OF ECE

MICROCONTROLLER LAB

5. Write an ALP to sort an array of n=6 bytes of data in descending


order(using bubble sort algorithm).
org 8000h
mov r0,#05
l1:mov dptr,#9000h
mov a,r0
mov r1,a
l2:movx a,@dptr
mov b,a
inc dptr
movx a,@dptr
clr c
mov r2,a
subb a,b
jc noexchg
mov a,b
movx @dptr,a
dec dpl
mov a,r2
movx @dptr,a
inc dpt
noexchg:djnz r1,l2
djnz r0,l1
lcall 0003h
org 9000h
db 2,5,1,9,7,6
end
Result:
9000:09, 07, 06,05,02,01

R.Y.M.E.C,BELLARY

DEPT OF ECE

MICROCONTROLLER LAB

6. Write an ALP to find the smallest element in a given string of n=6 bytes
& store the smallest element at location 8062h.
org 9000h
mov r3,#05h
mov dptr,#8000h
movx a,@dptr
mov r1,a
nextbyte:inc dptr
movx a,@dptr
clr c
mov r2,a
subb a,r1
jnc skip
mov a,r2
mov r1,a
skip:djnz r3,nextbyte
mov dpl,#62h
mov a,r1
movx @dptr,a
lcall 0003h
org 8000h
db 04,05,06,07,08,02
end
Result: 806202

R.Y.M.E.C,BELLARY

DEPT OF ECE

MICROCONTROLLER LAB

7.Write an ALP to find the largest element in a given string of n=6 bytes &
store the largest element at location 8062h.
org 9000h
mov r3,#05h
mov dptr,#8000h
movx a,@dptr
mov r1,a
nextbyte:inc dptr
movx a,@dptr
clr c
mov r2,a
subb a,r1
jc skip
mov a,r2
mov r1,a
skip:djnz r3,nextbyte
mov dpl,#62h
mov a,r1
movx @dptr,a
lcall 0003h
org 8000h
db 04,05,06,07,08,02
end
Result: 806208

R.Y.M.E.C,BELLARY

DEPT OF ECE

MICROCONTROLLER LAB

II.Arithmetic Instructions
1. Write an ALP to add 2 8-bit numbers.
org 9000h
mov a,#30h
add a,#50h
lcall 0003h
Result: A=80h
2. Write an ALP to add 2 16-bit numbers.
org 9000h
mov dptr,#1234h
mov a,#12h
mov b,#32h
add a,dpl
mov dpl,a
mov a,b
addc a,dph
mov dph,a
lcall 0003h
Result:1234
3. Write an ALP to add n 8-bit numbers.
org 9000h
mov dptr,#1234h
mov r0,#08h
movx a,@dptr
up:mov b,a
inc dptr
movx a,@dptr
add a,b
djnz r0,up
lcall 0003h
org 1234h
db 1,2,3,4,5,6,7,8,9
end
Result: A=2D

R.Y.M.E.C,BELLARY

DEPT OF ECE

MICROCONTROLLER LAB

4. Write an ALP to find average of 10 numbers.


org 8000h
mov dptr,#9000h
mov a,#00h
mov b,#0ah
mov r2,#09h
movx a,@dptr
back:mov r0,a
inc dptr
movx a,@dptr
add a,r0
djnz r2,back
div ab
inc dptr
movx @dptr,a
lcall 0003h
org 9000h
db 01h,02h,03h,04h,05h,06h,07h,08h,09h,0ah
end
Result: 05h
5. Write an ALP to subtract 2 8-bit number
org 9000h
mov a,#42h
mov r3,#32h
clr c
subb a,r3
lcall 0003h
Result:A=10

R.Y.M.E.C,BELLARY

DEPT OF ECE

MICROCONTROLLER LAB

6.Write an ALP to subtract 16-bit numbers.


org 8000h
mov dptr,#1234h
mov a,#46h
mov b,#32h
clr c
subb a,dpl
mov dpl,a
mov a,b
subb a,dph
mov dph,a
lcall 0003h
Result: dph 12
dpl 20
7. Write an ALP for division.
org 9000h
mov a,#80h
mov b,#20h
div ab
lcall 0003h
8. Write an ALP to multiply 2 8-bit number.
org 9000h
mov a,#04h
mov b,#02h
mul ab
mov dptr,#1234h
movx @dptr,a
inc dptr
mov a,b
movx @dptr,a
lcall 0003h

R.Y.M.E.C,BELLARY

DEPT OF ECE

10

MICROCONTROLLER LAB

9.Write an ALP to multiply 2 16-bit unsigned numbers.


org 8000h
middle:mov a,r5
mov r3,#00h
mov b,r6
mov r4,#23h
mul ab
mov r5,#10h
add a,r1
mov r6,#0bch
mov r1,a
mov r7,#0ah
mov a, b
mov a,r4
addc a,r2
mov b,r6
mov r2,a
mul ab
jnc byte
mov r0,a
inc r3
mov r1,b
byte:mov a,r5
mov a,r4
mov b,r7
mov b,r7
mul ab
mul ab
add a,r2
mov r2,b
mov r2,a
add a,r1
mov a,b
mov r1,a
addc a,r3
jnc middle
mov r3,a
inc r2
lcall 0003h
mov a,r2
end
Result: R3 R2 R1 R0
00 AD 37 B4
10.Write an ALP to add 2 32-bit number stored in RAM locations.
org 9000h
movx @dptr,a
clr c
inc dptr
mov r2,#04h
djnz r2,back
mov r0,#40h
lcall 0003h
mov r1,#50h
org 40h
mov dptr,#8000h
db 0c0h,3bh,45h,01h
back:mov a,@r0
org 50h
addc a,@r1
db 0feh,05h,c7h,56h
inc r0
end
inc r1
Result: 8000BE 41

R.Y.M.E.C,BELLARY

0C 58

DEPT OF ECE

11

MICROCONTROLLER LAB

11. Write an ALP to square the number.


org 8000h
mov dptr,#9000h
movx a,@dptr
mov r0,a
mov b,a
mul ab
inc dptr
movx @dptr,a
mov a,b
inc dptr
movx @dptr,a
lcall 0003h
org 9000h
db ffh
end
Result:
9000:ff 01 fe
12. Write an ALP to find cube of a number
org 8000h
mov dptr,#9000h
movx a,@dptr
mov r0,a
mov b,a
mul ab
push b
mov b,a
mov a,r0
mul ab
inc dptr
movx @dptr,a
mov r2,b
pop b
mov a,r0
mul ab
add a,r2

R.Y.M.E.C,BELLARY

inc dptr
movx @dptr,a
mov a,b
inc dptr
movx @dptr,a
lcall 0003h
org 9000h
db 56h
end
Result: 900056 98

DEPT OF ECE

B4 09

12

MICROCONTROLLER LAB

13. Write an ALP to perform the following.


If X=0 perform W+V;else if X=1 perform W-V;else if X=2 perform W*V;else if
X=3 perform W/V,where W &v are 8-bit number.
org 8000h
mov r0,#40h
mov a,@r0
mov r1,a
inc r0
mov a,@r0
mov b,a
inc r0
mov a,@r0
cjne r1,#00,cksub
add a,b
mov b,#00
jnc skip
mov b,#01h
skip:sjmp last
cksub:cjne r1,#01h,ckmul
clr c
subb a,b
mov b,#00
jnc skip1
mov b,#0ffh
skip1:sjmp last
ckmul:cjne r1,#02,ckdiv
mul ab
sjmp last
ckdiv:cjne r1,#03,other
div ab
sjmp last
other:mov a,#00
mov b,#00
last:inc r0
mov @r0,a
inc r0
mov a,b
mov @r0,a
lcall 0003h
org 40h
db 02h,11h,06h

end

R.Y.M.E.C,BELLARY

DEPT OF ECE

13

MICROCONTROLLER LAB

III.Counters
1. Write a program to display decimal up-counter.
org 8000h
start:mov r6,#00h
back:push r6
lcall 66d3h
lcall 6796h
lcall 6796h
pop r6
mov a,r6
add a,#01h
da a
mov r6,a
cjne r6,#00h,back
sjmp start
end
2. Write a program to display decimal down-counter
org 8000h
start:mov r6,#99h
back:push r6
lcall 66d3h
lcall 6796h
lcall 6796h
pop r6
mov a,r6
add a,#99h
da a
mov r6,a
cjne r6,#00h,back
sjmp start
end

R.Y.M.E.C,BELLARY

DEPT OF ECE

14

MICROCONTROLLER LAB

3. Write a program to display Hexadecimal up-counter.


org 8000h
start:mov r6,#00h
back:push r6
lcall 66d3h
lcall 6796h
lcall 6796h
pop r6
mov a,r6
add a,#01h
mov r6,a
cjne r6,#00h,back
sjmp start
end

4. Write a program to display Hexadecimal Down-counter.


org 8000h
start:mov r6,#ffh
back:push r6
lcall 66d3h
lcall 6796h
lcall 6796h
pop r6
mov a,r6
add a,#ffh
mov r6,a
cjne r6,#00h,back
sjmp start
end

5. Write an ALP to display Hex-up count.(16-bit)


org 8000h
mov r6,#00h
mov r7,#00h
l1:push r7
lcall 665fh
pop r7
back:push r6
lcall 665fh
R.Y.M.E.C,BELLARY

DEPT OF ECE

15

MICROCONTROLLER LAB

pop r6
mov a,r6
add a,#01h
mov r6,a
cjne r6,#00h,back
mov a,r7
add a,#01h
mov r7,a
cjne r7,#00h,l1
lcall 0003h
6. Write an ALP to display 8-bit up/down count.
org 8000h
start:mov r6,#00h
back:push r6
lcall 66d3h
lcall 6796h
lcall 6796h
pop r6
mov a,r6
add a,#01h
da a
mov r6,a
cjne r6,#00h,back
mov r6,#99h
back1:push r6
lcall 66d3h
lcall 6796h
lcall 6796h
pop r6
mov a,r6
add a,#99h
da a
mov r6,a
cjne r6,#00h,back1
sjmp start
end

R.Y.M.E.C,BELLARY

DEPT OF ECE

16

MICROCONTROLLER LAB

IV.Boolean & Logical instructions


1.Three 8-bit numbers, X, NUM1, and NUM2 are stored in internal data
RAM locations 20h, 21h, and 22h respectively.
Write an ALP to compute the following.
If X=0; then NUM1 (AND) NUM2,
If X=1; then NUM1 (OR) NUM2,
If X=2; then NUM1 (XOR) NUM2.
Else res=00,res is 23h location in RAM.
org 9000h
mov a,20h
mov r1,a
mov a,21h
cjne r1,#00h,chkor
anl a,22h
sjmp last
chkor:cjne r1,#01h,chkxor
orl a,22h
sjmp last
chkxor:cjne r1,#02h,other
xrl a,22h
sjmp last
other:clr a
last:mov 23h,a
lcall 0003h
org 20h
db 01h,0fh,12h
end
Result: If X=00,0023h=02h
If X=01,0023h=1fh
If X=02,0023h=1dh
Else,0023=00h

R.Y.M.E.C,BELLARY

DEPT OF ECE

17

MICROCONTROLLER LAB

2.Write an ALP to reverse 8-bit number.


org 9000h
mov a,#12h
rr a
rr a
rr a
or swap a
rr a
lcall 0003h
Result:A=21H

3.Write an ALP to reverse 16-bit number.


org 9000h
mov dptr,#1234h
mov a,dpl
rl a
rl a
rl a
rl a
mov dpl,a
mov a,dph
rl a
rl a
rl a
rl a
xch a,dpl
mov dph,a
lcall 0003h
Result:DPH=43
DPL=21

R.Y.M.E.C,BELLARY

DEPT OF ECE

18

MICROCONTROLLER LAB

4. Write an ALP to check whether the given number is +ve or -ve.If the
number is +ve store 00h else store ffh.
org 8000h
mov a,#70h
anl a,#80h
jz posi
mov a,#0ffh
lcall 0003h
posi:mov a,#00h
lcall 0003h
Result: 00 [Positive]
5. Write an ALP to check whether the given number is odd or even.If
number is odd store ffh else store 00h
org 8000h
mov a,#11h
rrc a
jc add
mov a,#00h
sjmp last
add:mov a,#0ffh
last:lcall 0003h
lcall 0003h
Result: Affh
6. Write an ALP to count number of 1's and 0's in a byte.
org 8000h
mov r0,#00h
mov r1,#00h
mov r3,#08h
mov dptr,#9000h
movx a,@dptr
back:clr c
rlc a
jc down
inc r0
R.Y.M.E.C,BELLARY

DEPT OF ECE

19

MICROCONTROLLER LAB

sjmp next
down:inc r1
next:djnz r3,back
lcall 0003h
org 9000h
db 12h
end
Result:

R0-->06(0's)

R1-->02(1's)

7. Write an ALP to find 2's complement of 8-bit number.


org 8000h
mov a,#0fh
cpl a
add a,#01h
lcall 0003h
Result:A=F1
8. Write an ALP to find 2's complement of 16-bit number.
org 8000h
mov dptr,#1234h
mov a,dpl
cpl a
add a,#01h
mov dpl,a
mov a,dph
cpl a
addc a,#00h
mov dph,a
lcall 0003h
Result:DPTR-->EDCC

R.Y.M.E.C,BELLARY

DEPT OF ECE

20

MICROCONTROLLER LAB

Programs illustrating Bit Manipulations.


1. Two 8-bit number NUM1 & NUM2 are stored in external memory
location 8000h & 8001h respectively. Write an ALP to compare the 2
numbers.Reflect the result as.
(i)If NUM1<NUM2,set LSB of data RAM 2FH(bit address 78H)
(ii)If NUM1>NUM2,set MSB of data RAM 2FH(bit address 7FH)
(iii)If NUM1=NUM2,clear both LSB &MSB of data Ram 2FH.
org 8000h
mov dptr,#9000h
movx a,@dptr
mov r0,a
inc dptr
movx a,@dptr
clr c
subb a,r0
jz equal
jnc big
setb 78h
sjmp last
big:setb 7fh
sjmp last
equal:clr 7fh
clr 78h
last:sjmp exit
exit:lcall 0003h
org 9000h
db 12h,12h
end

R.Y.M.E.C,BELLARY

DEPT OF ECE

21

MICROCONTROLLER LAB

2.Three 8-bit numbers X,NUM1,NUM2 are stored in internal data RAM


locations 20h,21h,22h respectively.Write an ALP to compute the following.
If X=0,then LSB of num1 (AND) LSB of NUM2,
If X=1,then MSB of NUM1 (OR) MSB of NUM2,
If X=2,then compliment MSB of num1 & store the bit result in res,
where res is MSB of 23h locations.
org 8000h
mov r0,20h
cjne r0,#00h,ck1
mov c,08h
anl c,10h
sjmp last
ck1:cjne r0,#01h,ck2
mov c,0fh
anl c,17h
sjmp last
ck2:cjne r0,#02h,ck3
cpl 0fh
mov c,0fh
sjmp last
ck3:clr c
last:mov 1fh,c
lcall 0003h
org 20h
db 00h,11h,11h
end

R.Y.M.E.C,BELLARY

DEPT OF ECE

22

MICROCONTROLLER LAB

V.Conditional CALL & RETURN


1. Write an ALP to convert hexadecimal to Ascii.(Conditional CALL &
RETURN)
org 9000h
mov r1,#50h
mov a,@r1
mov r2,a
anl a,#0fh
acall Ascii
inc r1
mov @r1,a
mov a,r2
swap a
anl a,#0fh
acall Ascii
inc r1
mov @r1,a
lcall 0003h

R.Y.M.E.C,BELLARY

Ascii:mov r4,a
clr c
subb a,#0ah
mov a,r4
jc skip
add a,#07h
skip:add a,#30h
ret
end

Result:50:2c 43 32

DEPT OF ECE

23

MICROCONTROLLER LAB

VI.Code Conversion
1. Write a program to convert Decimal to Hex.
org 9000h
mov dptr,#1234h
movx a,@dptr
anl a,#0f0h
swap a
mov b,#0ah
mul ab
mov r1,a
movx a,@dptr
anl a,#0fh
add a,r1
inc dptr
movx @dptr,a
lcall 0003h
org 1234h
db 45h
end
Result: 123445 2D
2. Write an ALP to convert Hex to Decimal
org 8000h
mov dptr,#9000h
movx a,@dptr
mov b,#10
div ab
inc dptr
xch a,b
movx @dptr,a
xch a,b
mov b,#10
div ab

inc dptr
xch a,b
movx @dptr,a
xch a,b
inc dptr
movx @dptr,a
lcall 0003h
org 9000h
db 0ffh
end
Result: 900005 05 02

R.Y.M.E.C,BELLARY

DEPT OF ECE

24

MICROCONTROLLER LAB

3. Write an ALP to convert BCD to Acsii.


org 9000h
mov r1,#50h
mov a,@r1
mov r2,a
anl a,#0fh
orl a,#30h
inc r1
mov @r1,a
mov a,r2
swap a
anl a,#0fh
orl a,#30h
inc r1
mov @r1,a
lcall 0003h
org 50h
db 28h,38h,32h
end
Result: 5028 38 32
4. Write an ALP to convert Ascii to hexadecimal conversion.
org 9000h
mov r1,#50h
mov a,@r1
clr c
subb a,#41h
mov a,@r1
jc skip
clr c
subb a,#07h
skip:clr c
subb a,#30h
inc r1
mov @r1,a
lcall 0003h
org 50h
db 45h
end
Result: 5045 0E
R.Y.M.E.C,BELLARY

DEPT OF ECE

25

MICROCONTROLLER LAB

VII.Program to generate delay, Program using serial port and on-chip


timer/counter.
org 8000h
start:mov r6,#00h
back:push r6
lcall 66d3h
lcall delay
pop r6
mov a,r6
add a,#01h
da a
mov r6,a
cjne r6,#00h,back
sjmp start
delay:mov TMOD,#10h
mov TL1,#00h
mov TH1,#ffh
setb TCON.6
back:jnb TCON.7,back
clr TCON.6
clr TCON.7
ret
end

R.Y.M.E.C,BELLARY

DEPT OF ECE

26

MICROCONTROLLER LAB

VIII.Serial Data Transmission


1. Write an ALP to transfer letter "g" serially at 9600 baud
rate, continuously.
org 9000h
mov tmod,#20h
mov th1,#fdh
mov scon,#50h
setb tr1
start:mov sbuf,#"g"
back:jnb t1,back
clr t1
sjmp start
lcall 0003h

2. Write an ALP to transfer the message "HELLO" serially at 9600 baud,8bit,1 stop bit.
org 9000h
mov tmod, #20h
mov th1,#fdh
mov scon,#50h
setb tr1
start:mov a,#"h"
acall trans
mov a,#"e"
acall trans
mov a,#"l"
acall trans
mov a,#"l"
acall trans
mov a,#"o"
acall trans
lcall 0003h
trans:mov sbuf,a
here:jnb ti,here
clr ti
ret
end
TI flag=1,after the transmission.Hence in the subroutine wait untill TI is set.
Later clear the TI flag &continue with transmission of the next byte by
writing into the SBUF register.
R.Y.M.E.C,BELLARY

DEPT OF ECE

27

MICROCONTROLLER LAB

II.INTERFACING
1. Write C 'program to display the key pressed (no. of times) by interfacing
Alphanumeric LCD panel & Hex keypad interface module to 8051 micro
controller.
#include <Intel\8051.h>
#include <standard.h>
#define PORTA
0x2040
#define
PORTB
0x2041
#define
PORTC
0x2042
#define
CNTL
0x2043
#define
CNTL_BYTE
0x81
void lcd_init(void);
void clr_disp(void);
void lcd_com(void);
void lcd_data(void);
void scan(void);
void get_key(void);
void display(void);
void display1(void);
void dec_ascii(void);
xdata unsigned char *p8255_cntl ;
xdata unsigned char *p8255_porta ;
xdata unsigned char *p8255_portb ;
xdata unsigned char *p8255_portc ;
idata unsigned char row,col,key;
code unsigned char scan code[16]={
0xED, 0xDD, 0xBD, 0x7D,
0xEB, 0xDB, 0xBB, 0x7B,
0xE7, 0xD7, 0xB7, 0x77};

0xEE, 0xDE,

0xBE, 0x7E,

code unsigned char ASCII_CODE[16]= {'0','4','8','C',


1','5','9','D',
'2','6','A','E',
'3','7','B','F'};
code unsigned char rarr[4] = {0xFE,0xFD,0xFB,0xF7};
idata unsigned char temp, temp2,temp3,res1,flag,i,result;
unsigned char ind, temp1,count,pre_key,acount1,acount2;
void main ()
{
delay_ms(25);
ind = 0;

R.Y.M.E.C,BELLARY

DEPT OF ECE

28

MICROCONTROLLER LAB
p8255_cntl =
CNTL;
*p8255_cntl =
CNTL_BYTE ;
p8255_portc = PORTC;
p8255_porta = PORTA;
p8255_portb =PORTB;
count=1;
lcd_init();
delay_ms(5);
pre_key = 0xFF;
while(1)
{
get_key();
display();

//initialization routine for lcd

//get the key value which is pressed

if(result == pre_key) //if pressed key is same as previous


count++;
//increment the count value
else
count =1;
dec_ascii();
display1();
delay_ms(100);
pre_key = result;
}
} //end of main()
void get_key(void)
{
int i;
flag = 0x00;
while(1)//flag == 0x00)
{
for(row=0;row<4;row++)
//find out the row which is logic low
{
if( row == 0)
temp3=0xfe;
else if(row == 1)
temp3=0xfd;
else if(row == 2)
temp3=0xfb;
else if(row == 3)
temp3=0xf7;
*p8255_portb = temp3; //corresponding values are stored in temp3
scan();
delay_ms(10);
if(flag == 0xff)
break;
R.Y.M.E.C,BELLARY

DEPT OF ECE

29

MICROCONTROLLER LAB
} // end of for
if(flag == 0xff)
break;
} // end of while
for(i=0;i<16;i++)
{
if(scan_code[i] == res1) //scan code is same as res1
{
//position of that value is taken
result = ASCII_CODE[i]; //corresponding ascii value is stored in result
break;
}
}
}// end of get_key();
void scan(void)
{
unsigned char t;
temp2 = *p8255_portc;
temp2
temp2 = temp2 & 0x0f;
if(temp2 != 0x0f)
{
delay_ms(30);
delay_ms(30);

//store the changes in portc value in


//mask with 0x0f
//if temp2 value is not equl to 0x0f
//then give debounce delay

temp2 = *p8255_portc;
temp2 = temp2 & 0x0f;
if(temp2 != 0x0f) // check again portc changes
{
flag = 0xff; //if yes make flag bit high
res1 = temp2;
//
res1 = res1 << 4;
t = (temp3 << 4) & 0xf0; //temp3 value is left shifted by 4 times
res1 = res1 | t;
//mask with 0x0f,or with res1
}
//final value stored in res1
only
else
{
flag = 0x00;
}
}
} // end of scan()
R.Y.M.E.C,BELLARY

DEPT OF ECE

30

MICROCONTROLLER LAB
void display(void)
{
temp = 0x80;
lcd_com();
delay_ms(5);
temp = result;
lcd_data();
delay_ms(5);
}
void display1(void)
{
temp = 0xC0;
lcd_com();
delay_ms(5);
temp = acount1;
lcd_data();
delay_ms(5);
temp = acount2;
lcd_data();
delay_ms(5);
}
// lcd initialisation routine.
void lcd_init(void)
{
temp = 0x38;
lcd_com();
delay_ms(5);

//address of display

//initialise lcd 2 lines 5x7 matrix

temp = 0x38;
lcd_com();
delay_ms(5);
temp = 0x0f;
lcd_com();
delay_ms(5);
temp = 0x06;
lcd_com();
delay_ms(5);
clr_disp();
}// clears display
void clr_disp(void)
{
temp = 0x01;
lcd_com();
delay_ms(5);
R.Y.M.E.C,BELLARY

//disply on,cursor on
//shift cursor right

//clr the display

DEPT OF ECE

31

MICROCONTROLLER LAB
}
// get the command to be presented to lcd in byte fashion
// and present it in nibble fashion
void lcd_com(void)
{
*p8255_porta = temp; //copy temp value to porta
temp1=0x0f;// RS=0
*p8255_portc = temp1;
temp1=temp1 | 0x4f; // enable 1
*p8255_portc = temp1;
delay(5);
temp1=temp1 & 0xbf;
*p8255_portc = temp1;
}
// get the data to be presented to lcd in byte fashion in temp1
// and present it in nibble fashion
void lcd_data(void)
{
*p8255_porta=temp;
//put the temp value in porta
temp1=0x1f;
//RS=1
*p8255_portc = temp1;
temp1=temp1 | 0xdf;
//r/w=0 for write
*p8255_portc = temp1;
temp1=temp1 | 0x4f;
//E=1 for high pulse
*p8255_portc = temp1;
delay(5);
temp1=temp1 & 0xbf;
//E=0 for high to low pulse
*p8255_portc = temp1;
}
void dec_ascii(void)
{
acount1 = (count/10) +0x30;
acount2 = (count % 10) + 0x30;
}
Result:

R.Y.M.E.C,BELLARY

DEPT OF ECE

32

MICROCONTROLLER LAB
2. Write C' program to measure temperature by interfacing External ADC &
Temperature control interface module to 8051 microcontroller.
#include <Intel\8051.h>
#include <standard.h>
#define PORTA
0x2040
#define
PORTB
0x2041
#define
PORTC
0x2042
#define
CNTL
0x2043
#define
buff
0x196
xdata unsigned char *p8255_cntl ;
xdata unsigned char *p8255_porta ;
xdata unsigned char *p8255_portb ;
xdata unsigned char *p8255_portc ;
xdata unsigned char *buff_ptr;
idata unsigned char temp1,adc_val,temperature,dtemp,i;
xdata unsigned char adc_table[100]={
0X00,0X03,0X05,0X08,0X0A,0X0D,0X0F,0X11,0X14,0X16,
0X19,0X1C,0X1E,0X21,0X24,0X27,0X2A,0X2C,0X2E,0X32,
0X34,0X36,0X39,0X3C,0X3F,0X42,0X45,0X48,0X4A,0X4C,
0X4E,0X50,0X52,0X54,0X56,0X58,0X5B,0X5E,0X61,0X64,
0X67,0X6A,0X6D,0X70,0X72,0X74,0X77,0X7A,0X7D,0X7F,
0X82,0X85,0X87,0X8A,0X8D,0X90,0X92,0X95,0X97,0X9A,
0X9D,0XA0,0XA2,0XA5,0XA8,0XAA,0XAD,0XAF,0XB0,0XB3,
0XB6,0XB9,0XBC,0XBF,0XC1,0XC4,0XC6,0XC9,0XCC,0XCF,
0XD0,0XD2,0XD5,0XD7,0XDA,0XDC,0XDF,0XE0,0XE2,0XE5,
0XE7,0XE9,0XEB,0XEE,0XF1,0XF4,0XF6,0XF9,0XFC,0XFF};
extern void display(void);
void main ()
{
buff_ptr=buff; // mem. locn to hold adc data to display
p8255_porta = PORTA;
p8255_portc = PORTC;
p8255_portb = PORTB;
p8255_cntl =
*p8255_cntl =

CNTL;
0x98;// Ppa=i/p,Pb=o/p,PCu=i/p,PCl=o/p,

delay(200);
while(1)
{
*p8255_portc =
*p8255_portc =
*p8255_portc =
delay(200);
R.Y.M.E.C,BELLARY

0x0;// channel 0 selection Wr=1,PC1=1


0x01;// start of conversion pulse
0x0;// start of conversion pulse

DEPT OF ECE

33

MICROCONTROLLER LAB
do
{
temp1=*p8255_portc;
temp1=temp1 & 0x80;
} while(temp1 != 0x80);
delay(200);
adc_val = *p8255_porta; // display adc result on the data field
//
*buff_ptr = adc_val;
for(i=0;i<100;i++)
{
if(adc_val==adc_table[i])
{
temperature = i;
break;
}
}
dtemp = ((temperature/10) <<4 ) | ((temperature%10) & 0x0f);
*buff_ptr=dtemp; // WRITE TO 0X196 LOCAN
display();
delay(200);
}
// end of while(1)
}
DISPLAY PROGRAM:
PUBLIC _display
_display:
lcall 676fh
ret
Result:

R.Y.M.E.C,BELLARY

DEPT OF ECE

34

MICROCONTROLLER LAB

3. DAC PROGRAMS:
(i) Write C'program to generate Ramp waveform using DAC Interface to
8051.
#include <Intel\8051.h>
#include <standard.h>
#define p8255_ctl 0x2043
#define porta 0x2040
#define portb 0x2041
#define ctl_word
0x80
#define SET_FREQ
0xF000
xdata unsigned char *ptr_8255_ctl;
xdata unsigned char *ptr_8255_porta;
xdata unsigned char *ptr_8255_portb;
xdata unsigned char *buff_ptr;
idata unsigned char count,con1,con2,temp2;
interrupt(INT_TMR0) tmr_isr(void) using 1
{
TL0 = con2;
TH0 = con1;
if(count!=0xff)
{
*ptr_8255_porta = count;
count++;
}
else
{
count=0x00;
*ptr_8255_porta = count;
}
}
void main ()
{
ptr_8255_ctl = p8255_ctl;
*ptr_8255_ctl = ctl_word;
ptr_8255_porta= porta;
buff_ptr = SET_FREQ;
temp2 = *buff_ptr;
switch(temp2)
{
case 0x10: con1 = 0xfe;
con2 = 0x90;
break;

R.Y.M.E.C,BELLARY

//get the value of frq from location f000h


//depending on diff frq we are going to load
//different counts

DEPT OF ECE

35

MICROCONTROLLER LAB
case 0x20:
con1 = 0xff;
con2 = 0x4d;
break;
case 0x30: con1 = 0xff;
con2 = 0x8a;
break;
case 0x40: con1 = 0xff;
con2 = 0xa6;
break;
default: con1 = 0xfe;
con2 =0x90;
break;
}
TMOD = 0x01;
TL0 = con2;
TH0 = con1;
ET0 = 1;
EA = 1;
TR0 = 1;
here: goto here;
} // end of main()
Result:

//select the timer in mode 1


//different counts depends on frq
//enable timer0,enable all interrupt bit,start timer0

(ii)Write C'program to generate Square waveform using DAC Interface to


8051.
#include <Intel\8051.h>
#include <standard.h>
#define p8255_ctl 0x2043
#define porta 0x2040
#define portb 0x2041
#define ctl_word
0x80
#define SET_FREQ
0xF000
xdata unsigned char *ptr_8255_ctl;
xdata unsigned char *ptr_8255_porta;
xdata unsigned char *ptr_8255_portb;
xdata unsigned char *buff_ptr;
idata unsigned char count,con1,con2,temp2;
interrupt(INT_TMR0) tmr_isr(void) using 1
{
TL0 = con2;
TH0 = con1;
if(count==0xff)
{
count = 0x00;
*ptr_8255_porta = count;
}
R.Y.M.E.C,BELLARY

DEPT OF ECE

36

MICROCONTROLLER LAB
else
{
count = 0xFF;
*ptr_8255_porta = count;
}
}
void main ()
{
ptr_8255_ctl = p8255_ctl;
*ptr_8255_ctl = ctl_word;
ptr_8255_porta= porta;
buff_ptr = SET_FREQ;
temp2 = *buff_ptr;
count = 0x00;
switch(temp2)
{
//depending on different frq
case 0x10: con1 = 0xdb; //0xff; //we are setting diff values to timer0
con2 = 0xff; //0x4d;
break;
case 0x20:
con1 = 0xed; //0xfe;
con2 = 0xff; //0x90;
break;
case 0x30:
con1 = 0xf3; //0xfd;
con2 = 0xff; //0xa6;
break;
case 0x40: con1 = 0xf6 ;//0xfc;
con2 = 0xff; //0x8a;
break;
default: con1 = 0xdb; //0xfb;
con2 = 0xff; //0x4d;
break;
}
TMOD = 0x01;
//mode 1 selection
TL0 = con2;
TH0 = con1;
ET0 = 1;
//enable timer0,all interrupt
bit
EA = 1;
TR0 = 1;
//start timer0
here: goto here;
} // end of main()
Result:

R.Y.M.E.C,BELLARY

DEPT OF ECE

37

MICROCONTROLLER LAB
(iii)Write C'program to generate Triangle waveform using DAC Interface to
8051.
#include <Intel\8051.h>
#include <standard.h>
#define p8255_ctl 0x2043
#define porta 0x2040
#define portb 0x2041
#define ctl_word
0x80
#define SET_FREQ
0xF000
xdata unsigned char *ptr_8255_ctl;
xdata unsigned char *ptr_8255_porta;
xdata unsigned char *ptr_8255_portb;
xdata unsigned char *buff_ptr;
idata unsigned char count,con1,con2,temp2,df;
interrupt(INT_TMR0) tmr_isr(void) using 1
{
TL0 = con2;
TH0 = con1;
if(df)
{
*ptr_8255_porta = count;
count = count + 1;
if(count==0x7f)
df=0x00;
}
else
{
*ptr_8255_porta = count;
count = count - 1;
if(count==0x00)
df=0xff;
}
}
void main ()
{
ptr_8255_ctl = p8255_ctl;
*ptr_8255_ctl = ctl_word;
ptr_8255_porta= porta;
buff_ptr = SET_FREQ;
temp2 = *buff_ptr;
df = 0xff;
switch(temp2)
//different counts for timer depending on frq
{
case 0x10: con1 = 0x0fe;//0xdb; //0xff;
con2 = 0x90; //0xff; //0x4d;
break;
R.Y.M.E.C,BELLARY

DEPT OF ECE

38

MICROCONTROLLER LAB
case 0x20:
con1 =0xff;//0xed; //0xfe;
con2 = 0x4d; //0xff; //0x90;
break;
case 0x30:
con1 = 0xff;//0xf3; //0xfd;
con2 =0x79; //0xff; //0xa6;
break;
case 0x40: con1 = 0xff;//0xf6 ;//0xfc;
con2 =0xc6;//0xff; //0x8a;
break;
default: con1 = 0xfe;//0xdb; //0xfb;
con2 =0x90; //0xff; //0x4d;
break;
}
TMOD = 0x01;
//mode1 selection
TL0 = con2;
TH0 = con1;
ET0 = 1;
EA = 1;
//enable all interrupt bit,timer0 bit
TR0 = 1;
//start timer0
here: goto here;
} // end of main()
Result:
(iv) Write C' program to generate Sinusoidal waveform using DAC Interface
to 8051.
#include <Intel\8051.h>
#include <standard.h>
#define p8255_ctl 0x2043
#define porta 0x2040
#defineportb 0x2041
#define ctl_word
0x80
#define SET_FREQ
0xF000
xdata unsigned char sine_tab[48]=
{ 0x80,0x90,0xA1,0xB1,0xC0,0xCD,0xDA,0xE5,0xEE,0xF6,0xFB,0xFE,0xFF,
0xFE,0xFB,0xF6,0xEE,0xE5,0xDA,0xCD,0xC0,0xB1,0xA1,0x90,0x80,
0x70,0x5F,0x4F,0x40,0x33,0x26,0x1B,0x12,0x0A,0x05,0x02,0x00,
0x02,0x05,0x0A,0x12,0x1B,0x26,0x33,0x40,0x4F,0x5F,0x70,0x80 };
xdata unsigned char *ptr_8255_ctl;
xdata unsigned char *ptr_8255_porta;
xdata unsigned char *ptr_8255_portb;
xdata unsigned char *buff_ptr;
idata unsigned char sine_val,con1,con2,temp2;
idata int count;
R.Y.M.E.C,BELLARY

DEPT OF ECE

39

MICROCONTROLLER LAB
interrupt(INT_TMR0) tmr_isr(void) using 1
{
TL0 = con2;
TH0 = con1;
if(count<48)
{
sine_val = sine_tab[count];
*ptr_8255_porta = sine_val;
count++;
}
else
count = 0;
}
void main ()
{
ptr_8255_ctl = p8255_ctl;
*ptr_8255_ctl = ctl_word;
ptr_8255_porta= porta;
buff_ptr = SET_FREQ;
//value is from location F000h
temp2 = *buff_ptr;
count = 0;
switch(temp2)
//different count values are loaded
{
//according to the different frequency
case 0x10: con1 = 0xf8;
con2 = 0x7f;
break;
case 0x20:
con1 = 0xfc;
con2 = 0x3f;
break;
case 0x30:
con1 = 0xfd;
con2 = 0x7f;
break;
case 0x40: con1 = 0xfe;
con2 = 0x1f;
break;
default: con1 = 0xf8;
con2 = 0x7f;
break;
}
TMOD = 0x01;
TL0 = con2;
TH0 = con1;

R.Y.M.E.C,BELLARY

//select the timer1


//values loaded according to the frequency

DEPT OF ECE

40

MICROCONTROLLER LAB
ET0 = 1;
timer0
EA = 1;
TR0 = 1;

//enable timer0,all interrupts and start the

l1: goto l1;


} // end of main()
Result:

R.Y.M.E.C,BELLARY

DEPT OF ECE

41

MICROCONTROLLER LAB

4. STEPPER MOTOR:
(i) Write C' program to rotate Stepper motor in Clockwise direction by
interfacing Stepper motor interface module with 8051 microcontroller.
#include <Intel\8051.h>
#define p8255_ctl
0x2043
#define portc
0x2042
#define ctlr_word
0x80
#define phasea
0x0d
#define phaseb
0x0e
#define phasec
0x07
#define phased
0x0b
xdata unsigned char *ptr_8255_ctl;
xdata unsigned char *ptr_8255_portc;
void delay(void);
void main ()
{
int i;
ptr_8255_ctl = p8255_ctl;
*ptr_8255_ctl = ctlr_word;
while(1)
{
ptr_8255_portc=portc;
is taken in pointer variable
//different speeds are loaded into pointer
*ptr_8255_portc = phasea;
delay();
delay();
*ptr_8255_portc = phaseb;
delay();
delay();
*ptr_8255_portc = phasec;
delay();
delay();
*ptr_8255_portc = phased;
delay();
delay();
}
}
void delay(void)
{
int i=0;

//port a address

{
for(i=0;i<=10000;i++)
}
}
Result:
R.Y.M.E.C,BELLARY

DEPT OF ECE

42

MICROCONTROLLER LAB
(ii) Write C'program to rotate Stepper motor in AntiClockwise direction by
interfacing Stepper motor interface module with 8051 microcontroller.
#include <Intel\8051.h>
#define p8255_ctl
0x2043
#define portc
0x2042
#define ctlr_word
0x80
#define phasea
0x0b
#define phaseb
0x07
#define phasec
0x0e
#define phased
0x0d
xdata unsigned char *ptr_8255_ctl;
xdata unsigned char *ptr_8255_portc;
void delay(void);
void main ()
{
ptr_8255_ctl = p8255_ctl;
*ptr_8255_ctl = ctlr_word;
while(1)
{
ptr_8255_portc=portc;
//address of portc in pointer
//different speeds are loaded in pointer
*ptr_8255_portc = phasea;
delay();
delay();
*ptr_8255_portc = phaseb;
delay();
delay();
*ptr_8255_portc = phasec;
delay();
delay();
*ptr_8255_portc = phased;
delay();
delay();
}
}
void delay(void)
{
unsigned int i;
{
for(i=0;i<=10000;i++)
}
}
Result:

R.Y.M.E.C,BELLARY

DEPT OF ECE

43

MICROCONTROLLER LAB

5. DC MOTOR:
Write C' program to rotate DC motor by interfacing Dc motor interface
module to 8051 microcontroller.
// program to test nifc55 dc motor
// by varying off-time and on-time with different values
// user can observe different speed on dc motor
// typically the off values are 30,24,18 & 12
// on values are 10,16,12 & 28
// in this source off value is taken as 30 and
// on value is taken as 10
#include <Intel\8051.h>
#define p8255_ctl
0x2043
#define ctlr_word
0x80
idata unsigned char off_time,on_time;
idata unsigned char i;
xdata unsigned char *ptr_8255_ctl;
xdata unsigned char *ptr_8255_portc;
void main ()
{
ptr_8255_ctl = p8255_ctl;
*ptr_8255_ctl = ctlr_word; // configure 8255 all o/p
TCON = 0;
TMOD = 0x21; //select mode1, timer 0
off_time = 30;
on_time = 10;
while(1)
{
TL0 = 0x66; //timer count set for 5msec
TH0 = 0xFC;
*ptr_8255_ctl = 0x09;
// make PC4 high
for(i=0;i<off_time;i++)
{
TR0 =1;
while(TF0)
{
}
TF0 = 0;
TR0=0;
}
TL0 = 0x66; //timer count set for 5msec
TH0 = 0xFC;
*ptr_8255_ctl =0x08; // make PC4 low
for(i=0;i<on_time;i++)
{
TR0 =1;

R.Y.M.E.C,BELLARY

DEPT OF ECE

44

MICROCONTROLLER LAB
while(TF0)
{
}
TF0 = 0;
TR0=0;
}
}
}
Result:

R.Y.M.E.C,BELLARY

DEPT OF ECE

45

MICROCONTROLLER LAB

6. ELEVATOR:
Write C' program to implement Elevator by interfacing Elevator interface
module with 8051
microcontroller.
#include <Intel\8051.h>
#include <standard.h>
#define p8255_ctl
0x2043
#define porta
0x2040
#defineportb
0x2041
#defineportc
0x2042
#define ctl_word
0x82
void floor1(void);
void floor2(void);
void floor3(void);
void floor4(void);
void moveup(void);
void movedown(void);
idata unsigned char req,preq,freq,temp,fg,i,j;
xdata unsigned char *ptr_8255_ctl;
xdata unsigned char *ptr_8255_porta;
xdata unsigned char *ptr_8255_portb;
xdata unsigned char *ptr_8255_portc;
void main ()
{
ptr_8255_ctl = p8255_ctl;
*ptr_8255_ctl = ctl_word;
ptr_8255_porta = porta;
ptr_8255_portb = portb;
ptr_8255_portc = portc;
*ptr_8255_porta = 0x0f;
//porta lower bits for green and amber
delay(50);
//leds,higher bits for enabling 4 flipflops
*ptr_8255_porta = 0x0f0;
// mem. locn to hold adc data to display
freq=0xf0;
//default request is from ground floor
while(1)
{
// floor status 1st floor
if(freq==0xf0)
{
*ptr_8255_porta=0xf0;
req = *ptr_8255_portb; //read the request from portb
temp = req;
req = req & 0x0f;
if(req == 0x0e)
//request is from same floor when it is in flr1
{
floor1();
R.Y.M.E.C,BELLARY

DEPT OF ECE

46

MICROCONTROLLER LAB
}
if(req ==0x0d)
//request from second floor when it is in flr1
{
preq = 0xf0;
//correspondingly update the preq and freq
freq = 0xf3;
//freq holds the future request,
moveup();
//preq holds present stage
floor2();
}
if(req ==0x0b)
//request from third floor when it is in flr1
{
preq = 0xf0;
freq = 0xf6;
moveup();
//blink leds from floor 1 to 3
floor3();
//red led is off and green led is on
}
if(req ==0x07)
{
preq = 0xf0;
freq = 0xf9;
moveup();
floor4();
}
}

//request from fourth floor when it is in flr1

//blink leds from floor 1 to 4


//red led is off and green led is on

//end of for loop

// floor status 2nd floor


if(freq==0xf3)
{
req = *ptr_8255_portb;
temp = req;
req = req & 0x0f;
if(req ==0x0e)
//request from first floor when it is flr2
{
preq = 0xf3;
freq = 0xf0;
movedown();
//blink leds from floor 2 to 1
floor1();
//red led is off and green led is on
}
if(req == 0x0d)
//request from same floor when it is flr2
{
floor2();
//red led is off and green led is on
}

R.Y.M.E.C,BELLARY

DEPT OF ECE

47

MICROCONTROLLER LAB
if(req ==0x0b)
//request from third floor when it is flr2
{
preq = 0xf3;
freq = 0xf6;
moveup();
//blink leds from floor 2 to 3
floor3();
//red led is off and green led is on
}
if(req ==0x07)
//request from fourth floor when it is flr2
{
preq = 0xf3;
freq = 0xf9;
moveup();
//blink leds from floor 2 to 4
floor4();
//red led is off and green led is on
}
} //end of for loop
// floor status 3rd floor
if(freq==0xf6)
{
req=*ptr_8255_portb;
temp =req;
req = req & 0x0f;
if(req ==0x0e)
//request from first floor when it is flr3
{
preq = 0xf6;
freq = 0xf0;
movedown();
//blink leds from floor 3 to 1
floor1();
//red led is off and green led is on
}
if(req ==0x0d)
{
preq = 0xf6;
freq = 0xf3;
movedown();
floor2();
}

//request from second floor when it is flr3

//blink leds from floor 3 to 2


//red led is off and green led is on

if(req == 0x0b)
//request from same floor when it is flr3
{
floor3();
//red led is off and green led is on
}
if(req ==0x07)
{
preq = 0xf6;
freq = 0xf9;
R.Y.M.E.C,BELLARY

//request from fourth floor when it is flr3

DEPT OF ECE

48

MICROCONTROLLER LAB
moveup();
floor4();
}
} //end of for loop

//blink leds from floor 3 to 4


//red led is off and green led is on

// floor status 4th floor


if(freq==0xf9)
{
req = *ptr_8255_portb;
temp = req;
req = req & 0x0f;
if(req ==0x0e)
//request from first floor when it is flr4
{
preq = 0xf9;
freq = 0xf0;
movedown();
//blink leds from floor 4 to 1
floor1();
//red led is off and green led is on
}
if(req ==0x0d)
{
preq = 0xf9;
freq = 0xf3;
movedown();
floor2();
}
if(req ==0x0b)
{
preq = 0xf9;
freq = 0xf6;
movedown();
floor3();

//request from second floor when it is flr4

//blink leds from floor 4 to 2


//red led is off and green led is on
//request from third floor when it is flr4

//blink leds from floor 4 to 3


//red led is off and green led is on

}
if(req == 0x07)
{
floor4();
}
} //end of for loop
}// end of while(1)
}
//end of main()
void floor1(void)
R.Y.M.E.C,BELLARY

//request from same floor when it is flr4


//red led is off and green led is on

DEPT OF ECE

49

MICROCONTROLLER LAB
{
*ptr_8255_porta=0xe0;
on
delay_ms(20);
}
void floor2(void)
{
*ptr_8255_porta=0xd3;
delay_ms(20);
}

//to make red led off and corresponding green

void floor3(void)
{
*ptr_8255_porta=0xb6;
delay_ms(20);
}
void floor4(void)
{
*ptr_8255_porta=0x79;
delay_ms(20);
}
void moveup(void)
{
// initialise loop to on leds
//
unsigned char i;
for(i=preq;i<freq;i++)
{
delay_ms(250);
*ptr_8255_porta = i; //leds blink from lower to upper value
delay_ms(50);
}
} // end of move up
void movedown(void)
/* initialise loop to on leds */
//
unsigned char j;
for(j =preq;j>freq;j--)
{
delay_ms(250);
*ptr_8255_porta = j;
//leds blink from upper to lower value
delay_ms(50);
}
}
/* end of move down */
Result:

R.Y.M.E.C,BELLARY

DEPT OF ECE

50

MICROCONTROLLER LAB

R.Y.M.E.C,BELLARY

DEPT OF ECE

51

MICROCONTROLLER LAB

INDEX
SL
NO.

TITLE OF THE EXPERIMENT

PROGRAMMING

01
02
03

ALP to transfer bytes of data (Block transfer)


ALP to exchange bytes of data b/n two memory locations
ALP to sort an array of data bytes in Ascending/Descending
order using Bubble sort algorithm

04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

ALP to find Largest/Smallest element in a given array


ALP to find Square of a number
ALP to find Cube of a number
ALP to add two 8-bit unsigned numbers
ALP to add two 16-bit unsigned numbers
ALP to add two N- unsigned numbers
ALP to subtract two 8-bit unsigned numbers
ALP to subtract two 16-bit unsigned numbers
ALP to Multiply two 8-bit unsigned numbers.
ALP to Multiply two 16-bit unsigned numbers.
ALP to Divide two 8-bit unsigned numbers.
ALP to find two's complement an 8-bit unsigned number.
ALP to find two's complement an 16-bit unsigned number.
ALP to Reverse an 8-bit unsigned number.
ALP to Reverse an 16-bit unsigned number.
ALP to Count number of ones & zeros in a given byte of data.
ALP to perform AND,OR &Ex-OR logic
ALP to perform BIT Manipulations
ALP to find whether the data byte is Odd or Even
ALP to find whether the data byte is Positive or negative
ALP to implement (display) BCD-UP counter.
ALP to implement (display) BCD-DOWN counter.
ALP to implement (display) DECIMAL-UP counter.
ALP to implement (display) DECIMAL-DOWN counter.
ALP to implement (display) HEXADECIMAL-UP counter.
ALP to implement (display) HEXADECIMAL-DOWN
counter.

30

ALP to implement (display) HEXADECIMAL UP-DOWN


counter.

R.Y.M.E.C,BELLARY

DEPT OF ECE

PAGE
NO.

52

MICROCONTROLLER LAB

R.Y.M.E.C,BELLARY

DEPT OF ECE

53

MICROCONTROLLER LAB

SL
NO.

TITLE OF THE EXPERIMENT

31
32

ALP to implement (display) DECIMAL UP-DOWN counter.


ALP to implement HEXADECIMAL to ASCII conversion
using Conditional Branching (jc), Call & Return instructions.
ALP to implement HEXADECIMAL to DECIMAL
conversion.
ALP to implement ASCII to HEXADECIMAL conversion.
ALP to implement BCD to ASCII conversion.
ALP to implement DECIMAL to HEXADECIMAL
conversion.
ALP to count from 00h to FFh using on chip timer 0f 8051 to
generate delay
ALP to transfer letter "G" continuously at a baud rate of 9600.
ALP to transfer the message hello serially at 9600baudrate,8bit data,1 stop bit.

33
34
35
36
37
38
39

II

INTERFACING

01

C' program to display the key pressed by interfacing


Alphanumeric LCD panel & Hex keypad interface module to
8051 microcontroller.
C' program to measure temperature by interfacing External
ADC &Temperature control interface module to 8051
microcontroller.

02
03

PAGE
NO.

DAC PROGRAMS:
(i) C' program to generate Ramp waveform using DAC
Interface to
8051.
(ii) C' program to generate Square waveform using DAC
Interface to
8051.
(iii) C' program to generate Triangle waveform using DAC
Interface
to 8051.
(iv) C 'program to generate Sinusoidal waveform using DAC
Interface to 8051

04

STEPPER MOTOR:
(i) C' program to rotate Stepper motor in Clockwise direction
by interfacing Stepper motor interface module with 8051
microcontroller.
(ii) C' program to rotate Stepper motor in Clockwise direction
by interfacing Stepper motor interface module with 8051
microcontroller.

05

C' program to rotate DC motor by interfacing Dc motor


interface module to 8051 microcontroller.

06

C' program to implement Elevator by interfacing Elevator


interface module with 8051 microcontroller.
R.Y.M.E.C,BELLARY
DEPT OF ECE

54

MICROCONTROLLER LAB

SL NO.
04

TITLE OF THE EXPERIMENT

PAGE
NO.

STEPPER MOTOR:
(i) C' program to rotate Stepper motor in Clockwise direction by
interfacing Stepper motor interface module with 8051
microcontroller.
(ii) C' program to rotate Stepper motor in Clockwise direction by
interfacing Stepper motor interface module with 8051
microcontroller.

05

C' program to rotate DC motor by interfacing Dc motor interface


module to 8051 microcontroller.

06

C' program to implement Elevator by interfacing Elevator interface


module with 8051 microcontroller.

R.Y.M.E.C,BELLARY

DEPT OF ECE

55

MICROCONTROLLER LAB

R.Y.M.E.C,BELLARY

DEPT OF ECE

56

MICROCONTROLLER LAB

R.Y.M.E.C,BELLARY

DEPT OF ECE

57

MICROCONTROLLER LAB

R.Y.M.E.C,BELLARY

DEPT OF ECE

58

MICROCONTROLLER LAB

R.Y.M.E.C,BELLARY

DEPT OF ECE

59

Das könnte Ihnen auch gefallen