You are on page 1of 86

# 08.

## 601 Microcontroller Based System Design

Module 2 Programming Timer /Counter Two 16 bit timers SFRs for programming timer/counter are: 1. TCON 2. TMOD 3. T0 (as TH0 and TL0) 4. T1 (as TH1 and TL1) TCON To control timer/counter operation Byte and Bit addressable, where 88H is byte address and 88H (TCON.0), 89H (TCON.1), 8AH (TCON.2), .are bit address Bit orientation:

Page 1

## 08.601 Microcontroller Based System Design

TMOD Timer Mode control SFR 8-bit register, byte address is 89H Bit orientation:

## Upper nibble for timer 1 and lower nibble for timer 0

8051 Timer modes: 1. Mode 1 programming 16 bit timer/counter TLx hold lower byte of timer/count value (00H to FFH) THx hold upper byte of timer/count value (00H to FFH) Allows 0000H to FFFFH values TLx acts as 8-bit prescaler

Page 2

## 08.601 Microcontroller Based System Design

Steps to program: 1. Select timer by TMOD register 2. Load THx and TLx values 3. Run timer by setting TRx bit in TCON 4. Overflows occur TFx becomes high and monitoring it get the delay by timer or count value 5. Stop the timer by TRx = 0 6. Clear the flag TFx = 0 7. For continuous operation repeat the process from loading values to THx and TLx

Page 3

## 08.601 Microcontroller Based System Design

To design count value for delay in mode 1 operation If f is Xtal frequency, then ft = f / 12 is timer frequency Timer operation is based on time period Tt = 1/ft seconds Let f = 12MHz , ft = 1MHz and Tt = 1us If THx and TLx hold XXYYH (16 bit ) count value, then overflow occurs when it incremented from FFFFH to 0000H Then delay Td = (FFFFH XXYYH + 1) Tt In decimal Td = (65535 N + 1) Tt, where N is the count value in decimal Example: Count value for delay 1ms with 12MHz Xtal frequency. From the above equation, N = 65536 (Td /Tt) = 65536 (1m / 1) N = 64536 = FC18H Then THx = FCH and TLx = 18H are the initial count values to provide 1ms delay. Program 1: Program to generate square wave of 10kHz at pin P1.7 using timer 0 (Xtal frequency to 8051 is 11.0592MHz) Solution: Design for count value : For 10kHz square wave, time period T = 1/10k = 100s And Ton = Toff = T/2 = 50s Then desired delay Td = 50s For timer in mode 1, count value N = 65536 (50s / 1.0851s) [Xtal frequency f = 11.0592MHz, timer frequency ft = 0.922MHz and Tt = 1.0851s] N = 65489.9 65489 = FFD1H Initial count value to THx = FFH and TLx = D1H

Page 4

## 08.601 Microcontroller Based System Design

Program: ORG 0 MOV TMOD, #00000001B ; Timer 0 , sw controlled , and mode 1 MOV TH0, #FFH ; Higher byte of 16-bit initial count MOV TL0, #D1H ; Lower byte of 16-bit initial count CPL P1.7 ACALL DELAY ; 50s delay CPL P1.7 ACALL DELAY SJMP REPEAT SETB TR0 JNB TF0, WAIT CLR TR0 CLR TR0 RET END

REPEAT:

DELAY: WAIT:

Page 5

## 08.601 Microcontroller Based System Design

2. Mode 0 programming Similar to mode 1, but 13-bit timer operation Least five bit of TLx as 5-bit prescaler timer and THx as 8-bit register

0000 to 1FFFH count values Count value N = 8192 (Td / Tt) Let N = 8182 = 1FF6H = 0001 1111 111 1 0110 b Then load TLx = 0001 0110b = 16H and THx = 1111 1111b = FFH All other operations are similar to mode 1

3. Mode 2 programming 8-bit auto reload mode, values ranges from 00H to FFH and THx hold it

## Count value N = 256 (Td/Tt)

Steps to program: Select timer by TMOD Load count value to THx and TLx Start timer by TRx = 1 When overflows in TLx results TFx set to 1 and THx value reloaded to TLx Stop timer by setting TRx = 0 and reset flag TFx = 0 For continuous operation, start timer again

Page 6

## 08.601 Microcontroller Based System Design

Program 2: Program to generate square wave 100 kHz at P1.0 (Xtal frequency to 8051 is 11.0592MHz) Solution: Design for count value: Required delay Td = 5s, timer time period Tt = 1.0851 s Count value N = 256 (5/1.0851) = 251.39 251 = FBH Program: ORG 0 MOV TMOD,#00100000B ; Timer 1, sw controlled and mode 2 MOV TH1,#0FBH ; Count value for 5s MOV TL1,TH1 RESTART: CPL P1.0 ACALL DELAY SJMP RESTART DELAY: WAIT: SETB TR1 JNB TF1, WAIT CLR TR1 CLR TF1 RET END

4. Mode 3 programming Split timer mode Timer 0 is split into two 8-bit timers TL0 to hold count value for timer 0 with over flow setting in TF0 TH0 to hold count value for timer 1 (Timer 1 stopped from other mode, but can be switched into mode 0, 1 or 2) with overflow setting in TF1

Page 7

## 08.601 Microcontroller Based System Design

Counter programming Timer as event counter Pulse outside from the microcontroller is source of frequency Modes, THx and TLx registers are same as timer operation C/T bit in TMOD is set as 1 activate timer as counter

Counter applications: To count objects, measure unknown frequency etc. P3.4 (T0) and P3.5 (T1) pins are used Program 3: System to measure unknown frequency and display it to LCD: Solution: Circuit diagram:

## (Xtal and RST connections are not shown)

Department of ECE, VKCET Page 8

## 08.601 Microcontroller Based System Design

Program: INPUT RS RW E LCD_DATA BIT BIT BIT BIT EQU P3.4 P2.0 P2.1 P2.2 P1

ORG 0 MAIN: MOV TMOD,#00010101B ; Timer 1 as mode 1 timer & timer 0 as ;counter in mode 1 SETB INPUT ACALL LCD_INIT ACALL DELAY CONTINUE: MOV A,#80H ; DDRAM address of LCD LCALL CMD_WRITE LCALL DELAY MOV TL0,#00 ;Lower byte initial count value MOV TH0,#00 ;Higher byte initial count value SETB TR0 ;Start counter ACALL DELAY_1S ;Wait 1 second MOV A,TL0 ;Load lower byte count value to A ACALL HEX_2_BCD ;Convert count value to BCD MOV A,R7 ;3rd digit of BCD to A ACALL BCD_2_ASCII ;Convert BCD to ASCII ACALL LCD_DISPLAY ;Display 3rd digit to LCD MOV A,R6 ; 2nd digit of BCD to A ACALL BCD_2_ASCII ;Convert BCD to ASCII ACALL LCD_DISPLAY ;Display 2nd digit to LCD MOV A,R5 ; 1st digit of BCD to A ACALL BCD_2_ASCII ;Convert BCD to ASCII ACALL LCD_DISPLAY ;Display 1st digit to LCD CLR TR0 ;Stop counter CLR TF0 ;Clear counter flag ACALL DELAY ;Wait a short time SJMP CONTINUE ;Repeat the process DELAY: MOV TH1,#0F8H ; 2ms delay program
Page 9

## 08.601 Microcontroller Based System Design

MOV TL1,#0CDH SETB TR1 JNB TF1,WAIT_2m CLR TR1 CLR TF1 RET ;1 second delay program

WAIT_2m:

