Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 3 Programming the 8051 Microcontroller Dr. Konstantinos Tatas.

Similar presentations


Presentation on theme: "Lecture 3 Programming the 8051 Microcontroller Dr. Konstantinos Tatas."— Presentation transcript:

1 Lecture 3 Programming the 8051 Microcontroller Dr. Konstantinos Tatas

2 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 2 Registers A B R0 R1 R3 R4 R2 R5 R7 R6 DPHDPL PC DPTR PC Some bit Register Some 8-bit Registers of the 8051 A: Accumulator B: Used specially in MUL/DIV R0-R7: GPRs

3 8051 Programming using Assembly

4 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 4 The MOV Instruction – Addressing Modes MOV dest,source ; dest = source MOVA,#72H;A=72H MOV A, #’r’;A=‘r’ OR 72H MOVR4,#62H;R4=62H MOVB,0F9H;B=the content of F9’th byte of RAM MOVDPTR,#7634H MOVDPL,#34H MOVDPH,#76H MOVP1,A;mov A to port 1 Note 1: MOVA,#72H≠MOVA,72H After instruction “MOVA,72H ” the content of 72’th byte of RAM will replace in Accumulator MOVAL,72HMOVA,#72H MOVAL,’r’MOVA,#’r’ MOVBX,72H MOVAL,[BX]MOVA,72H Note 2: MOVA,R3≡MOVA,3

5 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 5 Arithmetic Instructions ADDA, Source;A=A+SOURCE ADDA,#6;A=A+6 ADDA,R6;A=A+R6 ADD A,6;A=A+[6] or A=A+R6 ADDA,0F3H;A=A+[0F3H]

6 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 6 Set and Clear Instructions SETBbit; bit=1 CLRbit; bit=0 SETBC; CY=1 SETBP0.0;bit 0 from port 0 =1 SETBP3.7;bit 7 from port 3 =1 SETBACC.2;bit 2 from ACCUMULATOR =1 SETB05;set high D5 of RAM loc. 20h Note: CLR instruction is as same as SETB i.e: CLRC;CY=0 But following instruction is only for CLR: CLRA;A=0

7 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 7 SUBBA,source;A=A-source-CY SETBC;CY=1 SUBBA,R5;A=A-R5-1 ADCA,source;A=A+source+CY SETBC;CY=1 ADCA,R5;A=A+R5+1

8 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 8 DECbyte;byte=byte-1 INCbyte;byte=byte+1 INCR7 DECA DEC40H; [40]=[40]-1 CPLA;1’s complement Example: MOVA,#55H;A= B L01:CPLA MOVP1,A ACALLDELAY SJMPL01 NOP & RET & RETI All are like 8086 instructions.   CALL

9 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 9 Logic Instructions ANL byte/bit ORL byte/bit XRL byte EXAMPLE: MOVR5,#89H ANLR5,#08H

10 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 10 Rotate Instructions RR A Accumulator rotate right RL A Accumulator Rotate left RRC A Accumulator Rotate right through the carry. RLC A Accumulator Rotate left through the carry.

11 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 11 Structure of Assembly language and Running an 8051 program ORG0H MOVR5,#25H MOVR7,#34H MOVA,#0 ADDA,R5 ADDA,#12H HERE: SJMPHERE END EDITOR PROGRAM ASSEMBLER PROGRAM LINKER PROGRAM OH PROGRAM Myfile.asm Myfile.obj Other obj file Myfile.lst Myfile.abs Myfile.hex

12 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 12 Memory mapping in 8051 ROM memory map in 8051 family 0000H 0FFFH 0000H 1FFFH 0000H 7FFFH 8751 AT89C AT89C52 4k DS k32k from Atmel Corporation from Dallas Semiconductor

13 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 13 RAM memory space allocation in the FH 30H 2FH 20H 1FH 17H 10H 0FH 07H 08H 18H 00H Register Bank 0 (Stack) Register Bank 1 Register Bank 2 Register Bank 3 Bit-Addressable RAM Scratch pad RAM

14 ACOE343 - Embedded Real-Time Processor Systems - Frederick University Flag bits and the PSW register PSW Register CYACF0RS1OVRS0P-- CYPSW.7Carry flag ACPSW.6Auxiliary carry flag --PSW.5Available to the user for general purpose RS1PSW.4Register Bank selector bit 1 RS0PSW.3Register Bank selector bit 0 OVPSW.2Overflow flag --PSW.1User define bit PPSW.0Parity flag Set/Reset odd/even parity RS1RS0Register BankAddress H-07H H-0FH H-17H H-1FH

15 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 15 Instructions that Affect Flag Bits: Note: X can be 0 or 1

16 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 16 Example: MOVA,#38H ADDA,#2FH F CY=0 AC=1P=1 Example: MOVA,#88H ADDA,#93H B CY=1 AC=0P=0 Example: MOVA,#9CH ADDA,#64H 9C CY=1 AC=1P=0

17 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 17 Addressing Modes Immediate Register Direct Register Indirect Indexed

18 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 18 Immediate Addressing Mode MOVA,#65H MOVA,#’A’ MOVR6,#65H MOVDPTR,#2343H MOVP1,#65H Example : NumEQU30 … MOVR0,Num MOVDPTR,#data1 … ORG100H data1:db“Example”

