Giáo trình Mô đun Vi điều khiển - Điện dân dụng

1.1. Hệ đếm mười và hệ đếm hai

- Trong cuộc sống hàng ngày hệ đếm cơ số mười hay hệ mười đuợc sử

dụngrộng rãi, hệ đếm cơ số mười sử dụng các số từ 0.9 để biểu diễn các giá trị

số. đi kèm theo tập hợp đó có thể dùng thêm chữ D, trong cuộc sống hàng ngày

các số hệ mười đuợc biểu diễn độc lập không kèm theo kí tự, nhưng trong ngôn

ngữ máy tính khi sử dụng nhiều hệ đếm khác nhau phải có kí tự biểu diễn hệ

đếm đi cùng để phân biệt với các hệ đếm khác.

Ví dụ: 13; 14D.

- Trong thế giới máy tính thì khác, để biểu diễn một giá trị số chúng ta dùng

hệ cơ số hai nói ngắn gọn là hệ hai, trong đó chỉ sử dụng các giá trị 0 và 1 để

biểu diễn các giá trị số (ứng với hai trạng thái có điện và không có điện của các

mạch điện tử cấu tạo lên máy). Khi dùng nhiều hệ đếm khác nhau các hệ hai

thường đi kèm theo chữ B để phân biệt với các hệ đếm khác.

Ví dụ cách biểu diễn hệ hai: 0011; 1101B.

- Cách biểu diễn số hệ mười theo trọng số 10: Một số hệ mười 12345,67

đuợc biểu diễn theo trọng số 10

12345,67=1.104 +2.103 +3.102 +4.101 +5.100 +6.10-1 +7.10-2

- Tương tự một số hệ hai đuợc biểu diễn theo trọng số 2:

1100B= 1.23+1.22+0.21+0.20=12D

1.2. Chuyển đổi giữa hai hệ đếm

- Cách chuyển đổi số nguyên từ hệ mười sang hệ hai

Quy tắc: Lấy số cần đổi chia cho 2 và ghi nhớ phần dư, tiếp theo lấy thương của

phép chia trước đó chia cho 2 và ghi nhớ phần dư, làm như vậy cho đến khi

đuợc thương bằng 0. Đảo ngược thứ tự dãy các số dư sẽ đuợc các chứ số của hệ

hai cần tìm

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 1

Trang 1

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 2

Trang 2

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 3

Trang 3

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 4

Trang 4

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 5

Trang 5

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 6

Trang 6

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 7

Trang 7

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 8

Trang 8

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 9

Trang 9

Giáo trình Mô đun Vi điều khiển - Điện dân dụng trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 87 trang duykhanh 21440
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Mô đun Vi điều khiển - Điện dân dụng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Mô đun Vi điều khiển - Điện dân dụng

Giáo trình Mô đun Vi điều khiển - Điện dân dụng
ối với Timer 1. Các lệnh này có tác dụng khi 
bit GATE = 0 trong thanh ghi TMOD. 
Việc khởi động và ngừng bộ định thời bằng phần cứng từ nguồn ngoài bằng 
cách đặt bit GATE = 1 trong thanh ghi TMOD. 
76 
Tuy nhiên, để tránh sự lẫn lộn ngay từ bây giờ ta đặt GATE = 0 có nghĩa là 
không cần khởi động và dừng các bộ định thời bằng phần cứng từ bên ngoài. 
Ví dụ 3: 
TMOD = 0000 0010: Bộ định thời là Timer0, chế độ 2, C/T = 0 dùng nguồn 
XTAL, GATE = 0 dùng phần mềm để khởi động và dừng bộ định thời. 
Như vậy, bây giờ chúng ta đã có hiểu biết cơ bản về vai trò của thanh ghi 
TMOD, chúng ta sẽ xét từng chế độ của bộ định thời và cách chúng được lập 
trình như thế nào để tạo ra một độ trễ thời gian. 
2.3. Thanh ghi TCON 
Trong các ví dụ trên đây ta đã thấy công dụng của các cờ TR0 và TR1 để bật/tắt 
các bộ đếm/bộ định thời. Các bit này là một bộ phận của thanh ghi TCON. Đây 
là thanh ghi 8 bit, như được chỉ ra trong hình 2: 
4 bit trên được dùng để lưu cất các bit TF và TR cho cả Timer/counter 0 và 
Timer/counter 1. 
4 bit thấp được thiết lập dành cho điều khiển các ngắt mà ta sẽ bàn ở các bài sau. 
3 Lập trình cho chế độ 1 
3.1. Đặc điểm 
Dưới đây là những đặc điểm của timer ở chế độ 1: 
 Đây là bộ định thời 16 bit, do vậy nó cho phép các giá trị 0000 đến 
