Page 1 ENE 334 Microprocessors Lecture 9: MCS-51: Moving Data : Dejwoot KHAWPARISUTH http://webstaff.kmutt.ac.th/~dejwoot.kha/
ENE 334 MCS-51 Moving Data Page 2 Moving Data: Objectives Use commands that place data in registers, internal memory, and external memory. List the data addressing modes. Describe how data may be pushed and popped using a stack. Use commands that get data from ROM addresses. Use commands that exchange data. Write simple data movement programs.
ENE 334 MCS-51 Moving Data Page 3 Moving Data: Memory The MOV opcodes involve data transfers within the 8051 memory. This memory is divided into the following four distinct physical parts: 1. Internal RAM 2. Internal special-function registers 3. External RAM 4. Internal and external ROM
ENE 334 MCS-51 Moving Data Page 4 Moving Data: Opcodes Finally, the following five types of opcodes are used to move data: 1. MOV 2. MOVX 3. MOVC 4. PUSH and POP 5. XCH
ENE 334 MCS-51 Moving Data Page 5 Moving Data: Addressing Mode The way the data sources or destination addresses are specified in the mnemonic that moves that data determines the addressing mode. Figure diagrams the four addressing modes: immediate, register, direct, and indirect.
Moving Data: Addressing Mode Page 6 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 7 Moving Data: Imme. & Reg. The following table shows all possible MOV opcodes using immediate and register addressing modes: and examples of MOV opcodes with immediate and register addressing modes:
Moving Data: Imme. & Reg. Page 8 ENE 334 MCS-51 Moving Data
Moving Data: Imme. & Reg. Page 9 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 10 Moving Data: Direct All 128 bytes of internal RAM and the SFRs may be addressed directly using the single-byte address assigned to each RAM location and each specialfunction register. Internal RAM uses addresses from 00h to 7Fh to address each byte. The SFR addresses exist from 80h to FFh at the following locations:
Moving Data: SFR addresses Page 11 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 12 Moving Data: The moves made possible using direct, immediate, and register addressing modes are as follows:
Moving Data: Page 13 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 14 Moving Data: The moves made possible using immediate, direct, register, and indirect addressing modes are as follows:
Moving Data: Page 15 ENE 334 MCS-51 Moving Data
Moving Data: External It is possible to expand RAM and ROM memory space by adding external memory chips to the 8051 microcontroller. The external memory can be as large as 64K for each of the RAM and ROM memory areas. Opcodes that access this external memory always use indirect addressing to specify the external memory. Figure shows that registers R0, R1, and the aptly named DPTR can be used to hold the address of the data byte in external RAM. R0 and R1 are limited to external RAM address ranges of 00h to 0FFh, while the DPTR register can address the maximum RAM space of 0000h to 0FFFFh. ENE 334 MCS-51 Moving Data Page 16
Moving Data: External Page 17 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 18 Moving Data: External An X is added to the MOV mnemonics to serve as a reminder that the data move is external to the 8051, as shown in the following table:
Moving Data: External Page 19 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 20 Moving Data: Code memory The following table shows examples of code ROM moves using register and indirect addressing modes:
Moving Data: Code memory Page 21 ENE 334 MCS-51 Moving Data
Moving Data: Push & Pop Page 22 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 23 Moving Data: Push & Pop The SP register is set to 07h when the 8051 is reset, which is the same direct address in internal RAM as register R7 in bank 0. The first PUSH opcode would write data to R0 of bank 1. The SP should be initialized by the programmer to point to an internal RAM address above the highest address likely to be used by the program.
ENE 334 MCS-51 Moving Data Page 24 Moving Data: Push & Pop The PUSH and POP opcodes behave as explained in the following table:
Moving Data: Push & Pop Ex: Page 25 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 26 Moving Data: Data Exchange MOV, PUSH, and POP instructions all involve copying the data found in the source address to the destination address; the original data in the source is not changed. Exchange instructions actually move data in two directions: from source to destination and from destination to source. All addressing modes except immediate may be used in the XCH (exchange) instructions:
Moving Data: Data Exchange Page 27 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 28 Moving Data: Data Exchange Exchanges between A and any port location copy the data on the port pins to A, whereas the data in A is copied to the port latch. Register A is used for so many instructions that the XCH opcode provides a very convenient way to save the contents of A without the necessity of using a PUSH opcode and then a POP opcode.
Moving Data: Data Exchange Page 29 ENE 334 MCS-51 Moving Data
Atmel: Instruction Set Page 30 ENE 334 MCS-51 Moving Data
Atmel: Instruction Set Page 31 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 32 Moving Data: Example 5.1 Copy the byte in TCON to register R2 using at least four different methods. Method 1: Use the direct address for TCON (88h) and register R2.
ENE 334 MCS-51 Moving Data Page 33 Moving Data: Example 5.1 Copy the byte in TCON to register R2 using at least four different methods. Method 2: Use the direct addresses for TCON and R2.
ENE 334 MCS-51 Moving Data Page 34 Moving Data: Example 5.1 Copy the byte in TCON to register R2 using at least four different methods. Method 3: Use R1 as a pointer to R2 and use the address of TCON.
ENE 334 MCS-51 Moving Data Page 35 Moving Data: Example 5.1 Copy the byte in TCON to register R2 using at least four different methods. Method 4: Push the contents of TCON into direct address 02h (R2).
ENE 334 MCS-51 Moving Data Page 36 Moving Data: Example 5.2 Set timer T0 to an initial setting of 1234h. Use the direct address with an immediate number to set TH0 and TL0.
ENE 334 MCS-51 Moving Data Page 37 Moving Data: Example 5.3 Put the number 34h in registers R5, R6, and R7 Method 1: Use an immediate number and register addressing.
ENE 334 MCS-51 Moving Data Page 38 Moving Data: Example 5.3 Put the number 34h in registers R5, R6, and R7 Method 2: Since the number is the same for each register, put the number in A and MOV A to each register.
ENE 334 MCS-51 Moving Data Page 39 Moving Data: Example 5.3 Put the number 34h in registers R5, R6, and R7 Method 3: Copy one direct address to another.
ENE 334 MCS-51 Moving Data Page 40 Moving Data: Example 5.4 Put the number 8Dh in RAM locations 30h to 34h Method 1: Use the immediate number to a direct address.
ENE 334 MCS-51 Moving Data Page 41 Moving Data: Example 5.4 Put the number 8Dh in RAM locations 30h to 34h Method 2: Using the immediate number in each instruction uses bytes; use a register to hold the number.
ENE 334 MCS-51 Moving Data Page 42 Moving Data: Example 5.4 Put the number 8Dh in RAM locations 30h to 34h Method 3: There must be a way to avoid naming each address; the PUSH opcode can increment to each address.
Moving Data: Example 5.4 Page 43 ENE 334 MCS-51 Moving Data
ENE 334 MCS-51 Moving Data Page 44 Moving Data: Summary There are four addressing modes: an immediate number, a register name, a direct internal RAM address, and an indirect address contained in a register. The opcode that move data between locations within the 8051 and between the 8051 and external memory have been discussed. The general form and results of these instructions are as follows:
Moving Data: Summary Page 45 ENE 334 MCS-51 Moving Data
Hw: Page 46 ENE 334 MCS-51 Moving Data