19 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 19 Example Write the decimal value 4 on the SSD in the following figure. Switch the decimal point off.

20 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 20 Register Addressing Mode MOVRn, A;n=0,..,7 ADDA, Rn MOVDPL, R6 MOVDPTR, A MOVRm, Rn

21 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 21 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. MOVR0, 40H MOV56H, A MOVA, 4; ≡ MOV A, R4 MOV6, 2; copy R2 to R6 ; MOV R6,R2 is invalid ! SFR register and their address MOV0E0H, #66H; ≡ MOV A,#66H MOV0F0H, R2; ≡ MOV B, R2 MOV80H,A; ≡ MOV P1,A

22 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 22 Register Indirect Addressing Mode In this mode, register is used as a pointer to the data. move content of RAM loc.Where address is held by Ri into A ( i=0 or 1 ) In other word, the content of register R0 or R1 is sources or target in MOV, ADD and SUBB insructions. Example: Write a program to copy a block of 10 bytes from RAM location sterting at 37h to RAM location starting at 59h. Solution: MOV R0,37h; source pointer MOV R1,59h; dest pointer MOV R2,10; counter L1: MOV INC R0 INC R1 DJNZ R2,L1  jump jump

23 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 23 Indexed Addressing Mode And On-Chip ROM Access This mode is widely used in accessing data elements of look-up table entries located in the program (code) space ROM at the 8051 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.

24 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 24 Example: Assuming that ROM space starting at 250h contains “Hello.”, write a program to transfer the bytes into RAM locations starting at 40h. Solution: ORG0 MOVDPTR,#MYDATA MOVR0,#40H L1:CLRA JZL2 INCDPTR INCR0 SJMPL1 L2:SJMPL2 ; ORG250H MYDATA:DB“Hello”,0 END Notice the NULL character,0, as end of string and how we use the JZ instruction to detect that.

25 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 25 Example: Write a program to get the x value from P1 and send x 2 to P2, continuously. Solution: ORG0;code segment MOVDPTR, #TAB1;moving data segment to data pointer MOVA,#0FFH;configuring P1 as input port MOVP1,A L01: MOVA,P1;reading value from P1 MOVP2,A SJMPL01 ; ORG300H;data segment TAB1:DB0,1,4,9,16,25,36,49,64,81 END

26 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 26 External Memory Addressing MOVX ; A [R1] (in external memory) MOVX A

27 ACOE343 - Embedded Real-Time Processor Systems - Frederick University bit, BCD and Signed Arithmetic in 8051 Exercise:  Write a program to add n 16-bit number. Get n from port 1. And sent Sum to SSD a) in hex b) in decimal  Write a program to subtract P1 from P0 and send result to LCD  (Assume that “ACAL DISP” display A to SSD )

28 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 28 MUL & DIV MULAB;B|A = A*B MOVA,#25H MOVB,#65H MULAB;25H*65H=0E99 ;B=0EH, A=99H DIVAB;A = A/B, B = A mod B MOVA,#25 MOVB,#10 DIVAB;A=2, B=5

29 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 29 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 17H 10H 0FH 07H 08H 18H 00H Register Bank 0 (Stack) Register Bank 1 Register Bank 2 Register Bank 3 Bit-Addressable RAM Scratch pad RAM

30 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 30 Example: MOVR6,#25H MOVR1,#12H MOVR4,#0F3H PUSH6 PUSH1 PUSH4 0BH 0AH 09H 08H Start SP=07H 25 0BH 0AH 09H 08H SP=08H F BH 0AH 09H 08H SP=10H BH 0AH 09H 08H SP=09H

31 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 31 Example (cont.) POP 4 POP1 POP6 0BH 0AH 09H 08H Start SP=07H 25 0BH 0AH 09H 08H SP=08H F BH 0AH 09H 08H SP=10H BH 0AH 09H 08H SP=09H

32 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 32 How to use the stack You can use the stack as temporary storage for variables when calling functions RLC A ;you can only rotate A Call function DIV AB ; A has the wrong value!!!!! … function: MOV A, #5 ;values are for example sake MOV B, #10 MUL AB ;you can only multiply on A RET

33 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 33 Example (correct) RLC A ;you can only rotate A PUSH A ;saving A and B on the stack before PUSH B ;calling function Call function POP B;restoring B POP A;and A (POP in reverse order) DIV AB ; A has the correct value!!!!! … function: MOV A, #5 ;values are for example sake MOV B, #10 MUL AB ;you can only multiply on A RET

34 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 34 Saving PSW The Program Status Word registers contains flags that are often important for correct program flow You can push PSW on the stack before calling a function ADD A, R0 PUSH PSW PUSH A ;saving A and R0 on the stack before PUSH R0 ;calling function Call function POP R0;restoring R0 POP A;and A (POP in reverse order) POP PSW JC loop;If this means the carry from the ;function then don’t push PSW … function: MOV A, #5 ;values are for example sake ADD A, R2 ;the flags are set according to ADD result RET

35 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 35 LOOP and JUMP Instructions  DJNZ: Write a program to clear ACC, then add 3 to the accumulator ten times Solution: MOVA,#0; MOVR2,#10 AGAIN:ADDA,#03 DJNZR2,AGAING ;repeat until R2=0 (10 times) MOVR5,A

