Você está na página 1de 121

Lecture 3

Programming the 8051 Microcontroller


Dr. Konstantinos Tatas

A B R0 R1 R2 R3 R4 R5 R6 R7 Some 8-bit Registers of the 8051


A: Accumulator B: Used specially in MUL/DIV R0-R7: GPRs

Registers
DPTR DPH DPL PC PC

Some 8051 16-bit Register

ACOE343 - Embedded Real-Time Processor Systems Frederick University

8051 Programming using Assembly

The MOV Instruction Addressing Modes


MOV dest,source
MOV MOV MOV MOV MOV MOV MOV MOV A,#72H A, #r R4,#62H B,0F9H DPTR,#7634H DPL,#34H DPH,#76H P1,A ;mov A to port 1

; dest = source
;A=72H ;A=r OR 72H ;R4=62H ;B=the content of F9th byte of RAM

Note 1:
MOV A,#72H After instruction MOV MOV A,72H A,72H the content of 72th byte of RAM will replace in Accumulator.

8086
MOV MOV MOV MOV AL,72H AL,r BX,72H AL,[BX]

8051
MOV MOV MOV A,#72H A,#r A,72H

Note 2:
MOV A,R3 MOV A,3

ACOE343 - Embedded Real-Time Processor Systems Frederick University

Arithmetic Instructions
ADD A, Source ;A=A+SOURCE

ADD ADD ADD ADD

A,#6 A,R6 A,6 A,0F3H

;A=A+6 ;A=A+R6 ;A=A+[6] or A=A+R6 ;A=A+[0F3H]

ACOE343 - Embedded Real-Time Processor Systems Frederick University

Set and Clear Instructions


SETB CLR
SETB SETB SETB SETB SETB
Note:

bit bit
C P0.0 P3.7 ACC.2 05

; bit=1 ; bit=0
; CY=1 ;bit 0 from port 0 =1 ;bit 7 from port 3 =1 ;bit 2 from ACCUMULATOR =1 ;set high D5 of RAM loc. 20h

CLR instruction is as same as SETB i.e: CLR C ;CY=0 But following instruction is only for CLR: CLR A ;A=0
ACOE343 - Embedded Real-Time Processor Systems Frederick University 6

SUBB
SETB C SUBB A,R5

A,source ;A=A-source-CY
;CY=1 ;A=A-R5-1

ADC
SETB C ADC

A,source ;A=A+source+CY
;CY=1 A,R5 ;A=A+R5+1

ACOE343 - Embedded Real-Time Processor Systems Frederick University

DEC INC
INC DEC DEC

byte byte
R7 A 40H

;byte=byte-1 ;byte=byte+1

; [40]=[40]-1

CPL
Example:

A
MOV CPL MOV ACALL SJMP

;1s complement
A,#55H ;A=01010101 B A P1,A DELAY L01

L01:

CALL

NOP & RET & RETI


All are like 8086 instructions.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

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

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

Structure of Assembly language and Running an 8051 program


EDITOR PROGRAM

ORG MOV MOV MOV ADD ADD HERE: SJMP END

0H R5,#25H R7,#34H Myfile.lst A,#0 A,R5 A,#12H HERE

Myfile.asm ASSEMBLER PROGRAM Other obj file Myfile.obj LINKER PROGRAM

Myfile.abs
OH PROGRAM Myfile.hex

ACOE343 - Embedded Real-Time Processor Systems Frederick University

11

Memory mapping in 8051


ROM memory map in 8051 family
4k
0000H 0000H

8k
0000H

32k

0FFFH DS5000-32 8751 AT89C51

1FFFH
8752 AT89C52

7FFFH

from Atmel Corporation

from Dallas Semiconductor

ACOE343 - Embedded Real-Time Processor Systems Frederick University

12

RAM memory space allocation in the 8051


7FH Scratch pad RAM

30H

