Microcontroller 8051 soft

40

description

basics of 8051

Transcript of Microcontroller 8051 soft

Page 1: Microcontroller 8051  soft
Page 2: Microcontroller 8051  soft

Numerical Bases Used in Programming

• Hexadecimal

• Binary

• BCD

Page 3: Microcontroller 8051  soft

Hexadecimal Basis

• Hexadecimal Digits:

1 2 3 4 5 6 7 8 9 A B C D E F

A=10 B=11 C=12 D=13 E=14 F=15

Page 4: Microcontroller 8051  soft

Decimal, Binary, BCD, & Hexadecimal Numbers

(43)10=

(0100 0011)BCD=

( 0010 1011 )2 =

( 2 B )16

Page 5: Microcontroller 8051  soft

Registers

A

B

R0

R1

R3

R4

R2

R5

R7

R6

DPH DPL

PC

DPTR

PC

Some 8051 16-bit Register

Some 8-bitt Registers of the 8051

SP

Page 6: Microcontroller 8051  soft

Memory mapping in 8051

• ROM memory map in 8051 family

0000H

0FFFH

0000H

1FFFH8751

AT89C51 8752AT89C52

4k 8k

Page 7: Microcontroller 8051  soft

• RAM memory space allocation in the 8051

7FH

30H

2FH

20H

1FH

17H

10H

0FH

07H

08H

18H

00HRegister Bank 0

(Stack )Register Bank 1

Register Bank 2

Register Bank 3

Bit-Addressable RAM

Scratch pad RAM

Page 8: Microcontroller 8051  soft

Addressing Modes

• Register• Direct • Register Indirect• Immediate• Relative• Absolute• Long• Indexed

Page 9: Microcontroller 8051  soft

Register Addressing Mode

MOV Rn, A ;n=0,..,7

ADD A, Rn

MOV DPL, R6

MOV DPTR, A

MOV Rm, Rn

Page 10: Microcontroller 8051  soft

Direct Addressing Mode

Although the entire of 128 bytes of RAM can be accessed using direct addressing mode, it is most often used to access RAM loc. 30 – 7FH.

MOV R0, 40HMOV 56H, AMOV A, 4 ; ≡ MOV A, R4MOV 6, 2 ; copy R2 to R6

; MOV R6,R2 is invalid !

Page 11: Microcontroller 8051  soft

Register Indirect Addressing Mode

• In this mode, register is used as a pointer to the data.

MOV A,@Ri ; move content of RAM loc. where address is held by Ri into A ( i=0 or 1 )

MOV @R1,B

In other word, the content of register R0 or R1 is sources or target in MOV, ADD and SUBB insructions.

Page 12: Microcontroller 8051  soft

Immediate Addressing Mode

MOV A,#65H

MOV R6,#65H

MOV DPTR,#2343H

MOV P1,#65H

Page 13: Microcontroller 8051  soft

Relative, Absolute, & Long Addressing

Used only with jump and call instructions:

SJMP

ACALL,AJMP

LCALL,LJMP

Page 14: Microcontroller 8051  soft

Indexed Addressing Mode

• This mode is widely used in accessing data elements of look-up table entries located in the program (code) space ROM at the 8051

MOVC A,@A+DPTR (A,@A+PC)

A= content of address A +DPTR from ROM Note:

Because the data elements are stored in the program (code ) space ROM of the 8051, it uses the instruction MOVC instead of MOV. The “C” means code.

Page 15: Microcontroller 8051  soft

Some Simple InstructionsMOV dest,source ; dest = source

MOV A,#72H ;A=72HMOV R4,#62H ;R4=62HMOV B,0F9H ;B=the content of F9’th byte of RAM

MOV DPTR,#7634HMOV DPL,#34HMOV DPH,#76H

MOV P1,A ;mov A to port 1

Note 1:MOV A,#72H ≠ MOV A,72HAfter instruction “MOV A,72H ” the content of 72’th byte of RAM will replace in Accumulator.

Note 2:MOV A,R3 ≡ MOV A,3

Page 16: Microcontroller 8051  soft

ADD A, Source ;A=A+SOURCE

ADD A,#6 ;A=A+6

ADD A,R6 ;A=A+R6

ADD A,6 ;A=A+[6] or A=A+R6

ADD A,0F3H ;A=A+[0F3H]

SUBB A, Source ;A=A-SOURCE-C

SUBB A,#6 ;A=A-6

SUBB A,R6 ;A=A+R6

Page 17: Microcontroller 8051  soft

MUL & DIV

• MUL AB ;B|A = A*BMOV A,#25HMOV B,#65HMUL AB ;25H*65H=0E99

;B=0EH, A=99H

• DIV AB ;A = A/B, B = A mod BMOV A,#25MOV B,#10DIV AB ;A=2, B=5

Page 18: Microcontroller 8051  soft

SETB bit ; bit=1CLR bit ; bit=0