36 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 36 Other conditional jumps : JZJump if A=0 JNZJump if A/=0 DJNZDecrement and jump if A/=0 CJNE A,byteJump if A/=byte CJNE reg,#dataJump if byte/=#data JCJump if CY=1 JNCJump if CY=0 JBJump if bit=1 JNBJump if bit=0 JBCJump if bit=1 and clear bit

37 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 37 SJMP and LJMP: LJMP(long jump) LJMP is an unconditional jump. It is a 3-byte instruction in which the first byte is the opcode, and the second and third bytes represent the 16-bit address of the target location. The 20byte target address allows a jump to any memory location from 0000 to FFFFH. SJMP(short jump) In this 2-byte instruction. The first byte is the opcode 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.

38 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 38 CJNE, JNC Exercise: Write a program that compare R0,R1. If R0>R1 then send 1 to port 2, else if R0

39 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 39 CALL Instructions Another control transfer instruction is the CALL instruction, which is used to call a subroutine. LCALL(long call) In this 3-byte instruction, the first byte is the opcode an the second and third bytes are used for the address of target subroutine. Therefore, LCALL can be used to call subroutines located anywhere within the 64K byte address space of the 8051.

40 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 40 ACALL (absolute call) ACALL is 2-byte instruction in contrast to LCALL, which is 13 bytes. Since ACALL is a 2-byte instruction, the target address of the subroutine must be within 2K bytes address because only 11 bits of the 2 bytes are used for the address. There is no difference between ACALL and LCALL in terms of saving the program counter on the stack or the function of the RET instruction. The only difference is that the target address for LCALL can be anywhere within the 64K byte address space of the 8051 while the target address of ACALL must be within a 2K- byte range.

41 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 41 Example ABR5R7AddressData ORG0H VAL1 EQU 05H MOV R5,#25H LOOP: MOV R7,#VAL1 MOVA,#0 ADDA,R5 ADDA,#12H RRC A DJNZ A, LOOP SETB ACC.3 CLR A CJNE A, #0, LOOP HERE: SJMP HERE END

42 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 42 I/O Port Programming  Port 1 ( pins 1-8 ) Port 1 is denoted by P1. –P1.0 ~ P1.7 We use P1 as examples to show the operations on ports. –P1 as an output port (i.e., write CPU data to the external pin) –P1 as an input port (i.e., read pin data into CPU bus)

43 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 43 A Pin of Port IC D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus M1 P1.X pin P1.X TB1 TB2   P0.x

44 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 44 Hardware Structure of I/O Pin Each pin of I/O ports –Internal CPU bus : communicate with CPU –A D latch store the value of this pin D latch is controlled by “Write to latch” –Write to latch = 1 : write data into the D latch –2 Tri-state buffer :   TB1: controlled by “Read pin” –Read pin = 1 : really read the data present at the pin TB2: controlled by “Read latch” –Read latch = 1 : read value from internal latch –A transistor M1 gate Gate=0: open Gate=1: close

45 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 45 Tri-state Buffer OutputInput Tri-state control (active high) L HLow Highimpedance (open-circuit) HH LH 

46 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 46 Writing “1” to Output Pin P1.X D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus M1 P1.X pin P1.X 8051 IC 2. output pin is Vcc 1. write a 1 to the pin 1 0 output 1 TB1 TB2

47 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 47 Writing “0” to Output Pin P1.X D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus M1 P1.X pin P1.X 8051 IC 2. output pin is ground 1. write a 0 to the pin 0 1 output 0 TB1 TB2

48 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 48 Port 1 as Output ( Write to a Port ) Send data to Port 1 : MOV A,#55H BACK: MOV P1,A ACALLDELAY CPL A SJMP BACK –Let P1 toggle. –You can write to P1 directly.

49 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 49 Reading Input v.s. Port Latch When reading ports, there are two possibilities : –Read the status of the input pin. ( from external pin value ) MOV A, PX JNB P2.1, TARGET ; jump if P2.1 is not set JB P2.1, TARGET ; jump if P2.1 is set Figures C-11, C-12 –Read the internal latch of the output port. ANL P1, A ; P1 ← P1 AND A ORL P1, A ; P1 ← P1 OR A INC P1 ; increase P1 Figure C-17 Table C-6 Read-Modify-Write Instruction (or Table 8-5) See Section 8.3

50 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 50 Reading “High” at Input Pin D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus M1 P1.X pin P1.X 8051 IC 2. MOV A,P1 external pin=High 1.write a 1 to the pin MOV P1,#0FFH Read pin=1 Read latch=0 Write to latch=1 1 TB1 TB2

51 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 51 Reading “Low” at Input Pin D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus M1 P1.X pin P1.X 8051 IC 2. MOV A,P1 external pin=Low 1.write a 1 to the pin MOV P1,#0FFH Read pin=1 Read latch=0 Write to latch=1 0 TB1 TB2