2FH
Bit-Addressable RAM 20H 1FH 18H 17H 10H 0FH 08H 07H 00H Register Bank 2 (Stack) Register Bank 1 Register Bank 3

Register Bank 0

ACOE343 - Embedded Real-Time Processor Systems Frederick University

13

8051 Flag bits and the PSW register


PSW Register
CY AC F0 RS1 RS0 OV -P

Carry flag Auxiliary carry flag Available to the user for general purpose Register Bank selector bit 1 Register Bank selector bit 0 Overflow flag User define bit Parity flag Set/Reset odd/even parity

PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0

CY AC -RS1 RS0 OV -P

RS1 0 0 1 1

RS0 0 1 0 1

Register Bank 0 1 2 3

Address 00H-07H 08H-0FH 10H-17H 18H-1FH

ACOE343 - Embedded Real-Time Processor Systems Frederick University

14

Instructions that Affect Flag Bits:

Note: X can be 0 or 1

ACOE343 - Embedded Real-Time Processor Systems Frederick University

15

Example: MOV A,#88H ADD A,#93H


88 +93 ---11B CY=1 AC=0 10001000 +10010011 -------------00011011 P=0

Example: MOV A,#9CH ADD A,#64H


9C +64 ---100 CY=1 AC=1 10011100 +01100100 -------------00000000 P=0

Example: MOV A,#38H ADD A,#2FH 38 +2F ---67 CY=0 AC=1 00111000 +00101111 -------------01100111 P=1

ACOE343 - Embedded Real-Time Processor Systems Frederick University

16

Addressing Modes
Immediate Register Direct Register Indirect Indexed

ACOE343 - Embedded Real-Time Processor Systems Frederick University

17

Immediate Addressing Mode


MOV MOV MOV MOV MOV A,#65H A,#A R6,#65H DPTR,#2343H P1,#65H

Example : Num MOV MOV ORG data1: EQU 30

R0,Num DPTR,#data1 100H db Example

ACOE343 - Embedded Real-Time Processor Systems Frederick University

18

Example
Write the decimal value 4 on the SSD in the following figure. Switch the decimal point off.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

19

Register Addressing Mode


MOV ADD MOV Rn, A A, Rn DPL, R6 ;n=0,..,7

MOV MOV

DPTR, A Rm, Rn

ACOE343 - Embedded Real-Time Processor Systems Frederick University

20

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 MOV MOV MOV R0, 40H 56H, A A, 4 6, 2

; MOV A, R4 ; copy R2 to R6 ; MOV R6,R2 is invalid !

SFR register and their address


MOV MOV MOV 0E0H, #66H 0F0H, R2 80H,A ; MOV A,#66H ; MOV B, R2 ; MOV P1,A
21

ACOE343 - Embedded Real-Time Processor Systems Frederick University

Register Indirect Addressing Mode


In this mode, register is used as a pointer to the data. A,@Ri @R1,B ; move content of RAM loc.Where address is held by Ri into A ( i=0 or 1 ) MOV MOV

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 MOV R1,59h MOV R2,10 L1: MOV A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R2,L1

; source pointer ; dest pointer ; counter

jump

ACOE343 - Embedded Real-Time Processor Systems Frederick University

22

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 MOVC A,@A+DPTR 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.
ACOE343 - Embedded Real-Time Processor Systems Frederick University 23

Example: Assuming that ROM space starting at 250h contains Hello., write a program to transfer the bytes into RAM locations starting at 40h. Solution: ORG 0 MOV DPTR,#MYDATA MOV R0,#40H L1: CLR A MOVC A,@A+DPTR JZ L2 MOV @R0,A INC DPTR INC R0 SJMP L1 L2: SJMP L2 ;------------------------------------ORG 250H MYDATA: DB Hello,0
END Notice the NULL character ,0, as end of string and how we use the JZ instruction to detect that.
ACOE343 - Embedded Real-Time Processor Systems Frederick University 24

