Unit 5 CS 203 DCES
Unit 5 CS 203 DCES
The assembly language is a low-level programming language used to write program code in
terms of mnemonics. Even though there are many high-level languages that are currently in
demand, assembly programming language is popularly used in many applications. It can be
used for direct hardware manipulations. It is also used to write the 8051 programming
code efficiently with less number of clock cycles by consuming less memory compared to the
other high-level languages.
8051 Programming
8051 Programming in Assembly Language
The assembly language is a fully hardware related programming language. The embedded
designers must have sufficient knowledge on hardware of particular processor or controllers
before writing the program. The assembly language is developed by mnemonics; therefore,
users cannot understand it easily to modify the program.
The assembly language is made up of elements which all are used to write the program
in sequential manner. Follow the given rules to write programming in assembly language.
Op-code: The op-code is a single instruction that can be executed by the CPU. Here the op-
code is a MOV instruction.
Operands: The operands are a single piece of data that can be operated by the op-code.
Example, multiplication operation is performed by the operands that are multiplied by the
operand.
Syntax: MUL a,b;
The Elements of an Assembly Language Programming:
Assembler Directives
Instruction Set
Addressing Modes
Assembler Directives:
The assembling directives give the directions to the CPU. The 8051 microcontroller consists
of various kinds of assembly directives to give the direction to the control unit. The most
useful directives are 8051 programming, such as:
ORG
DB
EQU
END
ORG(origin): This directive indicates the start of the program. This is used to set the register
address during assembly. For example; ORG 0000h tells the compiler all subsequent code
starting at address 0000h.
Syntax: ORG 0000h
DB(define byte): The define byte is used to allow a string of bytes. For example, print the
―EDGEFX‖ wherein each character is taken by the address and finally prints the ―string‖ by
the DB directly with double quotes.
Syntax:
ORG 0000h
MOV a, #00h
————-
————-
DB‖EDGEFX‖
EQU (equivalent): The equivalent directive is used to equate address of the variable.
Syntax:
reg equ,09h
—————–
—————–
MOV reg,#2h
END:The END directive is used to indicate the end of the program.
Syntax:
reg equ,09h
—————–
—————–
MOV reg,#2h
END
Addressing Modes:
The way of accessing data is called addressing mode. The CPU can access the data in
different ways by using addressing modes. The 8051 microcontroller consists of five
addressing modes such as:
Immediate Addressing Mode
Register Addressing Mode
Direct Addressing Mode
Indirect Addressing Mode
Base Index Addressing Mode
Immediate Addressing Mode:
In this addressing mode, the source must be a value that can be followed by the ‗#‘ and
destination must be SFR registers, general purpose registers and address. It is used for
immediately storing the value in the memory registers.
Syntax:
MOV A, #20h //A is an accumulator register, 20 is stored in the A//
MOV R0,#15 // R0 is a general purpose register; 15 is stored in the R0 register//
MOV P0, #07h //P0 is a SFR register;07 is stored in the P0//
MOV 20h,#05h //20h is the address of the register; 05 stored in the 20h//
Ex:
MOV R0, #1
MOV R0, #20 //R0 <—R0[15]+20, the final value is stored in R0//
EX:
MOV R0, #02h
MOV A, #30h
ADD R0, A //R0<—R0+A, the final value is stored in the R0 register//
Direct Addressing Mode
In this addressing mode, the source or destination (or both source and destination) must be an
address, but not value.
Syntax:
MOV A,20h // 20h is an address; A is a register//
MOV 00h, 07h // both are addressed of the GPS registers//
Ex:
MOV 07h,#01h
MOV A, #08h
ADD A,07h //A<—A+07h the final value is stored in A//
Instruction Set:
The instruction set is the structure of the controller or processor that provides commands to
the controller to guide the controller for processing data. The instruction set consists of
instructions, native data types, addressing modes, interrupt registers, exceptional handling
and memory architecture. The 8051 microcontroller can follow CISC instructions with
Harvard architecture. In case of the 8051 programming different types of CISC instructions
include:
Data Transfer Instruction set
Sequential Instruction Set
Arithmetic Instruction set
Branching Instruction set
Loop Instrcution Set
Conditional Instruction set
Unconditional Instruction set
Logical Instruction set
Boolean Instruction set
Arithmetic Instruction Set:
Addition
Multiplication
Subtraction
Division
Addition:
ORG 0000h
MOV R0, #03H // move the value 3 to the register R0//
MOV A, #05H // move the value 5 to accumulator A//
Add A, 00H // addA value with R0 value and stores the result inA//
END
Multiplication:
ORG 0000h
MOV R0, #03H // move the value 3 to the register R0//
MOV A, #05H // move the value 5 to accumulator A//
MUL A, 03H // Multiplied result is stored in the Accumulator A //
END
Subtraction:
ORG 0000h
MOV R0, #03H // move the value 3 to register R0//
MOV A, #05H // move the value 5 to accumulator A//
SUBB A, 03H // Result value is stored in the Accumulator A //
END
Division:
ORG 0000h
MOV R0, #03H // move the value 3 to register R0//
MOV A, #15H // move the value 5 to accumulator A//
DIV A, 03H // final value is stored in the Accumulator A //
END
Conditional Instructions
The CPU executes the instructions based on the condition by checking the single bit status or
byte status. The 8051 microcontroller consists of various conditional instructions such as:
JB —>Jump below
JNB —> Jump if not below
JC —> Jump if Carry
JNC —>Jump if not Carry
JZ —>Jump if Zero
JNZ —> Jump if not Zero
The call and jump instructions are used to avoid the code replication of the program. When
some specific code used more than once in different places in the program, if we
mention specific name to code then we could use that name anywhere in the program without
entering a code for every time. This reduces the complexity of the program. The 8051
programming consists of call and jump instructions such as LCALL, SJMP.
LCALL
ACALL
SJMP
LJMP
1. Syntax:
ORG 0000h
– – – – – – – –
– – – – – – – –
ACALL, label
– – – – – – – –
– – – – – – – –
SJMP STOP
Label: – – – – – – – –
– – – – – – – –
– – – – – – – –
ret
STOP:NOP
2. Syntax:
ORG 0000h
––––––––
––––––––
LCALL, label
––––––––
––––––––
SJMP STOP
Label: – – – – – – – –
––––––––
––––––––
ret
STOP:NOP
The loop instructions are used to repeat the block each time while performing the increment
and decrement operations. The 8051 microcontroller consist two types of loop instructions:
CJNE —> compare and jump if not equal
DJNZ —> decrement and jump if not zero
1. Syntax:
of CJNE
MOV A, #00H
MOV B, #10H
Label:INC A
– – – – – –
– – – – – –
CJNE A, label
2. Syntax:
of DJNE
MOV R0, #10H
Label:– – – – – –
––––––
DJNE R0, label
––––––
––––––
END
Logical Instruction Set:
The 8051 microcontroller instruction set provides the AND, OR, XOR, TEST, NOT and
Boolean logic instructions for set and clears the bits based on the need in the program.
2. Syntax:
MOV A, #20H /00100000/
MOV R0, #03H /00000101/
ANL A, R0
3. Syntax:
MOV A, #20H /00100000/
MOV R0, #03H /00000101/
XRL A, R0
Shifting Operators
The shift operators are used for sending and receiving the data efficiently. The
8051 microcontroller consist four shift operators:
RR —> Rotate Right
RRC —>Rotate Right through carry
RL —> Rotate Left
RLC —>Rotate Left through carry
Rotate Right (RR):
In this shifting operation, the MSB becomes LSB and all bits shift towards right side bit-by-
bit, serially.
Syntax:
MOV A, #25h
RR A
Syntax:
MOV A, #25h
RL A
Syntax:
MOV A, #27h
RRC A
Syntax:
MOV A, #27h
RLC A
The microcontroller programming differs for each type of operating system. There are many
operating systems such as Linux, Windows, RTOS and so on. However, RTOS has several
advantages for embedded system development. Some of the Assembly level programming
examples are given below.
LED blinking using with 8051 microcontroller:
Number Displaying on 7-segment display using 8051 microcontroller
Timer/Counter calculations and program using 8051 microcontroller
Serial Communication calculations and program using 8051 microcontroller
LED programs with 8051 Microcontrller
1. WAP to toggle the PORT1 LEDs
ORG 0000H
TOGLE: MOV P1, #01 //move 00000001 to the p1 register//
CALL DELAY //execute the delay//
MOV A, P1 //move p1 value to the accumulator//
CPL A //complement A value //
MOV P1, A //move 11111110 to the port1 register//
CALL DELAY //execute the delay//
SJMP TOGLE
DELAY: MOV R5, #10H //load register R5 with 10//
TWO: MOV R6, #200 //load register R6 with 200//
ONE: MOV R7, #200 //load register R7 with 200//
DJNZ R7, $ //decrement R7 till it is zero//
DJNZ R6, ONE //decrement R7 till it is zero//
DJNZ R5, TWO //decrement R7 till it is zero//
RET //go back to the main program //
END