DELAY_1S: MOV R0,#0FH NEXT: MOV TH1,#00 MOV TL1,#00 SETB TR1 WAIT_1S: JNB TF1,WAIT_1S CLR TR1 CLR TF1 DJNZ R0,NEXT RET ;LCD initializing LCD_INIT: CLR E MOV A,#38H LCALL CMD_WRITE LCALL DELAY MOV A,#01H LCALL CMD_WRITE LCALL DELAY MOV A,#0CH LCALL CMD_WRITE LCALL DELAY MOV A,#06H LCALL CMD_WRITE LCALL DELAY RET CMD_WRITE: MOV LCD_DATA,A CLR RW CLR RS SETB E

;Clear display

Page 10

## 08.601 Microcontroller Based System Design

LCALL DELAY CLR E SETB RW SETB RS RET DATA_WRITE: MOV LCD_DATA,A SETB RS CLR RW SETB E LCALL DELAY CLR E CLR RS SETB RW RET ACALL DATA_WRITE RET MOV R1,A MOV B,#64H DIV AB MOV R7,A MOV A,B MOV B,#0AH DIV AB MOV R6,A MOV R5,B RET ADD A,#30H RET END

;E = 0 ;RW = 1 ;RS = 1

## ;Data to LCD data bus ;RS = 1 ;RW = 0 ;E = 1 ;E = 0 ;RS = 0 ;RW = 1

LCD_DISPLAY:

HEX_2_BCD:

;Hex number divided by 100 ;3rd digit of BCD to R7 ;Reminder to A ;Reminder divided by 10 ; 2nd digit of BCD to R6 ;Reminder is 1st digit of BCD and move to R5

BCD_2_ASCII:

Page 11

## 08.601 Microcontroller Based System Design

Program 4 Program to display count value of 1Hz pulse up to 60 pulses: Circuit diagram is similar to previous example RS BIT P2.0 RW BIT P2.1 E BIT P2.2 INPUT BIT P3.4 LCD_DATA EQU P1 ORG 0 SETB INPUT MOV TMOD,#00010110B

MAIN:

MOV TH0,#0C4H MOV TL0,TH0 LCALL LCD_INIT CONTINUE: SETB TR0 NEXT: MOV R3,TL0 MOV A,#88H ACALL CMD_WRITE ACALL DELAY MOV A,R3 ADD A,#3CH ACALL HEX_2_BCD MOV A,R6 ACALL BCD_2_ASCII ACALL LCD_DISPLAY ACALL DELAY MOV A,R5 ACALL BCD_2_ASCII ACALL LCD_DISPLAY ACALL DELAY JNB TF0,NEXT CLR TR0 CLR TF0 SJMP CONTINUE All subroutines are similar to previous example.
Department of ECE, VKCET

; Timer 0 as counter in mode 2 & timer 1 as ;timer in mode 1 ; Initial count to timer 0, 256 60 = 196 = C4H

## ; 1st digit of BCD

;If count 60 go to label NEXT ; Stop counter ; Clear counter flag ; Continue the process
Page 12

## 08.601 Microcontroller Based System Design

Hardware control of timers By setting GATE = 1 bit in TCON

Set TRx = 1 and timer starts or stop according to the pulse by the switch connected to INTx pins

Page 13

Page 14

## 08.601 Microcontroller Based System Design

Steps in executing an interrupt 1. Finishes the instruction executing and save the address of next instruction on the stack 2. Saves the current status of all interrupts internally (not on stack) 3. Jumps to fixed location in memory in IVT, that holds the address of ISR 4. Starts execution of ISR until it reaches last instruction of subroutine, which must be RETI 5. Returns to place where microcontroller is interrupted, continue the process from saved address and status

Page 15

## 08.601 Microcontroller Based System Design

8051 interrupt handling registers 1. IE (Interrupt Enable) Register: 8-bit, bit addressable SFR byte address : A8H or A8H, A9H, .. to AFH Bit orientation:

EA Global interrupt enable bit, set to 1 to enable all interrupts ET2 Enable Timer 2 interrupt (only in 8052) ES Enable Serial port interrupt, set to 1 to enable serial port interrupt ET1 Timer 1 overflow interrupt EX1 Enable External interrupt 1 (INT1 ) ET0 Enable Timer 0 overflow interrupt EX0 Enable External interrupt 0 (INT0) 2. IP (Interrupt Priority) Register 8-bit, bit addressable SFR byte address: B8H

## or B8H, B9H,.. to BFH Bit orientation:

PT2 Priority Timer 2 (only in 8052) PS Priority of Serial port interrupt , set to 1 for highest priority , else default priority PT1 Priority of timer 1 interrupt, set to 1 for highest priority , else default priority PX1 Priority of external interrupt 1 (INT1), set to 1 for highest priority , else default priority PT0 Priority of timer 0 interrupt, set to 1 for highest priority , else default priority PX0 Priority of external interrupt 0 (INT0), set to 1 for highest priority , else default priority
Department of ECE, VKCET Page 16

## 08.601 Microcontroller Based System Design

Interrupt priority Highest to lowest priority External interrupt 0 INT0 Timer 0 interrupt TF0 External interrupt 1 INT1 Timer 1 interrupt TF1 Serial port RI and TI If any two or more interrupt priority bit is set to 1, then the priority of all interrupts are default priority Programming Timer Interrupts Steps: 1. Select timer by TMOD, load THx and TLx 2. Enable timer interrupt by IE 3. Run timer by TRx bit in TCON 4. Wait ISR (000BH or 001BH) of timer must contain the program for task Note: 1. Must avoid the memory space allocated to IVT for main program 2. If ISR is more size than allocated space (maximum 8 bytes), use jump instructions to point somewhere else in program memory

Page 17

## 08.601 Microcontroller Based System Design

Program 1: Program to generate square wave of 3kHz using timer 1 interrupt (11.0592MHz Xtal frequency) ORG 0 LJMP MAIN ORG 001BH CPL P0.0 RETI ORG 0030H MOV TMOD,#00100000B MOV TH1,#66H MOV TL1,TH1 MOV IE,#10001000B SETB TR1 SJMP WAIT END

ISR_T1:

MAIN:

; TIMER 1, MODE 2, AUTO RELOAD ; COUNT VALUE FOR 0.1666mS ; EA =1 and ET1 = 1

WAIT:

Program 2: Program to generate a square pulse of 9 kHz at pin P0.0 and toggle pin P2.0 for every 1 second. ORG 0 LJMP MAIN ORG 000BH CPL P0.0 RETI ORG 001BH LJMP WAIT_1S ORG 0030H MOV TMOD,#00010010B MOV TH0,#0CCH MOV TL0,TH0 MOV TH1,#4CH MOV TL1,#00H MOV R0,#00H

ISR_T0:

ISR_T1:

MAIN:

; TIMER 1 & 2, MODE 2 ; COUNT VALUE FOR 55us ; COUNT VALUE FOR 50ms

Page 18

## 08.601 Microcontroller Based System Design

MOV IE,#10001010B SETB TR0 SETB TR1 SJMP WAIT CJNE R0,#20,RETURN CPL P2.0 MOV R0,#00H MOV TH1,#4CH MOV TL1,#00H RETI INC R0 MOV TH1,#4CH MOV TL1,#00H RETI ; EI = 1, ET1 & ET0 = 1

WAIT: WAIT_1S:

RETURN:

Programming External Hardware Interrupts INT0 (P3.2) and INT1 (P3.3) Activating these interrupts, 8051 execution jumps to the ISRs of IVT location 0003H and 0013H respectively Enabled by IE register Two type triggering: Level triggered

Edge triggered

Page 19