Example: Write a program to get the x value from P1 and send x2 to P2, continuously . Solution: ORG 0 ;code segment MOV DPTR, #TAB1 ;moving data segment to data pointer MOV A,#0FFH ;configuring P1 as input port MOV P1,A L01: MOV A,P1 ;reading value from P1 MOVC A,@A+DPTR MOV P2,A SJMP L01 ;---------------------------------------------------ORG 300H ;data segment TAB1: DB 0,1,4,9,16,25,36,49,64,81 END

ACOE343 - Embedded Real-Time Processor Systems Frederick University

25

External Memory Addressing


MOVX A, @R1 ; A memory) MOVX A, @DPTR MOVX @DPTR, A [R1] (in external

ACOE343 - Embedded Real-Time Processor Systems Frederick University

26

16-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 )
ACOE343 - Embedded Real-Time Processor Systems Frederick University 27

MUL & DIV


MUL MOV MOV MUL MUL MOV MOV MUL AB A,#25H B,#65H AB AB A,#25 B,#10 AB ;B|A = A*B

;25H*65H=0E99 ;B=0EH, A=99H ;A = A/B, B = A mod B

;A=2, B=5
28

ACOE343 - Embedded Real-Time Processor Systems Frederick University

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 Scratch pad RAM 30H 2FH

Bit-Addressable RAM
20H 1FH 18H 17H 10H 0FH 08H 07H 00H

Register Bank 3 Register Bank 2 (Stack) Register Bank 1 Register Bank 0

ACOE343 - Embedded Real-Time Processor Systems Frederick University

29

Example: MOV MOV MOV PUSH PUSH PUSH R6,#25H R1,#12H R4,#0F3H 6 1 4

0BH 0AH 09H 08H Start SP=07H

0BH 0AH 09H 08H 25

0BH 0AH 09H 08H 12 25

0BH 0AH 09H 08H F3 12 25

SP=08H

SP=09H

SP=10H

ACOE343 - Embedded Real-Time Processor Systems Frederick University

30

Example (cont.)
POP POP POP
0BH
0AH 09H 08H F3 12 25

4 1 6
0BH
0AH 09H 08H 12

0BH
0AH 09H 08H 25

0BH
0AH 09H 08H Start SP=07H

25

SP=10H

SP=09H

SP=08H

ACOE343 - Embedded Real-Time Processor Systems Frederick University

31

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 32

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 wrong value!!!!! function: MOV A, #5 ;values are for example sake MOV B, #10 MUL AB ;you can only multiply on A RET

ACOE343 - Embedded Real-Time Processor Systems Frederick University

33

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 dont push PSW function: MOV A, #5 ;values are for example sake ADD A, R2 ;the flags are set according to ADD result RET 34 ACOE343 - Embedded Real-Time Processor Systems Frederick University

LOOP and JUMP Instructions


DJNZ:
Write a program to clear ACC, then add 3 to the accumulator ten times Solution: MOV MOV AGAIN: ADD DJNZ MOV A,#0; R2,#10 A,#03 R2,AGAING ;repeat until R2=0 (10 times) R5,A

ACOE343 - Embedded Real-Time Processor Systems Frederick University

35

Other conditional jumps :


JZ
JNZ DJNZ CJNE A,byte CJNE reg,#data JC JNC

Jump if A=0
Jump if A/=0 Decrement and jump if A/=0 Jump if A/=byte Jump if byte/=#data Jump if CY=1 Jump if CY=0

JB
JNB JBC

Jump if bit=1
Jump if bit=0 Jump if bit=1 and clear bit

ACOE343 - Embedded Real-Time Processor Systems Frederick University

36

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

CJNE , JNC
Exercise: Write a program that compare R0,R1. If R0>R1 then send 1 to port 2, else if R0<R1 then send 0FFh to port 2, else send 0 to port 2.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

38

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

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 2Kbyte range.
ACOE343 - Embedded Real-Time Processor Systems Frederick University 40