FFFFH được nạp vào các thanh ghi TL và TH của bộ định thời. 
 Sau khi TL và TH được nạp một giá trị khởi tạo 16 bit thì bộ định thời 
phải được khởi động. Điều này được thực hiện bởi việc SET bit TR0 đối 
với Timer 0 và SET bit TR1 đối với Timer 1. 
 Sau khi bộ định thời được khởi động, nó bắt đầu đếm lên. Nó đếm lên cho 
đến khi đạt được giới hạn FFFFH của nó. Sau đó, khi nó quay từ FFFFH 
về 0000 thì nó bật lên bit cờ TF được gọi là cờ bộ định thời. Cờ bộ định 
thời này có thể được hiển thị. Khi cờ bộ định thời này được thiết lập, để 
dừng bộ định thời: ta thực hiện xóa các bit TR0 đối với Timer 0 hoặc TR1 
đối với Timer 1. Ở đây cũng cần phải nhắc lại là đối với mỗi bộ định thời 
đều có cờ TF riêng của mình: TF0 đối với Timer 0 và TF1 đối với Timer 
1. 
 Sau khi bộ định thời đạt được giới hạn của nó là giá trị FFFFH, muốn lặp 
lại quá trình thì các thanh ghi TH và TL phải được nạp lại với giá trị ban 
đầu và cờ TF phải được xóa về 0. 
77 
Timer/counter chế độ 1 
3.2. Các bước lập trình ở chế độ 1 
Để tạo ra một độ trễ thời gian dùng chế độ 1 của bộ định thời thì cần phải thực 
hiện các bước dưới đây: 
 Nạp giá trị TMOD cho thanh ghi báo độ định thời nào (Timer0 hay 
Timer1) được sử dụng và chế độ nào được chọn. 
 Nạp các thanh ghi TL và TH với các giá trị đếm ban đầu. 
 Khởi động bộ định thời. 
 Duy trì kiểm tra cờ bộ định thời TF bằng một vòng lặp để xem nó được 
bật lên 1 không. Thoát vòng lặp khi TF được lên cao. 
 Dừng bộ định thời. 
 Xoá cờ TF cho vòng kế tiếp. 
 Quay trở lại bước 2 để nạp lại TL và TH. 
Công thức tính toán độ trễ sử dụng chế độ 1 (16 bit) của bộ định thời đối với tần 
số thạch anh XTAL = f (MHz): 
a) Tính theo số Hex b) Tính theo số thập phân 
(FFFF - YYXX + 1)*12/f (ms) trong 
đó YYXX là các giá trị khởi tạo của 
TH, TL tương ứng. Lưu ý rằng các giá 
trị YYXX là theo số Hex. 
Chuyển đổi các giá trị YYXX của TH, 
TL về số thập phân để nhận một số 
thập phân NNNNN sau đó lấy (65536 
– NNNNN)*12/f (ms). 
Công thức tính độ trễ thời gian theo tần số XTAL (f) 
Ví dụ 4: 
 Trong chương trình dưới đây ta tạo ra một sóng vuông với độ đầy xung 50% 
