Tải bản đầy đủ (.pdf) (28 trang)

Các module ngoại vi của MCS-51 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (478.73 KB, 28 trang )

Peripherals - MCS 51 1
Các module ngoi vi ca MCS 51™
Peripherals - MCS 51 2
Plan
¸
Timers/Counters
¸ Truyn tin ni tip
¸ Ngt và hot đng ca ngt trong 8051
Peripherals - MCS 51 3
Timer
¸ Timer là b đm nh phân vi ngun xung clock
̈ T b xung chun (thng ly t b on-chip oscillator ca VK)
̈
T tín hiu bên ngoài
¸ ng dng ca timer
̈
To các s kin vi chu k đnh trc (timer)
̈ m các s kin bên ngoài (counter)
¸ 8051 có 2 b timer 16 bits count-up (đm thun, giá tr tng
dn sau mi xung nhp) vi 4 mode hot đng
̈
mode 0: ch đ 13 bits
̈ mode 1: ch đ 16 bits
̈ mode 2: ch đ 8 bit có auto-reload
̈
mode 3: ch đ đc bit
Peripherals - MCS 51 4
iu khin Timer
̈ THn : thanh ghi 8 bit cha byte cao ca b đm
̈
TLn : thanh ghi 8 bit cha byte thp ca b đm


̈ TRn : bit cho phép timer hot đng
¸
TRn = 0 å timer ngng hot đng
¸ TRn = 1 å timer đc phép hot đng
̈ M1, M0 : 2 bit xác đnh 4 mode ca Timer
̈ TFn : bit c báo b đm tràn
̈ C/Tn : bit thit lp Timer hay Counter
¸ C/T = 0 å Timer ly xung clock t on-chip oscillator
¸ C/T = 1 å Timer ly xung clock t bên ngoài qua port Tn
̈ GATE : kt hp vi TRn đ điu khin b đm
¸
GATE = 1 å Timer ch hot đng khi TRn=1 và INTn = HIGH
¸ GATE = 0 å Timer hot đng khi TRn=1
Peripherals - MCS 51 5
TMOD
Peripherals - MCS 51 6
TCON
Peripherals - MCS 51 7
Mode 0
Timer1 mode 0
Timer clock
Peripherals - MCS 51 8
¸ Timer/Counter 13 bit
̈ 8 bit cao là thanh ghi THx
̈ 5 bit thp là 5 bit MSB ca thanh ghi TLx (3 bit thp ca
thanh ghi TL không s dng)
¸ TFx = 1 khi ni dung ca b đm tràn
Peripherals - MCS 51 9
Mode 1
̈ Ging mode 0, ngoi tr s dng b đm 16 bit, thay vì

13 bit
¸ 8 bit MSB là thanh ghi THx
¸ 8 bit LSB là thanh ghi TLx
Timer1 mode 1
Peripherals - MCS 51 10
Mode 2
Peripherals - MCS 51 11
¸ S dng thanh ghi TLx làm thanh ghi ca Timer
¸ Khi ni dung b đm tràn (TLx chuyn t FFå00)
̈ TFx đc dng lên
̈ Ni dung ca THx đc t đng np vào TLx
Peripherals - MCS 51 12
Mode 3
¸ Nu Timer0  mode 3
̈ B Timer/Counter 8 bit s dng TL0 å tác đng đn TF0
̈ B Timer 8 bit s dng TH0 å tác đng đn TF1
¸ Nu Timer1  mode 3
̈ dng hot đng
̈ ni dung ca các thanh ghi TH1 và TL1 không thay đi
¸ Trong khi Timer0 hot đng  mode 3
̈ Timer1 vn có th hot đng bình thng  các mode 0,
1, 2
̈ Timer1 không th s dng TF1 (vì đc Timer TH0 s
dng)
Peripherals - MCS 51 13
Timer 0  mode 3
Peripherals - MCS 51 14
Th tc khi to Timer
¸ Khi to TMOD
¸ Khi to các giá tr THx và TLx

¸ Thit lp bit TRx = 1 đ cho phép Timer làm vic
Peripherals - MCS 51 15
c ni dung Timer “On-the-fly”
¸ c ni dung Timer trong khi Timer đang hot đng
̈ c TL
̈ c TH
å Có th có sai sót: khi đc ni dung ca TH thì TL b thay
đi
¸ Khc phc
̈ c TH
̈ c TL
̈ c TH, kimt tra nu khác vi ln đc đu thì lp li
thao tác đc
Peripherals - MCS 51 16
Ví d 1
¸ Vit chng trình trình to xung vuông đu tn s
10KHz ti cng P1.0 s dng Timer0. Bit MCS-51
s dng tn s f
OSC
12MHz
Peripherals - MCS 51 17
¸ Tn s = 10KHz:
̈ P1.0 =LOW trong 50us
̈ P1.0 = HIGH trong 50us
¸ f
OSC
= 12MHz å chu k lnh = 1us
¸ S dng Timer0 đm 50us, mi ln tràn s lp bit P1.0
¸ Có th s dng Timer0  mode 2 (auto-reload). Khi đócn
np TH0 = 0x100 – 32 = 0xE0