Example
A ORG 0H VAL1 EQU 05H MOV R5,#25H LOOP: MOV R7,#VAL1 MOV ADD ADD A,#0 A,R5 A,#12H B R5 R7 Address Data

RRC A
DJNZ A, LOOP SETB ACC.3 CLR A

CJNE A, #0, LOOP


HERE: SJMP HERE END
ACOE343 - Embedded Real-Time Processor Systems Frederick University 41

I/O Port Programming


Port 1pins 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)

ACOE343 - Embedded Real-Time Processor Systems Frederick University

42

A Pin of Port 1
Read latch
TB2

Vcc
Load(L1)

Internal CPU bus Write to latch

P1.X
Clk Q

P1.X pin M1

TB1 Read pin

P0.x
8051 IC
43

ACOE343 - Embedded Real-Time Processor Systems Frederick University

Hardware Structure of I/O Pin


Each pin of I/O ports Internal CPU buscommunicate with CPU A D latch store the value of this pin D latch is controlled by Write to latch Write to latch1write data into the D latch 2 Tri-state buffer TB1: controlled by Read pin Read pin1really read the data present at the pin TB2: controlled by Read latch Read latch1read value from internal latch A transistor M1 gate Gate=0: open Gate=1: close
ACOE343 - Embedded Real-Time Processor Systems Frederick University

44

Tri-state Buffer
Output Input

Tri-state control (active high)

Low

Highimpedance (open-circuit)

ACOE343 - Embedded Real-Time Processor Systems Frederick University

45

Writing 1 to Output Pin P1.X


Read latch
TB2

Vcc
Load(L1) 2. output pin is

1. write a 1 to the pin


Internal CPU bus Write to latch
D Q

Vcc 1 0
M1

P1.X
Clk Q

P1.X pin

output 1

TB1 Read pin

ACOE343 - Embedded Real-Time Processor Systems Frederick University

8051 IC

46

Writing 0 to Output Pin P1.X


Read latch
TB2

Vcc
Load(L1) 2. output pin is

1. write a 0 to the pin


Internal CPU bus Write to latch
D Q

ground 0 1
M1

P1.X
Clk Q

P1.X pin

output 0

TB1 Read pin

ACOE343 - Embedded Real-Time Processor Systems Frederick University

8051 IC

47

Port 1 as OutputWrite to a Port


Send data to Port 1 MOV A,#55H MOV P1,A ACALL DELAY CPL A SJMP BACK

BACK:

Let P1 toggle. You can write to P1 directly.


ACOE343 - Embedded Real-Time Processor Systems Frederick University 48

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 49

Reading High at Input Pin


Read latch 1. write a 1 to the pin MOV P1,#0FFH Internal CPU bus TB2 Load(L1) 1 1

Vcc

2. MOV A,P1 external pin=High

Q
P1.X

P1.X pin

Write to latch

Clk

M1

TB1 Read pin 3. Read pin=1 Read latch=0 Write to latch=1 8051 IC ACOE343 - Embedded Real-Time Processor Systems Frederick University 50

Reading Low at Input Pin


Read latch 1. write a 1 to the pin MOV P1,#0FFH Internal CPU bus TB2 Load(L1) 1 0

Vcc

2. MOV A,P1 external pin=Low

Q
P1.X

P1.X pin

Write to latch

Clk

M1

TB1 Read pin 3. Read pin=1 Read latch=0 Write to latch=1 8051 IC ACOE343 - Embedded Real-Time Processor Systems Frederick University 51

Port 1 as InputRead from Port


In order to make P1 an input, the port must be programmed by writing 1 to all the bit. MOV MOV MOV MOV SJMP A,#0FFH P1,A A,P1 P2,A BACK ;A=11111111B ;make P1 an input port ;get data from P0 ;send data to P2

BACK:

To be an input port, P0, P1, P2 and P3 have similar methods.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

52

Instructions For Reading an Input Port