(cùng tỷ lệ giữa phần cao và phần thấp) trên chân P1.5. Bộ định thời Timer0 
được dùng để tạo độ trễ thời gian: 
#include ;khai báo thư viện cho VĐK 89x51 
Org 0x00 
Main: 
setb P1_5=1 ;khởi tạo chân P1_5 ở mức cao 
back: 
Acall delay ; Goi chuơng trình Delay 
Cpl P1_5 ; Dao gia tri P1.5 
Sjmp back ; Tao vong lap vo han 
Delay: 
Mov TMOD, #0x01 ; chọn timer0, chế độ 1, 16Bit 
78 
Mov TL0=0xF2 ;Nạp giá trị cho TL0 
Mov TH0=0xFF ;Nạp giá trị cho TH0 
Seb TR0=1 ;Khởi động timer0 
Here: Jnb TF0, here ; kiểm tra cờ TF0 
Clr TR0; ngừng timer0 ; Xoa co TR0 
Clr TF0; xóa cờ TF0 ; Xoa co TF0 
Ret 
end 
Trong chương trình chính (hàm main) thực hiện gọi hàm con delay() tạo trễ, và 
đảo liên tục tín hiệu đầu ra ở chân P1_5. 
Trong chương trình con delay() trên đây chú ý các bước sau: 
 TMOD được nạp. 
 Giá trị FFF2H được nạp và TH0 - TL0 
 Bộ định thời Timer0 được khởi động bởi lệnh Set bit TR0. 
 Bộ Timer0 đếm lên 01 sau mỗi chu kỳ của timer. Khi bộ định thời đếm 
tăng qua các trạng thái FFF3, FFF4 ... cho đến khi đạt giá trị FFFFH là nó 
quay về 0000H và bật cờ bộ định thời TF0 = 1. Tại thời điểm này vòng 
lặp kiểm tra cờ TF0 mới được thoát ra. 
 Bộ Timer0 được dừng bởi lệnh clear bit TR0. 
 Cờ TF0 cũng được xóa, sẵn sàng cho chu trình tiếp theo. 
Lưu ý rằng để lặp lại quá trình trên ta phải nạp lại các thanh ghi TH và TL và 
khởi động lại bộ định thời (đơn giản là ta gọi lại hàm delay()). 
Một chu trình đếm của timer0 
Tính toán độ trễ tạo ra bởi bộ định thời ở chương trình trên với tần số 
XTAL=11,0592MHz: 
 Bộ định thời làm việc với tần số đồng hồ bằng 1/12 tần số XTAL, do vậy ta có 
11,0592MHz/12=0,9216MHz là tần số của bộ định thời. Kết quả là mỗi nhịp 
xung đồng hồ có chu kỳ T=1/0,9216MHz=1,085us. Hay nói cách khác, bộ 
Timer0 tăng 01 đơn vị sau 1,085ms để tạo ra bộ trễ bằng số_đếm´1,085ms. 
 Số đếm bằng FFFFH - FFF2H = ODH (13 theo số thập phân). Tuy nhiên, ta 
phải cộng 1 vào 13 vì cần thêm một nhịp đồng hồ để nó quay từ FFFFH về 
0000H và bật cờ TF. Do vậy, ta có 14 ´ 1,085ms = 15,19ms cho nửa chu kỳ và 
cả chu kỳ là T = 2 ´ 15,19ms = 30, 38ms là thời gian trễ được tạo ra bởi bộ định 
thời. 
Tuy nhiên, trong tính toán độ trễ ở trên ta đã không tính đến tổng phí các lệnh 
cài đặt timer0, các lệnh kiểm tra trong vòng lặp, gọi hàm con Chính các câu 
lệnh này làm cho độ trễ dài hơn, dẫn đến tần số của xung vuông ở đầu ra P1_5 
không còn đúng như tính toán ở trên. Đây là nhược điểm của C trong lập trình 
79 
VĐK. Tùy vào từng chương trình biên dịch, mỗi lệnh của C sẽ được biên dịch ra 
số lệnh ASM khác nhau, để tính toán chính xác ta phải tính cả tổng phí từng 
dòng lệnh ASM. 
3.3. Tìm các giá trị cần được nạp vào bộ định thời 
Giả sử rằng chúng ta biết lượng thời gian trễ mà ta cần thì câu hỏi đặt ra là làm 
thế nào để tìm ra được các giá trị cần thiết cho các thanh thi TH và TL. Để tính 
toán các giá trị cần được nạp vào các thanh ghi TH và TL chúng ta hãy nhìn vào 
ví dụ sau với việc sử dụng tần số dao động XTAL = 11. 0592MHz đối với hệ 
thống 8051. 
Các bước để tìm các giá trị của các thanh ghi TH và TL: 
 Chia thời gian trễ cần thiết cho 1.085ms 
 Thực hiện 65536 - n với n là giá trị thập phân nhận được từ bước 1. 
 Chuyển đổi kết quả ở bước 2 sang số Hex: ta có YYXX là giá trị Hexa 
