2. Prof. Suraj R. Gaikwad MIC
Exp: 1) To write an assembly language program for arithmetic operations.
Program:
1) MOV A,#20H
MOV F0,#20H
ADD A,F0
RET
2) MOV A,#20H
MOV F0,#10H
SUB A,F0
RET
3) MOV A,#04H
MOV F0,#02H
MUL A,F0
RET
4) MOV A,#10H
MOV F0,#02H
ADD A,F0
RET
Results:
Addition: A = 40H
Subtraction: A = 0AH
Multiplication: A = 08H
Division: A = 05H
3. Prof. Suraj R. Gaikwad MIC
Exp:2) To develop an assembly language program to transfer block of 10
bytes stored in internal data memory from location 40H to 60H.
Program:
ORG 0000H
MOV R0,#40H
MOV R1,#60H
MOV R2,#0AH
LOOP:MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2, LOOP
END
4. Prof. Suraj R. Gaikwad MIC
Exp:3) To develop an assembly language program to get square of numbers.
Program:
ORG 0000H
MOV R0,#40H
MOV R1,#60H
MOV R2,#0AH
LOOP1:MOV A,@R0
MOV B,@R0
MUL AB
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP1
END
Result:
Input:
Output:
00H = 0D
01H = 1D
04H = 4D
09H = 9D
10H = 16D
19H = 25D
24H = 36D
31H = 49D
40H = 64D
51H = 81D
5. Prof. Suraj R. Gaikwad MIC
Exp:4) To develop program for arranging 10 numbers in descending order.
Program:
ORG 00H
ARR EQU 70H
L0:MOV R1,#ARR
MOV R0,#ARR
MOV R2,#0AH
MOV R3,#00H
DEC R2
L1:MOV A,@R0
MOV B,A
INC R1
SUBB A,@R1
JNC L2
MOV A,B
XCH A,@R1
MOV @R0,A
MOV R3,#01H
L2:INC R0
DJNZ R2,L1
CJNE R3,#00,L0
SJMP $
END
Result:
Input:
Output:
6. Prof. Suraj R. Gaikwad MIC
Exp:5) To develop a program to generate Square wave over port pins.
Program:
ORG 0000H :initialization
MOV TMOD,#10H :move 10H into timer/counter mode control resister
UP:
MOV TL1,#0D2H :move 0D2H into timer 1 low byte
MOV TH1,#0FFH :move offH into timer 1 high byte
SETB TR1 :addressed TR1 is set, TR1=timer 1 run control bit
WAIT:
JNB TF1,WAIT :jump if addressed TR1 is 0, otherwise
proceed with next instruction
CLR TR1 :adressed TR1 is cleared
CPL P1.5 : complement the addressed P1.5
CLR TF1 : adressed TF1 is cleared, TF1=timer 1 overflow flag
SJMP UP :program branches unconditionally to address indicated
END :end
Result:
7. Prof. Suraj R. Gaikwad MIC
Exp:6) To generate Square wave using DAC.
Circuit Diagram:
C Program:
#include <REG51xD2.H>
#include <stdio.h>
sbit Amp = P3^3; /* Port line to change amplitude */
sbit Fre = P3^2; /* Port line to change frequency */
void delay(unsigned int x) /* delay routine */
{
for(;x>0;x--);
}
main()
{
unsigned char on = 0x7f,off=0x00;
unsigned int fre = 100;
while(1)
8. Prof. Suraj R. Gaikwad MIC
{
if(!Amp) /* if user choice is to change amplitude */
{
while(!Amp); /* wait for key release */
on+=0x08; /* Increase the amplitude */
}
if(!Fre) /* if user choice is to change frequency */
{
if(fre > 1000) /* if frequency exceeds 1000 reset to default */
fre = 100;
while(!Fre); /* wait for key release */
fre += 50; /* Increase the frequency */
}
P0=on; /* write amplitude to port */
P1=on;
delay(fre);
P0 = off; /* clear port */
P1 = off;
delay(fre);
}
}
Output Waveform:
9. Prof. Suraj R. Gaikwad MIC
Assembly Program:
ORG 0000H
MOV DPTR, #8000H
UP:MOV DPL,#40H
MOV DPH,#40H
CLR A
MOVC A,@A+DPTR
SETB P1.5
WAIT:JNB P1.5,WAIT
CLR P1.5
SJMP UP
END
Output Waveform:
10. Prof. Suraj R. Gaikwad MIC
Exp:7) To write a program to drive Stepper Motor.
Theory:
Driving Unipolar Stepper Motor with 8051:
Unipolar stepper motors can be used in three modes namely the Wave Drive, Full
Drive and Half Drive mode.
Half Drive Stepping Sequence
11. Prof. Suraj R. Gaikwad MIC
Interfacing Using L293D:
Interfacing Using ULN2003:
12. Prof. Suraj R. Gaikwad MIC
Programs:
Keil C Code for Wave Drive:
20. Prof. Suraj R. Gaikwad MIC
Exp:8) To write a program to drive Stepper Motor in clockwise direction and
anti-clockwise direction.
Program:
ORG 0000H
MOV R2,#12H
MOV A,#88H
LOOP1: MOV P2,A
RR A
DJNZ R2, LOOP1
MOV R2,#12H
MOV A,#11H
LOOP2: MOV P2,A
RL A
DJNZ R2, LOOP2
END
Result:
23. Prof. Suraj R. Gaikwad MIC
Exp:9) To write a program to read keyboard and display code.
Diagram:
Program:
• Program to interface matrix keyboard 4x4
• Rows are connected to the Port pins P1.0-P1.3 & Columns are connected to
Port pins P2.0-P2.3
• Rows are grounded one by one and read columns Seven segment display is
connected at port P0
ORG 00H
AJMP START
ORG 13H
RETI
START:MOV P0,#00H
MOV P2,#0FH ; Port Pins P2.0 to P2.3 i/p pins and P2.4 to P2.7 o/p pins
MOV P1,#00H ; Port P0 output port
REL: MOV P1,#00H ; make all rows ground to check all keys
MOV A,P2 ; read port p2 to ensure that all keys released
24. Prof. Suraj R. Gaikwad MIC
ANL A,#0FH ; maks upper bits because they are not used
CJNE A,#0FH,REL ; check till all keys released
AGAIN: ACALL DELAY
MOV A,P2 ; see if any key pressed or not?
ANL A,#0FH ; mask upper bits
CJNE A,#0FH,KPRESS ; if a is not equal to 0fh then key is pressed
SJMP AGAIN ; check again if key is not pressed
KPRESS: ACALL DELAY
MOV A,P2 ;
ANL A,#0FH ; mask unused upper bits
CJNE A,#0FH,KPRESS1 ; if a is not equal to 0fh then key is pressed
SJMP AGAIN ; check again if key is not pressed
KPRESS1:
MOV P1,#0FEH ; ground row 0
MOV A,P2 ; read all columns
ANL A,#0FH ; mask unused upper bits
CJNE A,0FH,R_0 ; key is pressed in first row (row 0),check columns
MOV P1,#0FDH ; Ground ROW 1
MOV A,P2 ; read all columns
ANL A,#0FH ; mask unused upper bits
CJNE A,0FH,R_1 ;key is pressed in second row (row 1),check columns
MOV P1,#0FBH ; ground row 2
MOV A,P2 ; read all columns
ANL A,#0FH ; mask unused upper bits
CJNE A,0FH,R_2 ;key is pressed in third row (row 2),check columns
MOV P1,#0F7H ; ground row 0
MOV A,P2 ; read all columns
ANL A,#0FH ; mask unused upper bits
CJNE A,0FH,R_3 ;key is pressed in fourth row (row 3),check columns
LJMP AGAIN
R_0: MOV DPTR,#KCODE0 ;set dptr=start of row 0
SJMP CHECK_C
R_1: MOV DPTR,#KCODE1 ;set dptr=start of row 1
SJMP CHECK_C
R_2: MOV DPTR,#KCODE2 ;set dptr=start of row 2
SJMP CHECK_C
R_3: MOV DPTR,#KCODE3 ;set dptr=start of row 3
CHECK_C:
RRC A ;check whether carry occurs or not
JNC GET_CODE
25. Prof. Suraj R. Gaikwad MIC
INC DPTR
SJMP CHECK_C
GET_CODE: CLR A
MOVC A,@A+dptr
MOV P0,A
LJMP REL
DELAY: MOV R7,#0FFh
DLOOP: MOV R6,#0FFh
D_LOOP: DJNZ R6,D_LOOP
DJNZ R7,DLOOP
RET
Result:
KCODE0: DB '0','1','2','3' ; These codes are for LCDs
KCODE1: DB '4','5','6','7' ; Replace this code by seven
KCODE2: DB '8','9','A','B' ; segment code as per your
KCODE3: DB 'C','D','E','F' ; Circuit.