Chap 3
Chap 3
OBJECTIVES
Code 8051 Assembly language instructions using loops Code 8051 Assembly language conditional jump instructions Explain conditions that determine each conditional jump instruction Code long jump instructions for unconditional jumps Code short jump instructions for unconditional short jumps Calculate target addresses for jump instructions Code 8051 subroutines Describe precautions in using the stack in subroutines
Repeating a sequence of instructions a certain number of times is called a loop. The loop action is performed by the instruction
In this instruction, the register is decremented; if it is not zero, it jumps to the target address referred to by the label. Prior to the start of the loop the register is loaded with the counter for the number of repetitions. In this instruction both the register decrement and the decision to jump arc combined into a single instruction. The registers can be any of R0 - R7. The counter can also be a RAM location
JZ (jump if A = 0)
In this instruction the content of register A is checked. If it is zero, it jumps to the target address. JZ instruction can be used only for register A. It can only check to see whether the accumulator is zero, and it does not apply to any other register. Don't have to perform an arithmetic instruction such as decrement to use the JZ instruction.
JNZ (jump if A 0)
In this instruction the content of register A is checked. If it is not zero, it jumps to the target address.
10
carry flag bit in the flag (PSW) register is used to make the decision whether to jump "JNC label", the processor looks at the carry flag to see if it is raised (CY = 1). if it is not, the CPU starts to fetch and execute instructions from the address of the label. if CY = 1, it will not jump but will execute the next instruction below JNC.
11
12
13
There are two unconditional jumps: LJMP (long jump) and SJMP (short jump).
LJMP is 3-byte instruction in which the first byte is the op-code, and the second and third bytes represent the 16-bit address of the target location. The 2-byte target address allows a jump to any memory location from 0000 to FFFFH.
14
2-byte instruction, the first byte is the op-code and the second byte is the relative address of the target location. The relative address range of 00 FFH is divided into forward and backward jumps; that is, within -128 to +127 bytes of memory relative to the address of the current PC (program counter). If the jump is forward, the target address can be within a space of 127 bytes from the current PC. If the target address is backward, the target address can be within -128 bytes from the current PC.
15
AGAIN: NEXT:
#77h
OVER: HERE:
16
17
CALL is used to call a subroutine. Subroutines are often used to perform tasks that need to be performed frequently. This makes a program more structured in addition to saving memory space. There are two instructions : LCALL (long call) and ACALL (absolute call). Deciding which one to use depends on the target address.
18
3-byte instruction, the first byte is the op-code and the second and third bytes are used for the address of the target subroutine. LCALL can be used to call subroutines located anywhere within the 64K-byte address space of the 8051. To make sure that after execution of the called subroutine the 8051 knows where to come back to, the processor automatically saves on the stack the address of the instruction immediately below the LCALL. When a subroutine is called, control is transferred to that subroutine, and the processor saves the PC (program counter) on the stack and begins to fetch instructions from the new location. After finishing execution of the subroutine, the instruction RET (return) transfers control back to the caller. Every subroutine needs RET as the last instruction.
19
20
21
The MCU takes a certain number of clock cycles to execute an instruction. These clock cycles are referred to as machine cycles. In the 8051 family, the length of the machine cycle depends on the frequency of the crystal oscillator. The frequency of the crystal connected to the 8051 family can vary from 4 MHz to 30 MHz. In the original 8051, one machine cycle lasts 12 oscillator periods. Therefore, to calculate the machine cycle for the 8051, we take 1/12 of the crystal frequency, then take its inverse.
22
Table 32
23
24
Table 33
25
Next
Answer as many questions as you can and submit via MeL before the end of the lecture.
Do as much of the Proteus exercise as you can and submit via MeL before the end of the lecture.
26