ban đầu cần phải nạp vào các thanh ghi bộ định thời. 
 Đặt TL = XX và TH = YY. 
Ví dụ 5: 
Giả sử tần số XTAL = 11.0592MHz. Hãy tìm các giá trị cần được nạp vào các 
thanh ghi vào các thanh ghi TH và TL nếu ta muốn độ thời gian trễ là 5ms. 
Lời giải: 
Vì tần số XTAL = 11.0592MHz nên bộ đếm tăng sau mỗi chu kỳ 1.085ms. Điều 
đó có nghĩa là phải mất rất nhiều khoảng thời gian 1,085ms để có được một 
xung 5ms. Để có được ta chia 5ms cho 1.085ms và nhận được số n = 4608 nhịp. 
Để nhận được giá trị cần được nạp vào TL và TH thì ta tiến hành lấy 65536 trừ 
đi 4608 bằng 60928. Ta đổi số này ra số hex thành EE00H. Do vậy, giá trị nạp 
vào TH là EE Và TL là 00. 
Delay: ; định nghĩa hàm delay 
Mov TMOD, #0x01 ; Chọn timer0 chế độ 1 16Bit 
Mov TL0, #0x00 ;Nạp giá trị cho TL0 
Mov TH0, #0xEE ; Nạp giá trị cho TH0 
Setb TR0=1 ;khởi động timer0 
Here: Jnb TF0, here ; kiểm tra cờ TF0 
Clr TR0; ngừng timer0 ; Xoa co TR0 
Clr TF0; xóa cờ TF0 ; Xoa co TF0 
ret 
3.4 Thực hành 
Cho sơ đồ mạch như hình vẽ, dùng các bộ Timer của 8051 điều chế độ rộng 
xung (PWM) điều khiển tốc độ động cơ trên: 
80 
L
2
2
0
V
~
5
V
R17
1k
1k
R1
10K
Q1
BT137
Y1
ZTA
U3
MOC3020
1
2
6
4
L10
LEDNGUON
C6
4
7
0
u
F
/1
6V
5V
R6
680-1/2W
C4
224J/250V
C3
10uF
5V
XTAL
C5
4
7
0
u
F
/1
6V
N
2
2
0
V
~
R3
10k
5V
D9
1N4007
SW1
14
23
R5
180-1/2W
Q10
C1815
U4
LM78L05C/TO92
1
2
3
VIN
G
N
D VOUT
U1
AT89C51
9
18
19
2
0
29
30
31
4
0
1
2
3
4
5
6
7
8
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17
39
38
37
36
35
34
33
32
RST
XTAL2
XTAL1
G
N
D
PSEN
ALE/PROG
EA/VPP
V
C
C
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
5V
J1
12VDC
1
2
C2
33uF
C1
33uF
R16
330
Reset 
3.4.1. Nguyên lý 
a. Tổng quan PWM 
Trước khi tìm hiểu sâu chúng ta hãy tìm hiểu định nghĩa của PWM là gì? Như 
vậy Phương pháp điều chế PWM có tên tiếng anh là Pulse Width Modulation là 
phương pháp điều chỉnh điện áp ra tải hay nói cách khác là phương pháp điều 
chế dựa trên sự thay đổi độ rộng của chuỗi xung vuông dẫm đếm sự thay đổi 
điện áp ra . Các PWM khi biến đổi thì có cùng 1 tần số và khác nhau về độ rộng 
của sườn dương hay hoặc là sườn âm. 
b. 
- Sơ đồ nguyên tắc điều khiển tải dùng PWM 
81 
Trên là đồ thị dạng xung khi điều khiển bằng PWM. Với độ rộng xung 
đầu ra tương ứng và được tính bằng %. Tùy thích do chúng ta điều khiển. 
b. Nguyên lý của PWM. 
Đây là phương pháp được thực hiện theo nguyên tắc đóng ngắt nguồn cới 
tải và một cách có chu kì theo luật điều chỉnh thời gian đóng cắt. Phần tử 
thực hiện nhiện vụ đó trong mạch các van bán dẫn. 
Xét hoạt động đóng cắt của một van bán dẫn. DÙng van đóng cắt bằng 
Mosfet 
c. Giản đồ xung 
82 
Trên là mạch nguyên lý điều khiển tải bằng PWM và giản đồ xung của chân điều 
khiển và dạng điện áp đầu ra khi dùng PWM. 
* Nguyên lý : Trong khoảng thời gian 0 - to ta cho van G mỏ toàn bộ điện áp 
nguồn Ud được đưa ra tải. Còn trong khoảng thời gian to - T cho van G khóa, 
cắt nguồn cung cấp cho tải. Vì vậy với to thay đổi từ 0 cho đến T ta sẽ cung cấp 
toàn bộ , một phần hay khóa hoàn toàn điện áp cung cấp cho tải. 
Công thức tính giá trị trung bình của điện áp ra tải : 
Gọi t1 là thời gian xung ở sườn dương (khóa mở ) còn T là thời gian của cả sườn 
âm và dương, Umax là điện áp nguồn cung cấp cho tải. 
Ud = Umax.(t1/T) (V) 
hay Ud = Umax.D (V) 
với D = t1/T là hệ số điều chỉnh và được tính bằng % tức là PWM 
Như vậy ta nhìn trên hình đồ thị dạng điều chế xung thì ta có : Điện áp trùng 
bình trên tải sẽ là : 
+ Ud = 12.20% = 2.4V ( với D = 20%) 
+ Ud = 12.40% = 4.8V ( Vói D = 40%) 
+ Ud = 12.90% = 10.8V (Với D = 90%) 
d. Nguyên lý hoạt động của mạch 
- Khi chân P1.7 lên mức logic cao tranzito Q10 thông mạch dẫn đến MOC 3020 
thông mạch, MOC 3020 thông làm Triac BT137 mở cho dòng xoay chiều đi qua 
động cơ, động cơ làm việc. 
- Quá trình diễn ra ngược lại khi chân P1.7 ở mức logic thấp. 
e. Phần mềm 
#include 
ORG 0x00 
83 
main: 
Nop ; Vi dieu khien khong lam gi 
mov R0,#0x00 ; Khoi gao bien dem 
setb P1.7 ; Set chan P1.7 len muc logic cao 
Mov TMOD, #00000001B ; Chon bo dinh thoi 0 hoat dong o che do 1 
back1: 
Mov TL0,#0x18 ; Nap vao thanh ghi bo dinh 0 gia tri 64536 
Mov TH0,#0xFC ;Timer0 dem tu 64536-65536 tuon ung voi 1ms 
setb TR0 ;kich hoat bo Timer0 hoat dong 
here1: Jnb TF0, here1 ; Tham do xem bo timer bi tran chua 
Clr TF0 
Clr TR0 
Inc R0 
cjne R0,#4,back1 ; So sanh xem Timer hoat dong du 4 lan chua tuong ung voi 
4ms 
Mov R0,#0x00 ; Xoa bo dem R0 
Clr P1.7 ; Set P1.7=0 
back2: 
Mov TL0,#0x18 ; Nap vao thanh ghi bo dinh 0 gia tri 64536 
Mov TH0,#0xFC ; Timer0 dem tu 64536-65536 tuon ung voi 1ms 
setb TR0 ;kich hoat bo Timer0 hoat dong 
here2: Jnb TF0, here2 ; Tham do xem bo timer bi tran chua 
Clr TF0 
Clr TR0 
inc R0 
cjne R0,#16,back2 ; So sanh xem Timer hoat dong du 16 lan chua tuong ung 
voi 16ms 
sjmp main ; P1.7=0 trong khoang 16ms 
end 
Giải thích: 
- Chọn Timer0 hoạt động ở chế 1, là bộ định thời 16 bit. 
- Chọn khoảng đếm từ 64536-65536, tương ứng với 1ms. 
- Chọn chu kì xung vuông T=20ms. 
- Chọn độ lấp đầy xung là 20% (thời gian xung ở mức cao=4ms, thời gian 
xung ở mức thấp = 16ms). 
4. Lập trình cho chế độ 2 
4.1. Đặc điểm 
Dưới đây là những đặc điểm của timer ở chế độ 2: 
 Nó là một bộ định thời 8 bit, do vậy nó chỉ cho phép các giá trị từ 00 đến 