52 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 52 Port 1 as Input ( Read from Port ) In order to make P1 an input, the port must be programmed by writing 1 to all the bit. MOV A,#0FFH ;A= B MOV P1,A ;make P1 an input port BACK:MOV A,P1 ;get data from P0 MOV P2,A ;send data to P2 SJMP BACK –To be an input port, P0, P1, P2 and P3 have similar methods.

53 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 53 Instructions For Reading an Input Port MnemonicsExamplesDescription MOV A,PXMOV A,P2 Bring into A the data at P2 pins JNB PX.Y,..JNB P2.1,TARGETJump if pin P2.1 is low JB PX.Y,..JB P1.3,TARGETJump if pin P1.3 is high MOV C,PX.YMOV C,P2.4 Copy status of pin P2.4 to CY Following are instructions for reading external pins of ports:

54 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 54 Reading Latch Exclusive-or the Port 1 : MOV P1,#55H ;P1= ORL P1,#0F0H ;P1= The read latch activates TB2 and bring the data from the Q latch into CPU. Read P1.0=0 2. CPU performs an operation. This data is ORed with bit 1 of register A. Get The latch is modified. D latch of P1.0 has value The result is written to the external pin. External pin (pin 1: P1.0) has value 1.

55 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 55 Reading the Latch D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus M1 P1.X pin P1.X 8051 IC 4. P1.X=1 2. CPU compute P1.X OR Read pin=0 Read latch=1 Write to latch=0 (Assume P1.X=0 initially) 1 TB1 TB2 3. write result to latch Read pin=0 Read latch=0 Write to latch=1 1 0

56 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 56 Read-modify-write Feature Read-modify-write Instructions –Table C-6 This features combines 3 actions in a single instruction : 1. CPU reads the latch of the port 2. CPU perform the operation 3. Modifying the latch 4. Writing to the pin –Note that 8 pins of P1 work independently.

57 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 57 Port 1 as Input ( Read from latch ) Exclusive-or the Port 1 : MOV P1,#55H ;P1= AGAIN:XOR P1,#0FFH ;complement ACALL DELAY SJMP AGAIN –Note that the XOR of 55H and FFH gives AAH. –XOR of AAH and FFH gives 55H. –The instruction read the data in the latch (not from the pin). –The instruction result will put into the latch and the pin.

58 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 58 Read-Modify-Write Instructions ExampleMnemonics SETB P1.4SETB PX.Y CLR P1.3CLR PX.Y MOV P1.2,CMOV PX.Y,C DJNZ P1,TARGETDJNZ PX, TARGET INC P1INC CPL P1.2CPL JBC P1.1, TARGETJBC PX.Y, TARGET XRL P1,AXRL ORL P1,AORL ANL P1,AANL DEC P1DEC

59 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 59 You are able to answer this Questions: How to write the data to a pin ? How to read the data from the pin ? –Read the value present at the external pin. Why we need to set the pin first ? –Read the value come from the latch ( not from the external pin ). Why the instruction is called read-modify write?

60 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 60 Other Pins P1, P2, and P3 have internal pull-up resisters. –P1, P2, and P3 are not open drain. P0 has no internal pull-up resistors and does not connects to Vcc inside the –P0 is open drain. –Compare the figures of P1.X and P0.X.   However, for a programmer, it is the same to program P0, P1, P2 and P3. All the ports upon RESET are configured as output.

61 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 61 A Pin of Port IC D Q Clk Q Read latch Read pin Write to latch Internal CPU bus M1 P0.X pin P1.X TB1 TB2  P1.x 

62 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 62 Port 0 ( pins ) P0 is an open drain. –Open drain is a term used for MOS chips in the same way that open collector is used for TTL chips.   When P0 is used for simple data I/O we must connect it to external pull-up resistors. –Each pin of P0 must be connected externally to a 10K ohm pull-up resistor. –With external pull-up resistors connected upon reset, port 0 is configured as an output port.

63 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 63 Port 0 with Pull-Up Resistors

64 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 64 Dual Role of Port 0 When connecting an 8051/8031 to an external memory, the 8051 uses ports to send addresses and read instructions. –8031 is capable of accessing 64K bytes of external memory. –16-bit address : P0 provides both address A0-A7, P2 provides address A8-A15. –Also, P0 provides data lines D0-D7. When P0 is used for address/data multiplexing, it is connected to the 74LS373 to latch the address. –There is no need for external pull-up resistors as shown in Chapter 14.

65 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 65 74LS373 D ALE P0.0 P0.7 PSEN A0 A7 D0 D7 P2.0 P2.7 A8 A15 OE OC EA G 8051 ROM

66 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 66 Reading ROM (1/2) D 74LS373 ALE P0.0 P0.7 PSEN A0 A7 D0 D7 P2.0 P2.7 A8 A12 OE OC EA G 8051 ROM 1. Send address to ROM latches the address and send to ROM Address

67 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 67 Reading ROM (2/2) D 74LS373 ALE P0.0 P0.7 PSEN A0 A7 D0 D7 P2.0 P2.7 A8 A12 OE OC EA G 8051 ROM latches the address and send to ROM Address 3. ROM send the instruction back

68 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 68 ALE Pin The ALE pin is used for de-multiplexing the address and data by connecting to the G pin of the 74LS373 latch. –When ALE=0, P0 provides data D0-D7. –When ALE=1, P0 provides address A0-A7. –The reason is to allow P0 to multiplex address and data.

