0% found this document useful (0 votes)
225 views33 pages

8051 Microcontroller Programming Guide

The document describes a program to copy 8 bytes of data from RAM location 30H to 80H using pointers and incrementing. It also includes programs for multiplication and division of 8-bit numbers, converting hex to ASCII, generating a square wave, interfacing with a DAC, LCD, RTC, elevator controller and traffic light controller. Diagrams show the interface connections and placements.
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)
225 views33 pages

8051 Microcontroller Programming Guide

The document describes a program to copy 8 bytes of data from RAM location 30H to 80H using pointers and incrementing. It also includes programs for multiplication and division of 8-bit numbers, converting hex to ASCII, generating a square wave, interfacing with a DAC, LCD, RTC, elevator controller and traffic light controller. Diagrams show the interface connections and placements.
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

1.

WRITE PROGRAM TO COPY A BLOCK OF 8BYTES OF


DATA FROM RAM LOC. STARTING AT 30H TO RAM
LOCATION 80H.

START: MOV R0, #30


MOV R1, #80
MOV R3, #8
RETURN: MOV A, @R0
MOV @R1, A
INC R0
INC R1
DJN2 R3, RETURN
LCALL 0003

1
2. ARITHMETIC OPERATIONS

A. MULTIPLICATION OF TWO 8BIT NOS.

START: MOV DPTR, #9001


MOVX A, @DPTR
MOV 0F0, A
MOV DPTR, # 9000
MOVX A, @DPTR
MUL AB
MOV DPTR, #9002
MOVX @ DPTR, A
INC DPTR
MOV A, 0F0
MOVX @DPTR, A
LCALL 0003

B. DIVISION OF TWO 8 BIT NOS.


START: MOV DPTR, #9001
MOVX A, @DPTR
MOV 0F0, A
MOV DPTR, #9000
MOVX A, @DPTR
DIV AB
MOV DPTR, #9002
MOVX @DPTR, A
INC DPTR
MOV A, 0F0
MOVX @DPTR, A
LCALL 0003

2
3. CONVERT HEX EQUIVALENT TO ASCII VALUE

START: MOV DPTR, #9000


MOVX A, @ DPTR
MOV R1, A
CLR C
SUBB A, #0A
MOV A, R1
JE DOWN
ADD A, #37
DISP: MOV RO, #60
MOV @RO, A
LCALL UPDDT
SJMP START
MOV A, R1
CLR C
DOWN: ADD A, #30
LJMP DISP

3
4. GENERATION OF SQUARE WAVE OF FREQUENCY 1000 HZ
(50% DUTY CYCLE) USING INTERNAL TIMER

MOV TMOD, #01H


START: MOV TL0, #33H
MOV TH0, #FEH
CPL P1.5
LCALL DELAY
SJMP START
DELAY: SETB TR0
AGAIN: JNB TF0, AGAIN
CLR TR0
CLR TF0
RET

4
5. INTERFACE APPLICATIONS USING 8051 FOR D/A
APPLICATION

A. GENERATION OF STAIR CASE WAVE FORM


MOV DPTR, #0E803H
MOV A, #80H
MOVX @DPTR, A
AGAIN: MOV R0, #06H
MOV DPTR, #0E800H
MOV A, #00H
BACK: MOVX @DPTR, A
LCALL DELAY
ADD A, #33H
DJNZ R0, BACK
SJMP AGAIN
DELAY: MOV TMOD, #01H
MOV TL0, #33H
MOV TH0, #0FEH
SETB TR0
UP: JNB TF0, UP
CLR TR0
CLR TF0
RET

5
SCHEMATIC DIAGRAM OF DAC INTERFACE

6
6. INTERFACING LCD TO 8051