SETB C ; CY=1SETB P0.0 ;bit 0 from port 0 =1SETB P3.7 ;bit 7 from port 3 =1SETB ACC.2 ;bit 2 from ACCUMULATOR =1SETB 05 ;set high D5 of RAM loc. 20h

Note:

CLR instruction is as same as SETBi.e.:

CLR C ;CY=0

But following instruction is only for CLR:CLR A ;A=0

Page 19: Microcontroller 8051  soft

DEC byte ;byte=byte-1

INC byte ;byte=byte+1

INC R7

DEC A

DEC 40H ; [40]=[40]-1

Page 20: Microcontroller 8051  soft

RR – RL – RRC – RLC A

EXAMPLE:RR A

RR:

RRC:

RL:

RLC:

C

C

Page 21: Microcontroller 8051  soft

ANL - ORL – XRLBitwise Logical Operations: AND, OR, XOREXAMPLE:

MOV R5,#89HANL R5,#08H

CPL A ;1’s complementExample:

MOV A,#55H ;A=01010101 BL01: CPL A

MOV P1,AACALL DELAYSJMP L01

Page 22: Microcontroller 8051  soft

Stack in the 8051• The register used to

access the stack is called SP (stack pointer) register.

• The stack pointer in the 8051 is only 8 bits wide, which means that it can take value 00 to FFH. When 8051 powered up, the SP register contains value 07.

7FH

30H

2FH

20H

1FH

17H10H

0FH

07H

08H

18H

00HRegister Bank 0

(Stack )Register Bank 1

Register Bank 2

Register Bank 3

Bit-Addressable RAM

Scratch pad RAM

Page 23: Microcontroller 8051  soft

Example:MOV R6,#25HMOV R1,#12HMOV R4,#0F3HPUSH 6PUSH 1PUSH 4

0BH

0AH

09H

08H

Start SP=07H

25

0BH

0AH

09H

08H

SP=08H

F3

12

25

0BH

0AH

09H

08H

SP=08H

12

25

0BH

0AH

09H

08H

SP=09H

Page 24: Microcontroller 8051  soft

LOOP and JUMP Instructions

JZ Jump if A=0

JNZ Jump if A/=0

DJNZ Decrement and jump if A/=0

CJNE A,byte Jump if A/=byte

CJNE reg,#data Jump if byte/=#data

JC Jump if CY=1

JNC Jump if CY=0

JB Jump if bit=1

JNB Jump if bit=0

JBC Jump if bit=1 and clear bit

Conditional Jumps :

Page 25: Microcontroller 8051  soft

DJNZ:

Write a program to clear ACC, then

add 3 to the accumulator ten time

Solution:

MOV A,#0

MOV R2,#10

AGAIN: ADD A,#03

DJNZ R2,AGAIN ;repeat until R2=0 (10 times)

MOV R5,A

Page 26: Microcontroller 8051  soft

LJMP(long jump)LJMP is an unconditional jump. It is a 3-byte instruction. It allows a jump to any memory location from 0000 to FFFFH.

AJMP(absolute jump)In this 2-byte instruction, It allows a jump to any memory location within the 2k block of program memory.

SJMP(short jump)

In this 2-byte instruction. 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.

Page 27: Microcontroller 8051  soft

CALL InstructionsAnother control transfer instruction is the CALL instruction, which is used to call a subroutine.

• LCALL(long call)

This 3-byte instruction can be used to call subroutines located anywhere within the 64K byte address space of the 8051.

• ACALL (absolute call)ACALL is 2-byte instruction. the target address of the subroutine must be within 2K byte range.

Page 28: Microcontroller 8051  soft

Example:Write a program to copy a block of 10 bytes from RAM location starting at 37h to RAM location starting at 59h.

Solution:MOV R0,#37h ; source pointerMOV R1,#59h ; dest pointer MOV R2,#10 ; counter

L1: MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,L1

Page 29: Microcontroller 8051  soft

. 100's 10's 1's

. 1 5 6

+ 2 4 8

= 4 0 4

Decimal Addition156 + 248

16 Bit Addition

1A44 + 22DB

. 256's 16’s 1's

. 1 A 4 4

+ 2 2 D B

= 3 D 1 F

= 3D1F

Page 30: Microcontroller 8051  soft

Performing the Addition with 8051

. 65536's 256's 1's

. R6 R7

+ R4 R5

= R1 R2 R3

1.Add the low bytes R7 and R5, leave the answer in R3.

2.Add the high bytes R6 and R4, adding any carry from step 1, and leave the answer in R2. 3.Put any carry from step 2 in the final byte, R1.

Page 31: Microcontroller 8051  soft

Steps 1, 2, 3

MOV A,R7 ;Move the low-byte into the accumulator ADD A,R5 ;Add the second low-byte to the accumulator

MOV R3,A ;Move the answer to the low-byte of the result

MOV A,R6 ;Move the high-byte into the accumulator

ADDC A,R4 ;Add the second high-byte to the accumulator, plus carry.

MOV R2,A ;Move the answer to the high-byte of the result

MOV A,#00h ;By default, the highest byte will be zero.