## 08.601 Microcontroller Based System Design

SFR to select triggering: TCON

Lower nibble IEx : set to 1 by microcontroller when external interrupt edge (H to L) is detected, cleared by microcontroller when the interrupt is processed ITx : Interrupt type control bit, set to 1 specify falling edge triggering external interrupt, cleared to 0 specify low level triggered external interrupt

Minimum duration for low level triggering signal is 4 Machine cycles Minimum pulse duration to detect edge triggered interrupt is 1 Machine cycle HIGH and 1 Machine cycle LOW

Difference between RET and RETI instructions Both return to main program RETI clears ISR flags, indicates the service is over If RET is used all other lower priority interrupts are blocked

Page 20

## 08.601 Microcontroller Based System Design

Program 1: Program for up/down counter and display the count. Switch SW1 on P3.2 for up count and SW2 on P3.3 for down count. Display is a seven segment display on port 1. Circuit diagram:

Program: ORG 0 LJMP MAIN ORG 0003H LJMP UP ORG 0013H LJMP DOWN MAIN: MOV R1,#00 MOV DPTR,#SEG_CODE CONTINUE: CLR A ADD A,R1
Department of ECE, VKCET Page 21

## 08.601 Microcontroller Based System Design

MOVC A,@A+DPTR MOV P1,A MOV IE,#10000101B SETB IT0 SETB IT1 SJMP CONTINUE UP: INCR: CJNE R1,#09,INCR RETI INC R1 RETI CJNE R1,#0,DECR RETI DEC R1 RETI ;0 , ASCII for 0 ;1, ASCII for 1 ;2, ASCII for 2 ;3, ASCII for 3 ;4, ASCII for 4 ;5, ASCII for 5 ;6, ASCII for 6 ;7, ASCII for 7 ;8, ASCII for 8 ;9, ASCII for 9

## ; EA = 1, EX1 = 1 & EX0 =1 ; Edge triggering INT0 ; Edge triggering INT1

DOWN: DECR:

SEG_CODE: DB 11000000B DB 11111001B DB 10100100B DB 10110000B DB 10011001B DB 10010010B DB 10000010B DB 11111000B DB 10000000B DB 10011000B END

Page 22

## 08.601 Microcontroller Based System Design

Serial data communication Parallel Communication (Printer) Fast, but distance cannot be great. Expensive

## Serial Communication (Telephone line) Long distance Cheaper

Serial communication uses single or pair of data line instead of 8-bit data line of parallel communication For long distance transmission serial data is converted/de-converted into tones by modem

Page 23

## 08.601 Microcontroller Based System Design

Asynchronous or synchronous methods of serial data transmission: Asynchronous transmission transfers one byte at a time Synchronous transmission transfers a block of data at a time. They are commonly referred as UART (Universal Asynchronous ReceiverTransmitter) and USART (Universal Synchronous Asynchronous ReceiverTransmitter) Types of communication: 1. Simplex (only transmit)

2. Duplex

Page 24

## 08.601 Microcontroller Based System Design

8051 has full-duplex, asynchronous serial port, ie two lines and one byte transmission at a time Asynchronous serial communication data framing: Character oriented data transmission Each character is placed between a start and stop bits and is called framing

Mark is 1 signal to indicate no transfer Space is 0 signal indicates transfer is over Framing for ASCII of character A ASCII for A is 41H

Transmissions begins from start bit 0 followed by D0 (LSB) and ends at stop bit 1 after D7 (MSB) for 8-bit UART For 7-bit mode (older system), transmission end at D6 and 2 stop bits are used Other system have Parity bit with 7 or 8 bit character bits and start/stop bits are also included for data integrity

Page 25

## 08.601 Microcontroller Based System Design

Data Transfer Rate Bits per second (bps) is also called Baud rate (the number of signals changes per second, MODEM terminology) IBM PC/XT 100 to 9600 bps Pentium PC 56k bps (recent MODEM) Asynchronous serial data communication, the baud rate is limited to 100,000 bps. RS232 Standard To allow compatibility between different data communication equipments from different manufacturers Set by EIA (Electronics Industries Association) in 1960 Modified versions are: 1963 - RS232A, 1965- RS232B, 1969 - RS232C RS232 is serial I/O interfacing standard, but the input and output lines are not compatible with TTL/CMOS family RS232 logic: 0 bit is +3V to +25V 1 bit is -3V to -25V MAX232: Line driver Voltage converter Convert TTL logic to RS232 logic and vice versa Pin out diagram and circuit diagram:

Page 26

## 08.601 Microcontroller Based System Design

RS232 Connectors: DB25 Connector (25 pin) DB25P Plug connector (Male) DB25S Socket connector (Female)

Pin 1 GND Pin 2 TxD (transmitted data) Pin 3 RxD (Received data) Other pins for USART connections DB9 Connector (9 pin) DB9P (Male) and DB9S (Female)

Pin 2 RxD (Received data) Pin 3 TxD (Transmitted data) Pin 5 GND Other pins for USART

Page 27

## 08.601 Microcontroller Based System Design

8051 connection to RS232

8051 serial port programming SFRs for serial port programming: SBUF: To hold the byte of data for Txr or Rxr SCON: For select serial port mode, serial interrupt flags, receiver enable etc TH1, TMOD and TCON: To set baud rate using timer 1. TH1: Hold baud rate information, TMOD: To select timer 1 in auto-reload mode(Mode 2), TCON: To run the timer 1 IE and IP: If program is in ISR of serial port PCON: To double the selected baud rate SBUF: Serial buffer 8-bit register to hold serial data for txn or rxn Physically two register with one address 99H, one register only have write operation (for Txn) and other for read operation (for Rxn)

Page 28

## 08.601 Microcontroller Based System Design

SCON: Serial Control Register 8-bit, bit addressable Byte address: 98H, Bit addresses 98H, 99H,.or SCON.0, SCON.1, Bit orientation:

SM0 & SM1: Serial port Mode bits SM2: Multiprocessing communication enable bit, 1 to enable & 0 to disable REN: Receiver Enable bit, 1 to enable & 0 to disable TB8: Transmitted bit 8 (9th bit), 1 or 0 by program RB8: Received bit 8 (9th bit) TI: Transmit Interrupt Flag bit, 1 if transmission is over & cleared by sw RI: Receive Interrupt Flag bit, 1 if receiving is over & cleared by sw

## Serial port modes:

Mode 0: Shift register mode SBUF configures to receive/transmit 8 data bits using RxD pin (P3.0) for both functions. TxD serves as clock, where it serve a clock frequency of f/12 to external circuits Timing diagram:

Page 29

## 08.601 Microcontroller Based System Design

Not used for data communication between PC Only used for special high speed data communication devices

Mode 1: 8-bit UART, variable baud rate mode SBUF configures to receive 8-bit data, one start bit and a stop bit for fullduplex UART The format (framing) of data is:

After transmission (stop bit) TI flag (SCON.1) set to 1 Receiving bits at the center of bit time (inverse of baud rate), to avoid false triggering (cause noise) For receiving, RxD pin bits are shifted into SBUF at programmed baud rate only if: RI = 0 and SM2 = 0 After discarding start bit, 8 data bit go to SBUF, stop bit saved to RB8 (SCON.2) and RI = 1, indicates receiving data is over Mode 1 Baud rate: Timer 1 in its auto-reload mode (mode 2) is used to generate baud rate Timer 1 overflow flag TF1 determine baud frequency Baud frequency generated by timer 1:

## Where SMOD is PCON.7 bit, double baud rate bit; if it is 0,

else