69 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 69 Port 2 ( pins ) Port 2 does not need any pull-up resistors since it already has pull-up resistors internally. In an 8031-based system, P2 are used to provide address A8-A15.

70 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 70 Port 3 ( pins ) Port 3 does not need any pull-up resistors since it already has pull-up resistors internally. Although port 3 is configured as an output port upon reset, this is not the way it is most commonly used. Port 3 has the additional function of providing signals. –Serial communications signal : RxD, TxD ( Chapter 10 ) –External interrupt : /INT0, /INT1 ( Chapter 11 ) –Timer/counter : T0, T1 ( Chapter 9 ) –External memory accesses in 8031-based system : /WR, /RD ( Chapter 14 )

71 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 71 Port 3 Alternate Functions 17RDP3.7 16WRP3.6 15T1P3.5 14T0P3.4 13INT1P3.3 12INT0P3.2 11TxDP3.1 10RxDP3.0 PinFunctionP3 Bit 

72 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 72 Generating Delays You can generate short delays using a register and incrementing or decrementing its value Example: mov r1, #0ah loop: djnz r1, loop How much delay is that? –Djnz is a 2-byte instruction it takes two machine cycles –One machine cycle is 1/12 of the system clock period –For a 12 MHz system clock that is: –Machine cycle = 12/12 = 1 MHz –Machine period = 1/(1 MHz) = 10^(-6) s = 1 μs –Loop time = 10*2*1 μs = 20 μs

73 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 73 Generating longer delays Each register is 8 bits long, so it can increment 256 times before overflowing For larger delays, or when interrupts are required 8051 uses two timers

74 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 74

75 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 75 TMOD Register : Gate : When set, timer only runs while INT(0,1) is high. C/T : Counter/Timer select bit. M1 : Mode bit 1. M0 : Mode bit 0.

76 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 76 TCON Register: TF1: Timer 1 overflow flag. TR1: Timer 1 run control bit. TF0: Timer 0 overflag. TR0: Timer 0 run control bit. IE1: External interrupt 1 edge flag. IT1: External interrupt 1 type flag. IE0: External interrupt 0 edge flag. IT0: External interrupt 0 type flag.

77 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 77 Timer Mode Register Bit 7: Gate bit; when set, timer only runs while \INT high. (T0) Bit 6: Counter/timer select bit; when set timer is an event counter when cleared timer is an interval timer (T0) Bit 5: Mode bit 1 (T0) Bit 4: Mode bit 0 (T0) Bit 3: Gate bit; when set, timer only runs while \INT high. (T1) Bit 2: Counter/timer select bit; when set timer is an event counter when cleared timer is an interval timer (T1) Bit 1: Mode bit 1 (T1) Bit 0: Mode bit 0 (T1)

78 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 78 Timer Modes M1-M0: 00 (Mode 0) – 13-bit mode (not commonly used) M1-M0: 01 (Mode 1) - 16-bit timer mode M1-M0: 10 (Mode 2) - 8-bit auto-reload mode M1-M0: 11 (Mode 3) – Split timer mode

79 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 79 Timer Control Register (TCON) Bit 7 (TF1) 8FH : Timer 1 overflow flag; set by hardware upon overflow, cleared by software Bit 6 (TR1) 8EH: Timer 1 run-control bit; manipulated by software - setting starts timer 1, resetting stops timer 1 Bit 5 (TF0) 8DH: Timer 0 overflow flag; set by hardware upon overflow, cleared by software. Bit 4 (TR0) 8CH: Timer 0 run-control bit; manipulated by software - setting starts timer 0, resetting stops timer 0 Bit 3 (IE1) 8BH: External 1 Interrupt flag bit Bit 2 (IT1) 8AH: Bit 1 (IE0) 89H: External 0 Interrupt flag bit Bit 0 (IT0) 88H:

80 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 80 Initializing and stopping timers MOV TMOD, #16H ;initialization SETB TR0;starting timers SETB TR1 CLR TR0; stop timer 0 CLR TR1; stop timer 1 MOV R7, TH0; reading timers MOV R6, TL0

81 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 81 Reading timers on the fly Reading the Timers on the Fly To read the contents of a timer while it is running (ie; on the fly) poses a problem. MOV A, TH0 ;Let TH0 = 07 and TL0 = FF MOV R6, TL0 ;Now TH0=08 and TL0=00 but A=07 and R6=00! The solution is to read the high byte, then read the low byte, then read the high byte again. If the two readings of the low-byte are not the same repeat the procedure. The code for this method is detailed below. tryAgain:MOV A, TH0 MOV R6, TL0 CJNE A, TH0, tryAgain if the first reading of the hi-byte (in A) is not equal to current reading in the hi-byte (TH0) try againMOV R7, A; if both readings of the hi- byte are the same move the first reading into R7 - the overall reading is now in R7R6