ADDC A,#00h ;Add zero, plus carry from step 2.

MOV R1,A ;Move the answer to the highest byte of the result

Page 32: Microcontroller 8051  soft

The Whole Program;Load the first value into R6 and R7 MOV R6,#1Ah MOV R7,#44h ;Load the first value into R4 and R5 MOV R4,#22h MOV R5,#0DBh ;Call the 16-bit addition routine LCALL ADD16_16

ADD16_16:

;Step 1 of the process MOV A,R7 ;Move the low-byte into the accumulator ADD A,R5 ;Add the second low-byte to the accumulator MOV R3,A ;Move the answer to the low-byte of the result

;Step 2 of the process MOV A,R6 ;Move the high-byte into the accumulator ADDC A,R4 ;Add the second high-byte to the accumulator, plus carry. MOV R2,A ;Move the answer to the high-byte of the result

;Step 3 of the process MOV A,#00h ;By default, the highest byte will be zero. ADDC A,#00h ;Add zero, plus carry from step 2. MOV MOV R1,A ;Move the answer to the highest byte of the result

;Return - answer now resides in R1, R2, and R3. RET

Page 33: Microcontroller 8051  soft

Timer & Port Operations• Example:Write a program using Timer0 to create a 10khz square

wave on P1.0

MOV TMOD,#02H ;8-bit auto-reload modeMOV TH0,#-50 ;-50 reload value in TH0SETB TR0 ;start timer0

LOOP: JNB TF0, LOOP ;wait for overflowCLR TF0 ;clear timer0 overflow flagCPL P1.0 ;toggle port bitSJMP LOOP ;repeatEND

Page 34: Microcontroller 8051  soft

Interrupts

1. Enabling and Disabling Interrupts

2. Interrupt Priority

3. Writing the ISR (Interrupt Service Routine)

Page 35: Microcontroller 8051  soft

Interrupt Enable (IE) Register :

• EA : Global enable/disable.• --- : Undefined.• ET2 :Enable Timer 2 interrupt.• ES :Enable Serial port interrupt.• ET1 :Enable Timer 1 interrupt.• EX1 :Enable External 1 interrupt.• ET0 : Enable Timer 0 interrupt. • EX0 : Enable External 0 interrupt.

Page 36: Microcontroller 8051  soft

Interrupt Vectors

Interrupt Vector AddressSystem Reset 0000H

External 0 0003H

Timer 0 000BH

External 1 0013H

Timer 1 001BH

Serial Port 0023H

Timer 2 002BH

Page 37: Microcontroller 8051  soft

Writing the ISRExample:

Writing the ISR for Timer0 interrupt

ORG 0000H ;reset

LJMP MAIN

ORG 000BH ;Timer0 entry point

T0ISR: . ;Timer0 ISR begins

.

RETI ;return to main program

MAIN: . ;main program

.

.

END

Page 38: Microcontroller 8051  soft

Structure of Assembly language and Running an 8051

programEDITOR

PROGRAM

ASSEMBLERPROGRAM

LINKERPROGRAM

OHPROGRAM

Myfile.asm

Myfile.obj

Other obj fileMyfile.lst

Myfile.hex

Page 39: Microcontroller 8051  soft

Examples of Our Program Instructions

• MOV C,P1.4

JC LINE1

• SETB P1.0

CLR P1.2

Page 40: Microcontroller 8051  soft

8051 Instruction SetACALL: Absolute Call

ADD, ADDC: Add Acc. (With Carry)

AJMP: Absolute Jump

ANL: Bitwise AND

CJNE: Compare & Jump if Not Equal

CLR: Clear Register

CPL: Complement Register

DA: Decimal Adjust

DEC: Decrement Register

DIV: Divide Accumulator by B

DJNZ: Dec. Reg. & Jump if Not Zero

INC: Increment Register

JB: Jump if Bit Set

JBC: Jump if Bit Set and Clear Bit

JC: Jump if Carry Set

JMP: Jump to Address

JNB: Jump if Bit Not Set

JNC: Jump if Carry Not Set

JNZ: Jump if Acc. Not Zero

JZ: Jump if Accumulator Zero

LCALL: Long Call

LJMP: Long Jump

MOV: Move Memory

MOVC: Move Code Memory

MOVX: Move Extended Memory

MUL: Multiply Accumulator by B

NOP: No Operation

ORL: Bitwise OR

POP: Pop Value From Stack

PUSH: Push Value Onto Stack

RET: Return From Subroutine

RETI: Return From Interrupt

RL: Rotate Accumulator Left

RLC: Rotate Acc. Left Through Carry

RR: Rotate Accumulator Right

RRC: Rotate Acc. Right Through Carry

SETB: Set Bit

SJMP: Short Jump

SUBB: Sub. From Acc. With Borrow

SWAP: Swap Accumulator Nibbles

XCH: Exchange Bytes

XCHD: Exchange Digits

XRL: Bitwise Exclusive OR

Undefined: Undefined Instruction