Following are instructions for reading external pins of ports: Mnemonics MOV A,PX Examples MOV A,P2 Description Bring into A the data at P2 pins

JNB PX.Y,.. JB PX.Y,..


MOV C,PX.Y

JNB P2.1,TARGET JB P1.3,TARGET


MOV C,P2.4

Jump if pin P2.1 is low Jump if pin P1.3 is high


Copy status of pin P2.4 to CY
53

ACOE343 - Embedded Real-Time Processor Systems Frederick University

Reading Latch
Exclusive-or the Port 1 MOV P1,#55H ;P1=01010101 ORL P1,#0F0H ;P1=11110101 1. 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 1. 3. The latch is modified. D latch of P1.0 has value 1. 4. The result is written to the external pin. External pin (pin 1: P1.0) has value 1.
ACOE343 - Embedded Real-Time Processor Systems Frederick University 54

Reading the Latch


1. Read pin=0 Read latch=1 Write to latch=0 (Assume P1.X=0 initially) Read latch TB2 2. CPU compute P1.X OR 1 0 Internal CPU bus 1 Write to latch 3. write result to latch Read pin=0 Read latch=0 Write to latch=1 Load(L1) 0 1 4. P1.X=1 P1.X pin

Vcc

Q
P1.X

0 M1

Clk

TB1 Read pin

8051 IC ACOE343 - Embedded Real-Time Processor Systems Frederick University

55

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.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

56

Port 1 as InputRead from latch


Exclusive-or the Port 1 MOV P1,#55H ;P1=01010101 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.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

57

Read-Modify-Write Instructions
Mnemonics
ANL ORL XRL JBC PX.Y, TARGET CPL INC DEC DJNZ PX, TARGET

Example
ANL P1,A ORL P1,A XRL P1,A JBC P1.1, TARGET CPL P1.2 INC P1 DEC P1 DJNZ P1,TARGET

MOV PX.Y,C
CLR PX.Y SETB PX.Y

MOV P1.2,C
CLR P1.3 SETB P1.4
58

ACOE343 - Embedded Real-Time Processor Systems Frederick University

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 latchnot from the external pin. Why the instruction is called read-modify write?

ACOE343 - Embedded Real-Time Processor Systems Frederick University

59

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 8051. 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.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

60

A Pin of Port 0
Read latch
TB2

Internal CPU bus Write to latch

P1.X
Clk Q

P0.X pin M1

TB1 Read pin

P1.x
8051 IC
61

ACOE343 - Embedded Real-Time Processor Systems Frederick University

Port 0pins 32-39


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.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

62

Port 0 with Pull-Up Resistors


Vcc
10 K

P0.0 DS5000 P0.1 P0.2 8751 P0.3 P0.4 8951 P0.5 P0.6 P0.7

Port 0
63

ACOE343 - Embedded Real-Time Processor Systems Frederick University

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 addressP0 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.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

64

74LS373
PSEN ALE P0.0 P0.7
G D

74LS373

OE OC A0 A7

D0 EA P2.0 P2.7 D7

A8 A15
ACOE343 - Embedded Real-Time Processor Systems Frederick University

8051

ROM

65

Reading ROM (1/2)


PSEN ALE P0.0 P0.7 Address D0 EA P2.0 P2.7 D7 1. Send address to ROM 2. 74373 latches the address and send to OE ROM OC G 74LS373 A0
D

A7

A8 A12

8051
ACOE343 - Embedded Real-Time Processor Systems Frederick University

ROM
66

Reading ROM (2/2)


PSEN ALE P0.0 P0.7 2. 74373 latches the address and send to ROM
G D

74LS373

OE OC A0 A7

Address

D0 EA P2.0 P2.7 D7 3. ROM send the instruction back A8 A12


ACOE343 - Embedded Real-Time Processor Systems Frederick University

8051

ROM

67

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.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

68

Port 2pins 21-28


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.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

69