MOV A, #0FH
MOV DPTR, #E100H
MOVX @DPTR, A
START: MOV A, #0CH
LCALL CMD
MOV A, #01H
LCALL CMD
MOV R0, #40H
STR: MOV A, @R0
CJNE A, #00, L1
SJMP START
L1: LCALL DWR
INC R0
SJMP STR
CMD: MOV DPTR, #E101H
MOVX @DPTR, A
MOV DPTR, #E103H
MOV A, #04H
MOVX @DPTR, A
MOV R7, #0FFH
BACK2: MOV R6, #0FFH
BACK1: DJNZ R6, BACK1
DJNZ R7, BACK2
MOV A, #00H
MOVX @DPTR, A
RET
DWR: MOV DPTR, #E101H
MOVX @DPTR, A
MOV A, #05H
MOV DPTR, #E103H

7
MOVX @DPTR, A
MOV R7, #0FFH
BACK4: MOV R6, #0FFH
BACK3: DJNZ R6, BACK3
DJNZ R7, BACK4
MOV A, #01H
MOVX @DPTR, A
RET

8
LCD CONNECTIONS

Pin Descriptions for LCD


Pin Symbol I/O Description
1 VSS -- Ground
2 VCC -- +5V power supply
3 VEE -- Power supply to control contrast
4 RS I RS=0 to select command register
RS=1 to select data register
5 R/W I R/W=0 for write
R/W=1 for read
6 E I/O Enable
7 DB0 I/O The 8-bit data bus
8 DB1 I/O The 8-bit data bus
9 DB2 I/O The 8-bit data bus
10 DB3 I/O The 8-bit data bus
11 DB4 I/O The 8-bit data bus
12 DB5 I/O The 8-bit data bus
13 DB6 I/O The 8-bit data bus
14 DB7 I/O The 8-bit data bus

LCD Command Codes


Code Command to LCD instructions
(Hex) Register
1 Clear display screen
2 Return home
4 Decrement cursor(shift cursor to left)

9
6 Increment cursor(shift cursor to right)
5 Shift display right
7 Shift display left
8 Display off, cursor off
A Display off, cursor on
C Display on, cursor off
E Display on, cursor blinking
F Display on, cursor blinking
10 Shift cursor position to left
14 Shift cursor position to right
18 Shift the entire display to the left
1C Shift the entire display to the right
80 Force cursor to beginning of 1st line
C0 Force cursor to beginning of 2nd line
38 2 lines and 5x7 matrix

10
7. INTERFACING REAL TIME CLOCK USING 8051

START: MOV 0F0H, #00H


MOV 64H, #00H
AB3: MOV63H, #00H
AB2: MOV 62H, 00H
AB1: MOV A, 62H
MOV 60H, A
LCALL 019BH
MOV A, 63H
MOV 60H, A
MOV A, 64H
MOV 61H, A
LCALL 020BH
LCALL DELAY
MOV A, 62H
ADD A, #01H
DA A
MOV 62H, A
CJNE A, #60H, AB1
MOV A, 63H
ADD A, #01H
DA A
MOV 63H, A
CJNE A, #60H, AB2
MOV A, 64H
ADD A, #01H
DA A
MOV 64H, A
CJNE A, #24H, AB3
SJMP START

11
DELAY:
MOV R1, #07H
AB5: MOV R2, #0FFH
AB4: MOV R3, #0FFH
BACK: DJNZ R3, BACK
DJNZ R2, AB4
DJNZ R1, AB5
RET

12
8. INTERFACING ELEVATOR SIMULATOR CONTROL USING
8051

MOV DPTR, #0E803H


MOV A, #82H
MOVX @ DPTR, A
MOV R1, #00H
LOOP1: MOV A, R1
ORL A, #0F0H
MOV DPTR, #0E800H
MOVX @DPTR, A
MOV R0, #40H
MOV DPTR, #0E801H
LOOP2: MOVX A, @DPTR
ORL A, #0F0H
MOV R2, A
INC A
JZ LOOP2
LOOP3: MOV A, R2
RRC A
MOV R2, A
JNC DECIDE
INC R0
SJMP LOOP3
DECIDE: LCALL DELAY
MOV A, @ R0
CJNE A, 01, L1
SJMP RESET
JC DOWN
INC R1
MOV A, R1
ORL, A, #0F0
MOV DPTR, #0E800