82 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 82 Generating delays using the timers To generate a 50 ms (or 50,000 us) delay we start the timer counting from 15,536. Then, 50,000 steps later it will overflow. Since each step is 1 us (the timer's clock is 1/12 the system frequency) the delay is 50,000 us. 0 MOV TMOD, #10H; set up timer 1 as 16-bit interval timer CLR TR1 ; stop timer 1 (in case it was started in some other subroutine) MOV TH1, #3CH MOV TL1, #0B0H ; load 15,536 (3CB0H) into timer 1 SETB TR1 ; start timer 1 JNB TF1, $; repeat this line while timer 1 overflow flag is not set CLR TF1; timer 1 overflow flag is set by hardware on transition from FFFFH - the flag must be reset by software CLR TR1 ; stop timer 1

83 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 83 Generating long delays If the microcontroller has a system clock frequency of 12 MHz then the longest delay we can get from either of the timers is 65,536 usec. To generate delays longer than this, we need to write a subroutine to generate a delay of (for example) 50 ms and then call that subroutine a specific number of times.... MOV TMOD, #10H; set up timer 1 as 16-bit interval timer fiftyMsDelay:CLR TR1 ; stop timer 1 (in case it was started in some other subroutine) MOV TH1, #3CH MOV TL1, #0B0H ; load 15,536 (3CB0H) into timer 1 SETB TR1 ; start timer 1 JNB TF1, $; repeat this line while timer 1 overflow flag is not set CLR TF1; timer 1 overflow flag is set by hardware on transition from FFFFH - the flag must be reset by software CLR TR1 ; stop timer 1 RET oneSecDelay:PUSH PSW PUSH AR0 ; save processor status MOV R0, #20 ; move 20 (in decimal) into R0 loop:CALL fiftyMsDelay ; call the 50 ms delay DJNZ R0, loop ; 20 times - resulting in a 1 second delay POP AR0 POP PSW ; retrieve processor status RET

84 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 84 Using timers to measure execution time Timers are often used to measure the execution time of a program ORG 0H MOV TMOD, #16H ;initialization SETB TR0;starting timer 0 …;main …;program CLR TR0; stop timer 0 MOV R7, TH0; reading timer 0 MOV R6, TL0

85 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 85 Interrupt :

86 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 86 Interrupt Enable 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.

87 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 87 Interrupt handling 8051 Interrupt Vector Table

88 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 88 Interrupt Service Routines ORG 0 JMP main ORG 0003H ; external interrupt 0 vector ….; interrupt handler code for external interrupt 0 RETI ORG 0013H ; external interrupt 1 vector ….;interrupt handler code for external interrupt 1 RETI ORG 0030H; main program main:SETB IT0 ; set external interrupt 0 as edge activated SETB IT1 ; set external interrupt 1 as edge activated SETB EX0 ; enable external interrupt 0 SETB EX1 ; enable external interrupt 1 SETB EA ; global interrupt enable …

89 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 89 Examples Write a 8051 assembly program that matches 8 switches with 8 LEDs Write a 8051 assembly program that uses a two-digit SSD to display the temperature as input from an ADC. Assume that the 0- 5V range corresponds to 0-50 °C. The ADC uses RD, WR and INT pins.

90 8051 Programming Using C

91 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 91 Programming microcontrollers using high-level languages Most programs can be written exclusively using high-level code like ANSI C Extensions –To achieve low-level (Assembly) efficiency, extensions to high-level languages are required Restrictions –Depending on the compiler, some restrictions to the high-level language may apply

92 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 92 Keil C keywords data/idata: Description: The variable will be stored in internal data memory of controller. example: unsigned char data x; //or unsigned char idata y; bdata: Description: The variable will be stored in bit addressable memory of controller. example: unsigned char bdata x; //each bit of the variable x can be accessed as follows x ^ 1 = 1; //1st bit of variable x is set x ^ 0 = 0; //0th bit of variable x is cleared xdata: Description: The variable will be stored in external RAM memory of controller. example: unsigned char xdata x;

93 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 93 Keil C keywords code: Description: This keyword is used to store a constant variable in code and not data memory. example: unsigned char code str="this is a constant string"; _at_: Description: This keyword is used to store a variable on a defined location in ram. example: CODE: unsigned char idata x _at_ 0x30; // variable x will be stored at location 0x30 // in internal data memory sbit: Description: This keyword is used to define a special bit from SFR (special function register) memory. example: sbit Port0_0 = 0x80; // Special bit with name Port0_0 is defined at address 0x80

94 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 94 Keil C keywords sfr: Description: sfr is used to define an 8-bit special function register from sfr memory. example: sfr Port1 = 0x90; // Special function register with name Port1 defined at addrress 0x90 sfr16: Description: This keyword is used to define a two sequential 8-bit registers in SFR memory. example: sfr16 DPTR = 0x82; // 16-bit special function register starting at 0x82 // DPL at 0x82, DPH at 0x83 using: Description: This keyword is used to define register bank for a function. User can specify register bank 0 to 3. example: void function () using 2{ // code } // Funtion named "function" uses register bank 2 while executing its code Interrupt: Description: defines interrupt service routine void External_Int0() interrupt 0{ //code }

95 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 95 Pointers //Generic Pointer char * idata ptr; //character pointer stored in data memory int * xdata ptr1; //Integer pointer stored in external data memory //Memory Specific pointer char idata * xdata ptr2; //Pointer to character stored in Internal Data memory //and pointer is going to be stored in External data memory int xdata * data ptr3; //Pointer to character stored in External Data memory //and pointer is going to be stored in data memory

96 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 96 Writing hardware-specific code #include //header file for 89C51 void main(){ //main function starts unsigned int i; //Initializing Port1 pin1 P1_1 = 0; //Make Pin1 o/p while(1){ //Infinite loop main application //comes here for(i=0;i<1000;i++) ; //delay loop P1_1 = ~P1_1; //complement Port1.1 //this will blink LED connected on Port1.1 } }

97 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 97 C and Assembly together extern unsigned long add(unsigned long, unsigned long); void main(){ unsigned long a; a = add(10,30); //calling Assembly function while(1); }

98 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 98 C and Assembly together name asm_test ?PR?_add?asm_test segment code ?DT?_add?asm_test segment data ;let other function use this data space for passing variables public ?_add?BYTE ;make function public or accessible to everyone public _add ;define the data segment for function add rseg ?DT?_add?asm_test ?_add?BYTE: parm1: DS 4 ;First Parameter parm2: ds 4 ;Second Parameter ;either you can use parm1 for reading passed value as shown below ;or directly use registers used to pass the value. rseg ?PR?_add?asm_test _add: ;reading first argument mov parm1+3,r7 mov parm1+2,r6 mov parm1+1,r5 mov parm1,r4 ;param2 is stored in fixed location given by param2 ;now adding two variables mov a,parm2+3 add a,parm1+3 ;after addition of LSB, move it to r7(LSB return register for Long) mov r7,a mov a,parm2+2 addc a,parm1+2 ;store second LSB mov r6,a mov a,parm2+1 addc a,parm1+1 ;store second MSB mov r5,a mov a,parm2 addc a,parm1 mov r4,a ret end

99 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 99 The infinite loop A loop with no termination condition or one that will never be met may be unwanted in computer systems, but common in embedded systems.

100 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 100 Example 1 Generate a 5V peek-to-peek 200μs period square waveform on the DAC output

101 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 101 Example 2 Generate a 5V peek-to-peek 200μs period sawtooth waveform on the DAC output

102 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 102 Example 3 Generate a 5V peek-to-peek 2ms period sine waveform on the DAC output code unsigned char Sine[180] = { /* Sine values */ 127,131,136,140,145,149,153,158,162,166,170,175, 179,183,187,191,194,198,202,205,209,212,215,218, 221,224,227,230,232,235,237,239,241,243,245,246, 248,249,250,251,252,253,253,254,254,254,254,254, 253,253,252,251,250,249,248,246,245,243,241,239, 237,235,232,230,227,224,221,218,215,212,209,205, 202,198,194,191,187,183,179,175,170,166,162,158, 153,149,145,140,136,131,127,123,118,114,109,105, 101, 96, 92, 88, 84, 79, 75, 71, 67, 64, 60, 56, 52, 49, 45, 42, 39, 36, 33, 30, 27, 24, 22, 19, 17, 15, 13, 11, 9, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 15, 17, 19, 22, 24, 27, 30, 33, 36, 39, 42, 45, 49, 52, 56, 60, 63, 67, 71, 75, 79, 84, 88, 92, 96, 101,105,109,114,118 }; /************************************************************ * START of the PROGRAM * ************************************************************ / void main (void) { unsigned char i; /************************************************************ * Enable the D/A Converter * ************************************************************ / ENDAC0 = 1; /* Enable DAC0 */ /************************************************************ * Create the waveforms on DAC0 * ************************************************************ / while(1){ /* Run for ever */ for(i = 0; i < 179; i++) DAC0 = Sine[i]; } * while(1) */ } /* main() */ }