̈ Khi to Timer0: TMOD = 00000010b
¸ Bit C\T = 0 å hot đng nh timer
¸ Bit M1 M0 = 10 å hot đng mode 2
̈ Thanh ghi TH0 = 205
Peripherals - MCS 51 18
; source file “wave1.a51”
org 0000h
ljmp start
org 100h
start:
mov TMOD,#02 ; timer + mode 2
mov TH0,#0xE0
setb TR0 ; start timer 0
here:
jnb TF0,here
clr TF0 ; xóa c TF0
cpl P1.0
sjmp here
END
Peripherals - MCS 51 19
Ví d 2
¸ Vit chng trình trình to xung vuông đu tn s
1KHz ti cng P1.0 s dng Timer0. Bit MCS-51
s dng tn s f
OSC
12MHz
Peripherals - MCS 51 20
¸ Tn s = 1KHz:
̈ P1.0 =LOW trong 500us
̈ P1.0 = HIGH trong 500us

¸ f
OSC
= 12MHz å chu k lnh = 1us
¸ S dng Timer0 đm 500us, mi ln tràn s lp bit P1.0
¸ Không th s dng Timer0  mode 2 (auto-reload) vì
maximun ch đm đc 255 us.
¸ S dng Timer0  mode 1 (mode 16 bit). Khi đócn np
TH0-TL0 = 0x10000-1F4 = 0xFE0C
̈ Khi to Timer0: TMOD = 00000010b
¸ Bit C\T = 0 å hot đng nh timer
¸ Bit M1 M0 = 10 å hot đng mode 2
̈ Thanh ghi TH0 = 0xFE, TL0 = 0x0C
Peripherals - MCS 51 21
; source file “wave2.a51”
org 0000h
ljmp start
org 100h
start:
mov TMOD,#01 ; timer + mode 1
loop: mov TH0,#0xFE
mov TL0,#0x0C
setb TR0 ; start timer 0
wait:jnb TF0,wait
clr TR0 ; stop timer
clr TF0 ; xóa c TF0
cpl P1.0
sjmp loop
END
Peripherals - MCS 51 22
¸ Câu hi :

̈ Trong ví d 2, chu k xung to thành có đúng là 1ms?
̈ Nu sai, hãy hiu chnh li.
Peripherals - MCS 51 23
s dng thông tin v state (hoc
sec) đ đo khong thi gian thc
hin các lnh
Peripherals - MCS 51 24
Truyn tin ni tip
¸ u đim
̈ Tit kim dây ni
̈ n gin khi thit k mch in
¸ Nhc đim
̈ Tc đ chm
Peripherals - MCS 51 25
Cng ni tip ca MCS-51
TM
¸ c đim
̈ Truyn nhn theo tng byte
̈ Hai cng ni tip
¸ TxD cng truyn
¸ RxD cng nhn
̈ Có kh nng truyn, nhn đng thi (full-duplex: song
công)
̈ Nhn có đm receive-buffered
¸ Mt byte đc nhn và ct vào vùng đm
¸ Trong khi đóbyte th hai vn đc tip tc nhn
̈ iu khin thông qua thanh ghi SCON
Peripherals - MCS 51 26
SCON
Peripherals - MCS 51 27

Mode 0 – Thanh ghi dch 8 bit
¸ Thc cht là truyn tin ni tip đng b, bán song
công (half-duplex) (truyn và nhn không đng thi)
̈ RxD: cng truyn và nhn thông tin
̈ TxD: cng shift-out clock vi tn s dch data bng 1/12
tn s oscillator
̈ Bit đu tiên là LSB
¸  truyn thông tin
̈ Vit mt byte cn truyn đn SBUF
¸  nhn thông tin
̈ Thit lp các bit REN=1 và RI=0 trong thanh ghi SCON
Peripherals - MCS 51 28
Peripherals - MCS 51 29
Mode 1 – UART 8-bit, tc đ có th thay đi
¸ UART: Universal Asynchronous
Recever/Transmitter
¸ Truyn tin ni tip không đng b 10 bit
̈ 1 bit START
̈ 8 bit DATA (LSB đu tiên)
̈ 1 bit STOP
̈ Tc đ truyn đc quyt đnh bi Timer1
̈ Transmit đc start bi lnh vit đn SBUF
̈ Khi nhn đ 8 bit data, c RI s đc set lên 1 (cn xóa
bi phn mm)
Peripherals - MCS 51 30
Peripherals - MCS 51 31
Mode 2
¸ Truyn tin 11 bit
̈ 9 bit data
̈ 1 bit start, 1 bit stop