FFH được nạp vào thanh ghi TH của bộ định thời. 
 Sau khi 2 thanh ghi TH và TL được nạp giá trị ban đầu thì bộ định thời 
phải được khởi động. 
 Sau khi bộ định thời được khởi động, nó bắt đầu đếm tăng lên bằng cách 
tăng thanh ghi TL. Nó đếm cho đến khi đại giá trị giới hạn FFH của nó. 
84 
Khi nó quay trở về 00 từ FFH, nó thiết lập cờ bộ định thời TF. Nếu ta sử 
dụng bộ định thời Timer0 thì đó là cờ TF0, còn Timer1 thì đó là cờ TF1. 
 Khi thanh ghi TL quay trở về 00 từ FFH, cờ TF được bật lên 1 thì thanh 
ghi TL được tự động nạp lại với giá trị sao chép từ thanh ghi TH. Để lặp 
lại quá trình chúng ta đơn giản chỉ việc xoá cờ TF và để cho nó chạy mà 
không cần sự can thiệp của lập trình viên để nạp lại giá trị ban đầu. Điều 
này làm cho chế độ 2 được gọi là chế độ tự nạp lại so với chế độ 1 (phải 
nạp lại các thanh ghi TH và TL). 
Timer/counter chế độ 2 
Cần phải nhấn mạnh rằng: chế độ 2 là bộ định thời 8 bit. Tuy nhiên, nó lại có 
khả năng tự nạp, khi tự nạp lại thì giá trị ban đầu của TH được giữ nguyên, còn 
TL được nạp lại giá trị sao chép từ TH. 
Chế độ này có nhiều ứng dụng, bao gồm việc thiết lập tần số baud trong truyền 
thông nối tiếp. 
4. 2. Các bước lập trình cho chế độ 2 
Để tạo ra một thời gian trễ sử dụng chế độ 2 của bộ định thời cần thực hiện các 
bước sau: 
 Nạp thanh ghi giá trị TMOD để báo bộ định thời gian nào (Timer0 hay 
Timer1) được sử dụng và chế độ làm việc nào của chúng được chon. 
 Nạp lại thanh ghi TH và TL với giá trị đếm ban đầu. 
 Khởi động bộ định thời. 
 Duy trì kiểm tra cờ bộ định thời TF bằng cách sử dụng một vòng lặp để 
