Statement 1: - Exchange The Content of FFH and Ff00H Solution
Statement 1: - Exchange The Content of FFH and Ff00H Solution
Statement 1: - Exchange The Content of FFH and Ff00H Solution
Statement 6: - find out how many equal bytes between
two memory blocks 10h to 20h and 20h to 30h.
Solution: - here we shall compare each byte one by one
from both blocks. Increase the count every time when
equal bytes are found
Mov r7, #0Ah ; initialize counter by 10d
Mov r0, #10h ; get initial location of
block1
Mov r1, #20h ; get initial location of
block2
Mov r6, #00h ; equal byte counter. Starts
from zero
Nxt: Mov a, @r0 ; get content of block 1 in
acc
Mov b, a ; move it to B
Mov a, @r1 ; get content of block 2 in
acc
Cjne a, b, nomatch ; compare both if equal
Inc r6 ; increment the counter
Nomatch: inc r0 ; otherwise go for second
number
Inc r1
djnz r7, nxt ; decrease r7. if zero then over
otherwise move next
Statement 7: - given block of 100h to 200h. Find out how
many bytes from this block are greater then the number
in r2 and less then number in r3. Store the count in r4.
Solution: - in this program, we shall take each byte one
by one from given block. Now here two limits are given
higher limit in r3 and lower limit in r2. So we check first
higher limit and then lower limit if the byte is in
between these limits then count will be incremented.
Mov dptr, #0100h ; get initial location
Mov r7, #0FFh ; counter
Mov r4, #00h ; number counter
Mov 20h, r2 ; get the upper and lower
limits in
Mov 21h, r3 ; 20h and 21h
Nxt: Movx a, @dptr ; get the content in acc
Cjne a, 21h, lower ; check the upper limit
first
Sjmp out ; if number is larger
Lower: jnc out ; jump out
Cjne a, 20h, limit ; check lower limit
Sjmp out ; if number is lower
Limit: jc out ; jump out
Inc r4 ; if number within limit
increment count
Out: inc dptr ; get next location
Djnz r7, nxt ; repeat until block
completes
Statement 8:- the crystal frequency is given as 12 MHz.
Make a subroutine that will generate delay of exact 1
ms. Use this delay to generate square wave of 50 Hz on
pin P2.0
Solution: - 50 Hz means 20 ms. And because of square
wave 10 ms ontime and 10 ms offtime. So for 10 ms we
shall send 1 to port pin and for another 10 ms send 0 in
continuous loop.
<_x0021_xml:namespace prefix="st1" ns="urn:schemas-
microsoft-com:office:smarttags"/>Loop: Setb p2.0
; send 1 to port pin
Mov r6, #0Ah ; load 10d in r6
Acall delay ; call 1 ms delay ×10 = 10
ms
Clr p2.0 ; send 0 to port pin
Mov r6, #0Ah ; load 10d in r6
Acall delay ; call 1 ms delay ×10 = 10
ms
Sjmp loop ; continuous loop
Delay: ; load count 250d
Lp2: Mov r7, #0FAh
Lp1: Nop ; 1 cycle
Nop ; 1+1=2 cycles
Djnz r7, lp1 ; 1+1+2 = 4 cycles
Djnz r6, lp2 ; 4×250 = 1000 cycles =
1000 µs = 1 ms
ret
Statement 9:-count number of interrupts arriving on
external interrupt pin INT1. Stop whencounter overflows
and disable the interrupt. Give the indication on pinP0.0
Solution: -as we know whenever interrupt occurs the PC jumps
to one particular location where it’s ISR is written. So we have
to just write one ISR that will do the job
Movr2, #00h ; initialize the counter
Movie, #84h ; enable external interrupt
1
Here: Sjmp here ; continuous loop
Org 0013h ; interrupt 1location
Incr2 ; increment the count
Cjner2, #00h, out ; check whether it
overflows
Movie, #00h ; if yes then disable
interrupt
Clr p0.0 ; and give indication
Out : reti ; otherwise keep counting
Statement 10: -continuously scan port P0. If data is
other then FFh write a subroutine that will multiply it
with 10d and send it to port P1
Solution: -here we have to use polling method. We shall
continuously pole port P0 if there is any data other then
FFh. If there is data we shall call subroutine
Agin: Mov p0, #0ffh ; initialize port P0 as input port
Loop: Mova, p0 ; get the data in acc
Cjne a, #0FFh, dat ; compare it with FFh
Sjmp loop ; if same keep looping
Dat: acall multi; if different call
subroutine
Sjmp agin ; again start polling
Multi
Mov b,#10d ; load 10d in register B
Mul ab ; multiply it with received
data
Mov p1, a ; send the result to P1
Ret ;return to main program