f is Xtal frequency and TH1 is 8-bit value to program different baud rate
Department of ECE, VKCET Page 30

## 08.601 Microcontroller Based System Design

Standard baud rate for data communication between PCs are: 1. 110 bps 2. 150 bps 3. 300 bps 4. 600 bps 5. 1200 bps 6. 2400 bps 7. 4800 bps 8. 9600 bps 9. 19200 bps

Q: With Xtal frequency 11.0592MHz, find the TH1 value for getting baud frequencies a) 1200 bps b) 9600 bps Solution: For 2400 bps:

## Similarly for 9600 bps:

Mode 2: 9-bit UART, fixed baud rate mode Similar to mode 1, but 11 bits are transmitted: (1 start bit, 9 data bit and 1 stop bit). 9 th data bit is from TB8 bit of SCON register Baud rate can be programmed as:

Data format:

Page 31

## 08.601 Microcontroller Based System Design

Mode 3: 9-bit UART, variable baud rate mode Similar to mode 2, but baud frequency is similar to mode 1 and is:

Note: Commonly used mode is mode 1: 8-bit UART variable baud rate, because of its simplicity and versatility with other data communication devices Program 1: Send a string of message to 8051 TxD pin (P3.1) ORG 0 LJMP MAIN ORG 30H MOV TMOD,#00100000B MOV TH1,#0FDH MOV TL1,TH1 SETB TR1 MOV SCON,#01000000B MOV DPTR,#MESSAGE CLR A MOVC A,@A+DPTR CJNE A,#00,SEND SJMP STOP MOV SBUF,A JNB TI,WAIT CLR TI INC DPTR SJMP NEXT

MAIN:

; Timer 1, mode2 ; Baud rate 9600bps ; Start timer ;Serial mode 1 ;Pointer for message string ; Access code memory for message ;If null character, stop txn.

NEXT:

## STOP: SEND: WAIT:

; SBUF = A, data to Txr ; Wait for Txn Flag = 1 ; Clear Txn Flag for next txn ;For next character

Page 32

## 08.601 Microcontroller Based System Design

Program 2: Receive a string of message (end of message is Carriage Return - ASCII is 0DH) from RxD (P3.0) and send it to TxD (P3.1) ORG 0 LJMP MAIN ORG 30H MOV TMOD,#00100000B MOV TH1,#0FDH MOV TL1,TH1 SETB TR1 MOV SCON,#01010000B MOV R0,#40H ACALL RECEIVE MOV A,R7 MOV @R0,A INC R0 CJNE A,#0DH,NEXT_RXR MOV R0,#40H MOV A,@R0 ACALL SEND CJNE A,#0DH,SEND_CHAR SJMP CONTINUE INC R0 SJMP NEXT_TXR JNB RI,RECEIVE CLR RI MOV R7,SBUF RET MOV SBUF,A JNB TI,WAIT CLR TI RET END
Page 33

MAIN:

CONTINUE: NEXT_RXR:

NEXT_TXR:

SEND_CHAR:

SEND: WAIT:

Page 34

## 08.601 Microcontroller Based System Design

Functions of pins: Pins Functions CS Active low input, if low chip is active else chip is off RD Active low input also called output enable (OE), if it is low converted digital output is available in data bus D7 to D0 WR Active low input, if it is high to low ADC initialize for conversion and if it is low to high ADC starts conversion. So this pin is also called start of conversion (SOC) INTR Active low output, this will be high after ADC initialize and becomes low after conversion time of ADC. This pin can be use to interrupt microcontroller to read digital data from ADC. This pin is also called end of conversion (EOC) CLKin Input pin to apply external clock source. To use internal clock source, this and CLK R pins are used to connect frequency determining elements R an C CLK R To use internal clock source R is connected across this and CLK in pin, the clock frequency is f = 1/ (1.1 RC). If external clock is using this pin is at floating Vin(+) and Differential analog inputs. To connect single ended input, Vin(-) = 0V Vin(-) AGND Analog ground Vcc and Power supply and digital ground DGND Vref/2 Reference voltage, it determines the range of input analog voltage and also stepsize D7 to D0 Digital data output and output digit value is Dout = Vin / step size

Page 35

## 08.601 Microcontroller Based System Design

Relation between Vref and step size: Vref/2 (V) Vin (V) No connection 0 to 5V 2 0 to 4V 1.5 0 to 3V 1.28 0 to 2.56V ADC0804 timing diagram:

Step size (mV) 5/256 = 19.53 4/255 = 15.62 3/256 = 11.71 2.56/256 = 10

Page 36

## 08.601 Microcontroller Based System Design

Timing and electrical characteristics:

Page 37

## 08.601 Microcontroller Based System Design

Programs: Prrogram to convert analog signal to digital data and display the data on LEDs connected to port 0 Solution: Circuit diagram:

(Xtal and RST connections are not shown) Algorithm: 1. Start 2. Set Port 1 as input 3. Set EOC (INTR) pin as 1 4. Set SOC (WR) pin as 1 5. Set OE (RD) pin as 1 6. Clear SOC (WR) pin to 0 7. Wait 150ns 8. Set SOC (WR) pin as 1 9. If EOC (INTR) pin is high, wait in this step, else go to next step 10. Clear OE (RD) signal 11. Read digital data from Port 1 12. Write digital data to Port 0 13. Go to step 6 for repeat the process (Assume crystal frequency to 8051 is 12 MHz)
Department of ECE, VKCET Page 38

## 08.601 Microcontroller Based System Design

OE SOC EOC IN_DATA OUT_DATA BIT BIT BIT EQU EQU P2.7 P2.6 P2.5 P1 P0

ORG 0 LJMP MAIN ORG 30H MAIN: MOV P1, #FFH SETB EOC SETB SOC SETB OE CONTINUE: CLR SOC NOP NOP SETB SOC WAIT: JB EOC, WAIT CLR OE MOV A, IN_DATA MOV OUT_DATA, A SJMP CONTINUE

Page 39

## 08.601 Microcontroller Based System Design

DAC interfacing Counter part of ADC Digital to analog converter converts digital data to analog voltage/current signal Basically two types: binary weighted and R/2R ladder Most familiar is R/2R ladder type DAC0808 DAC0808 chip Some features: 8-bit monolithic Full scale output current settling time of 150 ns No reference current (IREF) trimming is required for most applications since the full scale output current is typically 1 LSB of 255 IREF/256. Interface directly with popular TTL, DTL or CMOS logic levels Low power consumption: 33 mW @ 5V Pin out diagram:

Functions of pins: Pins Functions Vcc & GND Power supply pins VEE -ve power supply (-12V) IoAnalog current output A1(MSB) to Digital input data lines A8(LSB) Vref(+) and Reference voltage to provide reference current Iref Vref(-) Compensation Compensation capacitor for ve power supply

Page 40

## 08.601 Microcontroller Based System Design

Output current

Where R14 is the resistance connected to pin 14 DAC0808 interfacing circuit: The output of DAC0808 is current and have ripples Output require I-V converter followed by LPF Circuit diagram:

Vout = Io Rf For LPF RC value can be determined by either the maximum frequency of the required analog output or by the data transfer rate of 8051

Page 41

## 08.601 Microcontroller Based System Design

Square wave and rectangular wave generation: By sending a data corresponding to peak amplitude and zero continuously Frequency of wave depends on delay program Program: ORG 0 MAIN: MOV P1, #00 ACALL DELAY MOV P1, #FFH ACALL DELAY SJMP MAIN DELAY: WAIT: MOV R0, #2CH DJNZ R0, WAIT RET END The peak amplitude of the signal is Io Rf * 255/256 = 9.96V Ton = Toff = 100s, then frequency of the square wave is 5 kHz

