MP Lab Manual 2015
MP Lab Manual 2015
MP Lab Manual 2015
1 D/F
15CSL48
B.E - IV Semester
Lab Manual
Name :__________________________
____________________________________
USN :___________________________
____________________________________
Dept. of CSE
QMP 7.1 D/F
SYLLABUS
Laboratory Code: 15CSL48 IA Marks 20
Number of Lecture Hours/Week 01I + 02P Exam Marks 80
Total Number of Lecture Hours 40 Exam Hours 03
CREDITS – 02
NOTE:
1. Develop and execute the following programs using 8086 Assembly Language. Any
suitable assembler like MASM/TASM/8086 kit or any equivalent software may be
used.
2. Program should have suitable comments.
3. The board layout and the circuit diagram of the interface are to be provided to
the student during the examination.
4. Software Required: Open source ARM Development platform, KEIL IDE and a
Proteus for simulation
SOFT WARE PROGRAMS-PART A
1. Design and develop an assembly language program to search a key element “X” in a
list of ‘n’ 16-bit numbers. Adopt Binary search algorithm in your program for searching.
2. Design and develop an assembly program to sort a given set of ‘n’ 16-bit numbers in
ascending order. Adopt Bubble Sort algorithm to sort given elements.
3. Develop an assembly language program to reverse a given string and verify whether it
is a palindrome or not. Display the appropriate message.
5. Design and develop an assembly language program to read the current time and
Date from the system and display it in the standard format on the screen.
6. To write and simulate ARM assembly language programs for data transfer, arithmetic
and logical operations (Demonstrate with the help of a suitable program).
7. To write and simulate C Programs for ARM microprocessor using KEIL (Demonstrate
with the help of a suitable program).
b. Design and develop an assembly program to read the status of two 8-bit inputs
(X & Y) from the Logic Controller Interface and display X*Y.
9. Design and develop an assembly program to display messages “FIRE” and “HELP”
alternately with flickering effects on a 7-segment display interface for a suitable period
of time. Ensure a flashing rate that makes it easy to read both the messages (Examiner
does not specify these delay values nor is it necessary for the student to compute these
values).
10. Design and develop an assembly program to drive a Stepper Motor interface and
rotate the motor in specified direction (clockwise or counter-clockwise) by N steps
(Direction and N are specified by the examiner). Introduce suitable delay between
successive steps. (Any arbitrary value for the delay may be assumed by the student).
a. Generate the Sine Wave using DAC interface (The output of the DAC is to be
displayed on the CRO).
b. Generate a Half Rectified Sine waveform using the DAC interface. (The output
of the DAC is to be displayed on the CRO).
12. To interface LCD with ARM processor-- ARM7TDMI/LPC2148. Write and execute
programs in C language for displaying text messages and numbers on LCD.
13. To interface Stepper motor with ARM processor-- ARM7TDMI/LPC2148. Write a
program to rotate stepper motor.
Study Experiments:
1. Interfacing of temperature sensor with ARM freedom board (or any other ARM
microprocessor board) and display temperature on LCD.
2. To design ARM cortex based automatic number plate recognition system.
Record Marks
Manual Marks
(Max . 20)
Date
(Max. 10)
(Student)
Signature
Signature
(Faculty)
Sl.
No
Name of the Experiment
Submission of
Conduction Repetition
Record
01 Laboratory Session-1:
02 Laboratory Session-2:
05 Palindrome
06 NcR
08 ARM programming
11 7-segment display
13 DAC interface
• If the student fails to attend the regular lab, the experiment has to
be completed in the same week. Then the manual/observation and
record will be evaluated for 50% of maximum marks.
Course Objectives
This course will enable students to
Course Outcomes
After studying this course, students will be able to
Learn 80x86 instruction sets and gins the knowledge of how assembly language
works.
• Problem Analysis
• Design/Development of Solutions
General Instructions
10. ARM ALP Programming for Data Transfer, Arithmetic operations 22-24
22. References 66
MASM COMMANDS:
C :/>cdfoldername
C:/foldername>edit filename.asm
Structure of Program:
.model tiny/small/medium/large
.data
; Initialize data
; which is used in program.
.code
; Program logic goes here.
;
end
C:/foldername>masm filename.asm
C:/foldername>link filename.obj
After verifying the program for correct syntax and the generated object files
should be linked together. For this the above link command should be executed and
it will give an EXE file if the model directive is small as discuss above.
C:/foldername>debug filename.exe
After generating EXE file by the assembler it’s the time to check the output.
For this the above command is used and the execution of the program can be done
in different ways. It is as shown below:
__ t ; Stepwise execution.
Laboratory Session-1
Description:
The microprocessors functions as the CPU in the stored program model of the
digital computer. Its job is to generate all system timing signals and synchronize the
transfer of data between memory, I/O, and itself. It accomplishes this task via the
three-bus system architecture previously discussed.
The microprocessor also has a S/W function. It must recognize, decode, and execute
program instructions fetched from the memory unit. This requires an Arithmetic-
Logic Unit (ALU) within the CPU to perform arithmetic and logical (AND, OR, NOT,
compare, etc) functions.
The 8086 CPU is organized as two separate processors, called the Bus Interface Unit
(BIU) and the Execution Unit (EU). The BIU provides H/W functions, including
generation of the memory and I/O addresses for the transfer of data between the
outside world -outside the CPU, that is- and the EU.
The EU receives program instruction codes and data from the BIU, executes these
instructions, and store the results in the general registers. By passing the data back
to the BIU, data can also be stored in a memory location or written to an output
device. Note that the EU has no connection to the system buses. It receives and
outputs all its data thru the BIU.
1. The BIU outputs the contents of the instruction pointer register (IP) onto the
address bus, causing the selected byte or word to be read into the BIU.
3. Once inside the BIU, the instruction is passed to the queue. This is a first-in, first-
out storage register sometimes likened to a "pipeline".
4. Assuming that the queue is initially empty, the EU immediately draws this
instruction from the queue and begins execution.
5. While the EU is executing this instruction, the BIU proceeds to fetch a new
instruction. Depending on the execution time of the first instruction, the BIU may fill
the queue with several new instructions before the EU is ready to draw its next
instruction.
The BIU is programmed to fetch a new instruction whenever the queue has room for
one (with the 8088) or two (with the 8086) additional bytes. The advantage of this
pipelined architecture is that the EU can execute instructions almost continually
instead of having to wait for the BIU to fetch a new instruction.
There are three conditions that will cause the EU to enter a "wait" mode. The first
occurs when an instruction requires access to a memory location not in the queue.
The BIU must suspend fetching instructions and output the address of this memory
location. After waiting for the memory access, the EU can resume executing
instruction codes from the queue (and the BIU can resume filling the queue).
One other condition can cause the BIU to suspend fetching instructions. This occurs
during execution of instructions that are slow to execute. For example, the
instruction AAM (ASCII Adjust for Multiplication) requires 83 clock cycles to
complete. At four cycles per instruction fetch, the queue will be completely filled
during the execution of this single instruction. The BIU will thus have to wait for the
EU to pull over one or two bytes from the queue before resuming the fetch cycle.
Laboratory Session-2
Write-up
up on Instruction group, Timing diagrams of 8086.
Instruction Set of 8086 is shown in Fig 1.2. The detailed explanation will be taught in the
lab.
Fig 1.2
8086 can operate in two modes viz. Minimum mode and Maximum mode.
Fig 1.3 shows the timing diagram of 8086 Read operation in Minimum mode.
Fig 1.4 shows the timing diagram of 8086 Read operation in Minimum mode.
Fig 1.3
Fig 1.4
SAMPLE PROGRAMS:
.model tiny
.data
num1 db 50h
num2 dw 1234h
.code
Mov ax,@data
Mov ds,ax ;DATA SEGMENT INITIALIZATION
mov al,num1
mov ah,al
mov bh,ah
mov bl,al ;MOVES BYTE LENGTH OF DATA FROM REG.AL TO REG.BL
mov cx,num2
mov dx,cx
mov si,ax
mov di,si ;MOVES WORD LENGHT OF DATA FROM REG.CX TO REG.DX
end
.model tiny
.code
mov al,10h
mov ah,10
mov cl,50h
mov ch,50 ;MOVES IMMEDIATE VALUE TO 8 BIT REGISTER
mov bx,1234h
mov dx,1234 ;MOVES IMMEDIATE VALUE TO 16 BIT REGISTER
mov si,4000h
mov di,2000h
3. Write an ALP to add two numbers and to store the result in the specified
destination.
.model small
.data
num1 db 05h
num2 db 06h
num3 dw 1234h
num4 dw 0002h
sum db ?
sum2 dw ?
.code
mov ax,@data
mov ds,ax ;INITIALIZES DATA SEGMENT
mov al,num1
mov bl,num2
add al,bl ;ADD THE 2 BYTES
mov sum,al ;STORES THE RESULT IN MEMORY
mov cx,num3
add cx,num4 ;ADD THE 2 WORDS
mov sum2,cx ;STORES THE RESULT IN MEMORY
4. Write and ALP to multiply two 16-bit numbers and to store the result in the
specified location.
.model small
.data
num1 dw 1234h
num2 dw 0ffffh
res dw 5 dup(0)
.code
Mov ax,@data
mov ax,num1
mov dx,num2
mul dx ;MULTIPLIES 2 16-BIT NUMBERS
mov res,ax
mov res+2,dx ;STORES THE IN MEMORY
.model small
.data
Dvd dd 12345678h
Dvr dw 0ffffh
Quot dw ?
Remd dw ?
.code
Mov ax,@data
Mov ds,ax ;INITIALIZATION OF DATA SEGMENT
.model small
.data
read macro ;Start of a macro
mov ah,01h ;read a single key stroke
int 21h
endm ;end of macro
.code
Mov ax,@data
Mov ds,ax ;INITIALIZATION OF DATA SEGMENT
read
mov cl,al
mov dl,al
mov ah,0
aaa ;ADJUST THE AL VALUE TO UNPACKED BCD
mov si,ax
AIM:
Design and develop an assembly language program to search a key element “X” in a
list of ‘n’ 16-bit numbers. Adopt Binary search algorithm in your program for
searching.
.model small
mov ax,bx
add ax,dx
shr ax,1 ;Get the middle element of array
mov si,ax
add si, si
dec ax
mov dx,ax ;last element of new array to dx
jmp again
big: je found
inc ax
mov bx,ax
jmp again
Conclusion:
This program performs a search for a key element in an array. If the search
element is found it will display a message ‘found’. As the search element (key
element in program) is not present in the given array it will display a message ‘not
found’.
Design and develop an assembly program to sort a given set of ‘n’ 16-bit numbers in
ascending order. Adopt Bubble Sort algorithm to sort given elements.
.model small
.data
ARR DW 3333h, 4444h, 1111h, 9999h, 5555h, 2222h, 7777h, 8888h, 6666h
; The numbers to be sorted
LEN EQU $-ARR ; Length of the array
.code
MOV AX, @DATA
MOV DS, AX
MOV CX, (LEN/2)-1 ; Get the total number of Elements In the array
OUTER: LEA SI, ARR ; Get the address of the first element of the array
MOV BX, 0
; to have a count of number of Comparison
MOV SI, 00
Inner : inc bx
MOV AX, ARR [SI]
INC SI
INC SI ; Get the next value
CMP AX, ARR [SI] ; Perform the comparison
JBE SKIP ; Skip if 1st Value is less than 2nd.
XCHG AX, ARR [SI] ; Else Exchange the two values.
MOV ARR [SI-2], AX ; Swap the two values.
Conclusion:
This program will sort the given numbers in ascending order. The sorted numbers
will be stored directly in the data Segment. To view the data segment the following code
must be used.
-d ds: 0
Develop an assembly language program to reverse a given string and verify whether
it is a palindrome or not. Display the appropriate message.
.model small
.data
str1 db "alam" ; String to be checked for palindrome
slen equ ($-str1)
str2 db 40 dup(0)
msg1 db "Palindrome$"
msg2 db "Not Palindrome$"
.code
start: mov ax,@data
mov ds,ax
mov es,ax ; Initialize extra segment
Conclusion:
This program reverse the string provided in data segment by keeping
the original string as it is and compares both the strings. It will check each and every
character. If all the characters are same then the given string is said to be as
palindrome and it will display a message “palindrome” on screen otherwise the
given string is not palindrome and it will display a message “not palindrome” on
screen.
NcR
.model small
.stack 20
.data
n db 08h
r db 05h
ncr db ?
.code
start: mov ax,@data
mov ds,ax
mov ncr,00h
mov al,n
mov bl,r
call encer
int 3
encer proc
para1: cmp al,bl ; compare ‘n’,’r’ for equality
je para8
para2: cmp bl,00h ; compare ‘r’ with 00
je para8
para3: cmp bl,01h ; compare ‘r’ with 01h
je para10
para4: dec al ; decrement ‘n’
cmp bl,al
je para9
para5: push ax ; Push ‘n’ to the stack
push bx ; Push ‘r’ to the stack
call encer
para6: pop bx ; Get ‘r’ and ‘n’ from the stack
pop ax
dec bl
push ax
push bx
call encer
para7: pop bx
pop ax
ret
para8: inc ncr
ret ; Store the results
para9: inc ncr
para10: add ncr,al
ret
encer endp
end start
Conclusion:
This program performs nCr using recursive procedure. Output is stored in
data segment. To observe the output in data segment we have to search for our
given ‘n’ and ‘r’ values as program is written to store the result after the given data
in data segment.
The NcR Value for 8 and 5 is 56, But the outputwill be shown as 38 which is the
Hexa value of 56.
Design and develop an assembly language program to read the current time and
Date from the system and display it in the standard format on the screen.
.MODEL SMALL
.DATA
msg db "The Time is: "
hrs db ?,?,' : '
mins db ?,?,' (hh:mm) ',10,13
.CODE
MOV AX,@DATA
MOV DS, AX
; Time Part
mov ah,2ch ; DOS function to read system time
int 21h
; Day Part
MOV AH, 2AH ; To get System Date
INT 21H
MOV AL, DL ; Day is in DL
AAM
Add ax,3030h
mov da,Ah
mov da +1, al
; YEAR
MOV Al, cl ; since AAM is applicable only for AL (YYYY -> YY)
aam
Add ax, 3030h
mov yea,ah
mov yea+1,al
int 3
end
Conclusion:
This program displays the present system time. Our program displays only
the hours and minutes in the format HH: MM. By using the same DOS function we
can also display the seconds and milliseconds.
To write and simulate ARM assembly language programs for data transfer,
arithmetic and logical operations (Demonstrate with the help of a suitable
program).
1. Data Transfer.
The below assembly level program moves the 32 bit data from register to register.
2. Arithmetic Operations
stop b stop
end
area dis,code,readonly
entry
mov r0,#0x83
mov r1,r0
and r1, # 0Xf0 ; Perform Logical AND operation
mov r2,r1
lsr r2, #4 ; Perform Logical right Shift operation
mov r3, r0
and r3, # 0X0f
stop b stop
end
4. Write the similar programs and try for OR, Logical Left Shift operations.
int main(void)
{
IO1DIR = (4); // Bit No 4 (0100) will be activated
while(1) // If True
{
IO1CLR = (04); // Clear Bit 04 of GPIO1
for (delay=0 ;delay<5000; delay++); // Call Delay
IO1SET = (04); // Set Bit 04 of GPIO1
for (delay=0; delay<5000; delay++); // Call Delay
}
}
HARDWARE
PROGRAMS:
PART B
.model small
.data
pa equ 0d800h
pb equ 0d801h
pc equ 0d802h
ctrlequ 0d803h
.code
mov ax, @data
mov ds, ax
delay proc
push cx
push bx
pop bx
pop cx
ret
delay endp
end
Conclusion:
The program performs the up-down counter based on the input data
given on logic controller read through port B. If the input is zero then it performs
down counter starting from 99 down to 00 and if other than zero is the input then it
performs up counter starting from 00 down to 99. And the counting will continue
until a key ‘q’ is pressed in the key board, after displaying the count on logic
controller every time it checks whether a key ‘q’ is pressed or not.
While observing the output of down counter or up counter if the input changes then
from that point the counting will also changes. Suppose if the input is zero then it
perform down counting from 99 to 00 after some time when the output is 50 then if
we change the input other than zero then from that point it will start up counting
that is form 50, 51, 52. and so on.
b. Design and develop an assembly program to read the status of two 8-bit inputs (X
& Y) from the Logic Controller Interface and display X*Y.
.model small
.data
pa equ 0d800h
pb equ 0d801h
pc equ 0d802h
ctrl equ 0d803h
.code
movax,@data
movds,ax
mov al,82h ; Control word (PB as input port and PA as output port)
mov dx, ctrl
out dx, al
mov dx, pb
in al,dx ; Read the first 8 bit number
mov bl,al ; Store the first number
mov dx, pa
out dx, al ; Display the result
int 3
end
Conclusion:
The program performs the multiplication between two bytes and
gives the result. First byte is read from the port B of logic controller (user has to
provide) and waits for enter key to be pressed and once enter key is and it reads the
Second byte and multiplies and displays the result through Port A.
Date: Signature of the staff
Design and develop an assembly program to display messages “FIRE” and “HELP”
alternately with flickering effects on a 7-segment display interface for a suitable
period of time. Ensure a flashing rate that makes it easy to read both the messages
(Examiner does not specify these delay values nor is it necessary for the student to
compute these values).
.model small
.stack 100
.data
pa equ 0d800h ; Port address
pb equ 0d801h
pc equ 0d802h
ctrl equ 0d803h ; Control word address
str1 db 8eh, 0f9h, 88h, 86h ; Hexa values for “FIRE”
str2 db 89h, 86h, 0c7h, 8ch ; Hexa values for “HELP”
.code
start: mov ax, @data
mov ds, ax ; data segment Initialization
jne again
int 3 ; Terminate the program
display proc
mov si, 03h ; To get the last byte
up1: mov cl, 08h
mov ah, [bx+si] ; Load the data bit to ‘ah’
up: mov dx, pb
rol ah, 1 ;Rotate each bit in the data by one
mov al, ah
out dx, al ; Out the first bit
call clock
dec cl
jnz up ; repeat the steps ‘08’ times
dec si
cmp si, -1
jne up1
ret ; return back to main program
display endp
clock proc
mov dx, pc
mov al, 01h ; rising edge of clock pulse
out dx, al
mov al, 0 ; falling edge of the clock pulse
out dx, al
mov dx, pb
ret
clock endp
delay proc
push cx
push bx
mov cx, 0ffffh
d2: mov bx, 8fffh
d1: dec bx
jnz d1
loop d2
pop bx
pop cx
ret
delay endp
end start
Conclusion:
This program displays “FIRE” and “HELP” on seven segment display interface
recursively one after the other with some delay till key ‘q’ is pressed on key board.
It’s not going to read any data from interface device. The data which has to be
displayed is provided in the program itself.
Design and develop an assembly program to drive a Stepper Motor interface and
rotate the motor in specified direction (clockwise or counter-clockwise) by N steps
(Direction and N are specified by the examiner). Introduce suitable delay between
successive steps. (Any arbitrary value for the delay may be assumed by the student).
.model small
.data
pa equ 0d800h
pb equ 0d801h
pc equ 0d802h
ctrl equ 0d803h
nstep db 2 ; Initialize the number of steps
.code
start: mov ax, @data
mov ds, ax
int 3
step proc
mov dx, pa
out dx, al
push cx
push bx
pop bx
pop cx
ret
step endp
end start
Conclusion:
DAC INTERFACE
a. Generate the Sine Wave using DAC interface (The output of the DAC is to be
displayed on the CRO).
b. Generate a Half Rectified Sine waveform using the DAC interface. (The output of
the DAC is to be displayed on the CRO).
A. SINE WAVE
.model small
.data
pa equ 0c400h
pb equ 0c401h
pc equ 0c402h
ctrl equ 0c403h
table db 128,132,137,141,146,150,154,159,163,167,171,176,180,184,188
db 192,196,199,203,206,210,213,217,220,223,226,229,231,234,236
db 239,241,243,245,247,248,250,251,252,253,254,255
db 255,254,253,252,251,250,248,247,245,243,241,239,236,234,231
db 229,226,223,220,217,213,210,206,203,199,196,192,188,184,180
db 176,171,167,163,159,154,150,146,141,137,132,128
db123,119,114,110,105,101,97,93,88,84,80,76,72,68,64,60,56,52,49
db 45,42,39,36,33,30,27,24,22,19,17,15,11,9,7,6,5,4,3,2,1,0
db 0,1,2,3,4,5,6,7,9,11,15,17,19,22,24,27,30,33,36,39,42,45,49,52,56
db 60,64,68,72,76,80,84,88,93,97,101,105,110,114,119,123
.code
start: mov ax,@data
mov ds,ax
dec bx
cmp bx,00
jne up
Conclusion:
This program generates a sine wave of having amplitude of 5V. Output will
be seen in CRO. It will be continues wave. It stops execution as soon as any key is
pressed from the key board.
.model small
.data
pa equ 0c400h
pb equ 0c401h
pc equ 0c402h
ctrl equ 0c403h
table db 128,132,137,141,146,150,154,159,163,167,171,176,180,184,188
db 192,196,199,203,206,210,213,217,220,223,226,229,231,234,236
db 239,241,243,245,247,248,250,251,252,253,254,255,254,253,252
db 251,250,248,247,245,243,241,239,236,234,231,229,226,223,220
db 217,213,210,206,203,199,196,192,188,184,180,176,171,167,163
db 159,154,150,146,141,137,132,128 ; Look_up_table
.code
start: mov ax,@data
mov ds,ax
mov cx,83
mov al,128
next: out dx,al
loop next
dec bx
cmp bx,00h
jnz up
int main()
{
int i;
unsigned char name[]={"AMMLUI"};
IO0DIR=0x30403C00;
delay(100);
for (i=0;i<11;i++)
{
datal(name[i]);
}
while(1);
}
a=0x0;
d=d<<4;
a = d | 0xFFFFFF0F;
IO0CLR |= 0x00003C00;
a=a<<6;
IO0CLR = 0x20400000;
IO0SET = 0x10000000;
IO0SET = (IO0SET | 0x00003C00)&a;
delay(1000);
IO0CLR = 0x10000000;
}
void datal(unsigned char t)
{
int b=0;
b = t|0xFFFFFF0F;
IO0CLR |= 0x00003C00;
b=b<<6;
IO0SET = 0x10400000;
IO0SET = (IO0SET | 0x00003C00)&b;
delay(1000);
IO0CLR = 0x10000000;
b=0x0;
t=t<<4;
b=t|0xFFFFFF0F;
IO0CLR |= 0x00003C00;
b=b<<6;
IO0SET = 0x10400000;
IO0SET = (IO0SET | 0x00003C00) &b;
delay(1000);
IO0CLR = 0x10000000;
}
Void delay (int count)
{
int j=0, i=0;
for (j=0;j<count;j++)
for (i=0;i<35;i++);
}
#include <LPC214X.h>
void delay();
void delay()
{
int i,j;
For (i=0; i<0xff; i++)
For (j=0; j<0x25; j++);
}
int main()
{
IO0PIN=0x00010000;
delay (); ; This is for Clock wise rotation
IO0PIN=0x00020000;
delay (); ; For Anti- Clock wise Change
IO0PIN=0x00040000; the direction as 8,4,2,1
delay ();
IO0PIN=0x00080000;
delay();
}
}
Date: Signature of the staff
STUDY EXPERIMENTS
1. Interfacing of temperature sensor with ARM freedom board (or any other ARM
Microprocessor board) and display temperature on LCD.
#include<lpc214x.h>
#include<stdio.h>
//Function prototypes
void lcd_init(void);
void wr_cn(void);
void clr_disp(void);
void lcd_com(void);
void wr_dn(void);
void lcd_data(void);
char var[15],*ptr;
int main()
while(*ptr!='\0')
{
temp1 = *ptr;
ptr ++;
}
lcd_com();
while(*ptr!='\0')
temp1 = *ptr;
ptr ++;
lcd_com();
ptr = disp2;
while(*ptr!='\0')
{
temp1 = *ptr;
ptr ++;
lcd_com();
while(*ptr!='\0')
temp1 = *ptr;
ptr ++;
lcd_com();
ptr = disp4;
while(*ptr!='\0')
{
temp1 = *ptr;
ptr ++;
while(1)
if (pwr_on_flag==0xFF)
{
pwr_on_flag=0x00;
for(i=0;i<10;i++)
temp_arry[i]=adc_value;
//at 1st time add same value for 10 times
else
{
for(i=9;i>0;i--)
temp_arry[i]=temp_arry[i-1];
// add read data to 1st position of temp_arry
temp_arry[i]= adc_value;
sum=0;
for(i=0;i<10;i++)
adc_out = ana_output;
adc_out = (adc_out*11.2);
//in circuit we use the resistor voltage divider circuit , so we need to
calculate actual voltage
adc_out = (adc_out/10.0);
// these steps find the real analog voltage corresponding to temperature.
adc_out = (adc_out-2.7315);
temp_out = ( adc_out*100);
//value corresponding to temperature
sprintf(var,"%4.2f",temp_out);
// converting int data into ascci value
lcd_com();
delay(3200);
ptr = var;
while(*ptr!='\0')
{
temp1 = *ptr; //write ambient temperature on lcd
lcd_data();
ptr ++;
}
for ( i = 0 ; i < 300 ; i++ ) // delay of around sec.
for( j = 0 ; j < 10000 ; j++ );
}
} //end of main ()
void lcd_init(void)
wr_cn();
delay(3200);
wr_cn();
delay(3200);
wr_cn();
delay(3200);
wr_cn();
delay(3200);
temp1 = 0x28; // load command for lcd function setting with lcd in 4 bit mode,
delay(3200);
temp1 = 0x0C; // load a command for display on, cursor on and blinking off
lcd_com();
delay(800);
lcd_com();
delay(800);
lcd_com();
delay(800);
void lcd_com(void)
wr_cn();
wr_cn();
delay(500);
delay(10);
IO0CLR = 0x00000008;
delay(10);
IO0CLR = 0x00000008;
// data o/p routine which also outputs high nibble first and lower nibble next
void lcd_data(void)
wr_dn();
wr_dn();
delay(100);
void clr_disp(void)
temp1 = 0x01;
lcd_com();
delay(500);
for(r=0;r<r1;r++);
ADDITIONAL EXERIMENTS:
1. Read the status of eight input bits from the Logic Controller Interface and display
FF if it is even parity bits otherwise display 00. Also display number of 1’s in the
input data.
model small
.data
pa equ 0d800h ; Port address
pb equ 0d801h
pc equ 0d802h
ctrl equ 0d803h ; control Register address
.code
start: mov ax, @data
mov ds, ax ; Initialization of data segment
call delay
mov al, bl
mov dx, pa
out dx, al ; Out the number of 01s present in the I/P bits
int 3
pop bx
pop cx
ret
delay endp
end start
Conclusion:
The program reads port B of 82C55A which is an input port. If input
contains an odd number of 1’s (that is the number of LED’s at logic 1) then the output
will be 00 at port A, which is an output port, indicating input is odd parity and after
some delay the number of 1’s present in input will be displayed through port A on the
output.
Similarly If input contains an even number of 1’s (that is the number of LED’s at logic 1)
then the output will be FF at port A, which is an output port, indicating input is even
parity and after some delay the number of 1’s present in input will be displayed through
port A on the output.
2. Write two ALP modules stored in two different files; one module is to read a
character from the keyboard and the other one is to display a character. Use
the above two modules to read a string of characters from the keyboard
terminated by the carriage return and print the string on the display in the next
line.
.model small
.data
String db 30 dup (?)
.code
include c:\masm\read.mac
include c:\masm\write.mac
read.mac
read macro
mov ah, 01h ; Dos command to read a data from keyboard
int 21h
endm
write.mac
write macro x
mov dl, x
mov ah, 02h ; Dos command to write a data to the O/P screen
int 21h
endm
Conclusion:
This program reads the character entered through the Key board and stores in
the consecutive specified memory locations. This process repeats till the ENTER Key
(carriage return) is pressed. Once the ENTER key (carriage return) is pressed the
character stored in the consecutive memory locations will be displayed on the next line.
3. Scan a 8x3 keypad for key closure and to store the code of the key pressed in a
memory location and display on screen. Also display row and column numbers of
the key pressed.
.model small
.stack 100
.data
pa equ 0d800h
pb equ 0d801h
pc equ 0d802h
ctrl equ 0d803h
ASCIICODE db "0123456789.+-*/%ack=MRmn" ; look up table
str db 13,10,"press any key on the matrix keyboard$"
str1 db 13,10,"Press y to repeat and any key to exit $"
msg db 13, 10,"the code of the key pressed is :"
key db ?
msg1 db 13,10,"the row is "
row db ?
msg2 db 13,10,"the column is "
col db ?,13,10,’$’
.code
disp macro x ; Display a string
mov dx, offset x
mov ah, 09
int 21h
endm ; End of a macro
add al,31h
mov col,al
cmp si,00
je again
mov cl,03
rol bh,cl
mov cl,bh
mov al,ah
lea bx,ASCIICODE ; Address of the look up table
add bl,cl
xlat ; Translate a byte in AL
mov key,al
disp msg
disp str1
mov ah, 01 ; Read a string
int 21h
cmp al,'y'
je again1
int 3
scan proc
mov cx,03
mov bh,0
mov al,80h
mov al,bl
inc bh
loop nxtrow
ret
keyid: mov si,1
mov cx,8
mov ah,0
Conclusion:
This program reads the data from the 8*3 key interface board. It will display its
value on the screen. It will also display the row number and column number of the key
pressed.
.model small
.data
string db "Enter the file name for the file to be created",13,10,'$'
msg1 db 13,10,"The file cannot be created",13,10,'$'
msg2 db 13,10,"File created successfully",13,10,'$'
str1 db 40 dup(0)
string1 db "Enter the file name to be deleted",13,10,'$'
msg3 db 13,10,"The file cannot be deleted",13,10,'$'
msg4 db 13,10,"File deleted successfully",13,10,'$'
str2 db 40 dup(0)
.code
disp macro x ; Display macro
lea dx, x
mov ah, 09h
int 21h
endm
jc down
disp msg2
jmp down1
IO0DIR = (RELAY1);
while (1)
{
{
IO0SET = 0X00000010 ;
{
IO0CLR = 0X00000010 ;
}
}
}
for(j=0;j<count;j++)
{
for(i=0;i<120;i++);
}
}
Init_DAC();
while(1)
{
Write_DAC(00);
delay(100); // change this value to change Frequency
Write_DAC(1023); // change this value to change Amplitude
delay(100); // change this value to change Frequency
}
}
References:
4. Muhammad Ali Mazidi, Janice Gillispie, Mazidi, Danny Causey, The x86
PC Assembly Language Design and Interfacing, 5th Edition, Pearson,
2013.
ANNEXURES:
Instruction Set:
Ex:
Mov AX,BX ;Copy contents of BX to AX
Mov si,00h ;load Si with 00h
Unsigned multiply.
MUL REG Multiply the contents of REG/Memory with contents of AL register.
Memory Algorithm:
Unconditional Jump.
JMP Label Transfers control to another part of the program. 4-byte address may
be entered in this form: 1234h: 5678h, first value is a segment
second value is an offset.
JA Label Short Jump if first operand is Above second operand (as set by CMP
instruction). Unsigned.
JAE Label Short Jump if first operand is Above or Equal to second operand (as
set by CMP instruction). Unsigned.
Algorithm:
if CF = 0 then jump
Jump If Below.
JB Label Short Jump if first operand is Below second operand (as set by CMP
instruction). Unsigned.
Algorithm:
if CF = 1 then jump
JBE Label Short Jump if first operand is Below second operand (as set by CMP
instruction). Unsigned.
Algorithm:
if CF = 1 then jump
Jump If Carry
Algorithm:
if CF = 1 then jump
Jump If Equal.
JE Label Short Jump if first operand is Equal to second operand (as set by
CMP instruction). Signed/Unsigned.
Algorithm:
if ZF = 1 then jump
Jump If Greater
JG Label Short Jump if first operand is Greater then second operand (as set by
CMP instruction). Signed.
Algorithm:
JGE Label Short Jump if first operand is Greater or Equal to second operand (as
set by CMP instruction). Signed.
Algorithm:
if SF = OF then jump
Jump If Less than.
JL Label Short Jump if first operand is Less then second operand (as set by
CMP instruction). Signed.
Algorithm:
JLE Label Short Jump if first operand is Less or Equal to second operand (as
set by CMP instruction). Signed.
Algorithm:
JNZ Label Short Jump if Not Zero (not equal). Set by CMP, SUB, ADD, TEST,
AND, OR, XOR instructions.
Algorithm:
if ZF = 0 then jump
Jump If Zero.
JZ Label Short Jump if Zero (equal). Set by CMP, SUB, ADD, TEST, AND,
OR, XOR instructions.
Algorithm:
if ZF = 1 then jump
Load Effective Address.
Algorithm:
LOOP Label
• CX = CX - 1
• if CX <> 0 then
o jump
else
o no jump, continue
Add.
REG, memory
ADD memory, REG Algorithm:
REG, REG
memory, immediate operand1 = operand1 + operand2
REG, immediate
Subtract.
REG, memory
memory, REG Algorithm:
SUB REG, REG
memory, immediate operand1 = operand1 - operand2
REG, immediate
• AL = AL + 6
• AF = 1
• AL = AL + 60h
• CF = 1
• AL = AL - 6
• AF = 1
• AL = AL - 60h
• CF = 1
Increment.
REG Algorithm:
DIV Memory
when operand is a byte:
AL = AX / operand
AH = remainder (modulus)
when operand is a word:
AX = (DX AX) / operand
DX = remainder (modulus)
Shift Left.
memory, immediate
SHL REG, immediate Shift operand1 Left. The number of shifts is set by operand2.
memory, CL Algorithm:
REG, CL
• Shift all bits left, the bit that goes off is set to CF.
• Zero bit is inserted to the right-most position.
Shift Right.
memory, immediate
SHR REG, immediate Shift operand1 Right. The number of shifts is set by operand2.
memory, CL Algorithm:
REG, CL
• Shift all bits right, the bit that goes off is set to CF.
• Zero bit is inserted to the left-most position.
Rotate Left.
memory, immediate
REG, immediate Rotate operand1 left. The number of rotates is set by operand2.
ROL
memory, CL Algorithm:
REG, CL
Shift all bits left, the bit that goes off is set to CF and the
same bit is inserted to the right-most position.
Rotate Right.
memory, immediate
REG, immediate Rotate operand1 right. The number of rotates is set by operand2.
ROR
memory, CL Algorithm:
REG, CL
Shift all bits right, the bit that goes off is set to CF and the
same bit is inserted to the left-most position.
memory, immediate Rotate operand1 left through Carry Flag. The number of rotates is
REG, immediate set by operand2.
RCL memory, CL Algorithm:
REG, CL
Shift all bits left, the bit that goes off is set to CF and
previous value of CF is inserted to the right-most position.
Example:
STC ; set carry (CF=1).
MOV AL, 1Ch ; AL = 00011100b
RCL AL, 1 ; AL = 00111001b, CF=0.
RET
C O
r r
OF=0 if first operand keeps original sign.
REG Algorithm:
PUSH SREG
memory • SP = SP - 2
• SS:[SP] (top of the stack) = operand
Algorithm:
• AL = AL + 6
• AH = AH + 1
• AF = 1
• CF = 1
else
• AF = 0
• CF = 0
in both cases:
clear the high nibble of AL.
Example:
MOV AX, 15 ; AH = 00, AL = 0Fh
AAA ; AH = 01, AL = 05
Algorithm:
• AL = AL - 6
AAS No Operands • AH = AH - 1
• AF = 1
• CF = 1
else
• AF = 0
• CF = 0
in both cases:
clear the high nibble of AL.
Example:
MOV AX, 02FFh ; AH = 02, AL = 0FFh
AAS ; AH = 01, AL = 09
Algorithm:
• AH = AL / 10
AAM No Operands • AL = remainder
Example:
MOV AL, 15 ; AL = 0Fh
AAM ; AH = 01, AL = 05
INTERRUPTS:
Function 01h- Read character from standard input, result is stored in AL. If there
is no character in the keyboard buffer, the function waits until any key is pressed.
Example:
Mov AH, 01h
INT 21h
Example:
Mov AH, 02h
Mov DL, ’a’ ; Character to be displayed on screen must be stored in DL reg.
INT 21h
Function 06h – Direct console for input/output.If DL = 0FFH on entry, then this
function reads the console. If DL = ASCII character, then this function displays the
ASCII character on the console video screen.
mov ah, 6
mov dl, 255
int 21h ; get character from keyboard buffer (if any) or set ZF=1.
Function 09h - Write a string to standard output atDS: DX.
String must be terminated by '$'.The string can be of any length and may contain
control characters such as carriage return (0DH) and line feed (0AH).
Example:
Mov AH, 09h
Mov DX, offset str ; Address of the string to be displayed
INT 21h
Example:
Mov AH, 2ch
INT 21h
Returns:
CF clear if successful, AX = file handle.
CF set on error AX = error code.
Example:
Mov AH, 3ch
Mov CX, 01
Mov DX, offset Filename
INT 21h
Invoked by: DS: DX -> ASCIZ filename (no wildcards, but see notes).
AH=41h
Return:
CF clear if successful, AX destroyed.
CF set on error AX = error code.
Example:
Mov AH, 41h
Mov DX, offset Filename
INT 21h
Example:
Mov AH, 4Ch
INT 21h
Example:
MOV AH, 02h
MOV BH, 00
MOV DH, 06
MOV DL, 10
INT 10h
Example:
Mov BH, 0
Mov AH, 03h
INT 10h
The hardware uses four shift register ICs 74164. 74164 is an 8-bit 8 serial in-
parallel out shift register with asynchronous reset and two input pins. It requires 8 clock
cycles at “CLK” pin to shift the serial data from input to 8 p
parallel
arallel outputs. After 8 shifts,
the first serial bit will be in output QH, and only now the data at output is valid. To
cascade more 74164 shift register IC need to connect the last output QH to the input of
second shift register.
The output is connected to the cathode of the LEDs in the 7 segment display and thus
common anode displays are used. The anode is connected to +Vcc. The last output of
the first sift register is connected to input of the 2nd shift register and the last output o f
2nd shift register
gister to input of 3rd and so on. Thus the shift register are serial in parallel out
and they are connected to displays, in such a way that output 0A is connected to display
segment ‘a’ and 0B to ‘b’ and so on up to 0H; through 330 ohm resistors.
The shifting
ting of data bit takes place for each clock cycle. 7404 IC used provides isolation
and the interface board gets 5V through port bit.
Pin 1 is used as data pin and pin 2 is used as other input to Vcc. The clock signal is
generated at a port bit which will b
bee connected to the clock of the shift register.
PB0 is used for data bit; and PC0 for clock through which a falling edge has to be sent.
The microprocessor stores the display information in a RAM. Each time a display has to
be updated the microprocessor fetches all bytes one by one from RAM and outputs
corresponding display codes serially that is bit by bit to display. Hexadecimal code is
stores in the RAM. The code conversion from hexa to 7 segment is done just before the
display is updated.
The 7 segmentnt display is used as a numerical indicator on many types of test equipment.
It is an assembly of light emitting diodeswhich can be powered individually. There are
two important types of 7-segment
segment LED display.
In a common cathode display, the cathodes of all the LEDs are joined together and the
individual segments are illuminated by HIGH voltages.
In a common anode display, the anodes of all the LEDs are joined together and the
individual segments are illuminated by connecting to a LOW voltage.
Display code
Since the outputs of shift registers are connected to cathode sides of displays, low input
must be given to segments for making them glow and high inputs for making them
blank. Each display has 8 segments (a, b, c, d, e, f, g, h) as shown. For displaying
displayi any
character the corresponding segment must be given low inputs.
The
one shown above is a
common anode display since all anodes are joined together and go to the positive
supply. The cathodes are connected individually to zero volts. Resistors must be placed
in series with each diode to limit the current through each diode to a safe value. The d.p
represents a decimal point.
The following table shows how to form characters: '0' means that pin is connected to
ground. '1' means that pin is connected to Vcc.
F 1 0 0 0 1 1 1 0 8e
I 1 1 1 1 1 0 0 1 F9
R 1 0 0 0 1 0 0 0 88
E 1 0 0 0 0 1 1 0 86
2. Stepper Motor:
A stepper motor is a widely used device that translates electrical pulses into mechanical
movement. In applications such as disk drives, dot matrix printers, and robotics, the
stepper motor is used for Position control.
Every stepper motor has a permanent magnet rotor (also called the shaft.) surrounded
by a stator. The most common stepper motors have four common stator windings that
are pairs with a center-taped
taped common. This type of stepper motor is commonly referred
to as a four-phase
phase stepper motor.
A Stepper motor is stepped from one position to the next by changing the currents
through the fields in the motor. Common step sizes for stepper moto
motors
rs range from 0.9
degrees to 30 degrees.
82C55A is used to provide the drive signals that are used to rotate the armature of the
motor in either the right-hand
hand or left
left-hand direction.
The power circuit for one winding of the stepper motor is as shown in figure above. It is
connected to the port A (PA0) of 82C55A. Similar circuits are connected to the remaining
lower bits of port A (PA1, PA2, PA3). One winding is energized at a time. The coils are
turned ON/OFF one at a time successively.
3. DAC INTERFACE
The pin details of DAC 0800 is given below and schematic diagram of the dual DAC
interface is given below.
The port A and port B of 82C55A peripheral are used as output ports. The digital inputs
to the DACs are porvided through these ports. The analog outputs of the DACs are
connected to the inverting inputs of OP-amps 741 which acts as current to voltage
converters. The outputs from the OP-amps are connected to points marked X out and Y
out at which the waveforms are observed on a CRO. The power supplies of +12 and -12
are regulated for this interface.
Keil is on the tool which is widely used in Industry, KEIL has tools for ARM, Cortex-M,
Cortex-R, 8051, C166, and 251 processor families. In this article we are going to discuss
KEIL tools for ARM. The development tools of for ARM include following...
1. µvision IDE v4
2. Compiler for ARM (armcc)
3. MicroLib (C library)
4. Assembler for ARM (armasm)
5. Linker For ARM (armLink)
Step 8: Now you see Startup.s is already added which is necessary for running code for
Keil.
Step 10: Write Code for Blink LED in C OR ASM and FileName.c/ASM Save.
add LED.c file by adding Source Group 1 Add files to Group ‘Source Group 1’.
Step 15: Go to Options for Target ‘Target 1’. Click on Check Box Create HEX File.
Step 16: Then go to Linker. Click on Use Memory Layout for Target Dialog.
Step 17: Now you see 0 Error(s), 0 Warning (s). Then Hex File will create in Specific
Folder. Now to download it for you target hardware.
1. What is a Microprocessor?
ANS: The BIU in 8088 is 8-bit data bus & 16- bit in 8086.Instruction queue is 4 byte
long in 8088and 6 byte in 8086.
ANS: 8086 has two independent functional units because of that the processor speed is
more. The Bus interface unit and Exectuion unit are the two functional units.
ANS:In 8086 Carry flag, Parity flag, Auxiliary carry flag, Zero flag, Overflow flag, Trace
flag, Interrupt flag, Direction flag, and Sign flag.
ANS: Accumulator is the register in which Arithmetic and Logic calculations are done.
ANS: Because of pipelining concept. 8086 BIU fetches the next instruction when EU
busy in executing the anoter instruction.
ANS:Execution Unit receives program instruction codes and data from BIU, executes
these instructions and store the result in general registers.
10. Which Segment is used to store interrupt and subroutine return address
registers?
ANS: Stack Segment in segment register is used to store interrupt and subroutine return
address registers.
12. What is the size of data bus and address bus in 8086?
ANS: 8086 has 16-bit data bus and 20- bit address bus.
ANS:Flag is a flip-flop used to store the information about the status of a processor and
the status of the instruction executed most recently.
15. Which Flags can be set or reset by the programmer and also used to control the
operation of the processor?
ANS: 8086 can be opertaed in 2 modes. They are Minimum mode if MN/MX pin is
active high and Maximum mode if MN/MX pin is ground.
17. Whatis the difference between min mode and max mode of 8086?
ANS: Minimum mode operation is the least expensive way to operate the 8086
microprocessor because all the control signals for the memory and I/O are generated by
the micro processor. In Maximum mode some of the control signals must be externally
generatred. This requires the addition of an external bus controller. It used only when the
system contains external coprocessors such as 8087 arithmetic coprocessor.
ANS: 8288 bus controller is used to provide the signals eliminated from the 8086 by the
maximum mode operation.
ANS:Stack is a portion of RAM used for saving the content of Program Counter and
general purpose registers.
ANS:FIFO (First In First Out) stack is used in 8086.In this type of Stack the first stored
information is retrieved first.
21. What is the position of the Stack Pointer after the PUSH instruction?
22. What is the position of the Stack Pointer after the POP instruction?
ANS: Interrupt is a signal send by external device to the processor so as to request the
processor to perform a particular work.
ANS: An interrupt that can be turned off by the programmer is known as Maskable
interrupt.
ANS: An interrupt which can be never be turned off (ie.disabled) is known as Non-
Maskable interrupt.
ANS: RST 7.5, RST6.5, RST5.5 are Maskable interrupts. When RST5.5 interrupt is
received the processor saves the contents of the PC register into stack and branches to
2Ch (hexadecimal) address.
When RST6.5 interrupt is received the processor saves the contents of the PC register
into stack and branches to 34h (hexadecimal) address.
When RST7.5 interrupt is received the processor saves the contents of the PC register
into stack and branches to 3Ch (hexadecimal) address.
ANS:SIM is Set Interrupt Mask. Used to mask the hardware interrupts. RIM is Read
Interrupt Mask. Used to check whether the interrupt is Masked or not.
31.What is macro?
ANS: Macro is a set of instructions that perform a task and all the isntructions defined in
it is inserted in the program at the point of usage.
ANS: A procedure is accessed via a CALL instruction and a macro will inserted in the
program at the point of execution.
ANS: Compiler is used to translate the high-level language program into machine code
at a time. It doesn.t require special instruction to store in a memory, it stores
automatically. The Execution time is less compared to Interpreter.
ANS:It has limitations on the size of data. Most Microprocessor does not support
floating-point operations.
ANS: It provides a parallel interface, which includes features such as single-bit, 4-bit, and
byte-wide input and output ports; level-sensitive inputs; latched outputs; strobed inputs or
outputs; and strobed bidirectional input/outputs.
39. Describes the mode 0, mode 1, and mode 2 operations of the 82C55A?
ANS: MODE 0: Simple I/O mode. In this mode, any of the ports A, B, and C can be
programmed as input or output. In this mode, all the bits are out or in.
MODE 1: Ports A and B can be used as input or output ports with handshaking
capabilities. Handshaking signals are provided by the bits of port C.
MODE 2: Port A can be used as a bidirectional I/O port with handshaking capabilities
whose signals are provided by port C. Port B can be used either in simple I/O mode or
handshaking mode 1.
40. What is the mode and I/O configuration for ports A, B, and C of an 82C55A
after its control register is loaded with 82H?
ANS: If control register is loaded with 82H, then the port B is configured as an input
port, port A and port C are configured as output ports and in mode 0.