¸ Bit th 9 ca data:
̈ Bit TB8 đi vi vic truyn
̈ Bit RB8 đi vi vic nhn
¸ Tc đ truyn c đnh bng 1/32 f
OSC
(SMOD = 0) hoc 1/64
f
OSC
(SMOD=1)
¸ Transmit đc start bi lnh vit đn SBUF
¸ Khi nhn đ 9 bit data, c RI s đc set lên 1 (cn xóa bi
phn mm)
Peripherals - MCS 51 32
Peripherals - MCS 51 33
Mode 3
¸ Ging nh mode 2, nhng tc đ truyn có th thay
đi s dng Timer 1
Peripherals - MCS 51 34
Tc đ truyn
¸ Tc đ truyn trong mode 0 và mode 2 ph thuc vào tn s
dao đng ca clock CPU
̈ Mode 0: tc đ truyn = 1/12 f
osc
̈ Mode 2: 1/32 f
OSC
(SMOD = 0) hoc 1/64 f
OSC
(SMOD=1)
¸ Mode 1 và 3 có th s dng Timer 1 đ thit lp tc đ truyn
tin

̈ Tc đ truyn đc xác đnh bng tc đ tràn ca timer 1
̈ SMOD là bit trong thanh ghi PCON
Peripherals - MCS 51 35
¸ Thng Timer1 đc s dng trong mode 2 (auto-
reload) hot đng nh
“timer” đ làm b phát tc
truyn tin, khi đótc đ truyn đc xác đnh theo
công thc
Peripherals - MCS 51 36
Peripherals - MCS 51 37
Ví d -khi to UART
¸ Vit đon chng trình khi to cng truyn tin ni
tip  ch đ UART – 8bit, s dng Timer1 đ to
tc đ truyn 2400 bps. Bit f
OSC
= 11.0592 MHz
Peripherals - MCS 51 38
¸ B truyn tin làm vic  ch đ mode 1:
̈ SM0 = 0
̈ SM1 = 1
¸ Tc đ 2400 bps vi f
OSC
= 11.0592MHz:
̈ SMOD = 0
̈ C/T = 0
̈ M1 = 1, M0 = 0 å mode 2
̈ TH1 = 0xF4
¸ Cho phép nhn: REN = 1, RI = 0
¸ Start timer1 : TR1 = 1
SCON = 01000000b

TMOD = 0010 0000b
Peripherals - MCS 51 39
; uart_init.a51
org 0000h
ljmp start
start: mov SCON,#0x40
mov TMOD,#0x20
mov TH1,#0xF4
clr RI
setb REN ; enables serial reception
setb TI ;
setb TR1 ; start timer 1
END
Peripherals - MCS 51 40
¸ Chng trình trên có th vit gn li nh sau
; uart_init.a51
org 0000h
ljmp start
start:
mov SCON,#0x52
mov TMOD,#0x20
mov TH1,#0xF4
; clr RI
; setb REN ; enables serial reception
; setb TI ;
; setb TR1 ; start timer 1
END
Peripherals - MCS 51 41
Ví d -truyn ký t ASCCI
¸ Vit chng trình con OUTCHR truyn ký t ASCII

ct trong thanh ghi A lên đng truyn Tx
Peripherals - MCS 51 42
; subroutine outchr.a51
outchr:
jnb TI,outchr ; wait if Tx is not empty
clr TI ;yes, Tx is empty
mov SBUF,acc ;send character
ret
Peripherals - MCS 51 43
Ví d -nhn ký t
¸ Vit chng trình con INCHAR nhn ký t t Rx,
ký t nhn đc ct  thanh ghi A
Peripherals - MCS 51 44
; inchar.a51
inchar:
jnb RI,$ ; wait for character
clr RI
mov a,SBUF
ret
Peripherals - MCS 51 45
Ví d -truyn và nhn ký t
¸ Vit chng trình nhn ký t ch theo chun ASCII
t Rx
̈ Nu ký t là ch thng å đi qua ch in
̈ Nu ký t là ch in å đi qua ch thng
¸ Truyn lên Tx mã ký t sau khi đã đi
¸ Truyn tin theo ch đ UART – 8 bit, tc đ
2.4Kbaud
Peripherals - MCS 51 46
¸ Init b truyn tin

¸ Polling Rx
¸ Kim tra ký t nhn đc:
̈ nu mã ASCII > 60H å ch thng
̈ nu mã ASCII > 40H và < 60h å ch in
̈ nu không tr v (không bin đi)
¸ Truyn ký t lên Tx
Peripherals - MCS 51 47
Ngt (Interrupt)
¸ Ngt là tín hiu không đng b do hardware hoc software
gi đn CPU đ yêu cu thc hin mt thao tác
̈ hardware interrupt: CPU ct gi các thông tin cn thit sau đóchuyn
qua chng trình phc v ngt ( ISR interupt service routine)
̈ software interrupt: do mt lnh đc thit k đc bit trong tp lnh
ca CPU gây ra
¸ 8051 có 5 ngun ngt
̈ 2 ngun ngt ngoài
̈ 2 ngun ngt t các b timer
̈ 1 ngun ngt t b truyn tin ni tip
Peripherals - MCS 51 48
Thc hin chng trình có ngt
main
ISR
main
ISR
main
ISR
main
***
*
*

** **
time
* Interrupt
** return from interrupt
Peripherals - MCS 51 49
Timer 2 ch có trong 8052
Peripherals - MCS 51 50
Thanh ghi IE

×