Download presentation
Presentation is loading. Please wait.
Published byLionel Lucas Modified over 9 years ago
1
1
2
Registers Used in Timer/Counter TH0, TL0, TH1, TL1 TMOD (Timer mode register) TCON (Timer control register) 2
3
Timer register D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 TH0 /TH1 TL0/TL1 3
4
TMOD Register : Gate : When set, timer only runs while INT(0,1) is high. C/T : Counter/Timer select bit. M1 : Mode bit 1. M0 : Mode bit 0. 4
5
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. 5
6
Timer modes Timer Mode 0 : Emulates 8048 counter/timer (13-bits). 8-bit counter (TL0 or TL1). 5-bit prescaler (TH0 or TH1). 6
7
Timer Mode 1 : Simple 16-bit counter. -Timer Mode 2 : 8-bit auto-reload. Counter in TL0 or TL1. Reload value in TH0 or TH1. Provides a periodic flag or interrupt 7
8
Timer Mode 3 Splits timer 0 into two 8-bit counter/timers. First counter (TLO) acts like mode 0, without prescaler. Second counter (TH0): Counts CPU cycles. Uses TR1 (timer 1 run bit) as enable. Uses TF1 (timer 1 overflow bit) as flag. Uses Timer 1 interrupt. 8
9
TIMING MODE DIAGRAM 9
10
ANIMATED TIMER MODE: TMOD TH1 TL1 FF FB TR1 FFFB FFFC FFFD FFFE FFFF FFFF+01 1 0 0 1 SFR TF1 10
11
ANIMATED TIMER MODE: TMOD TH1 TL1 FF FB TR1 FFFB FFFC FFFD FFFE FFFF FFFF+01 1 0 0 1 SFR TF1 11
12
12
13
SAMPLE PGM FOR TIMER: ORG 0H START:SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP START 13
14
SAMPLE PROGRAM DELAY:MOV TMOD,#0001 0000B ;10H MOV TL1,#00 MOV TH1,#00 SETB TR1 JNB TF1,LOOP JNB TF1,LOOP CLR TR1 CLR TF1 RET 14
15
15
16
SCON REGISTER 16
17
SM0,SM1 - SM0, SM1 = Serial Mode: 00 = Mode 0 : Shift register I/O expansion. 01 = Mode 1 : 8-bit UART with variable baud rate. 10 = Mode 2 : 9-bit UART with fixed baud rate. 11 = Mode 3 : 9-bit UART with variable baud rate. 17
18
SM2 - SM2 : Mode 0 : Not used. Mode 1 : 1 = Ignore bytes with no stop bit. Mode 2,3 : 0 = Set receive interrupt (RI) on all bytes. : 1 = Set RI on bytes where bit 9 = 1. 18
19
REN = Enables receiver. - TB8 = Ninth bit transmitted (in modes 2 and 3). - RB8 = Ninth bit received: Mode 0 : Not used. Mode 1 : Stop bit. Mode 2,3 : Ninth data bit. - TI = Transmit interrupt flag. - RI = Receive interrupt flag. 19
20
20
21
BAUD RATE TH1(DECIMAL)TH1(HEX)SMOD=0SMOD=1 -3FD9,60019,200 -6FA4,8009,600 -12F42,4004,800 -24F81,2002,400 21
22
22
23
23
24
Mode 1:TX 24
25
MODE 1:TX 8 BIT DATA SBUF DATA 8 BIT DATA STOP BIT START BIT PARALLEL TO SERIAL TX SERIAL DATA TRANSFER START STOP TI = 0 TI=1 25
26
MODE 1:TX 8 BIT DATA SBUF DATA 8 BIT DATA STOP BIT START BIT PARALLEL TO SERIAL TX SERIAL DATA TRANSFER START STOP TI = 0 TI=1 26
27
DATA TX SERIALLY: Load TMOD Register;timer1 Load TH1 or TL1 values ; for Baud rate Load SCON register; serial mode 0,1,2,3 SET TR1 ;To start the timer Character byte is written to SBUF; Check if TI=1; CLR TI Reload the value again. 27
28
SAMPLE PROGRAM:TX MOV TMOD,#20H MOV TH1,#-3 MOV SCON,#50H SETB TR1 AGAIN:MOV SBUF,#’Y’ JNB TI,Here CLR TI SJMP AGAIN 28
29
SERIAL DATA TRANSFER DISPLAY Y N 8051 29
30
SAMPLE PROGRAM: MOV TMOD,#20H MOV TH1,#-3 MOV SCON,#50H SETB TR1 AGAIN:MOV SBUF,#’Y’ JNB TI,Here CLR TI MOV P1,#’N’ SJMP AGAIN 30
31
Mode 1:RX 31
32
MODE 1:RX SBUF 8 BIT DATA STOP BIT START BIT PARALLEL TO SERIAL TX SERIAL DATA RECEIVE STOP START 8 BIT DATADATA RX RI=0 RI=1 32
33
SAMPLE PROGRAM:RX Load TMOD Value. Load TH1 value ;baud rate Load SCON Register Set TR1 To start timer. Clear RI Check the RI each time. When RI =1,Load the value from SBUF. 33
34
SAMPLE PROGRAM:RX MOV TMOD,#20H MOV TH1,#-3 MOV SCON,#50H SETB TR1 CLR RI LOOP:JNB RI,LOOP MOV A,SBUF END 34
35
SERIAL PORT TRANSMITTER 35
36
SERIAL MODE 2 8 BIT DATA SBUF DATA 8 BIT DATA STOP BIT START BIT PARALLEL TO SERIAL TX SERIAL DATA TRANSFER START STOP TI = 0 TI=1 TB8=0 TB8=1 36
37
RECEIVE DATA 37
38
SERIAL MODE 2 :RX SBUF 8 BIT DATA STOP BIT START BIT PARALLEL TO SERIAL TX SERIAL DATA RECEIVE STOP START 8 BIT DATADATA RX RI=0 RI=1 RB8=0 38
39
Interrupt : 39
40
Interrupts Programming An interrupt is an external or internal event that interrupts the microcontroller to inform it that a device needs its service. Interrupts vs. Polling A single microcontroller can serve several devices. There are two ways to do that: –interrupts –polling. The program which is associated with the interrupt is called the interrupt service routine (ISR) or interrupt handler. 40
41
Steps in executing an interrupt Finish current instruction and saves the PC on stack. Jumps to a fixed location in memory depend on type of interrupt Starts to execute the interrupt service routine until RETI (return from interrupt) Upon executing the RETI the microcontroller returns to the place where it was interrupted. Get pop PC from stack 41
42
PROGRAM COUNTER It saves the address next insturction going to be executed. 42
43
MAIN PGM ISR INTERRUPT PROGRAM END 43
44
Example A 10khz square wave with 50% duty cycle ORG 0 ;Reset entry poit LJMPMAIN ;Jump above interrupt ORG000BH ;Timer 0 interrupt vector T0ISR:CPLP1.0 ;Toggle port bit RETI ;Return from ISR to Main program ORG 0030H ;Main Program entry point 0030:MAIN:MOVTMOD,#02H ;Timer 0, mode 2 0032:MOVTH0,#-50 ;50 us delay 0034:SETBTR0 ;Start timer 0036:MOVIE,#82H ;Enable timer 0 interrupt 0038:SJMP$ ;Do nothing just wait END 44
45
INTERRUPT PGM MAIN PGM ISR STACK POINTER 0B 0A 09 08 PCL PCH INTERRUPT 38 00 45
46
Interrupt Sources Original 8051 has 6 sources of interrupts – Reset –Timer 0 overflow – Timer 1 overflow – External Interrupt 0 – External Interrupt 1 – Serial Port events (buffer full, buffer empty, etc) Enhanced version has 22 sources –More timers, programmable counter array, ADC, more external interrupts, another serial port (UART) 46
47
Interrupt Vectors Each interrupt has a specific place in code memory where program execution (interrupt service routine) begins. External Interrupt 0: 0003h Timer 0 overflow: 000Bh External Interrupt 1:0013h Timer 1 overflow: 001Bh Serial : 0023h Timer 2 overflow(8052+) 002bh Note: that there are only 8 memory locations between vectors. 47
48
SJMP main ORG03H ORG03H ljmpint0sr ORG0BH ljmpt0sr ORG13H ljmpint1sr ORG1BH ljmpt1sr ORG23H ljmpserialsr ORG30H main: …END ISRs and Main Program in 8051 48
49
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. 49
50
Enabling and disabling an interrupt by bit operation Recommended in the middle of program SETB EA ;Enable All SETB ET0 ;Enable Timer0 ovrf SETB ET1 ;Enable Timer1 ovrf SETB EX0 ;Enable INT0 SETB EX1 ;Enable INT1 SETB ES ;Enable Serial port by mov instruction Recommended in the first of program MOV IE, #10010110B SETB IE.7 SETB IE.1 SETB IE.3 SETB IE.0 SETB IE.2 SETB IE.4 50
51
Timer ISR Notice that –There is no need for a “CLR TFx” instruction in timer ISR –8051 clears the TF internally upon jumping to ISR Notice that –We must reload timer in mode 1 –There is no need on mode 2 (timer auto reload) 51
52
External interrupt type control By low nibble of Timer control register TCON IE0 (IE1): External interrupt 0(1) edge flag. –set by CPU when external interrupt edge (H-to-L) is detected. –Does not affected by H-to-L while ISR is executed(no int on int) –Cleared by CPU when RETI executed. –does not latch low-level triggered interrupt IT0 (IT1): interrupt 0 (1) type control bit. –Set/cleared by software –IT=1 edge trigger –IT=0 low-level trigger TF1TR1TF0TR0IE1IT1IE0IT0 Timer 1 Timer0for Interrupt (MSB)(LSB) 52
53
External Interrupts IE0 (TCON.3) 0003 INT0 (Pin 3.2) 0 1212 IT0 Edge-triggered Level-triggered (default) IE1 (TCON.3) INT0 (Pin 3.3) 0 1212 IT1 Edge-triggered Level-triggered (default) 0013 53
54
Interrupt Priorities What if two interrupt sources interrupt at the same time? The interrupt with the highest PRIORITY gets serviced first. All interrupts have a power on default priority order. 1.External interrupt 0 (INT0) 2.Timer interrupt0 (TF0) 3.External interrupt 1 (INT1) 4.Timer interrupt1 (TF1) 5.Serial communication (RI+TI) Priority can also be set to “high” or “low” by IP reg. 54
55
Interrupt Priorities (IP) Register IP.7: reserved IP.6: reserved IP.5: timer 2 interrupt priority bit(8052 only) IP.4: serial port interrupt priority bit IP.3: timer 1 interrupt priority bit IP.2: external interrupt 1 priority bit IP.1: timer 0 interrupt priority bit IP.0: external interrupt 0 priority bit ---PX0PT0PX1PT1PSPT2--- 55
56
Interrupt Priorities Example MOV IP, #00000100B or SETB IP.2 gives priority order 1.Int1 2.Int0 3.Timer0 4.Timer1 5.Serial MOV IP, #00001100B gives priority order 1.Int1 2.Timer1 3.Int0 4.Timer0 5.Serial ---PX0PT0PX1PT1PSPT2--- 56
57
Interrupt inside an interrupt ---PX0PT0PX1PT1PSPT2--- A high-priority interrupt can interrupt a low-priority interrupy All interrupt are latched internally Low-priority interrupt wait until 8051 has finished servicing the high- priority interrupt 57
58
Example of external interuupt ORG 0000H LJMP MAIN ; ;interrupt service routine (ISR) ;for hardware external interrupt INT1 ; ORG 0013H SETB P1.1 MOV R0,200 WAIT:DJNZ R0,WAIT CLR P1.1 RETI; ;main program for initialization ; ORG 30H MAIN:SETB IT1 ;on negative edge of INT1 MOV IE,#10000100B WAIT2:SJMP WAIT2 END 58
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.