Using different delay programs rectangular wave can be generated. Saw tooth and triangular wave generation: By sending data from 00H to FFH continuously with one step size. The frequency and peak amplitude of the signal are maximum value if there is no delay introduced between each step Frequency can be changed by including required delay between each step. Peak voltage of the wave is reduced by changing the maximum data. To generate triangular wave send data from 00H to FFH for rising and FFH to 00H for falling with one step size. Similar to other waves, the frequency and amplitude can change.

Page 42

## 08.601 Microcontroller Based System Design

Programs: a) Saw tooth wave MAIN : REPEAT: ORG 0 CLR A MOV P1, A INC A SJMP REPEAT END ORG 0 CLR A MOV P1, A INC A CJNE A, #FF, INCREMENT MOV P1, A DEC A CJNE A, #00, DECREMENT SJMP INCREMENT END

## b) Triangular wave: MAIN: INCREMENT :

DECREMENT:

Applications: Temperature measurement system: The basic block diagram of temperature measurement system is:

Sensor are thermostats, thermisters or any other temperature sensors Usually LM34/35 IC temperature sensors are used; whose output voltage is directly proportional to the temperature as given below: For LM35 temperature range -55 to 150oC, 10mV/oC sensitivity Signal conditioner is either amplifier, I-V or V-I converter etc. to provide suitable input signal to ADC ADC converts analog signal corresponding to temperature into digital data Microcontroller controls ADC and acquire digital data corresponding to temperature and process it to get a suitable signal to display
Page 43

## 08.601 Microcontroller Based System Design

LED (either LEDs or 7 segment display) or LCD are used to display the measure quantity of temperature Circuit diagram:

Signal conditioning is not used Program to read data corresponding to temp and display its BCD data. (Assume that calibrated output is available at ADC output: ie for 0 oC data is 0000 0000, for 10 oC data is 0000 1010, for 50oC data is 0011 0010, and so on..) OE SOC EOC BIT BIT BIT P2.0 P2.1 P2.2

MAIN: CONTINUE:

ORG 0 MOV P1, #FFH SETB EOC ACALL ADC_START ACALL ADC_READ MOV R0, A ACALL HEX_BCD MOV P3, A CONTINUE

Page 44

## 08.601 Microcontroller Based System Design

ADC_START: SETB SOC SETB OE CLR SOC SETB SOC RET JB EOC, ADC_READ CLR OE MOV A, P1 RET MOV B, #0AH DIV AB MOV R7, B ; Lower digit MOV B, #0AH DIV AB MOV A, B ; Upper byte SWAP A ORL A, R7 ; Packing BCD RET

HEX_BCD:

Page 45

## 08.601 Microcontroller Based System Design

Stepper motor interfacing Stepper motor translates electrical pulses into mechanical motion Possible to precise control speed and position without feedback sensors Applications: Computer peripherals (Hard disk, CD, FD, Printer, Plotter etc.) Business machines (Card reader, Type writer, Copy machine, etc.) Control system Machine tools (Milling machines, drilling machines, etc) Constructional details: Consists rotor (Permanent magnet) surrounded by stator

Different views:

Page 46

## 08.601 Microcontroller Based System Design

Four stator motor also called four-phase or uni-polar stepper motor Total 6 leads: 4 leads for stator windings and 2 for center tapped common windings

As the sequence of pulse is applied to each stator winding, the rotor will switch to next step due to the flux linkage across the stator and rotor Rotor of conventional motors runs freely, but stepper motors rotor moves in a fixed repeatable increment, allows a precise position The most common stepper motors have four stator windings that are paired with a center-tapped common. This type of stepper motor is commonly referred to as a four-phase stepper motor The center tap allows a change of current direction in each of two coils when a winding is grounded, thereby resulting in a polarity change of the stator.

Page 47

## 08.601 Microcontroller Based System Design

Direction of motion and position of rotor: Full step 4 step motion (Wave drive)

Page 48

## 08.601 Microcontroller Based System Design

Step angle Depends on internal construction; number of teeth on the stator and the rotor.

Consider a motor; Stator with 8 teeth and rotor with 6 teeth, have 15o step angle Step angle is minimum degree of rotation associated with a single step Different motor have different step angle Standard angles and steps per revolution (or 360 degree) are: 0.72 500 1.8 200 2.0 180 5.0 72 7.5 48 15 24 Steps per second and rpm relationship is:

After completing every four steps, the rotor moves only one tooth pitch The smaller the step-angle, the more teeth the motor passes Eg. In a stepper motor with 200 steps per revolution, its rotor has 50 teeth since 4 x 50 = 200 steps are needed To allow for finer resolutions, all stepper motors allow what is called an 8-step switching sequence. Its also called half-stepping, since each step is half of the normal step angle
Department of ECE, VKCET Page 49

## 08.601 Microcontroller Based System Design

Full step 4-step sequence (clock wise) Step 1 2 3 4 Winding Winding Winding Winding A B C D 1 0 0 1 0 1 1 0 0 0 1 1 1 1 0 0

Full step 4-step wave drive sequence (clock wise) Step 1 2 3 4 Winding Winding Winding Winding A B C D 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0

Page 50

## 08.601 Microcontroller Based System Design

Half step 8-step sequence (clock wise) Combination of normal and wave step sequence Have finer resolution

Step 1 2 3 4 5 6 7 8

## Winding Winding Winding Winding A B C D 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 0

Motor speed Measure in steps per second; function of switching rate Determined by delay introduced between each step Eg. Let step angle of motor is 7.5 degree. If required RPM is 20, then steps per second = 20 x 48 /60 = 16 Therefore for one step 1/16 = 62.5ms is required Then pulse duration of a step sequence signal is 62.5ms
Department of ECE, VKCET Page 51

## 08.601 Microcontroller Based System Design

Holding torque Motor shaft at zero rpm, amount of torque from an external source to break away the shaft from the position and it is function of applied power Types of stepper motor Universal (eight leads) Unipolar (6 leads) Bipolar (4 leads) Motor drivers To avoid back emf from motor winding To provide higher current to drive motor Either by Darlington pair transistors or driver ICs ULN2003, ULN2803, L298 etc. 8051 and stepper motor interfacing circuit and programming

Page 52

## 08.601 Microcontroller Based System Design

Program to rotate the stepper motor continuously in clock-wise direction (full step 4-step wave drive sequence) Solution: Step sequence as per the connection on circuit diagram Winding A Winding B Winding C Winding D Step (P2.0) (P2.3) (P2.2) (P2.1) 1 0 0 0 1 0 2 0 0 1 0 3 0 1 0 0 4 1 0 0 Program: ORG 0 MAIN: MOV TMOD,#01H MOV DPTR,#FS_WAVE MOV R0,#04H REPEAT: CLR A MOVC A,@A+DPTR MOV P2,A ACALL DELAY_1S INC DPTR DJNZ R0,REPEAT SJMP MAIN DELAY_1S: WAIT_1S: MOV R7,#14H ;50ms x 20 = 1sec delay LCALL DELAY DJNZ R7,WAIT_1S RET MOV TH0,#4CH ;Higher byte count value for 50ms MOV TL0,#01H ;Lower byte count value for 50ms SETB TR0 JNB TF0,WAIT CLR TR0 CLR TF0 RET DB 01H,02H,04H,08H ;Step sequence END
Page 53

DELAY:

WAIT:

FS_WAVE:

## 08.601 Microcontroller Based System Design