Port 3pins 10-17


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 signalRxD, TxDChapter 10 External interrupt/INT0, /INT1Chapter 11 Timer/counterT0, T1Chapter 9 External memory accesses in 8031-based system/WR, /RDChapter 14
ACOE343 - Embedded Real-Time Processor Systems Frederick University 70

Port 3 Alternate Functions


P3 Bit
P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

Function
RxD TxD INT0 INT1 T0 T1 WR RD

Pin
10 11 12 13 14 15 16 17

71

ACOE343 - Embedded Real-Time Processor Systems Frederick University

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 72

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

ACOE343 - Embedded Real-Time Processor Systems Frederick University

73

ACOE343 - Embedded Real-Time Processor Systems Frederick University

74

TMOD Register:

Gate : When set, timer


high.

only runs while INT(0,1) is

C/T : Counter/Timer select bit. M1 : Mode bit 1. M0 : Mode bit 0.


ACOE343 - Embedded Real-Time Processor Systems Frederick University 75

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

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)
ACOE343 - Embedded Real-Time Processor Systems Frederick University 77

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

ACOE343 - Embedded Real-Time Processor Systems Frederick University

78

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:
ACOE343 - Embedded Real-Time Processor Systems Frederick University 79

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 80

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 hibyte are the same move the first reading into R7 - the overall reading is now in R7R6

ACOE343 - Embedded Real-Time Processor Systems Frederick University

81

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 82

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 83

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 84

Interrupt :

ACOE343 - Embedded Real-Time Processor Systems Frederick University

85

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

Interrupt handling
8051 Interrupt Vector Table

ACOE343 - Embedded Real-Time Processor Systems Frederick University

87

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 88

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 05V range corresponds to 0-50 C. The ADC uses RD, WR and INT pins.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

89

8051 Programming Using C

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 91

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: ACOE343 unsigned char xdata x; - Embedded Real-Time Processor Systems Frederick University 92

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

ACOE343 - Embedded Real-Time Processor Systems Frederick University

93

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 } ACOE343 - Embedded Real-Time Processor Systems Frederick University

94

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
ACOE343 - Embedded Real-Time Processor Systems Frederick University 95

Writing hardware-specific code


#include <REGx51.h> //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 } }

ACOE343 - Embedded Real-Time Processor Systems Frederick University

96

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); }

ACOE343 - Embedded Real-Time Processor Systems Frederick University

97

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

ACOE343 - Embedded Real-Time Processor Systems Frederick University

98

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.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

99

Example 1
Generate a 5V peek-to-peek 200s period square waveform on the DAC output

ACOE343 - Embedded Real-Time Processor Systems Frederick University

100

Example 2
Generate a 5V peek-to-peek 200s period sawtooth waveform on the DAC output

ACOE343 - Embedded Real-Time Processor Systems Frederick University

101

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() */ } 102 ACOE343 - Embedded Real-Time Processor Systems Frederick University

Mixed C/Assembly code (Vision Version 2.06)


Parameter passing in registers

Examples:

ACOE343 - Embedded Real-Time Processor Systems Frederick University

103

Function return values

ACOE343 - Embedded Real-Time Processor Systems Frederick University

104

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

ACOE343 - Embedded Real-Time Processor Systems Frederick University

105

Calling C from Assembly


NAME A_FUNC

?PR?a_func?A_FUNC SEGMENT CODE EXTRN CODE (c_func) PUBLIC a_func


RSEG ?PR?a_func?A_FUNC a_func: USING 0 LCALL c_func RET END

void c_func (void) { }

ACOE343 - Embedded Real-Time Processor Systems Frederick University

106

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)

Video (Analog - Digital)


Amplifier Filters Preamplifier Modulator

Analog

Digital

A/D

Image enhancement and coding


108

ACOE343 - Embedded Real-Time Processor Systems Frederick University

Temperature (C)

Temperature Recording by a Digital System


Temperature (C)

Sampling & quantization


Time Time