xem nó đã được bật chưa. Thoát vòng lặp khi TF lên cao. 
 Dừng bộ định thời. 
 Xoá cờ TF. 
 Quay trở lại bước 3. Vì chế độ 2 là chế độ tự nạp lại. 
Ví dụ 6: 
#include 
Org 0x00 
Main: 
Mov TMOD,#0x20 ; chọn timer1, chế độ 2, 8Bit, tự nạp lại 
Mov TH1,#0x00 ; nạp giá trị cho TH1 
Mov TL1,#0xFE ; nạp giá trị cho TL1 
Setb P1_5 ; khởi tạo chân P1_5 ở mức cao 
back: 
Acall delay ; Goi chuơng trình Delay 
Cpl P1_5 ; Dao gia tri P1.5 
85 
Sjmp back ; Tao vong lap vo han 
Delay: 
Setb TR1 ; khởi động timer1 
Here: Jnb TF1, here ; Tham do TF1 len 1 chua 
Clr TR1 ; ngừng timer1 
Clr TF1 ; xóa cờ TF1 
Ret 
end 
Hàm delay() trên sẽ tạo một độ trễ bằng 256 lần (FF - 00 + 1) chu kỳ của timer 
(không tính tổng phí các lệnh) kể từ chu trình thứ 2. Vì chu trình đầu tiên timer1 
bắt đầu đếm ở vị trí 0xFE, kể từ chu trình sau thì thanh ghi TL1 mới sao chép 
được giá trị ở TH1. 

File đính kèm:

  • pdfgiao_trinh_mo_dun_vi_dieu_khien_dien_dan_dung.pdf