Program to rotate stepper motor in anti-clock wise direction when P1.0 is 0, else rotate in clock wise direction (use half step 8-step sequence) Solution: Sequence as per the connection in circuit diagram: Step 1 2 3 4 5 6 7 8 Winding Winding Winding Winding A B C D 1 0 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0

Program: MAIN: CONTINUE: ORG 0 SETB P1.0 MOV TMOD,#01 MOV C,P1.0 JC C_WISE MOV DPTR,#ACW SJMP STRT MOV DPTR,#CW MOV R0,#08H CLR A MOVC A,@A+DPTR MOV P2,A ACALL DELAY_1S JNC DECR INC DPTR DJNZ R0,REPEAT SJMP CONTINUE DEC DPL SJMP NEXT ;P1.0 as input ;Timer 0 for delay ;Status of P1.0 to CY ;If P1.0 is 1, go to label C_WISE for CW ;rotation ;Pointer for ACW step sequence ;Pointer for CW step sequence ;Counter for half-step sequence

NEXT: DECR:

Page 54

## 08.601 Microcontroller Based System Design

DELAY_1S: WAIT_1S: MOV R7,#14H LCALL DELAY DJNZ R7,WAIT_1S RET MOV TH0,#4CH MOV TL0,#01H SETB TR0 JNB TF0,WAIT CLR TR0 CLR TF0 RET DB 09H, 01H, 03H, 02H, 06H, 04H, 0CH DB 08H END

DELAY:

WAIT:

## ;Step sequence CW: ACW:

Program to rotate stepper motor with 1.8o step angle, at a speed of 6 RPM in 360o clockwise for 2 times and 11 RPM in 360 o anti-clock wise direction for 4 times continuously (Xtal frequency of 8051 is 11.0592MHz ) Solution: Step sequence for normal drive as per the connection shown in the circuit is: For clockwise rotation: Step Winding A Winding B Winding C Winding D (P2.0) (P2.3) (P2.2) (P2.1) 1 1 0 0 1 1 2 0 0 1 0 3 0 1 1 0 4 1 1 0 o For RPM = 6, Step angle = 1.8 Steps/sec = 6 x 200/60 = 20 For one step 1/20 = 50ms Design 50ms delay program After full step pulses 1.8 x 4 = 7.2 degree rotation takes place, then for 360 degree, repeat the process for 360/7.2 = 50 times Continue the above process for two times
Page 55

## 08.601 Microcontroller Based System Design

Anti-clock wise rotation For anti-clockwise rotation (Half step): Step 1 2 3 4 5 6 7 8 Winding Winding Winding Winding A B C D 1 0 0 0 0 0 1 1

## Program: MAIN: CONTINUE: REPEAT: NEXT:

1 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 0 For RPM = 11, Step angle = 1.8o Steps/sec = 11 x 200/60 = 36.66 For one step 1/36.66 = 27.27ms (use 25ms) Design 25ms delay program After half step pulses 1.8 x 8 = 14.4 degree rotation takes place and for 360 degree repeat the process for 360/14.4 = 25 times Continue the above process for 4 times ORG 0 MOV TMOD,#01 MOV R2,#02H ;counter for 2 times cw rotation MOV R1,#32H ;counter for 50 times to rotate 360o MOV R0,#04H MOV DPTR,#FS_CW CLR A MOVC A,@A+DPTR MOV P2,A ACALL DELAY ;25ms delay ACALL DELAY ;25ms delay INC DPTR DJNZ R0,NEXT DJNZ R1,REPEAT DJNZ R2,CONTINUE MOV R2,#04 ;Count for 4 times acw rotation MOV R1,#19H ;count for 25 times to rotate 360o
Page 56

CONTINUE1:

## 08.601 Microcontroller Based System Design

REPEAT1: NEXT1: MOV R0,#08H MOV DPTR,#FS_ACW CLR A MOVC A,@A+DPTR MOV P2,A ACALL DELAY INC DPTR DJNZ R0,NEXT1 DJNZ R1,REPEAT1 DJNZ R2,CONTINUE1 SJMP MAIN MOV TH0,#0A6H MOV TL0,#00H SETB TR0 JNB TF0,WAIT CLR TR0 CLR TF0 RET ;half step sequence count

;25ms

DELAY:

WAIT:

Page 57

## 08.601 Microcontroller Based System Design

LCD Interfacing LCD is wide spreading display conventional to LEDs, due to: a) Low cost b) Ability to display numbers, characters and graphics c) Display refreshing task is not required d) Easy to program for characters and graphics The pins and its functions of 16 x 2 character LCD module:

Timing diagram:

Page 58

## 08.601 Microcontroller Based System Design

Timing characteristics:

Note: DDRAM Display Data RAM Where I/D = 1, increment DDRAM address, cursor moves to right I/D = 0, decrement DDRAM address, cursor moves to left SH = 1, shift entire display according to I/D
Department of ECE, VKCET Page 59

## 08.601 Microcontroller Based System Design

SH = 1, no shift of entire display CGRAM Character Generator RAM D = 1, entire display turn on D = 0, display turn off, but display data remains in DDRAM C = 1, cursor turn on C = 0, cursor disappear, but I/D preserves its data B = 1, cursor blink on B = 0, cursor blink off

DL = 1, 8-bit bus mode DL = 0, 4 bit bus mode N = 1, 2 line display mode N = 0, 1 line display mode F = 1, 5 x 10 dots font F = 0, 5 x 7 dots font Address for DDRAM: AC6 to AC0 are:

The for position 1 in line 1 the command byte is 1000 0000 = 80H, for position 2 : 1000 0001 = 81H .
Department of ECE, VKCET Page 60

## 08.601 Microcontroller Based System Design

Program 1 Interface 16 x 2 LCD and display a message (maximum length of the message should be less than 32) Solution: Circuit diagram

Xtal, RST and Power supply connection are not shown Program: Algorithm: Main program Steps: 1. Start 2. Write command byte to LCD for function setting. Command byte: 0011 1000 = 38H 3. Wait minimum 40s 4. Write command byte to LCD for function setting. Command byte: 0000 0001 = 01H 5. Wait minimum 1.64ms 6. Write command byte to LCD for display on and cursor blinking. Command byte: 0000 1111 = 0FH 7. Wait minimum 40s
Department of ECE, VKCET Page 61

## 08.601 Microcontroller Based System Design

8. Write command byte to LCD for entry mode: left entry (increment cursor to right). Command byte: 0000 0110 = 06H 9. Write command byte to LCD for DDRAM address. Command byte: 1000 0000 = 80H 10. Wait minimum 40 s 11. Point starting address of LUT by DPTR, Counter R0 = 0 for getting the length of message 12. A [DPTR], ASCII of character for message to A 13. If A = 0 (ASCII of NULL character) go to step 20, else next step 14. If R0 =16 go to next step, else go to step 16 15. Write command byte to LCD for DDRAM address. Command byte: 1100 0000 = C0H 16. Write data byte (ASCII) to LCD 17. Wait minimum 40s 18. DPTR = DPTR +1, R0=R0+1 19. Go to step 12 20. Stop LCD command write Steps: 1. Clear E 2. Move command byte to DB0-DB7 3. Clear RS and RW 4. Set E to 1 5. Wait 40 s 6. Clear E 7. Set RS and RW 8. Return to main program

Page 62

## 08.601 Microcontroller Based System Design