ACOE343 - Embedded Real-Time Processor Systems Frederick University

109

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 + email +

ACOE343 - Embedded Real-Time Processor Systems Frederick University

110

Signals (Analog - Digital)


u(V ) 16 14
1110 1111 1100 1001 0110 0100 0101 101 0 100 0

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
u(V) 16
1110
1111 1100 1010

12
10 8 6 4 2 1 2 3 4 5 6 7

Reconstruction of an analog signal from a digital one (Can take only predefined values)

t (S)

ADC
D0 D1 D2 D3
0 1 0 1 0 0 1 0 0

14 12 10 8
1001

1000 011 0

0
1 0

0
0 1

1
1 0

0
1 0

1
0 1

1
1 1

1
1 1

0
1 1

0
0 1

DAC6
0100

0101

4 2 6 7 8 9 t (S) 111

1 Processor 2 3 Systems 4 5 ACOE343 - Embedded Real-Time Frederick University

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) u(V)
16 14 12 10 8 6 4 2 1 2 3 4 5 6 7 8 9 t (S)
Analog signal value at sampling time: 4.9 V Quantized Analog signal value: 5.0 V Quantization error: 5.0 - 4.9 = 0.1 V

ACOE343 - Embedded Real-Time Processor Systems Frederick University

112

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

113

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 45mV voltage will become ...... If a D/A converter has 4 digital inputs then the analog signal at the output can have one out of 16 values. If a D/A converter has N digital inputs then the analog signal at the output can have one out of 2 . values.
D3 0 0 0 0 0 0 0 D2 0 0 0 0 1 1 1 D1 0 0 1 1 0 0 1 D0 0 1 0 1 0 1 0 Vout (mV) 0 5 10 15 20 25 30

0
1 1 1 1 1 1 1 1

1
0 0 0 0 1 1 1 1

1
0 0 1 1 0 0 1 1

1
0 1 0 1 0 1 0 1

35
40 45 50 55 60 65 70 75 114

ACOE343 - Embedded Real-Time Processor Systems Frederick University

Characteristics of Data Converters


1. 2. 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 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. Polarity Polar: the analog signals can have only positive values Bipolar: the analog signals can have either a positive or a negative value 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)

3.

4.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

115

5.

6.

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/(2N-1) = 2.55 /(28-1) 2.55/255 = 0.01 V/LSB = 10mV/LSB 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.
0.1Vo Vo

Characteristics of Data Converters (Cont)

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.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

116

ADC RESPONSE TYPES


Linear
Most common

Non-linear
Used in telecommunications, since human voice carries more energy in the low frequencies than the high.

ACOE343 - Embedded Real-Time Processor Systems Frederick University

117

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

Interfacing with Data Converters


Microprocessor compatible data converters are attached on the microprocessors bus as standard I/O devices.
D7 D6 D5 D4 D3 D2 D1 D0 A19
+5V

DAC
D7 V(+) D6 D5 D4 Vout D3 D2 D1 D0 Vref
CS WR Vout

8088 System

A0
IO/M' WR RD

A11 A10 A9 A8 A7 A6 A5 A4

V(-)

10K

10K

ACOE343 - Embedded Real-Time Processor Systems Frederick University

119

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;
2V

delayu(5); } } while (1) }

0V f = 1KHZ

200 steps of 10 mV each ==> 2V amplitude

200 steps of 5 us each ==> 1ms period or 1KHz frequency

ACOE343 - Embedded Real-Time Processor Systems Frederick University

120

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.
V ( volts) 4 3 2 1 0 1 5 6 7
o

t ( msec )

Assuming that an 8-bit A/D converter is used to interface a temperature sensor measuring temperature values in the temperature range 0 - 51.2 C o , specify: The resolution in of the system in C
The digital output word for a temperature of 32.5 C The temperature corresponding to a digital output word of 01001110
ACOE343 - Embedded Real-Time Processor Systems Frederick University 121
o

Você também pode gostar