13
MOVX @DPTR, A
SJMP DECIDE
DOWN: DEC R1
MOV A, R1
ORL, A, #0F0
MOV DPTR, #0E800
MOVX @DPTR, A
SJMP DECIDE
RESET: MOV A, #05
ADD A, R0
MOV R0, A
MOV A, @R0
MOV DPTR, #0E800
MOVX @DPTR, A
SJMP LOOP1

DELAY
MOV R7, #0FF
L2: MOV R6, #0FF
L1: DJNZ R6, L1
DJNZ R7, L2
RET
MI 40 00
03
06
09
00
E0
D3
B6
79

14
ELEVATOR INTERFACE SCHEMATIC DIAGRAM

15
9. INTERFACING TRAFFIC SIGNAL CONTROL USING 8051

PROGRAM TO ALLOW TRAFFIC FROM NORTH TO ALL DIRECTIONS


ONLY
MOV DPTR, #0E803H
MOV A, #80H
MOVX @DPTR, A
MOV A, #83
MOV DPTR, #0E800
MOVX @DPTR, A
MOV A, #88
MOV DPTR, #0E801
MOVX @DPTR, A
MOV A, #0F8
MOV DPTR, #0E802
MOVX, @DPTR, A
LCALL 0003

16
The 24 LEDs and their corresponding port lines are summarized below

LED Port Line


SOUTH RED PA3
AMBER PA2
LEFT PA0
STRAIGHT PC3
RIGHT PA1
PEDESTRIAN PC6

EAST RED PA7


AMBER PA6
LEFT PA4
STRAIGHT PC2
RIGHT PA5
PEDESTRIAN PC7

NORTH RED PB3


AMBER PB2
LEFT PB0
STRAIGHT PC1
RIGHT PB1
PEDESTRIAN PC4

WEST RED PB7


AMBER PB6
LEFT PB4
STRAIGHT PC0
RIGHT PB5
PEDESTRIAN PC5

17
TRAFFIC LIGHTS INTERFACE PLACEMENT DIAGRAM

18
SCHEMATIC DIAGRAM OF TRAFFIC LIGHTS INTERFACE

19
20
10. PATTERN GENERATION USING LEDs

/*Pattern.c contains main and ISR for external /int1 (pin13)


when /int1 (pin13) is low, ISR ext_int_isr2(void ) will be executed

Compile command line

> sdcc –-main-return --code-loc 0x2000 test42.c*/

/* #include "c:\sdcc\bin\paulmon2.h" */
#include "C:\sdcc\share\sdcc\include\at89x52.h"

int i,a;

char *p8255_4000_a =(xdata unsigned char *)0x4000;


char *p8255_4000_b =(xdata unsigned char *)0x4001;
char *p8255_4000_c =(xdata unsigned char *)0x4002;
char *p8255_4000_cnt =(xdata unsigned char *)0x4003;

*p8255_4000_a=0xaa;