103 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 103 Mixed C/Assembly code (μVision Version 2.06) Parameter passing in registers Examples:

104 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 104 Function return values

105 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 105 Example extern unsigned char add2_func(unsigned char, unsigned char); void main(){ unsigned char a; a = add2_func(10,30); //a will have 40 after execution while(1); } ;assembly file “add2.asm” NAME _Add2_func ?PR?add2_func?Add2 SEGMENT CODE PUBLIC add2_func RSEG ?PR?Add2_func?Add2 add2_func: mov a, r7;first parameter passed to r7 add a, r5;second parameter passed to r5 mov r7, a;return parameter must be in r7 RET END

106 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 106 Calling C from Assembly NAMEA_FUNC ?PR?a_func?A_FUNC SEGMENT CODE EXTRNCODE (c_func) PUBLICa_func RSEG ?PR?a_func?A_FUNC a_func: USING0 LCALL c_func RET END void c_func (void) { }

107 Data Converters Analog to Digital Converters (ADC) –Convert an analog quantity (voltage, current) into a digital code Digital to Analog Converters (DAC) –Convert a digital code into an analog quantity (voltage, current) Dr. Konstantinos Tatas and Dr. Costas Kyriacou

108 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 108 Video (Analog - Digital) A/D Amplifier Filters Modulator Image enhancement and coding AnalogDigital Pre- amplifier

109 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 109 Temperature Recording by a Digital System Sampling & quantization Coding Temperature (ºC) Time Temperature (ºC) Time

110 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 110 Need for Data Converters Digital processing and storage of physical quantities (sound, temperature, pressure etc) exploits the advantages of digital electronics –Better and cheaper technology compared to the analog –More reliable in terms of storage, transfer and processing Not affected by noise –Processing using programs (software) Easy to change or upgrade the system –(e.g. Media Player 7  Media Player 8 ή Real Player) Integration of different functions –(π.χ. Mobile = phone + watch + camera + games + +

111 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 111 Signals (Analog - Digital) u(V ) t (S) D3D3 D2D2 D1D1 D0D Analog Signal can take infinity values can change at any time Digital Signal can take one of 2 values (0 or 1) can change only at distinct times ADC u(V) t (S) DAC Reconstruction of an analog signal from a digital one (Can take only predefined values)

112 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 112 QUANTIZATION ERROR The difference between the true and quantized value of the analog signal Inevitable occurrence due to the finite resolution of the ADC The magnitude of the quantization error at each sampling instant is between zero and half of one LSB. Quantization error is modeled as noise (quantization noise)

113 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 113 SAMPLING FREQUENCY (RATE) The frequency at which digital values are sampled from the analog input of an ADC A low sampling rate (undersampling) may be insufficient to represent the analog signal in digital form A high sampling rate (oversampling) requires high bitrate and therefore storage space and processing time A signal can be reproduced from digital samples if the sampling rate is higher than twice the highest frequency component of the signal (Nyquist-Shannon theorem) Examples of sampling rates –Telephone: 4 KHz (only adequate for speech, ess sounds like eff) –Audio CD: 44.1 KHz –Recording studio: 88.2 KHz

114 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 114 Digital to Analog Converters The analog signal at the output of a D/A converter is linearly proportional to the binary code at the input of the converter. –If the binary code at the input is 0001 and the output voltage is 5mV, then –If the binary code at the input becomes 1001, the output voltage will become If a D/A converter has N digital inputs then the analog signal at the output can have one out of ……. values. If a D/A converter has 4 digital inputs then the analog signal at the output can have one out of …… values. 45mV 16 2Ν2Ν D3D2D1D0 Vout (mV)

115 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 115 Characteristics of Data Converters 1.Number of digital lines –The number bits at the input of a D/A (or output of an A/D) converter. –Typical values: 8-bit, 10-bit, 12-bit and 16-bit –Can be parallel or serial 2.Microprocessor Compatibility –Microprocessor compatible converters can be connected directly on the microprocessor bus as standard I/O devices –They must have signals like CS, RD, and WR Activating the WR signal on an A/D converter starts the conversion process. 3.Polarity –Polar: the analog signals can have only positive values –Bipolar: the analog signals can have either a positive or a negative value 4.Full-scale output –The maximum analog signal (voltage or current) –Corresponds to a binary code with all bits set to 1 (for polar converters) –Set externally by adjusting a variable resistor that sets the Reference Voltage (or current)

116 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 116 Characteristics of Data Converters (Cont…) 5.Resolution –The analog voltage (or current) that corresponds to a change of 1LSB in the binary code –It is affected by the number of bits of the converter and the Full Scale voltage (VFS) –For example if the full-scale voltage of an 8-bit D/A converter is 2.55V the the resolution is: VFS/(2 N -1) = 2.55 /(2 8 -1) 2.55/255 = 0.01 V/LSB = 10mV/LSB 6.Conversion Time –The time from the moment that a “Start of Conversion” signal is applied to an A/D converter until the corresponding digital value appears on the data lines of the converter. –For some types of A/D converters this time is predefined, while for others this time can vary according to the value of the analog signal. 7.Settling Time –The time needed by the analog signal at the output of a D/A converter to be within 10% of the nominal value.

117 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 117 ADC RESPONSE TYPES Linear –Most common Non-linear –Used in telecommunications, since human voice carries more energy in the low frequencies than the high.

118 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 118 ADC TYPES Direct Conversion –Fast –Low resolution Successive approximation –Low-cost –Slow –Not constant conversion delay Sigma-delta –High resolution, –low-cost, –high accuracy

119 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 119 Interfacing with Data Converters Microprocessor compatible data converters are attached on the microprocessor’s bus as standard I/O devices.

120 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 120 Programming Example 1 Write a program to generate a positive ramp at the output of an 8-bit D/A converter with a 2V amplitude and a 1KHz frequency. Assume that the full scale voltage of the D/A converter is 2.55V. The D/A converter is in P0 and the WR signal is in P1.1 main() { do { for (i=0;i<200;i++) { P1_0=1; P0=i; delayu(5); } } while (1) }

121 ACOE343 - Embedded Real-Time Processor Systems - Frederick University 121 D/A Converters example Write a program to generate the waveform, shown below, at the output of an 8-bit digital to analog converter. The period of the waveform should be approximately 8 ms. Assume that a time delay function with a 1 μs resolution is available. The full scale output of the converter is 5.12 V and the address of the DAC is P0, while the WR signal is in P1.1. Assuming that an 8-bit A/D converter is used to interface a temperature sensor measuring temperature values in the temperature range , specify: The resolution in of the system in The digital output word for a temperature of 32.5 The temperature corresponding to a digital output word of


Download ppt "Lecture 3 Programming the 8051 Microcontroller Dr. Konstantinos Tatas."

Similar presentations


Ads by Google