LCD data write Steps: 1. Move data byte to DB0-DB7 2. Set RS to 1 and clear RW 3. Set E to 1 4. Wait 40 s 5. Clear E 6. Clear RS and set RW to 1 7. Return to main program Program: RS BIT P2.0 RW BIT P2.1 E BIT P2.2 LCD_BUS EQU P1 ORG 0 MOV TMOD,#01H MOV A,#38H LCALL CMD_WRITE LCALL DELAY_40u MOV A,#01H LCALL CMD_WRITE LCALL DELAY_2m MOV A,#0FH LCALL CMD_WRITE LCALL DELAY_40u MOV A,#06H LCALL CMD_WRITE LCALL DELAY_40u MOV A,#80H LCALL CMD_WRITE LCALL DELAY_40u MOV R0,#00H MOV DPTR,#MESSAGE CLR A MOVC A,@A+DPTR CJNE A,#0, DISPLAY
Page 63

MAIN:

NEXT:

## 08.601 Microcontroller Based System Design

STOP: DISPLAY: LINE_2: SJMP STOP CJNE R0,#10H,LINE_1 MOV R1,A MOV A,#0C0H LCALL CMD_WRITE LCALL DELAY_40u MOV A,R1 LCALL DATA_WRITE LCALL DELAY_40u INC R0 INC DPTR SJMP NEXT CLR E MOV LCD_BUS,A CLR RW CLR RS SETB E LCALL DELAY_40u CLR E SETB RW SETB RS RET MOV LCD_BUS,A SETB RS CLR RW SETB E LCALL DELAY_40u CLR E CLR RS SETB RW RET MOV TH0,#0FFH MOV TL0,#0DBH SETB TR0
Page 64

LINE_1:

CMD_WRITE:

DATA_WRITE:

DELAY_40u:

## 08.601 Microcontroller Based System Design

WAIT_40u: JNB TF0,WAIT_40u CLR TR0 CLR TF0 RET

Page 65

## 08.601 Microcontroller Based System Design

DELAY_2m: MOV TH0,#0F8H MOV TL0,#0CCH SETB TR0 JNB TF0,WAIT_2m CLR TR0 CLR TF0 RET DB"ECE Department, VKCET",0 END

WAIT_2m:

MESSAGE:

Keyboard Interfacing Keyboard is widely used input device along with output devices like LCD, seven segment displays etc To interface keyboard, understanding keyboard mechanism, key pressing and detecting is essential Interfacing keyboard to 8051 Interfacing program must guard against two factors: a. Human factors: 1. More than one key pressed 2. Key pressed and held 3. Rapid key press and release b. Key factors Bouncing of key contacts Key configurations Commercially available key configurations are: 1. Lead per keyboard

## 16 input lines are required to read the keys

Department of ECE, VKCET Page 66

## 08.601 Microcontroller Based System Design

2. Matrix keyboard

4 input and 4 output lines are required to read the keys 3. Coded key board

Page 67

## 08.601 Microcontroller Based System Design

Scanning and identify the key Consider the connection of 4x4 matrix keyboard with 8051

Scanning and identifying steps Ground all rows , P1.3 P1.0 =0000 Read all columns, if data read P2.3 P2.0 = 1111, no key is pressed Continue above process until a key is pressed If P2.3 P2.0 = 1101, one of the key in column 1 is pressed To identify the key in the column, ground row 0 only, P1.3 P1.0 = 1110 Read columns, if P2.3 P2.0 = 1111 , no key in the row 0 is pressed Continue the above process until pressed is detected If key 5 is pressed, then read data during scanning is P2.3 P2.0 = 1101 Identifying step; grounding P1.3 P1.0 = 1101, read data becomes P2.3 P2.0 = 1101

Page 68

## 08.601 Microcontroller Based System Design

Programs Program to read a key from 4 x 4 matrix keyboard and display its value to seven segment display ORG 0 LJMP MAIN ORG 30H MAIN: MOV TMOD,#00000001B MOV P2,#0FFH K1: MOV P1,#0 MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,K1 ACALL DELAY MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,OVER SJMP K2 ACALL DELAY MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,OVER1 SJMP K2 MOV P1,#00001110B MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,ROW_0 MOV P1,#00001101B MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,ROW_1 MOV P1,#00001011B MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,ROW_2 MOV P1,#00000111B
Page 69

K2:

OVER:

OVER1:

## 08.601 Microcontroller Based System Design

MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,ROW_3 SJMP K2 MOV P1,#00001101B MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,ROW_1 MOV P1,#00001011B MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,ROW_2 MOV P1,#00000111B MOV A,P2 ANL A,#00001111B CJNE A,#00001111B,ROW_3 SJMP K2 DB 11000000B,11111001B,10100100B,10110000B DB 10011001B,10010010B,10000010B,11111000B DB 10000000B,10011000B,10001000B,10000011B DB 11000110B,10100001B,10000110B,10001110B MOV TH0,#4CH MOV TL0,#01H SETB TR0 JNB TF0,WAIT CLR TR0 CLR TF0 RET END

WAIT:

Page 70

## 08.601 Microcontroller Based System Design

PIC Microcontrollers Different 8 bit microcontrollers: 1970s: Motorolas 6800 1980s: Intels 8051 1990s: Microchips PIC Cheap, small and practical microcontroller which was both easy to use and program PIC Peripheral Interface Controller Why PIC popular? Low cost Wide availability Large user base Extensive collection of application notes Availability of low cost or free development tools Serial programming capability. .Different PIC core architecture 1. Baseline Core Devices (ex:PIC12C50x, PIC16C5x) 12 bit wide code memory, Tiny two level deep call stack. 33 instructions PIC10, PIC12 & PIC16 devices 6 pin to 40 pin packages. 2. Mid-Range Core Devices (ex:PIC12C50x, PIC16C5x) 14 bit wide code memory Improved 8 level deep call stack 35 instructions Increased opcode width allows Addressing of more memory PIC12 and PIC16 devices. 3. PIC17 High End Core Devices (Ex:PIC17C4x,PIC17C7xx) Never became popular and superseded by the PIC18 architecture. 16 bit wide opcodes (allowing many new instructions) : 58 instructions 16 level deep call stack. Packages of 40 to 68 pins. A memory mapped accumulator Read access to code memory (table reads) Direct register to register moves An external program memory interface to expand the code space An 8bit x 8bit hardware multiplier
Department of ECE, VKCET Page 71

## 08.601 Microcontroller Based System Design

. 4. PIC18 High End Core Devices (ex:PIC18Cxxx) New high end PIC architecture It inherits most of the features and instructions of the 17 series, 77 instructions, much deeper call stack (31 levels deep) The call stack may be read and written Offset addressing mode A new indexed addressing mode in some devices 5. PIC24 and dsPIC 16 bit Microcontrollers Architectures differ significantly from prior models. dsPICs are Microchip's newest family (started in 2004) Digital signal processing capabilities. Microchip's first inherent 16-bit (data) microcontrollers. Hardware MAC (multiply-accumulate) Barrel shifting Bit reversal (16x16)-bit multiplication Other digital signal processing operations. Can be efficiently programmed in C . .PIC16F87X Microcontrollers Mid range core 28/40-Pin 8-Bit CMOS FLASH Microcontrollers PIC16F873, PIC16F874 (28 pin ICs) PIC16F876 and PIC16F877 devices (40 pin ICs) Microcontroller Core Features: High performance RISC CPU Only 35 single word instructions All single cycle instructions except for program branches which are two cycle Operating speed: DC - 20 MHz clock input DC - 200 ns instruction cycle Up to 8K x 14 words of FLASH Program Memory, Up to 368 x 8 bytes of Data Memory (RAM) Up to 256 x 8 bytes of EEPROM Data Memory Pin out compatible to the PIC16C73B/74B/76/77
Department of ECE, VKCET Page 72