void main()
{
while(1)

*p8255_4000_cnt=0x90;

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

{
for(a=0;a<10000;a++)

*p8255_4000_c = *p8255_4000_a;
}

22
11. PROGRAM TO CONTROL STEPPER MOTOR USING 8051

MOV DPTR, #0E803


MOV A, #80H
MOVX @DPTR, A
MOV DPTR, #E800
MOV A, #88H
START: MOVX @DPTR, A
CALL Delay
RR A
SJMP start
DELAY
MOV TMOD, #O1H
MOV TL0, #00H
MOV TH0, #05H
SETB TR0
AGAIN: JNB TF0, again
CLR TR0
CLR TF0
RET

23
SCHEMATIC DIAGRAM OF STEPPER MOTOR INTERFACE
PHASES

24
25
12. SWITCH INPUT DETECTION PROGRAM USING C-
LANGUAGE WITH THE USE OF 8255(PPI)

/*WAP which reads input from 3bits of port A and outputs the pattern on port C
according to table
port A Port C
000 D0 glows
001 D1 glows
010 D2 glows
010 D2 glows
011 D3 glows
100 D4 glows
101 D5 glows
110 D6 glows
111 D7 glows*/

#include "c:\sdcc\share\sdcc\include\at89x52.h"

int i,a;
unsigned char main_pattern;

xdata at 0x4000 unsigned char p8255_4000_a;


xdata at 0x4001 unsigned char p8255_4000_b;
xdata at 0x4002 unsigned char p8255_4000_c;
xdata at 0x4003 unsigned char p8255_4000_cnt;

void main()

p8255_4000_cnt=0x90;

26
main_pattern=0xf0;
for(i=0;i<20;i++)
for(a=0;a<5000;a++)
p8255_4000_c = main_pattern;
while(1)
{
if((p8255_4000_a & 0x07)== 0x07)

{
main_pattern=0x7f;
for(i=0;i<20;i++)
for(a=0;a<5000;a++)
p8255_4000_c = main_pattern;
}

else if((p8255_4000_a & 0x06)== 0x06)


{
main_pattern=0xbf;
for(i=0;i<20;i++)
for(a=0;a<5000;a++)
p8255_4000_c = main_pattern;
}
else if((p8255_4000_a & 0x05)== 0x05)
{
main_pattern=0xdf;
for(i=0;i<20;i++)
for(a=0;a<5000;a++)
p8255_4000_c = main_pattern;
}
else if((p8255_4000_a & 0x04)== 0x04)
{
main_pattern=0xef;
for(i=0;i<20;i++)
for(a=0;a<5000;a++)

27
p8255_4000_c = main_pattern;

}
else if((p8255_4000_a & 0x03)== 0x03)
{
main_pattern=0xf7;
for(i=0;i<20;i++)
for(a=0;a<5000;a++)
p8255_4000_c = main_pattern;
}
else if((p8255_4000_a & 0x02)== 0x02)
{
main_pattern=0xfb;
for(i=0;i<20;i++)
for(a=0;a<5000;a++)
p8255_4000_c = main_pattern;
}
else if((p8255_4000_a & 0x01)== 0x01)
{
main_pattern=0xfd;
for(i=0;i<20;i++)
for(a=0;a<5000;a++)
p8255_4000_c = main_pattern;
}
else
{
main_pattern=0xfe;
for(i=0;i<20;i++)
for(a=0;a<5000;a++)
p8255_4000_c = main_pattern;
}

}
}

28
13. INTERFACING A/D USING 8051

MOV A, #90H
MOV DPTR, #E803
MOV @DPTR, A
MOV A, #00
MOV DPTR, #E802
MOVX @DPTR, A
LCALL Delay
UP: MOVX A, @DPTR
CJNE A, #80 UP
MOV DPTR, #E802
MOV A, #40H
MOVX @ DPTR, A
MOV DPTR, #E800
MOVX A, @DPTR
LCALL 0003H
DELAY: MOV R7, #0FF
B2: MOV R6, #0FF
B1: DJNZ R6, B1
DJNZ R7, B2
RET

29
SCHEMATIC DIAGRAM OF ADC INTERFACE

30
14. 7-SEGMENT DISPLAY INTERFACING USING 8051

MOV DPTR, #E803


MOV A, #80
MOVX @DPTR, A
B4: MOV R0, #030H
MOV R1, #04H
B3: MOV R2, #04H
B2: MOV R3, #08H
MOV A, @RO
INC R0
B1: RL A
MOV DPTR, #E801
MOVX @DPTR, A
MOV R4, A
MOV A, #01
MOV DPTR, #E802
MOVX @DPTR, A
DEC A
MOVX @DPTR, A
MOV A, R4
DJNZ R3, B1
DJNZ R2, B2
LCALL Delay
DJNZ R1, B3

31
SCHEMATIC DIAGRAM OF SEVEN-SEGMENT DISPLAY
INTERFACE

32
15. COUNTER PROGRAMMING

PROGRAM FOR COUNTER 1 IN MODE 2 TO COUNT THE PULSES AND


DISPLAY THE STATE OF THE TL1 COUNT ON P2.

MOV TMOD, #60H


MOV TH1, #00H
SETB P3.5
AGAIN: SETB TR1
BACK: MOV A, TL1
LCALL 033FH
JNB TF1, BACK
CLR TR1
CLR TF1
B1: SJMP B1

33

You might also like