VD:
MOV A, 79H
Port 1 làngõ vào cógiátr ị thay đổi liên tục.
….
WAIT:CJNEA,P1,WAIT
…
tác dụng gì?
Xung & Hoi12
Trả lời: Chương trình lặp lại tại điểm này cho tới khi nhận giátr ị
79H tại đầu vào P1.
• SJMPrel-addr
Là lệnh nhảy không điều kiện. Là lệnh nhảy ngắn (2-byte).
Byte đầu tiên làopcode, byte th ứ 2 là địa ch ỉ tương đối của
đích. Địa ch ỉ tương đối trong kho ảng 00 (cid:224)FFH nh ưng chia
thành 2 hướng: tới, lui (forward, backward) nên tầm nhảy cho
phép là -128 đến +127 bytes trước lệnh vàsau l ệnh.
•VD: PC
RelativeAddress
0100H:SJMP
…
0123H: RelativeAddress
(cid:224) Byte độ dời của lệnh: 0123H-0102H=21H là độ dời
Xung & Hoi13
tương đối
aaaaaaaa
10000aaa
AJMP addr11
Là lệnh nh ảy không điều ki ện. Nh ảy đến địa ch ỉ tuyệt đối.
Đích nh ảy đến ph ải ở trong vùng 2K c ủa bộ nhớ ch ương
trình với byte đầu tiên của lệnh theo sau l ệnh AJMP. Mã đối
tượng như sau:
A10-A8 & A7-A0 của địa chỉ đích
đầu tiên là
Xung & Hoi14
LJMP addr16
Là lệnh nh ảy không điều ki ện (3 bytes). Byte
opcode, byte 2 & 3 ch ứa địa ch ỉ đích 16-bit. T ầm nh ảy từ
0000(cid:224)FFFFH
CALL
1 lệnh chuyển điều khiển khác làCALL, dùng để gọi 1 chương
trình con (subroutine).
aaaaaaaa
aaaaaaaa
01001000
LCALL
Là lệnh 3 bytes. LCALL dùng để gọi chương trình con nằm
bất kỳ đâu trong khoảng 64K byte không gian địa chỉ của
8051.
Xung & Hoi15
A15-A8 & A7-A0 của địa chỉ đích
RAMRAMRAM
0BH
0BH
0BH
0AH
0AH
0AH
12H
34H
09H
09H
09H
01H
PC
26H
26H
08H
08H
08H
Start SP=07H
SP=08H
SP=09H
Xung & Hoi16
VD:
Ban đầu không khởi động stack pointer (SP).
Nhãn Subroutine đặt tại vị trí1234H trong b ộ nhớ chương trình.
Tại 0123H thực hiện:LCALL Subroutine
Mô tả hoạt động sau khi thực hiện lệnh trên?
10001aaa
aaaaaaaa
ACALL
Là lệnh 2-byte. Chương trình con phải ở trong phạm vi 2K của
bộ nhớ chương trình so với byte đầu tiên của lệnh theo sau
ACALL.
Xung & Hoi17
A10-A8 & A7-A0 của địa chỉ đích
ức năng đặcbi ệt(SFR)
Xung & Hoi
1
1.Gi ớithi ệu
2. Sơđồ khốivàchân
3. Tổ chức bộ nhớ
4.Cácthanhghich
5.Dao độngvàho ạt độngreset
6. Tập lệnh
7.7. CCáácc mode mode đđịịnhnh đđịịaa chchỉỉ (addressing modes)
(addressing modes)
8. LậptrìnhIO
9. Tạotr ễ
10.LậptrìnhTimer/Counter
11.Lậptrìnhgiaoti ếp nốiti ếp
12.Lậptrìnhng ắt
13.Lậptrình h ợpng ữ
•
Dữ liệuch ứa ở đâukhith ựcthi1 l ệnh? (cid:224) Nhiều lờigi ải
tương ứngcácki ểu định địach ỉ khácnhau
•Cácki
ểu định địach ỉ chophépxác địnhngu ồnvà đích của
ống lậptrình. dữ liệutheonhi ềucáchkhácnhautùytìnhhu
Xung & Hoi
2
1. Tứcth ời
2.Thanhghi
3.Tr ựcti ếp
4.Giánti
ếp
5.Ch ỉ số
7-1. Định địach ỉ tứcth ời
MOVA,#65H
MOVR6,#65H
MOVDPTR,#2343H
MOVP1,#65H
VD :
Xung & Hoi
3
NumEQU30
…
MOVR0, #Num
MOVDPTR, #data1
…
ORG100H
data1:db“BACHKHOA”
7-2. Định địach ỉ thanhghi
MOVRn, A;n=0,..,7
ADDA, Rn
MOVDPL, R6
MOVDPTR, A
MOVRm, Rn
Xung & Hoi
4
7-3. Định địach ỉ trựcti ếp
*
•Dùngtruyxu ấtcácbi ếnnh ớ hoặccácthanhghitrênchip
•Mặc dầucóth ể truy cập cả 128 bytes RAM nội sử dụngki ểu định
địach ỉ trựcti ếp, song thôngth ườngtach ỉ dùngchovùngRAM
nội đa mục đích(có địach ỉ từ 30 –7FH)
≡ MOV A, R4
MOVR0, 40H
MOV56H,
A
MOVA, 4;
MOV6, 2; copy R2 to R6; MOV R6,R2 !
5
Thanhghich ức năng đặcbi ệt& địach ỉ:
≡ MOV A,#66H
MOV0E0H, #66H;
≡ MOV B, R2
MOV0F0H, R2;
≡ MOV P1,A
MOV80H,A;
Xung & Hoi
7-4. Định địach ỉ giánti ếp
•Làmth
ế nàonh ậnbi ết1 bi ếnkhi địach ỉ biến đã đượcxác
định, tínhtoánho ặc sửa đổitrongkhi1 ch ươngtrình đang
chạy?
•Khiqu ảnlýcác v ị trính ớ liênti ếp. Các điểmnh ập được định
chỉ số trongcác b ảngch ứatrongRAM (cácdãy s ố hay các
chuỗiký t ự)
(cid:224) Giảipháplàki ểu định địach ỉ giánti ếp
•Khinày, thanhghi được sử dụngnh ư 1 con trỏ (pointer) đến
; copy dữ liệutr ỏ bởiRivàoA ( i=0 hay 1)
dữ liệu
•MOVA,@Ri
•MOV@R1,B
•Nóicáchkhác, n ộidung c ủacácthanhghiR0 hay R1 cóth ể là
Xung & Hoi
6
nguồnho ặc đíchtrongcác l ệnhMOV, ADD & SUBB
Bàitoán7.1. Copy bytes trongRAM n ội
AViếtch ươngtrìnhcopy 10 bytes t ừ vùngRAM có địach ỉ bắt đầu
là37H t ớivùngRAM có địach ỉ bắt đầulà59H
Giải đáp:
ỏ nguồn
ỏ đích
MOV R0,#37h; Con tr
MOV R1,#59h; Con tr
MOV R2,#10; B ộđế m
L1: MOV A,@R0
Xung & Hoi
7
MOV @R1,A
INC R0
INC R1
DJNZ R2,L1
Bàitoán7.2. XóaRAM n ội
A Viếtch ươngtrìnhxóaRAM n ội từ 60H (cid:224)7FH
Trả lời:
MOVR0,#60H
LOOP:MOV@R0,#0
Xung & Hoi
8
INCR0
CJNER0,#80H,LOOP
7-5. Định địach ỉ chỉ số & truy cậpROM n ội
• Được sử dụngkhitruy c ậpcácthànhph ần dữ liệu của bảng
nhảy hoặc bảngtìmki ếm
MOVCA, @A+DPTR
A = nộidung t ại địach ỉ A+DPTR trongROM
Chúý:
•Cácthànhph ần dữ liệu được lưutrongkhônggian b ộ nhớ
Thanhghi n ền
Offset
Địach ỉ tác động
PC (or DPTR)
A
PC (or DPTR)
=
+
Xung & Hoi
9
chươngtrìnhROM c ủa8051, nên s ử dụngMOVC thayvì
MOV. “C”: code.
Bàitoán7.3. Copy bytes ROM (cid:224) RAM
ớ RAM bắt đầu tại
• VD: Giả sử khônggian b ộ nhớ ROM bắt đầu tại địa
chỉ 250H chứa“ROBOCON”, vi ếtch ươngtrình
truyềncácbytes trênvàovùngnh
địach ỉ 40H
Xung & Hoi10
Giải đáp:
0
ORG
MOVDPTR,#MYDATA
MOVR0,#40H
L1:CLR
A
MOVCA,@A+DPTR
JZL2
MOV@R0,A
INCDPTR
INCR0
SJMPL1
L2:SJMPL2
;-------------------------------------
Xung & Hoi11
ORG250H
MYDATA:DB“ROBOCON”, 0
END
Bàitoán7.4. Đọcx & xu ất x2
• Viếtch ươngtrình đọcgiátr ị x từ port 1 vàxu ấtgiátr ị x2 ra
Xung & Hoi12
port 2 ?
Giải đáp:
0
ORG
MOVDPTR, #TAB1
MOVA, #0FFH; chúý!
MOVP1, A
L01:
MOVA, P1
MOVCA, @A+DPTR
MOVP2, A
SJMPL01
;----------------------------------------------------
ORG300H
TAB1:DB 0,1,4,9,16,25,36,49,64,81
Xung & Hoi13
END
•MOVC A,@A+PC ;hoạt động tương tự, ngoạitr ừ ở đây, bộ
đếmch ươngtrình PC đượcdùng để chứa địach ỉ nền và bảng
đượctruyxu ấtnh ờ vàoch ươngtrìnhcon . Số của điểmnh ập
(entry-number) yêu cầuchovàothanhch ứaA, sau đóch ương
trìnhcon được gọi. Bảngph ải được địnhngh ĩangaysau l ệnh
RET trongch ươngtrình.
TIM-KIEM:
MOVA, entry-number
CALLTIM-KIEM
…
…
INC A
MOVCA, @A+PC
RET
Xung & Hoi14
TABLE:DBdata1,data2,data3,…
Homework
Xung & Hoi15
Viếtch ươngtrìnhcho2 ví d ụ trêndùng
MOVC A, @A+PC
thayvì
MOVC A, @A+DPTR?
ức năng đặcbi ệt
Xung & Hoi
1
1.Gi ớithi ệu
2. Sơđồ khốivàchân
3. Tổ chức bộ nhớ
4.Cácthanhghich
5.Dao độngvàho ạt độngreset
6. Tập lệnh
7.Cácmode định địach ỉ
8. LậptrìnhIO (IO Port Programming)
9. Tạotr ễ
10.LậptrìnhTimer/Counter
11.Lậptrìnhgiaoti ếp nốiti ếp
12.Lậptrìnhng ắt
13.Lậptrình h ợpng ữ
8-1. Cổng1 (Port 1)
Port 1 (chân1-8)
Port 1 đượckýhi ệuP1
(cid:224) Cácchân: P1.0 -P1.7
Sử dụngP1 trongcácví d ụ sau đây để chỉ raho ạt động
củachúng
(cid:224) P1 là cổngra –output (ghi d ữ liệuCPU racácchân
bênngoài)
Xung & Hoi
2
(cid:224) P1 là cổngvào –input ( đọc dữ liệu từ cácchânbên
ngoàivàoCPU bus)
8-2. Cấutrúcph ần cứng củaP1.x
Read DFF
Vcc
TB2
Tải
P1.x
D
Bus nội
Q
P1.x
M1
Clk Q
Write to DFF
TB1
Read pin
Xung & Hoi
3
8051 IC
a.Bus n ội: giaoti ếp vớiCPU
b. Bộ chốt dữ liệuDFF: l ưutr ữ giátr ị củachân. Khi
“Write to DFF”= 1: ghi d ữ liệuvàoDFF
c.Hai b ộđệ m3 tr ạngthái(tri-state buffers):
-TB1: điềukhi ển bởi“Read pin”. Khi“Read pin”= 1:
đọcgiátr ị tạichân ngoài
-TB2: điềukhi ển bởi“Read DFF”. Khi“Read DFF”=
1: đọcgiátr ị từ DFF nội
Xung & Hoi
4
d.Transistor M1
Bộđệ m3 tr ạngthái(Tri-state Buffer)
OutputInput
Trở khángcao
(hở mạch)
0
Tri-state control
(kíchho ạt
mứccao)
0
1
1
0
1
1
Xung & Hoi
5
8-3. Ghira c ổngoutput
Vd:
MOV A, #55H
BACK: MOV P1, A
ACALLDELAY
CPL A
Xung & Hoi
6
SJMP BACK
8-3-1. Ghi“1”rachânoutput P1.x
Read DFF
Vcc
TB2
Tải
1
2. Chânralà
Vcc
P1.x
D
1.ghi 1
Bus nội
Q
P1.x
output 1
0
M1
Clk Q
Write to DFF
TB1
Read pin
Xung & Hoi
7
8051 IC
8-3-2. Ghi“0”rachânoutput P1.x
Read DFF
Vcc
TB2
Tải
2. Chânra
nối đất
0
P1.x
D
1. ghi0
Bus nội
Q
P1.X
output 0
1
M1
Clk Q
Write to DFF
TB1
Read pin
Xung & Hoi
8
8051 IC
8-4. Đọc từ châninput & b ộ chốt
Khi đọcchân, cóhaikh ả năngsau:
(cid:216)Đọctr ạngthái c ủachân input (bênngoài )
MOVA,Px
JNBP2.1,Label
JBP2.1,Label
(cid:216)Đọc dữ liệu bộ chốt củachân output (bêntrong )
ANLP1,A
ORLP1,A
INCP1
Xung & Hoi
9
Đọc-Sửa đổi-Ghi
8-4-1. Đọc từ châninput
Để P1 làinput, P1 ph ải được lậptrình b ằngcáchghi“1”
vào tất cả cácbit c ủaP1
MOV P1,#0FFH ; P1=11111111B
; P1 làinput
BACK:MOV A,P1
MOV P2,A
SJMP BACK
Xung & Hoi10
E tương tự choP0, P2, P3
Đọc“1” t ạichâninput
Read DFF
Vcc
2. MOV A,P1
Chânngoài=“1”
TB2
1.ghi1
Tải
MOV P1,#0FFH
1
1
P1.x
D
Bus nội
Q
P1.x
0
M1
Clk Q
Write to DFF
3. Read pin=1
Read DFF=0
Write to DFF=0
TB1
Read pin
8051 IC
Xung & Hoi11
Đọc“0” t ạichâninput
Read DFF
Vcc
TB2
1.Ghi 1
Tải
2. MOV A,P1
Chânngoài=“0”
MOV P1,#0FFH
0
1
P1.x
D
Bus nội
Q
P1.x
0
M1
Clk Q
Write to DFF
3. Read pin=1
Read DFF=0
Write to DFF=0
TB1
Read pin
8051 IC
Xung & Hoi12
Các lệnh đọcchâninput
Lệnh
MOV A,PX Ví dụ
MOV A,P2 Mô tả
ĐọcP2 vào A
JNB PX.Y,.. JNB P2.1,TARGET Nhảy nếuP2.1 = 0
JB PX.Y,.. JB P1.3,TARGET Nhảy nếuP1.3 = 1
Xung & Hoi13
MOV C,PX.Y MOV C,P2.4 Copy trạngtháichân
P2.4 vàoCY
8-4-2. Đọcchânouput t ức đọc bộ chốt
MOVP1,#55H; P1=01010101
ORLP1,#0F0H;P1=11110101
(cid:216) “Read DFF”kíchho ạtTB2 vàchuy ển dữ liệu từ Q của
DFF vàoCPU (cid:224) đọc đượcP1.7 = 0
(cid:216) CPU thựchi ệnOR d ữ liệunày v ớibit 1 (cid:224) được 1
(cid:216) D củaDFF b ị thay đổithành 1
Xung & Hoi14
(cid:216) GhiKQ rachân (cid:224) P1.7 = 1
Đọc bộ chốt
1.Read pin = 0
Read DFF = 1
Write to DFF = 0 (ban đầuP1.7=0)
Read DFF
Vcc
TB2
Tải
2. CPU tính(P1.7 OR 1 )
4. P1.7 = 1
0
1
0
1
P1.7
D
Bus nội
Q
P1.7
1
0
M1
Clk Q
Write to DFF
3. GhiKQ vàoDFF
Read pin=0
Read DFF=0
TB1
Write to DFF=1
Read pin
8051 IC
Xung & Hoi15
Đọc-Sửa đổi-Ghi
Đặc điểmnàybao g ồm3 hành độngtrong1 l ệnh đơn:
1.CPU đọc bộ chốt
2.CPU th ựchi ệntínhtoán (cid:224) sửa đổi bộ chốt
3.Ghirachân
Xung & Hoi16
Chú ý: 8 chân củaPort làmvi ệc độc lậpnhau
Các lệnhcó đặc điểm Đọc-Sửa đổi-Ghi
Lệnh
Ví dụ
ANL
ANL P1,A
ORL
ORL P1,A
XRL
XRL P1,A
JBC PX.Y, TARGET
JBC P1.1, TARGET
CPL
CPL P1.2
INC
INC P1
DEC
DEC P1
DJNZ PX, TARGET
DJNZ P1,TARGET
MOV PX.Y,C
MOV P1.2,C
CLR PX.Y
CLR P1.3
SETB PX.Y
SETB P1.4
Xung & Hoi17
Tóm lại
•1 chânlàoutput thìcóth
•1 chânlàoutput thì
ể ghi dữ liệutr ựcti ếprachân
đọctr ạngthái c ủachânngh ĩalà đọc
bộ chốt tương ứng củachân
•1 chânlàinput thìset nólên“1”tr
•1 chânlàinput thì
ướckhithaotác
đọctr ạngtháitr ựcti ếp từ chân
Xung & Hoi18
Câu hỏi gợinh ớ
(cid:216) Cách ghi dữ liệurachân?
(cid:216) Cách đọc dữ liệu từ chân?
(cid:252)Đọcgiátr ị từ chânbênngoài
•Tạisaoph ảiset chântr ướckhiti ếnhành đọc?
(cid:252)Đọcgiátr ị từ bộ chốt
Xung & Hoi19
•Lệnhnh ư thế nào gọilàcótínhch ất Đọc-Sửa đổi-Ghi?
Bàitoán1: thaotácbit
đếnkhinh ận được“1”
ận được“1”, ghi45H raP0
Bàitoán:
1.Theo dõibit P1.2 cho
2.Khinh
3.& g ửixung“High-to-Low”rachânP2.3
Xung & Hoi20
Giải đáp:
SETB P1.2 ;P1.2 làinput
MOV A,#45H ;A=45H
AGAIN:JNB P1.2,AGAIN;l ặp lại đếnkhiP1.2=1
ấtA raP0
MOV P0,A ;xu
SETB P2.3 ;P2.3 = “High”
CLR P2.3 ;P2.3 = “Low”for H-to-L
Xung & Hoi21
Trong đó:
1. JNB: jump if no bit (jump if P1.2 = 0)
2. Xung“H-to-L” được tạo bởichu ỗi lệnhSETB & CLR
Bàitoán2: Ưu điểmkhi s ử dụngcâu l ệnhcó đặc
điểm Đọc-Sửa đổi-Ghi
ACóbacách để nháycácbit c ủaPort 1 liên t ục
• Cách1: Gửi dữ liệu tớiP1 qua thanhch ứa A
BACK: MOV A,#55H ;A=01010101B
Xung & Hoi22
MOV P1,A
ACALL DELAY
MOV A,#0AAH ;A=10101010B
MOV P1,A
ACALL DELAY
SJMP BACK
;P1=01010101B
• Cách2: Xuất dữ liệutr ựcti ếp
BACK: MOV P1,#55H
ACALL DELAY
MOV P1,#0AAH ;P1=10101010B
ACALL DELAY
SJMP BACK
• Cách3: Dùng lệnh với đặc điểm Đọc-Sửa đổi-Ghi
MOV P1,#55H ;P1=01010101B
Xung & Hoi23
AGAIN: XRL P1,#0FFH
ACALL DELAY
SJMP AGAIN
8-5. Các cổng(port) còn l ại
(cid:216) P1, P2, P3 có điệntr ở tải nội
(cid:216) P0 khôngcó điệntr ở tải nội
(cid:216) Phíang ười lậptrình: khôngcó s ự khácbi ệtnàogi ữacác
cổng
Xung & Hoi24
(cid:216) Tất cả các cổnglàoutput và ở mứclogic caokhiReset
Cấutrúcph ần cứngP0.x
Read DFF
TB2
P0.X
D
Bus nội
Q
P1.X
M1
Clk Q
Write to DFF
TB1
Read pin
Xung & Hoi25
Port 0
KhiP0 đượcdùng để xuấthay nh ập dữ liệu, phảicócác điệntr ở
kéolênbênngoài(10K ho ặc4,7K)
Và vớicác điệntr ở kéolênbênngoàinày, khireset hay khi
bậtngu ồn, P0 mặc địnhlàoutput.
Vcc
10 K
8051
P
o
r
t
0
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
Xung & Hoi26
8-6. Vaitròkép c ủaP0
•Khi n ối8051 t ới bộ nhớ ngoàithìnó s ử dụngcácport
để gửi địach ỉ và đọccác l ệnh
–8051 cókh ả năngtruyxu ất64K bytes b ộ nhớ ngoài
– Địach ỉ 16-bit: P0 cung cấpcác đường địach ỉ A0-A7, P2
cung cấpA8-A15
•KhiP0 được sử dụng đa hợp địach ỉ/dữ liệu, nó được
kết nối tới74LS373 để chốt địach ỉ
–Khinàykhông c
– Đồngth ời, P0 cung cấpcác đường dữ liệuD0-D7
Xung & Hoi27
ầncác điệntr ở kéolênbênngoài
8-6-1. Bộ chốt74LS373
8051
A15 -A8
PORT2
ROM(S)
ADDRESS
ALE
AD7 -AD0
LATCH
ADDRESS
INPUTS
PORT0
A7 -A0
DATA
D7 -D0
OUTPUTS
PSEN
OE
ChânALE đượcdùng để giải đa hợp(de-multiplexing) địach ỉ
và dữ liệu bằngcách n ối tớichânG c ủa bộ chốt74LS373
KhiALE=0, P0 cung c ấp dữ liệuD0-D7
Xung & Hoi28
KhiALE=1, P0 cung c ấp địach ỉ A0-A7
OE
PSEN
ALE
74LS373
G
P0.0
A0
D
P0.7
A7
D0
D7
EA
P2.0
A8
P2.7
A15
Xung & Hoi29
8051 ROM
State 1State 2State 3State 4State 5State 6State 1State 2
P1P2
P1P2
P1P2
P1P2
P1P2
P1P2
P1P2
P1P2
XTAL2
ALE
_____
PSEN
PCL out
P0
PCL out
PCL out
Data
sampled
Data
sampled
Data
sampled
PCH out
PCH out
P2
Xung & Hoi30
8-6-2. ĐọcROM ngoài(1/2)
2. 74373 chốt địa
chỉ & gửi tớiROM
1. Gửi địach ỉ
tớiROM
OE
PSEN
ALE
74LS373
G
P0.0
A0
D
P0.7
A7
Address
D0
D7
/EA
P2.0
A8
P2.7
A12
Xung & Hoi31
8051 ROM
ĐọcROM ngoài(2/2)
2. 74373 chốt địa
chỉ & gửi tớiROM
OE
PSEN
ALE
74LS373
G
P0.0
A0
D
P0.7
A7
Address
D0
D7
/EA
3. ROM gửi lệnh
trở lại
P2.0
A8
P2.7
A12
Xung & Hoi32
8051 ROM
8-6-3. ĐọcghiRAM ngoài
8051
RAM(S) or
I/O
DECODE
CE
PORT 2
ALE
ADDRESS
LATCH
PORT 0
ADDRESS
INPUTS
DATA
OUTPUTS
R/W
OE
WR
RD
Xung & Hoi33
Khônggian t ối đa64KB. Truyxu ất địach ỉ giánti ếpqua 2
thangghiR0 vàR1, con tr ỏ dữ liệu.
8-7. Port 3
•Port 3 không c ầncác điệntr ở kéolênbênngoài
• Mặc dầuPort 3 c ũng được cấuhìnhnh ư ouputkhireset nh ưng
nóth ườngdùngchocácch ức năngriêngnêu d ưới đây
P3 Bit
Function
Pin
Xung & Hoi34
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
RxD
TxD
INT0
INT1
T0
T1
WR
RD
10
11
12
13
14
15
16
17
Xung & Hoi35
ức năng đặcbi ệt(SFR)
Xung & Hoi
1
1.Gi ớithi ệu
2. Sơ đồ khốivàchân
3. Tổ chức bộ nhớ
4.Cácthanhghich
5.Dao độngvàho ạt độngreset
6. Tập lệnh
7.Cácmode định địach ỉ (addressing modes)
8. LậptrìnhIO
9.9. TTạạoo trtrễễ
10.LậptrìnhTimer/Counter
11.Lậptrìnhgiaoti ếp nốiti ếp
12.Lậptrìnhng ắt
13.Lậptrình h ợpng ữ
Chu kỳ máy-Machine Cycle (MC)
•Chy k ỳ máy(machine cycle) là đơn vị đoth ờigianth ựcthicác
lệnh
• Tần số dao động củath ạchanhcho h ọ 8051 cóth ể từ 4MHz
đến30 MHz, tùythu ộcnhà s ảnxu ất. Song thôngth ường, loại
11.0592 MHz đượcdùngnh ằmlàmchocác h ệ thống dựatrên
8051 tươngthích v ới cổng nốiti ếp củaIBM PC.
Xung & Hoi
2
• Với họ 8051, mộtchu k ỳ máykéodài12 chu k ỳ dao động
Bàitoán9.1. Tínhth ờigianth ựcthi1 l ệnh
• Cho1 h ệ 8051 códao động
thạchanh11.0592 MHz.
Tìmth ờigianth ựcthicho
cáccâu l ệnhsau:
a
b
c 1
2
4 1*1.085us
2*1.085us
4*1.085us
d 1 1*1.085us
e 2 2*1.085us
f 1 1*1.085us
Xung & Hoi
3
a.MOVR3,#79H
b.LJMP
c.MULAB
d.DECR5
e.SJMP
f.NOP
Giải đáp:
Bàitoán9.2. Tínhth ờigiantr ễ đoạncode
• Tìmth ờigiantr ễ choch ươngtrìnhcon say đây, (với tần số
dao độngth ạchanhlà11.0592 MHz)
DELAY:MOVR3,#250;1 MC
HERE:NOP;1 MC
NOP;1 MC
NOP;1 MC
NOP; 1 MC
DJNZR3,HERE;2 MC
RET;1 MC
Xung & Hoi
4
Answer:[250x(1+1+1+1+2)+2]x1.085 us=1629.67us
Bàitoán9.3. NháyLED
AChươngtrình l ần lượtthay đổitr ạngtháisáng/t ối củaLED
hay lần lượtthay đổitr ạngthái đóng/mở của rơle: (vớiKIT
8951)
ORG0000
MOVA,#01H
A L1:RL
MOVP2,A
LCALLDELAY_500ms
LCALLDELAY_500ms
SJMPL1
Xung & Hoi
5
DELAY_500ms: …
DELAY_500ms: MOVR1, #250
PUSH 00H
PUSH 01H
MOVR1, #250
D2:MOVR0, #250
DJNZR0, $
MOVR0, #250
DJNZR0, $
DJNZR1, D2
D1:MOVR0, #250
DJNZR0, $
MOVR0, #250
DJNZR0, $
DJNZR1, D1 POP01H
POP00H
RET
Xung & Hoi
6
END
ức năng đặcbi ệt(SFR)
Xung & Hoi
1
1.Gi ớithi ệu
2. Sơ đồ khốivàchân
3. Tổ chức bộ nhớ
4.Cácthanhghich
5.Dao độngvàho ạt độngreset
6. Tập lệnh
7.Cácmode định địach ỉ
8. LậptrìnhIO
9. Tạotr ễ
Timer/Counter
10.10.LLậậpp trtrììnhnh Timer/Counter
11.Lậptrìnhgiaoti ếp nốiti ếp
12.Lậptrìnhng ắt
13.Lậptrình h ợpng ữ
10-1. Giớithi ệu
•8051 có2 timers/counters: timer/counter 0 & timer/counter 1.
Chúngcóth ểđượ cdùngnh ư:
1. Bộđị nhth ời (Timer) dùngnh ư 1 bộ tạotr ễ
ồnxungclock chínhlàdao –Ngu độngth ạchanhbêntrong
2. Bộđế m sự kiện (Event Counter)
– Đầuvào t ừ chânbênngoài đểđế m số sự kiện
–Cóth ể dùng đếm số người điqua c ổng, số vòngquay c ủa
bánhxe, hay b ất kể các sự kiệnmàchuy ển đượcsang d ạng
xung
Xung & Hoi
2
3. Tạo tốc độ baud (baud rate) choport n ốiti ếp của8051
Timer
ạtTimer, sau đó8051 tínhlên
ừ clock nội(machine cycle)
•Kh ởi tạogiátr ị ban đầuchocácthanhghi
•Kíchho
•Ngõvàolà t
•Khicácthanhghi b ằng0 thì8051 s ẽ set cờ tràn
8051
P2 P1
to
LCD
TH0
Set
Timer 0
TL0
Xung & Hoi
3
Counter
• Đếm số sự kiện:
–Ch ỉ ra số sự kiệntrêncácthanhghi
–Counter 0: Ngõvào t ừ chânbênngoàiT0 (P3.4)
–Counter 1: Ngõvào t ừ chânbênngoàiT1 (P3.5)
TH0
P1
TL0
to
LCD
P3.4
Xung & Hoi
4
T0 a switch
Cácthanhghidùngtruyxu
ấtTimer/Counter
•TH0, TL0, TH1, TL1
•TMOD thanhghich ếđộđị nhth ời(Timer mode register)
•TCON thanhghi điềukhi ển địnhth ời(Timer control register)
•8052 v ới3 timers/counters s ẽ cóthêmcácthanhghiT2CON
SFR Name
Description
SFR Address
TH0
Timer 0 High Byte
8Ch
TL0
Timer 0 Low Byte
8Ah
TH1
Timer 1 High Byte
8Dh
TL1
Timer 1 Low Byte
8Bh
TCON
Timer Control
88h
TMOD
89h
Timer Mode
Xung & Hoi
5
(Timer 2 control register), TH2 and TL2
–Cácthanhghinày l ưutr ữ
TH0, TL0, TH1, TL1 (not bit addressable)
• Cả timer 0 & timer 1 đềucó độ rộng16 bits
–Timer 0: TH0 & TL0
•Giátr ị tạoth ờigiantr ễ (time delay) (nếulàtimer)
• Số sự kiện(number of events) (n ếulàcounter)
–Timer 1: TH1 & TL1
•Timer 0 high byte, timer 0 low byte
– Mỗi bộđị nhth ời16-bit cóth ểđượ ctruy c ậpnh ư 2
thanhghi8-bit táchbi ệt
Xung & Hoi
6
•Timer 1 high byte, timer 1 low byte
TH0TL0
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
TH1TL1
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
Timer 0
Xung & Hoi
7
Timer 1
10-2. Thanhghich ếđộđị nhth ờiTMOD
•Timer mode register: TMOD (not bit addressable)
–Thanhghi8-bit
–Thi ết lậpch ếđộ hoạt độngchocác b ộđị nhth ời:
•4 bits th ấpdànhchoTimer 0 (Set to 0000 if not used)
•4 bits caodànhchoTimer 1 (Set to 0000 if not used)
(MSB)(LSB)
GATE
C/T
M1
M0
GATE
C/T
M1
M0
Timer 1
Timer 0
Xung & Hoi
8
(MSB)(LSB)
GATE
C/T
M1
M0
GATE
C/T
M1
M0
Timer 1
Timer 0
GATE
ạt động
Bit điềukhi ển cổng. Khiset lên1, timer ch ỉ hoạt độngkhi
chân/INTx ở mứccaovàTRx= 1. Khixóa, timer ho
khiTRx= 1
C/T
Bit chọnch ức năng đếmho ặc địnhth ời: 1: đếm; 0: địnhth ời
M1
Chọnmode -bit 1
M0
Xung & Hoi
9
Chọnmode -bit 0
GATE
–GATE=0
–GATE=1
• Điềukhi ểnbêntrong(Internal control)
• Bậthay t ắttimer b ằngph ần mềm
•Timer đượcchophépkhiTR đượcset
• Điềukhi ểnbênngoài(External control)
• Bậthay t ắttimer b ằngph ần mềm& m ộtngu ồnbên
ngoài(external source)
•Timer đượcchophépkhichân/INT ở mứccao& TR
Xung & Hoi10
đượcset
÷ 12
XTAL
oscillator
C/T = 0
C/T = 1
T0 Pin
Pin 3.4
TR0
Gate
INT0 Pin
Pin 3.2
Xung & Hoi11
M1, M0
0
0
0
M1 M0 Mode Hoạt động
0
1
1
Chếđộđị nhth ời 13-bit
8-bit THx+ 5-bit TLx(x= 0 or 1)
1
0
2
1
1
3
Chếđộđị nhth ời 16-bit
8-bit THx+ 8-bit TLx
Chếđộ tựđộ ng nạp lại 8-bit
(auto reload mode)
8-bit auto reload timer/counter;
THx lưutr ữ giátr ị nạp lạichoTLx m ỗi
khitràn(overflow)
Chếđộđị nhth ờichia s ẻ
(Split timer mode)
Xung & Hoi12
VD: Tìmgiátr ị TMOD nếumu ốn lậptrìnhTimer 0 làmvi ệc ở
mode 2 ? Dùng8051 XTAL choxungclock, & dùng l ệnh để
bậthay t ắttimer
Giải đáp:
timer 1
timer 0
TMOD= 0000 0010 Timer 1 khôngdùng
Timer 0, mode 2
C/T = 0 (cid:224) dùngngu ồnxungclock ( Timer)
Xung & Hoi13
GATE = 0 (cid:224) điềukhi ển bằng phần mềm
10-3. Thanhghi điềukhi ển địnhth ờiTCON
•Timer control register: TCON
–½byte caochotimer/counter, ½byte th ấpchointerrupts
• TR (run control bit)
–TR0 for Timer/counter 0; TR1 for Timer/counter 1.
–TR đượcset hay xóa b ởiph ần mềm để bật/tắttimer/counter
(MSB)(LSB)
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Timer 1 Timer0
for Interrupt
Xung & Hoi14
•TR=0: off (stop)
•TR=1: on (start)
• TF (timer flag, control flag)
– Cờ tràn của bộđị nhth ời
–TF0 chotimer/counter 0; TF1 chotimer/counter 1
–Kh ởi đầu, TF=0 & đượcset b ởiph ần cứngkhicótràn – t ức
TH-TL chuyển đếm về 0000 từ FFFFH
• Nếuchophépng ắt, thìTF=1 s ẽ kíchkh ởiISR
– Đượcxóa b ởiph ần mềm (hoặc bởiph ần cứngkhi b ộ xi xử
(MSB)(LSB)
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Timer 1 Timer0
for Interrupt
Xung & Hoi15
lýtr ỏđế ntrìnhph ục vụ ngắt)
mode
10-4. Cácch ếđộđị nhth ời
Timer clock
overflow flag 0
TFx
THx
TLx
overflow flag
Timer clock
TFx
THx
TLx
1
overflow flag
Timer clock
TFx
TLx
2
reload
THx
Timer clock
TLx
THx
3
Timer clock
TL0
TF0
Fosc/12
TH0
TF1
Xung & Hoi16
0
0
0
M1 M0 Mode Hoạt động
0
1
1
Chếđộđị nhth ời 13-bit
8-bit THx+ 5-bit TLx(x= 0 or 1)
1
0
2
1
1
3
Chếđộđị nhth ời 16-bit
8-bit THx+ 8-bit TLx
Xung & Hoi17
Chếđộ tựđộ ng nạp lại 8-bit
(auto reload mode)
8-bit auto reload timer/counter;
THx lưutr ữ giátr ị nạp lạichoTLx m ỗi
khitràn(overflow)
Chếđộđị nhth ờichia s ẻ
(Split timer mode)
10-4-1. Chếđộđị nhth ời16-bit (mode 1)
1.Ch ọntimer 0 làmvi ệc ở mode 1 (địnhth ời16-bit)
– MOV TMOD,#01H
2.Kh ởi tạogiátr ị ban đầu nạpchoTH0 & TL0.
– MOV TH0,#FFH
– MOV TL0,#FCH
3.Tho ạt đầunênxóa c ờ TF0 về 0
– CLR TF0
4. BậtTimer 0
Xung & Hoi18
– SETB TR0
overflow flag
Timer clock
TLx
THx
TFx
TR0=0
TH0
TL0
TR0=1
Start timer
Stop timer
FFFC FFFD FFFF 0000 FFFE
TF = 0 TF = 0TF = 0 TF = 0 TF = 1
TF
Theo dõiTF đếnkhiTF = 1
5.Khicóxungclock đến, 8051 bắt đầu đếmlên b ằngcách t ăng
Xung & Hoi19
giátr ị trongcácthanhghiTH0-TL0
TH0-TL0= FFFCH,FFFDH,FFFEH,FFFFH,0000H
6.KhiTH0-TL0có s ự chuyển sốđế m từ FFFFH (cid:224) 0000 thì
8051 set TF0=1
– TH0-TL0 = FFFEH, FFFFH, 0000H (khinàyTF0=1 )
7.Theo dõi c ờ tràn(TF)
– AGAIN: JNB TF0, AGAIN
8.XóaTR0 để tắttimer 0
– CLR TR0
9.Xóa c ớ trànchovòngti ếptheo
Xung & Hoi20
– CLR TF0
C/T=0: up
Nguồnxungclock cung c ấpcho b ộđị nhth ời
C/T=0: down
C/T
÷ 12
XTAL
oscillator
T0 hay
T1 pin
TLx
THx
TFx
overflow flag
TF goes high
when FFFF (cid:224) 0
TRx
Timer clock
Xung & Hoi21
Mode 1
Bàitoán10.1. Sóngvuông
EViếtch ươngtrình t ạosóngvuôngcóth ờigian m ứccaovà
ạotr ễ mode 1
thấp bằngnhautrênchânP1.5. DùngTimer 0 t
;each loop is a half clock
MOV TMOD, #01 ;Timer 0,mode 1(16-bit)
ị Timer0 = FFF2H
HERE: MOV TL0, #0F2H ;Giátr
MOV TH0, #0FFH
CPL P1.5
ACALL DELAY
SJMP HERE
P1.5
50% 50%
whole clock
Xung & Hoi22
;tạotr ễ dùngtimer 0
DELAY:
SETB TR0 ;start the timer 0
JNB TF0, $
CLR TR0 ;stop timer 0
CLR TF0 ;clear timer 0 flag
RET
TF0 = 0
TF0 = 0TF0 = 0
TF0 = 0
TF0 = 1
Xung & Hoi23
FFF2 FFF3 FFFF 0000 FFF4
Vài điểm cầnchúý trongVD trên:
1. TMOD = 0000 0001 đượcth ựcthi
2. FFF2H chuyểnvàoTH0 –TL0
3. Set vàxóaP1.5 trongth ờigian m ứccaovàth ấp củaxung
4. CTC DELAY dùngTimer được gọi
5. TrongCTC DELAY, b ậttimer 0 dùng l ệnh “SETB TR0”
ấp bởidao
6. Timer 0 đếmlên m ỗikhicóxungclock (cung c
ị: FFF3, FFF4, FFF5, FFF6, FFF7,
độngth ạchanh)
Timer 0 đếmqua cácgiátr
FFF8, FFF9, FFFA, FFFB, FFFC, FFFFD, FFFE, FFFFH,
0000H (cid:224) TF0 = 1 vàkhinày l ệnhJNB b ị bỏ qua
Xung & Hoi24
7. TắtTimer 0 dùng l ệnh “CLR TR0”. CTC DELAY kếtthúc,
tiếntrình được lặp lại.
Chúý, làmvi ệc vớimode 1, nên để lặp lạiti ếntrình, taph ải
nhập lạigiátr ị chocácthanhghiTH-TL & b ật lạiTimer.
10-4-2. Chếđộđị nhth ời13-bit (mode 0)
•Mode 0 t ương tự mode 1, ngoạitr ừ nólà 13-bit timer thayvì
16-bit.
–8-bit TH0 + 5-bit TL0
• Bộđế mvìth ế cógiátr ị từ 0000 đến1FFF trongcácthanhghi
địnhth ờiTH0-TL0
– 213-1= 2000H-1=1FFFH
•Ta c ũnggáncácgiátr ị ban đầuvàoTH0-TL0 để thựchi ện
đạt đến1FFFH thìnóchuy ển về 0000, vàTF0 được đếmlên
•KhiTimer
overflow flag
Timer clock
THx
TFx
TLx
Xung & Hoi25
set
10-4-3. Chếđộ tự nạp lại8-bit (mode 2)
• Bộđị nhth ời8-bit
–Chophépcácgiátr ị từ 00 đếnFFH l ưutrongTH0
overflow flag
Timer clock
TFx
TLx
TF goes high when FF (cid:224) 0
reload
THx
Xung & Hoi26
• Tựđộ ng nạp lại(Auto-reloading)
•TL0 được tănglênkhiTR0=1
•VD, tạoth ờigiantr ễ với200 chu k ỳ máy(MC) trêntimer 0.
1.Ch
ọnmode 2 timer 0
– MOV TMOD,#02H
2.Kh ởi tạogiátr ịđầ utrongTH0
– MOV TH0,#38H
ờ TF0=0. 3.Xóa c
– CLR TF0
4.SaukhiTH0 đượcgán, 8051 copy giátr ị nàyvàoTL0
– TL0=TH0=38H
5. BậtTimer
Xung & Hoi27
– SETB TR0
6.8051 đếmlênTL0
– TL0= 38H, 39H, 3AH,....
7.KhiTL0 t ừ FFH (cid:224) 00 thì8051 set TF0=1. Bên c ạnh đó,
TL0 được tựđộ ng nạp lạigiátr ị lưugi ữ trongTH0
– TL0= FEH, FFH, 00H (lúcnày TF0=1)
ựđộ ng nạp lại TL0=TH0=38H.
–8051 t
ại bước 6
Xung & Hoi28
–Quay l
8.CLR TF0
9.CLR TR0
C/T=0: up
C/T=0: down
C/T
÷ 12
XTAL
oscillator
T0 hay
T1 pin
TL1
TF1
overflow
flag
reload
TH1
TRx
TF goes high
when FF (cid:224) 0
Timer clock
Xung & Hoi29
Mode 2
10-5. Tínhtoántr ễ dùngTimer
Áp dụng đ/v chếđộđị nhth ời16-bit (mode 1)
(a) Dạnghexa (b) Dạngth ậpphân
(FFFF –YYXX + 1) * 1.085 m s
ị YYXX
Chuyểncácgiátr
củaTH, TL sang d ạngth ập
phânNNNNN, (cid:224) tacó
XTAL = 11.0592 MHz
Xung & Hoi30
Trong đóYYXX làcácgiá
trị ban đầu củaTH, TL
tương ứng (65536 –NNNNN) * 1.085 m s
Bàitoán10.2. Sóngvuông, tìm f
EChươngtrìnhsau t ạosóngvuôngtrênchânP1.5 liên t ụcdùng
timer 1 tạotr ễ mode 1. Tìm tần số?
(Khôngbao g ồmoverhead gây b ởicác l ệnhtrongvòng l ặp)
MOV TMOD,#10H ;timer 1, mode 1
AGAIN:MOV TL1,#34H ;timer value=7634H
MOV TH1,#76H
SETB TR1 ;start
BACK: JNB TF1,BACK
;next half clock
Xung & Hoi31
CLR TR1 ;stop
CPL P1.5
CLR TF1 ;clear timer flag 1
SJMP AGAIN ;reload timer1
Giải đáp:
Vớimode 1, cácthanhghi địnhth ờiTH, TL ph ải đượckh ởi động
lạisau m ỗi lầntràn.
FFFFH –7634H + 1 = 89CCH = 35276 clock count
½chu k ỳ
Chu kỳ
Tần số = 35276 × 1.085 m s = 38.274 ms
= 2 × 38.274 ms = 76.548 ms
= 1/ 76.548 ms = 13.064 Hz.
ồmoverhead gây b ởi
Xung & Hoi32
Trongcáctínhtoántrên, khôngbao g
các lệnhtrongvòng l ặp
Bàitoán10.3.
• ETìmKQ cácbàitoántrêntrongtr ường hợpcótính đến
overhead?
• EGiảicácbàitoántrên v ớich ếđộđị nhth ời tự nạp lại8-bit
(mode 2)?
• EVớiph ạmvi t ần số nàothìkhôngth ể dùngch ếđộ tự nạp lại
Xung & Hoi33
8-bit (mode 2), giảithích?
10-6. Tìmgiátr ị cácthanhghi địnhth ời
ảđị nhbi ếttr ướcth ờigiantr ễ, XTAL = 11.0592 MHz
1.Chiath ờigiantr ễ cho 1.085 ms.
2.Th ựchi ện 65536 –n, với n (decimal) từ bước 1
3.Chuy ểnKQ trong b ước2 sang hex yyxx
4.Set TH = yy và TL = xx.
Xung & Hoi34
•Gi
•Làmsaotínhtoáncácgiátr ị cầngánchoTH, TL?
Bàitoán10.4. T ạosóngvuôngtheof cho
sẵn
EXTAL = 11.0592 MHz, viếtch ươngtrình t ạosóngvuông50
Hz trênchânP2.3
Giải đáp:
(a) T = 1 / 50 Hz = 20 ms.
(b) Thờigian m ứccao= Th ờigian m ứcth ấp= 10 ms.
(c) 10 ms / 1.085 m s = 9216
65536 –9216 = 56320 in decimal = DC00H in hex.
Xung & Hoi35
(d) TL1 = 00H and TH1 = DCH.
MOV TMOD,#10H ;timer 1, mode 1
AGAIN: MOV TL1,#00 ;Timer value = DC00H
MOV TH1,#0DCH
SETB TR1 ;start
BACK: JNB TF1,BACK
CLR TR1 ;stop
CPL P2.3
CLR TF1 ;clear timer flag 1
SJMP AGAIN ;reload timer since
Xung & Hoi36
;mode 1 is not
;auto-reload
Tạoth ờigiantr ễ lớn
địnhth ờiTH &
TL
• Độ lớn tdelay phụ thuộc2 thông s ố:
– Tần số dao độngth ạchanh
–Giátr ị chứatrongcácthanhghi
•Th ờigiantr ễ là lớnnh ấtkhiTH=TL=0.
NNếếuu vvẫẫnn chưa
chưa đđủủ??
Xung & Hoi37
Bàitoán10.5. Tínhdelay
EKhảosátBT sauvàtìmth
ờigiantr ễ? (Khôngtínhoverhead)
MOV TMOD,#10H
MOV R3,#200
AGAIN: MOV TL1,#08H
MOV TH1,#01H
SETB TR1
BACK: JNB TF1,BACK
CLR TR1
CLR TF1
DJNZ R3,AGAIN
Xung & Hoi38
Giải đáp:
TH –TL = 0108H = 264 (decimal)
65536 –264 = 65272.
Trễ do timer = 65272 × 1.085 m s = 70.820 ms
Tổngth ờigiantr ễ = 200 × 70.820 ms = 14.164024 seconds
;Timer 0,mode 2
Bàitoán10.6. Tính t ần số xungvuông
ETìm tần số xungvuôngtrênchânP1.0 ?
MOV TMOD,#2H
MOV TH0,#0
AGAIN:MOV R5,#250 ;count 250 times
ACALL DELAY
CPL P1.0
SJMP AGAIN
DELAY:SETB TR0 ;start
BACK: JNB TF0,BACK
CLR TR0 ;stop
CLR TF0 ;clear TF
DJNZ R5,DELAY ;timer 2: auto-reload
RET
Giải đáp:T= 2 (250 × 256 × 1.085 m s) = 138.88 ms (cid:224) f = 72 Hz.
Xung & Hoi39
Bàitoán10.7. Tìmgiátr
ị gánchoTH
•Gi ải đáp: Vài 8051 assemblers cho
phép cách thức sau:
•-200 = -C8H (cid:224) 2’s complement
of –200 = 100H –C8H = 38H
Decimal2’s complement (TH
value)
EGiả sử đang lậptrình
choTimer ở mode 2, tìm
giátr ị hex gánchothanh
ghiTH trongcáctr ường
hợpsau:
(a) MOV TH1,#-200
(b) MOV TH0,#-60
(c) MOV TH1,#-3
(d) MOV TH1,#-12
(e) MOV TH0,#-48
Xung & Hoi40
-200 = -C8H38H
-60 = -3CHC4H
-3FDH
-12F4H
-48D0H
ần số sóngvuông v ới đoạncode sau
Bàitoán10.8. Tìm f
(a)Tìm t
(b)Th ờigian m ứccaovàth ấp
MOV TMOD,#2H ;Timer 0,mode 2
MOV TH0,#-150 ;Count=150
AGAIN:SETB P1.3 high period
low period
ACALL DELAY
ACALL DELAY
CLR P1.3
ACALL DEALY
SJMP AGAIN
Xung & Hoi41
DELAY:SETB TR0 ;start
BACK: JNB TF0,BACK
CLR TR0 ;stop
CLR TF0 ;clear TF
RET
Giải đáp:
“MOV TH0,#-150”dùng150 clocks.
CTC DELAY = 150 × 1.085 m s = 162 m s.
Thờigian m ứccao g ấp2 l ầnth ờigian m ứcth ấp(66% duty cycle).
Chu kỳ
Xung & Hoi42
= Thờigian m ứccao+ th ờigian m ứcth ấp
= 325.5 m s + 162.25 m s = 488.25 m s
= 2.048 kHz. Tần số
10-7. Bộđế m
•Các b ộđị nhth ời(timers) c ũngcóth ể dùngnh ư những bộđế m
(counters) đểđế m sự kiện xảyrabênngoài8051
đó, xung từ ngoài sẽ làm tănggiátr ị cácthanhghiTH, TL
•Khi
•KhiC/T=1, b ộđế m sẽđế mlênkhicóxungxu ấthi ện từ:
–T0: timer 0 input (Pin 14, P3.4)
–T1: timer 1 input (Pin 15, P3.5)
Pin
14 Port Pin
P3.4 Function
T0 Description
Timer/Counter 0 external input
15
P3.5
T1
Timer/Counter 1 external input
(MSB)(LSB)
GATE C/T=1 M1 M0 GATE C/T=1 M1 M0
Xung & Hoi43
Timer 1 Timer 0
10-7-1. Chếđộđế m16-bit (mode 1)
• 16-bit counter (TH0 and TL0)
•Giátr ăngkhi: TR0 đượcset
ị trongcácthanhghiTH0-TL0 t
lên1 và mộtxungbênngoài(T0) xu ấthi ện
overflow flag
Timer 0 ngõvào
từ bênngoài
chân3.4 (T0)
TL0
TH0
TF0
C/T = 1
TF0 goes high
when FFFF (cid:224) 0
Xung & Hoi44
TR0
•Khi b ộđế m(TH0-TL0) đạt tớigiátr ị lớnnh ấtlàFFFFH, nó
đượcchuy ểntr ạngthái v ề 0000, vàTF0 đượcset lên1
• Bằngcách n ạpgiátr ị ban đẩuchoTH0-TL0, theodõiTF0=1
để nhậnbi ết1 tìnhhu ốngnào đó(vd: 100 ng ười đã đến).
10-7-2. Chếđộđế m tự nạp lại8-bit (mode 2)
•8-bit counter.
–Ch ỉ chophépcácgiátr ị từ 00 đếnFFH n ạpvàoTH0
• Tựđộ ng nạp lại(Auto-reloading)
• Giátr ị trongTL0 s ẽ tăng nếuTR0=1 và 1 xungbênngoàixu ất
Xung & Hoi45
hiện
Bàitoán10.9. Đếmxung& xu ấtport
Giảđị nh1 xungclock được đưavàochânT1, vi ếtch ương
trình bộđế m1 làmvi ệc ở mode 2 đểđế mxung& hi ểnth ị giá
trị củaTL1 raP2, khiCounter trànthì k ếtthúc?
8051
P2
to
LEDs
P3.5
Xung & Hoi46
T1
Ans:
MOV TMOD, #01100000B ;mode 2, counter 1
MOV TH1, #0
SETB P3.5
SETB TR1;start
BACK: MOV A,TL1
Xung & Hoi47
MOV P2,A;display in P2
JNB TF1,BACK;overflow
CLR TR1;stop
CLR TF1;make TF=0
Bàitoán10.10. Đếmxung& Hi ểnth ị LCD
•Gi ả sử 1 xung tần số 1Hz được cấpvàochânP3.4. Vi ết
chươngtrìnhhi ểnth ị counter 0 trênLCD. Kh ởi tạogiátr ị ban
đầuchothanhghiTH0 là-60.
8051
P1
to
LCD
P3.4
Xung & Hoi48
T0 1 Hz clock
ACALL LCD_SET_UP
;initialize the LCD
MOV TMOD,#00000110B ;Counter 0,mode2
MOV TH0,#-60
SETB P3.4 ;make T0 as input
AGAIN:
SETB TR0 ;starts the counter
BACK:
;every 60 events
;convert in R2,R3,R4
;loop if TF0=0
;stop
Xung & Hoi49
MOV A,TL0
ACALL CONV
JNB TF0,BACK
CLR TR0
CLR TF0
SJMP AGAIN
;converting 8-bit binary to ASCII
CONV: MOV B,#10 ;divide by 10
;make it ASCII
Xung & Hoi50
R3 R4 R2
DIV AB
MOV R2,B ;save low digit
MOV B,#10 ;divide by 10 once more
DIV AB
ORL A,#30H
MOV R4,A
MOV A,B
ORL A,#30H
MOV R3,A
MOV A,R2
ORL A,#30H
MOV R2,A ;ACALL LCD_DISPLAY here
RET
Bàitoán10.11. Đồng hồ số
• Cảiti ếnví d ụ trênth ựchi ện1 đồng hồ sốđơ ngi ản, chưa cần
cácnúthi ệuch ỉnhgi ở, phút ?
•Vi ệc sử dụng lệnh “JNB TF0,target” để giámsát c ờ TF0
Xung & Hoi51
là sự hoangphíth ờigianvôcùng l ớn
–Gi ảipháplàdùngng ắt, đề cậptrongph ần12 c ủabàigi ảng
– Vớing ắt, tacóth ể thựcthinhi ềuvi ệc
–Khi c ờ TF đượcset, nó s ẽ thôngbáochochúngta
ức năng đặcbi ệt(SFR)
programming)
(serial commcomm programming)
Xung & Hoi
1
1.Gi ớithi ệu
2. Sơđồ khốivàchân
3. Tổ chức bộ nhớ
4.Cácthanhghich
5.Dao độngvàho ạt độngreset
6. Tập lệnh
7.Cácmode định địach ỉ (addressing modes)
8. LậptrìnhIO
9. Tạotr ễ
10.LậptrìnhTimer/Counter
11.11.LLậậpp trtrììnhnh giaogiao titiếếpp nnốốii titiếếpp (serial
12.Lậptrìnhng ắt(interrupt programming)
13.Lậptrình h ợpng ữ
11-1. Giớithi ệu
•Port n ốiti ếpho ạt độngsong công ( full duplex), nghĩalàcó
khả năngthuvàphát đồngth ời
• Sử dụng2 thanhghich ức năng đặcbi ệt SBUF (địach ỉ byte là
99H) & SCON (địach ỉ byte là98H) để truyxu ấtport n ốiti ếp
•Vi ệc ghilênSBUF sẽ nạp dữ liệu để phát, vàvi ệc đọcSBUF
sẽ truyxu ất dữ liệu đãnh ận được (cid:224) thựcracó2 SBUF riêng
rẽ
•SCON chứacácbit tr ạngtháivà điềukhi ển, thanhnày được
định địach ỉ bit
• Tần số hoạt động củaport n ốiti ếphay còn g ọilà tốc độ baud
Xung & Hoi
2
(baud rate) cóth ể cốđị nhho ặcthay đổi
RXD
(P3.0)
TXD
(P3.1)
D
Shift Register
Clk SBUF
Q
Clk
(write only)
Baud rate clock
(phát)
Baud rate clock
(thu)
SBUF
(read only)
8051 internal bus
Xung & Hoi
3
SM2 REN
SM0
SM1
RB8
TB8
TI
RI
11-2. Thanhkhi điềukhi ểnport n ốiti ếp
SCON
ềnthông đa xử lý
SM1, SM0: chọnch ếđộ củaport n ốiti ếp
SM2: chophéptruy
REN: chophépthu, ph ải đượcset để nhậncácký t ự
TB8:bit th ứ 9 đượcphát ở chếđộ 2 & 3
RB8:bit th ứ 9 nhận được
TI:
RI:
Xung & Hoi
4
cờ ngắtphát, đượcset ngaysaukhi k ếtthúcvi ệcphát1
ký tự; đượcxóa b ởiph ần mềm
cờ ngắtthu, đượcset ngaysaukhi k ếtthúcvi ệcthu1
ký tự; đượcxóa b ởiph ần mềm
11-3. Cácch ếđộ hoạt động
ịch
SM0SM1ModeMô t
0
0 ả
0Thanhghi d
1UART 8-bit 0
1
1 0 2UART 9-bit C Tốc độ baud
Cốđị nh(f OSC/12)
Thay đổi (thiết lập
bởi bộđị nhth ời)
ốđị nh(f OSC/12
1 1 3UART 9-bit
Xung & Hoi
5
hoặc fOSC/64)
Thay đổi (thiết lập
bởi bộđị nhth ời)
11-3-1. Thanhghi d ịch8-bit (mode 0)
•Khiphátvàthu d ữ liệu8-bit, bit LSB đượcphátho ặcthutr ước
tiên
• Tốc độ baud cốđị nh= f OSC/12
•ChânRxDdùngcho c ả việcthuphát d ữ liệutrongkhiTxD
dùnglàmchânxu ấtclock d ịchbit
•Phát:
Xung & Hoi
6
–GhivàoSBUF
– Dữ liệu được dịchrangoàitrênchânRxD(P3.0)
–Xungclock d ịchbit được gửiratrênchânTxD(P3.1)
– Mỗibit h ợp lệ truyền đitrênRxDtrong1 chu k ỳ máy
•Thu:
–Ch ỉđượ ckh ởi độngkhiREN = 1 & RI = 0, ngh ĩalàph ảiset
REN = 1 ở thời điểm bắt đầuch ươngtrình& xóaRI để bắt
đầucôngvi ệcthu d ữ liệu
– Dữ liệu được dịchvàochânRxD b ởixungclock d ịchbit
(tác động sườnlên)
•1 Ứng dụng củamode 0:
– Mở rộngthêmcácngõracho8051
8 ngõra m ở rộng
8051
Clock TxD(P3.1)
Shift Regsiter
Xung & Hoi
7
RxD(P3.0) Data
11-3-2. UART 8-bit có tốc độ baud thay
đổi(mode 1)
•UART là b ộ thuphát d ữ liệu nốiti ếp với mỗiký t ự dữ liệu
được đứngtr ước bởi1 bit start và đứngsau b ởi1 bit stop.
Thỉnhtho ảng1 bit parity đượcchènvào.
•Ho ạt độngch ủ yếu củaUART làbi ến dữ liệuphát t ừ // thành
ntvàbi ến dữ liệuthu t ừ ntthành//
• Cờ ngắtphátTI đượcset b ằng1 ngaykhibit stop xu ấthi ện
1 / baud rate
Stop
bit
Start
bit
TxD
D0D1D2D3D4D5D6D7
TI
Xung & Hoi
8
trênTxD
TI (ready
for more
data)
•Vi ệcnh ận đượckh ởi động bởi1 chuy ểntr ạngthái t ừ 1 xuống
0 trên đườngRxD(bit start)
•Bit start sau đó được bỏ qua & 8 bit dữ liệusau đó đượcnh ận
tuần tự vàothanhghi d ịchbit c ủaport n ốiti ếp. Khi cả 8 bit
đượcnh ận, tacó:
–Bit th ứ 9 (bit stop) (cid:224) RB8 củaSCON
–8 bit d ữ liệu được nạpvàoSBUF
– Cờ ngắtthuRI đượcset
Xung & Hoi
9
•Note: Các điềutrênch ỉ xảyra n ếutr ước đó cờ RI = 0
11-4. Khởi độngvàtruyxu ấtcácthanhghi
•Chophépnh ận: REN trongSCON ph ải đượcset b ởiph ần
mềm để chophépnh ậnký t ự
SETBREN
Hoặc
MOVSCON, #xxx1xxxxB
•Thêmvàobit ch ẵn lẻ: bit P trongPSW đượcset ho ặcxóa ở
đưabit ki ểmtrach ẵnvàoTB8
ở thànhbit th ứ 9
Xung & Hoi10
mỗichu k ỳ máy để thiết lậpvi ệcki ểmtrach ẵncho8 bit ch ứa
trong A
MOVC, P;
MOVTB8, C; bit nàytr
MOVSBUF, A; dichuy ển8 bit d ữ liệuvàoSBUF
•Các c ờ ngắt: RI vàTI đượcset b ằngph ần cứngnh ưngph ải
xóa bằngph ần mềm
CTC nhận1 ký t ự qua port nốiti ếpnh ư sau:
INCHAR:JNBRI, $
CLRRI
MOVA, SBUF
RET
Xung & Hoi11
CTC phát1 ký t ự qua port nt:
OUTCHAR:JNBTI, $
CLRTI
MOVSBUF, A
RET
11-5. Tốc độ baud củaport n ốiti ếp
Baud rate
clock
On-chip
OSC
Mode 0
SMOD=0
‚ 12
Baud rate
clock
On-chip
OSC
SMOD=1
‚ 64
Mode 2
SMOD=0
‚ 32
Baud rate
clock
Timer 1
overflow
SMOD=1
‚ 32
Mode 1 & 3
Xung & Hoi12
‚ 16
Dùngtimer 1 làmxungclock t ốc độ baud
•Thôngth ườngkh ởi độngthanhghiTMOD ở chếđộ tựđộ ng
nạp lại8-bit (mode 2) & đặtgiátr ị nạp lạithích h ợpvàothanh
ghiTH1 để có tốc độ tràn đúng, từ đó tạora t ốc độ baud
•MOVTMOD, #0010xxxxB ;for timer 1
•Baud rate = Timer 1 overflow / 32 hay /16 tùythu ộcgiátr ị bit
Xung & Hoi13
SMOD
Bàitoán11.1
•Tínhtoáncácgiátr ị nạp lạichothanhghiTH1 đối vớicác t ốc
SMOD
Sai số
Tốc độ
baud
Tần số thạch
anh(MHz)
Giátr ị nạp
choTH1
Tốc độ baud
thực tế
9600
12
1
-7 (F9H)
8929
~7%
1200
12
0
-26 (E6H)
1202
0,16%
19200
11,0592
-3 (FDH)
19200
1
0%
9600
11,0592
0
-3 (FDH)
9600
0%
4800
11,0592
0
-6 (FAH)
4800
0%
0
2400
11,0592
-12 (F4H)
2400
0%
1200
11,0592
0
-24 (E8H)
1200
0%
Xung & Hoi14
độ baud 9600, 4800, 2400, 1200 (XTAL = 11,0592MHz)?
Tóm lại:
NếuPCON.7 = 0
•TH1 = 256 -((Crystal / 384) / Baud)
NếuPCON.7 =1
•TH1 = 256 -((Crystal / 192) / Baud)
Làmvd v ớibaud rate 19200 để chứng tỏ vaitròbit SMOD
11.059Mhz crystal:
•TH1 = 256 -((Crystal / 384) / Baud)
Xung & Hoi15
TH1 = 256 -((11059200 / 384) / 19200 )
TH1 = 256 -((28799) / 19200)
TH1 = 256 -1.5 = 254.5
• Nếuset 254 ta đạt được14,400 baud còn v ới255 ta đạt được
28,800 baud
•Set PCON.7 (SMOD). Ta có:
TH1 = 256 -((Crystal / 192) / Baud)
TH1 = 256 -((11059200 / 192) / 19200)
TH1 = 256 -((57699) / 19200)
TH1 = 256 -3 = 253
Xung & Hoi16
Kếtlu ận với19,200 baud (11.0592MHz crystal) taph ải:
1. CấuhìnhPort n ốiti ếpmode 1 or 3
2.Timer 1 ho ạt độngmode 2 (8-bit auto-reload)
3.Set TH1 b ằng253
4.Set PCON.7 (SMOD)
MAX 232
Xung & Hoi18
Xung & Hoi19