## 08.601 Microcontroller Based System Design

Interrupt capability (up to 14 sources) Eight level deep hardware stack Direct, indirect and relative addressing modes Power-on Reset (POR) Power-up Timer (PWRT) and Oscillator Start-up Timer (OST) Watchdog Timer (WDT) with its own on-chip RC oscillator for reliable operation Programmable code protection Power saving SLEEP mode Selectable oscillator options Low power, high speed CMOS FLASH/EEPROM technology Fully static design In-Circuit Serial Programming (ICSP) via two pins Single 5V In-Circuit Serial Programming capability In-Circuit Debugging via two pins Processor read/write access to program memory Wide operating voltage range: 2.0V to 5.5V High Sink/Source Current: 25 mA Commercial, Industrial and Extended temperature ranges Low-power consumption: < 0.6 mA typical @ 3V, 4 MHz 20 A typical @ 3V, 32 kHz < 1 A typical standby current Peripheral Features: Timer0: 8-bit timer/counter with 8-bit prescaler Timer1: 16-bit timer/counter with prescaler, can be incremented during SLEEP via external crystal/clock Timer2: 8-bit timer/counter with 8-bit period register, prescaler and postscaler 5 IO ports Two Capture, Compare, PWM modules Capture is 16-bit, max. resolution is 12.5 ns Compare is 16-bit, max. resolution is 200 ns PWM max. resolution is 10-bit 10-bit multi-channel Analog-to-Digital converter Synchronous Serial Port (SSP) with SPI (Mastermode) and I2C (Master/Slave) Universal Synchronous Asynchronous Receiver Transmitter (USART/SCI) with 9-bit address detection

Page 73

## 08.601 Microcontroller Based System Design

. Parallel Slave Port (PSP) 8-bits wide, with external RD, WR and CS controls (40/44-pin only) Brown-out detection circuitry for Brown-out Reset (BOR)

Page 74

## 08.601 Microcontroller Based System Design

Pin out diagram of PIC16F877

. Pin details:

Page 75

Page 76

Page 77

## 08.601 Microcontroller Based System Design

.Architecture of PIC16F877 .

Page 78

## 08.601 Microcontroller Based System Design

CPU ALU 8 bit Perform operation with temporary working register (W) and any other register file W register 8 bit register which hold one operand and result after an ALU operation Status register

8 bit Contains the arithmetic status of ALU To select register bank File Selection Register (FSR) Data pointer, used for indirect addressing in the whole register file IO ports Memory organization Three memory blocks: 1. Program memory (Flash) 2. Data memory (RAM) (Separate bus for both memory) 3. Data EEPROM Program memory mapping 8k x 14 word ROM (Flash or EEPROM)

Page 79

## 08.601 Microcontroller Based System Design

Program Counter (PC) .Keeps track of the program execution by holding the address of the current instruction .PCL and PCLATH SFRs for accessing 13 bit PC

PCL (8 bit) is readable and writable PCH (5 bit) not readable, but indirectly writable by PCLATH least 5 bits Stack memory The stack space is not part of either program or data space and the stack pointer (SP) is not readable or writable. Stack is a special block of RAM memory The PC is PUSHed onto the stack when a CALL instruction is executed, or an interrupt causes a branch.
Department of ECE, VKCET Page 80

## 08.601 Microcontroller Based System Design

The stack is POPed in the event of a RETURN, RETLW or a RETFIE instruction execution. The stack operates as a circular buffer. This means that after the stack has been PUSHed eight times, the ninth push overwrites the value that was stored from the first push. The tenth push overwrites the second push (and so on). Reset vector Each time the main program execution starts at address 0000 - Reset Vector. Interrupt vector The address 0004 is reserved for the interrupt service routine (ISR).

Page 81

## 08.601 Microcontroller Based System Design

Data memory mapping 368 byte RAM is partitioned to 4 register banks and contains GPRs and SFRs

Page 82

## 08.601 Microcontroller Based System Design

Bank 3 GPRs and SFRs

## Summary of Data memory

By RP0 and RP1 bits in STATUS register any one bank can be selected Using IRP bit in STATUS register direct or indirect

Page 83

## 08.601 Microcontroller Based System Design

Data EEPROM (256 bytes) Similar to Program flash, but r/w operation is byte , where in program memory it is word r/w operation Write operation can be performed during normal power source Vdd SFRs for accessing Data EEPROM EEADR :Hold data EEPROM address EEDATA : Hold the data from/to the data EEPROM EEDATA : EEDATH Hold 14 bit data from flash memory EEADRH:EEADR hold 13 bit flash memory address EECON1 & EECON2 : Control registers for configure IO Ports 1. Port A and TRISA Registers PORTA is a 6-bit wide, bi-directional port 5 analog inputs and timer 0 clock input are multiplexed with this pins The corresponding data direction register is TRISA. Setting a TRISA bit (= 1) will make the corresponding PORTA pin an input Clearing a TRISA bit (= 0) will make the corresponding PORTA pin an output 2. Port B and TRISB registers PORTB is an 8-bit wide, bi-directional port. The corresponding data direction register is TRISB. Setting a TRISB bit (= 1) will make the corresponding PORTB pin an input Clearing a TRISB bit (= 0) will make the corresponding PORTB pin an output
Department of ECE, VKCET Page 84

## 08.601 Microcontroller Based System Design

Three pins of PORTB are multiplexed with the Low Voltage Programming function: PGM, PGC and PGD Each of the PORTB pins has a weak internal pull-up and can be turn on or off 3. PORTC and the TRISC Register PORTC is an 8-bit wide, bi-directional port. The corresponding data direction register is TRISC. Setting a TRISC bit (= 1) will make the corresponding PORTC pin an Clearing a TRISC bit (= 0) will make the corresponding PORTC pin an output The multiplexed pins to this port are:

4. Port D and TRISD PORTD is an 8-bit port with Schmitt Trigger input buffers. Each pin is individually configurable as an input o output. PORTD can be configured as an 8-bit wide microprocessor port (parallel slave port) by setting to PSPMODE. In this mode, the input buffers are TTL. 5. PORTE and TRISE Register PORTE has three pins which are individually configurable as inputs or outputs. These pins have Schmitt Trigger input buffers. The PORTE pins become the I/O control inputs for the microprocessor port Three analog inputs are multiplexed with this pins TIMER0 MODULE The Timer0 module timer/counter has the following features: 8-bit timer/counter Readable and writable
Department of ECE, VKCET Page 85

## 08.601 Microcontroller Based System Design

8-bit software programmable prescaler Internal or external clock select Interrupt on overflow from FFh to 00h Edge select for external clock TIMER1 MODULE The Timer1 module is a 16-bit timer/counter consisting of two 8-bit registers (TMR1H and TMR1L), which are readable and writable. The TMR1 Register pair (TMR1H:TMR1L) increments from 0000h to FFFFh and rolls over to 0000h. The TMR1 Interrupt, if enabled, is generated on overflow, which is latched in interrupt flag bit TMR1IF (PIR1<0>). Timer1 can operate in one of two modes: o As a timer o As a counter TIMER2 MODULE Timer2 is an 8-bit timer with a prescaler and a postscaler. It can be used as the PWM time-base for the PWM mode of the CCP module(s). The TMR2 register is readable and writable, and is cleared on any device RESET The Timer2 module has an 8-bit period register, PR2 Timer2 increments from 00h until it matches PR2 and then resets to 00h on the next increment cycle. PR2 is a readable and writable register. The PR2 register is initialized to FFH upon RESET.

Page 86