You are on page 1of 67

CHƯƠNG I: GIỚI THIỆU VỀ VI ĐIỀU KHIỂN AT89C51

I. MÔ TẢ:
AT9C51 là một hệ vi tính 8 bit đơn chíp CMOS có hiệu suất cao,công suất
nguồn tiêu thụ thấp và có 4Kbyte bộ nhớ ROM Flash xoá được lập trình được.
Chip này được sản xuất dựa vào công nghệ bộ nhớ không mất nội dung có độ tích
hợp cao của Atmel.
Chip AT89C51 cũng tương thích với tập lệnh và các chân ra của chuẩn
công nghiệp MCS-51. Flash trên chip này cho phép bộ nhớ chương trình được lập
trình lại trên hệ thống hoặc bằng bộ lập trình bộ nhớ không mất nội dung qui ước.
Bằng cách kết hợp một CPU linh hoạt 8 bit với Flash trên một chip đơn thể, Atmel
89C51 là một hệ vi tính 8 bit đơn chip mạnh cho ta một giải pháp có hiệu quả về
chi phí và rất linh hoạt đối với các ứng dụng điều khiển.
AT89C51 có các đặc trưng sau: 4Kbyte Flash, 128 byte Ram, 32 đường
xuất nhập, hai bộ định thời / đếm 16 bit, một cấu trúc ngắt 2 mức ưu tiên và 5
nguyên nhân ngắt, một port nối tiếp song công, mạch dao động và tạo xung clock
trên chip.
Ngoài ra AT8951 được thiết kế với logic tĩnh cho hoạt đông có tần số giảm
xuống 0 và hỗ trợ hai chế độ tiết kiệm năng lượng được lựa chọn bằng phần mềm.
Chế độ nghĩ dừng CPU trong khi vẫn cho phép RAM, các bộ định thời /
đếm, port nối tiếp và hệ thống ngắt tiếp tục hoạt động.
Chế độ nguồn giảm duy trì nội dung của RAM nhưng không cho mạch dao
động cung cấp xung clock nhằm vô hiệu hoá các hoạt động khác của chip cho đến
khi có reset cứng tiếp theo.

Các đặc điểm của 8951 được tóm tắt như sau:

 4 KB bộ nhớ có thể lập trình lại nhanh, có khả năng tới 1000 chu kỳ ghi
xoá

 Tần số hoạt động từ: 0Hz đến 24 MHz

1
 3 mức khóa bộ nhớ lập trình

 2 bộ Timer/counter 16 Bit

 128 Byte RAM nội.

 4 Port xuất /nhập I/O 8 bit.

 Giao tiếp nối tiếp.

 64 KB vùng nhớ mã ngoài

 64 KB vùng nhớ dữ liệu ngoại.

 Xử lý Boolean (hoạt động trên bit đơn).

 210 vị trí nhớ có thể định vị bit.

 4 s cho hoạt động nhân hoặc chia.

II. CAÙC CAÁU HÌNH CHAÂN RA:


1/ SÔ ÑOÀ KHOÁI CUÛA AT89C51:

2
2/ SƠ LƯỢC CÁC CHÂN CỦA AT89C51
*MÔ TẢ CÁC CHÂN:
-VCC: chân cung cấp điện.
-GND: chân nối đất.
-Port 0: gồm 8 chân 32-39 (P0.0…P0,7)
Port 0 là port có 2 chức năng. Trong các thiết kế cỡ nhỏ không dùng bộ nhớ
mở rộng nó có chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ nhớ
mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.
-Port1: chân 1-8 (P1.0…P1.7)
Port 1 là port IO. Có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần.
Port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các
thiết bị bên ngoài.
-Port 2: chân 21-28 (P2.0….P2.7)

3
Port 2 là port có tác dụng kép. Được dùng như các đường xuất nhập hoặc
byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.
-Port 3: chân 10-17 (P3.0…P3.7)
Port 3 là port xuất nhập 8 bit 2 chiều có các điện trở kéo lên bên trong. Các
chân của port này có nhiều chức năng, các công dụng chuyển đổi có lien hệ với
các đặc tính đặc biệt của 8951
-RST:
Ngõ vào reset. Mức cao trên chân này trong 2 chu kỳ máy trong khi bộ dao
động đang hoạt động sẽ reset AT89C51.
-ALE/ PROG
Xung của ngõ ra cho phép chốt địa chỉ ALE (address latch enable) cho
phép chốt byte thấp của địa chỉ trong thời gian truy xuất bộ nhớ ngoài. Chân này
cũng được dùng làm ngõ vào xung lập trình ( PROG ) trong thời gian lập trình
Flash.
Khi hoạt động bình thường, xung của ngõ ra ALE luôn luôn có tần số bằng
1/6 tần số của mạch dao động trên chip, có thể được sử dụng cho các mục đích
định thời từ bên ngoài và tạo xung clock. Tuy nhiên cần lưu ý là một xung ALE sẽ
bị bỏ qua trong mỗi chu kỳ truy xuất bộ nhớ dữ liệu ngoài.
Khi cần, hoạt động cho phép chốt byte thấp của địa chỉ sẽ được vô hiệu hoá
bằng cách set bit 0 của thanh ghi chức năng đặc biệt có địa chỉ byte là 8EH. Khi
bit này được set, ALE chỉ tích cực tring thời gian thực thi lệnh MOVX hoặc
MOVC. Ngược lại chân này sẽ được kéo lên mức cao. Việc set bit không cho phép
hoạt động chốt byte thấp của địa chỉ sẽ không có tác dụng nếu bộ vi điều khiển
đang chế độ thực thi chương trình ngoài.
- PSEN :
Chân cho phép bộ nhớ chương trình PSEN (program store enable) điều
khiển truy xuất bộ nhớ chuơng trình ngoài. Khi AT89C51 đang thực thi chương
trình trong bộ nhớ chương trình ngoài, PSEN tích cực 2 lần cho mỗi chu kỳ máy,

4
ngoại trừ trường hợp 2 tác động của PSEN bị bỏ qua cho mỗi truy xuất bộ nhớ dữ
liệu ngoài.
- EA / Vpp:
Chân cho phép truy xuất bộ nhớ ngoài EA (external access enable) phải
được nối với GND để cho phép chip vi điều khiển tìm nạp lệnh từ các vị trí nhớ
của bộ nhớ chương trình ngoài, bắt đầu từ địa chỉ 0000H cho đến FFFFH. Tuy
nhiên cần lưu ý là nếu có bit khoá 1(clock bit 1) được lập trình, EA sẽ được chốt
bên trong khi reset.
EA nên nối với Vcc để thực thi chương trình trong chip.

Chân EA / Vpp còn nhận điện áp cho phép lập trình Vpp trong thời gian
lập trình cho Flash, điện áp này cấp cho các bộ phận có yêu cầu điện áp 12V.
-XTAL 1:
Ngõ vào đến mạch khuyếch đại đảo dao động và ngõ vào đến mạch tạo
xung clock bên trong chip.
-XTAL 2:
Ngõ ra từ mạch khuyết đại đảo của mạch dao động.

Hình: Mạch dao động

III. CẤU TRÚC RAM NỘI CỦA 8951:

Bản đồ bộ nhớ Data trên Chip như sau:

5
Địa chỉ Địa chỉ
byte byte
Địa chỉ bit Địa chỉ bit

7F FF
F0 F7 F6 F5 F4 F3 F2 F1 F0 B
RAM đa dụng
E0 E7 E6 E5 E4 E E2 E1 E0 ACC
3

D0 D7 D6 D5 D4 D D2 D1 D0 PSW
3

30 B8 - - - BC B B B9 B8 IP
B A
2F 7F 7E 7D 7C 7B 7A 79 78
2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P.3
2D 6F 6E 6D 6C 6B 6A 69 68
2C 67 66 65 64 63 62 61 60 A8 AF AC A A A9 A8 IE
B A
2B 5F 5E 5D 5C 5B 5A 59 58
2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
29 4F 4E 4D 4C 4B 4A 49 48
28 47 46 45 44 43 42 41 40 99 không được địa chỉ hoá bit SBUF
27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON
26 37 36 35 34 33 32 31 30
25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 92 91 90 P1
24 27 26 25 24 23 22 21 20
23 1F 1E 1D 1C 1B 1A 19 18 8D không được địa chỉ hoá bit TH1

6
22 17 16 15 14 13 12 11 10 8C không được địa chỉ hoá bit TH0
21 0F 0E 0D 0C 0B 0A 09 08 8B không được địa chỉ hoá bit TL1
20 07 06 05 04 03 02 01 00 8A không được địa chỉ hoá bit TL0
1F Bank 3 89 không được địa chỉ hoá bit TMO
D
18 88 8F 8E 8D 8C 8B 8A 89 88 TCO
N
17 Bank 2 87 không được địa chỉ hoá bit PCON
10
0F Bank 1 83 không được địa chỉ hoá bit DPH
08 82 không được địa chỉ hoá bit DPL
07 Bank thanh ghi 0 81 không được địa chỉ hoá bit SP
00 (mặc định cho R0 -R7) 88 87 86 85 84 83 82 81 80 P0

RAM CÁC THANH GHI CHỨC NĂNG ĐẶC BIỆT


- AT8951 có 128 byte RAM nội có địa chỉ từ 00H đến FFH
1/ Vùng bank thanh ghi:
-Bao gồm 32 byte bắt đầu từ 00H  1FH được chia thành 4 bank, mỗi bank bao
gồm 8 thanh ghi:
+ Bank 0: từ 00H  07H
+ Bank 1: từ 08H  0FH
+ Bank 2: từ 10H  17H
+ Bank 3: từ 18H  1FH
- Mỗi bank gồm 8 thanh ghi từ R0  R7.
Bank 0: R0=00H; R1=01H…
Bank 1: R0=08H; R1=09H…
- Tại một thời điểm chương trình chỉ có thể hoạt động với 1 bank thanh ghi mặc
định là bank 0.
2/ Vùng RAM định vị bit:

7
- Gồm 16 byte có địa chỉ từ 20H  2FH trong vùng này ta có thể tác động tới từng
bit. Có nghĩa la có thể set bit đó lên 1 hoặc clear bit đó về 0.
- Có 128 bit trong vùng RAM định vị bit có địa chỉ từ 00H  7FH.
3/ Vùng RAM đa dụng:
Có địa chỉ từ 30H  7FH(80 byte) có thể sử dụng làm bất cứ công việc gì trong
chương trình.
4/ Vùng các thanh ghi đặc biệt:
Có dịa chỉ từ 80H  FFH.
- Thanh ghi tích luỹ A (ACC: Accumulartor) là thanh ghi trung gian thường được
sử dụng để chứa lưu giá trị trong các lệnh chương trình có địa chỉ là E0H.
Vd:
Mov A, #3FH
 Lấy 3FH đưa vào A.
Mov A, 3FH
 Lấy nội dung của 3FH đưa vào A.
- Thanh ghi B: có địa chỉ là F)H là thanh ghi được dùng kết hợp với thanh ghi A
trong các phép toán.
Vd:
Mul AB
 Nhân thanh ghi A và B với nhau, đươc kết quả đưa vào A.
Div AB
 Chia A với B, kết quả đưa vào A, số dư đưa vào B.
- Thanh ghi PSW (Program status word):
Là thanh ghi chứa trạng thái của chương trình.

8
Từ trạng thái chương trình ở địa chỉ D0H được tóm tắt như sau:

BIT SYMBOL ADDRESS DESCRIPTION

PSW.7 CY D7H Cary Flag

PSW.6 AC D6H Auxiliary Cary Flag

PSW.5 F0 D5H Flag 0

PSW4 RS1 D4H Register Bank Select 1

PSW.3 RS0 D3H Register Bank Select 0

00=Bank 0; address 00H07H

01=Bank 1; address 08H0FH

10=Bank 2; address 10H17H

11=Bank 3; address 18H1FH

PSW.2 OV D2H Overlow Flag

PSW.1 - D1H Reserved

PSW.0 P DOH Even Parity Flag

 CY: là cờ nhớ, CY sẽ set lên 1 khi thực hiện phép cộng có xảy ra nhớ,
hoăc khi thực hiện phép trừ có xảy ra mượn.
 AC (Auxiliary carrier) là cờ nhớ phụ khi cộng các số BCD. Cờ nhớ phụ
sẽ set lên 1 nếu kết quả của 4 bit thấp nằm trong khoảng từ 0AH đến
0FH.
 F0: là cờ nhớ dành cho người sử dụng.
 RS1, RS0: quyết định dãy thanh ghi tích cực. Chúng được xoá sau khi
reset hệ thống và được thay đối bởi phần mềm khi cần thiết.

9
RS1 RS0 BANK

0 0 0

0 1 1

1 0 2

1 1 3

Dựa vào bảng trên ta có thể chọn thanh ghi bank nào muốn chọn.
 OV (Over flow): sẽ set lên 1 khi thực hiên phép toán với số có dấu có
xáy ra tràn.
 P (Parity): là bit kiểm tra chẳn lẽ, bit P sẽ bằng 0 hoặc 1 theo dạng
parity chẵn với nội dung của thanh ghi A

- Con trỏ Ngăn xếp SP (Stack Pointer):

+ Con trỏ ngăn xếp là một thanh ghi 8 bit ở địa chỉ 81H. Nó chứa địa chỉ
của của byte dữ liệu hiện hành trên đỉnh ngăn xếp. Các lệnh trên ngăn xếp bao
gồm các lệnh cất dữ liệu vào ngăn xếp (PUSH) và lấy dữ liệu ra khỏi ngăn xếp
(POP). Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữ liệu và lệnh
lấy ra khỏi ngăn xếp sẽ làm giảm SP. Ngăn xếp của 8031/8051 được giữ trong
RAM nội và giới hạn các địa chỉ có thể truy xuất bằng địa chỉ gián tiếp, chúng là
128 byte đầu của 8951.

+ Để khởi động SP với ngăn xếp bắt đầu tại địa chỉ 60H, các lệnh sau đây
được dùng:

MOV SP, #5F

10
+ Với lệnh trên thì ngăn xếp của 8951 chỉ có 32 byte vì địa chỉ cao nhất
của RAM trên chip là 7FH. Sỡ dĩ giá trị 5FH được nạp vào SP vì SP tăng lên 60H
trước khi cất byte dữ liệu.

- Thanh ghi con trỏ dữ liệu Data Pointer (DPTR):

Là thanh ghi 16 bit kết hợp của 2 thanh ghi 8 bit là DPH và DPL

DPH DPL

Thanh ghi DPTR thường được dùng để lưu các địa chỉ 16 bit, thông thường là các
địa chỉ khi truy xuất bộ nhớ ngoài.
- Các thanh ghi xuất nhập Port:
Các Port của 8951 bao gồm Port0 ở địa chỉ 80H, Port1 ở địa chỉ 90H, Port2 ở địa
chỉ A0H, và Port3 ở địa chỉ B0H. Tất cả các Port này đều có thể truy xuất từng bit
nên rất thuận tiện trong khả năng giao tiếp.
8951 chứa một Port nối tiếp cho việc trao đổi thông tin với các thiết bị nối tiếp như
máy tính, modem hoặc giao tiếp nối tiếp với các IC khác. Một thanh ghi đệm dử
liệu nối tiếp (SBUF) ở địa chỉ 99H sẽdữ cảhai dữ liệu truyền và dữ liệu nhập. Khi
truyền dữ liệu ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF. Các mode vận khác
nhau được lập trình qua thanh ghi điều khiển Port nối tiếp (SCON) được địa chỉ
hóa từng bit ở địa chỉ 98H.
- Thanh ghi điều khiển nguồn PCON (Power control Register):

Thanh ghi PCON không có bit định vị. Nó ở địa chỉ 87H chứa nhiều bit
điều khiển. Thanh ghi PCON được tóm tắt như sau:

 Bit 7 (SMOD): Bit có tốc độ Baud ở mode 1, 2, 3 ở Port nối tiếp khi set.

 Bit 6, 5, 4: Không có địa chỉ.

 Bit 3 (GF1): Bit cờ đa năng 1.

11
 Bit 2 (GF0): Bit cờ đa năng 2.

 Bit 1 (PD): Set để khởi động mode Power Down và thoát để reset.

 Bit 0 (IDL): Set để khởi động mode Idle và thoát khi ngắt mạch hoặc
reset.

Các bit điều khiển Power Down và Idle có tác dụng chính trong tất cả các
IC họ MSC-51 nhưng chỉ được thi hành trong sự biên dịch của CMOS.

IV. BỘ NHỚ NGOÀI

- 8951 có khả năng mở rông bộ nhớ lên đến 64K byte bộ nhớ chương trình và 64k
byte bộ nhớ dữ liệu ngoài. Do đó có thể dùng thêm RAM và ROM nếu cần.

- Khi dùng bộ nhớ ngoài, Port0 không còn chức năng I/O nữa. Nó được kết hợp
giữa bus địa chỉ (A0-A7) và bus dữ liệu (D0-D7) với tín hiệu ALE để chốt byte
của bus địa chỉ chỉ khi bắt đầu mỗi chu kỳ bộ nhớ. Port được cho là byte cao của
bus địa chỉ.

 Truy xuất bộ nhớ mã ngoài (Acessing External Code Memory):

- Bộ nhớ chương trình bên ngoài là bộ nhớ ROM được cho phép của tín
hiệu PSEN\. Sự kết nối phần cứng của bộ nhớ EPROM như sau:

Port 0 D0  D7
EA
A0  A7
74HC373
ALE O D
8951
Port 2 G
A8 EPROM
 A15
PSEN
OE

Hình : Accessing External Code Memory (Truy xuất bộ nhớ mã ngoài)

12
- Trong một chu kỳ máy tiêu biểu, tín hiệu ALE tích cực 2 lần. Lần thứ nhất
cho phép 74HC373 mở cổng chốt địa chỉ byte thấp, khi ALE xuống 0 thì byte thấp và
byte cao của bộ đếm chương trình đều có nhưng EPROM chưa xuất vì PSEN\ chưa
tích cực, khi tín hiệu lên một trở lại thì Port 0 đã có dữ liệu là Opcode. ALE tích cực
lần thứ hai được giải thích tương tự và byte 2 được đọc từ bộ nhớ chương trình. Nếu
lệnh đang hiện hành là lệnh 1 byte thì CPU chỉ đọc Opcode, còn byte thứ hai bỏ đi.

 Truy xuất bộ nhớ dữ liệu ngoài (Accessing External Data Memory):

- Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được đọc hoặc ghi khi được
cho phép của tín hiệu RD\ và WR. Hai tín hiệu này nằm ở chân P3.7 (RD) và P3.6
(WR). Lệnh MOVX được dùng để truy xuất bộ nhớ dữ liệu ngoài và dùng một bộ
đệm dữ liệu 16 bit (DPTR), R0 hoặc R1 như là một thanh ghi địa chỉ.

- Các RAM có thể giao tiếp với 8951 tương tự cách thức như EPROM
ngoại trừ chân RD\ của 8951 nối với chân OE\ (Output Enable) của RAM và chân
WR\ của 8951 nối với chânWE \của RAM. Sự nối các bus địa chỉ và dữ liệu tương
tự như cách nối của EPROM.

Port 0 D0  D7

RAM
EA\
A0  A7
74HC373
ALE O D
8951
Port 2 G
A8  A15

RD\ OE\
WR\ WE\

13
 Sự giải mã địa chỉ (Address Decoding):

- Sự giải mã địa chỉ là một yêu cầu tất yếu để chọn EPROM, RAM, 8279,
… Sự giải mã địa chỉ đối với 8951 để chọn các vùng nhớ ngoài như các vi điều
khiển. Nếu các con EPROM hoặc RAM 8K được dùng thì các bus địa chỉ phải
được giải mã để chọn các IC nhớ nằm trong phạm vi giới hạn 8K: 0000H1FFFH,
2000H3FFFH, …

- Một cách cụ thể, IC giải mã 74HC138 được dùng với những ngõ ra của nó
được nối với những ngõ vào chọn Chip CS (Chip Select) trên những IC nhớ
EPROM, RAM, … Hình sau đây cho phép kết nối nhiều EPROM và RAM.

Hình : Address Decoding (Giải mã địa chỉ)

-Vậy một chương trình có thể được tải vào RAM bằng cách xem nó như bộ
nhớ dữ liệu và thi hành chương trình băng cách xem nó như bộ nhớ chương trình.

14
V. CÁC LỆNH ĐIỀU KHIỂN:

8951 chia ra 2 nhóm lệnh chính:

 Các lệnh số học.

 Lệnh logic.

 Dịch chuyển dữ liệu.

 Luân lý.

 Rẽ nhánh chương trình.

Từng kiểu lệnh được mô tả như sau:

1 Các lệnh số học (Arithmetic Instrustion):

ADD A, <src, byte>

ADD A, Rn : (A)  (A) + (Rn)

ADD A, direct : (A)  (A) + (direct)

ADD A, @ Ri : (A)  (A) + ((Ri))

ADD A, # data : (A)  (A) + # data

ADDC A, Rn : (A)  (A) + (C) + (Rn)

ADDC A, direct : (A)  (A) + (C) + (direct)

ADDC A, @ Ri : (A)  (A) + (C) + ((Ri))

ADDC A, # data : (A)  (A) + (C) + # data

SUBB A, <src, byte>

SUBB A, Rn : (A)  (A) - (C) - (Rn)

SUBB A, direct : (A)  (A) - (C) - (direct)

SUBB A, @ Ri : (A)  (A) - (C) - ((Ri))

15
SUBB A, # data : (A)  (A) - (C) - # data

INC <byte>

INC A : (A)  (A) + 1

INC direct : (direct)  (direct) + 1

INC Ri : ((Ri))  ((Ri)) + 1

INC Rn : (Rn)  (Rn) + 1

INC DPTR : (DPTR)  (DPTR) + 1

DEC <byte>

DEC A : (A)  (A) - 1

DEC direct : (direct)  (direct) - 1

DEC @Ri : ((Ri))  ((Ri)) - 1

DEC Rn : (Rn)  (Rn) - 1

MULL AB : (A)  LOW [(A) x (B)] ; có ảnh hưởng


cờ OV

: (B)  HIGH [(A) x (B)] ; cờ Cary được


xóa.

DIV AB : (A)  Integer Result of [(A)/(B)]; cờ OV

: (B)  Remainder of [(A)/(B)]; cờ Carry


xóa

DA A : Điều chỉnh thanh ghi A thành số BCD đúng


trong phép cộng BCD (thường DA A đi
kèm với ADD, ADDC)

 Nếu [(A3-A0)>9] v [(AC)=1]  (A3A0)  (A3A0) + 6.

16
 Nếu [(A7-A4)>9] v [(C)=1]  (A7A4)  (A7A4) + 6.

2 Các hoạt động logic (Logic Operation) :

Các hoạt động logic được tóm tắt như sau :

ANL <dest - byte> <src - byte>

ANL A, Rn : (A)  (A) AND (Rn).

ANL A, direct : (A)  (A) AND (direct).

ANL A,@ Ri : (A)  (A) AND ((Ri)).

ANL A, # data : (A)  (A) AND (# data).

ANL direct, A : (direct)  (direct) AND (A).

ANL direct, # data : (direct)  (direct) AND # data.

ORL <dest - byte> <src - byte>

ORL A, Rn : (A)  (A) OR (Rn).

ORL A, direct : (A)  (A) OR (direct).

ORL A,@ Ri : (A)  (A) OR ((Ri)).

ORL A, # data : (A)  (A) OR # data.

ORL direct, A : (direct)  (direct) OR (A).

ORL direct, # data : (direct)  (direct) OR # data.

XRL <dest - byte> <src - byte>

XRL A, Rn : (A)  (A)  (Rn).

XRL A, direct : (A)  (A)  (direct).

XRL A,@ Ri : (A)  (A)  ((Ri)).

XRL A, # data : (A)  (A)  # data.

17
XRL direct, A : (direct)  (direct)  (A).

XRL direct, # data : (direct)  (direct)  # data.

y = a b = ab + ab

CLR A : (A)  0

CLR C : (C)  0

CLR Bit : (Bit)  0

RL A : Quay vòng thanh ghi A qua trái 1 bit

RLC A : Quay vòng thanh ghi A qua trái 1 bit có


cờ Carry

RR A : Quay vòng thanh ghi A qua phải 1 bit

RRC A : Quay vòng thanh ghi A qua phải 1 bit có


cờ Carry

SWAP A : Đổi chổ 4 bit thấp v 4 bit cao của A cho


nhau (A3A0)(A7A4).

3 Các lệnh rẽ nhánh :

Sau đây là sự tóm tắt từng hoạt động của lệnh nhảy.

JC rel : Nhảy đến “rel” nếu cờ Carry C = 1.

JNC rel : Nhảy đến “rel” nếu cờ Carry C = 0.

JB bit, rel : Nhảy đến “rel” nếu (bit) = 1.

JNB bit, rel : Nhảy đến “rel” nếu (bit) = 0.

JBC bit, rel : Nhảy đến “rel” nếu bit = 1 v xĩa bit.

ACALL addr11 : Lệnh gọi tuyệt đối trong page 2K.

LCALL addr16 : Lệnh gọi di chương trình con trong 64K.

18
RET : Kết thúc chương trình con trở về chương trình chính.

RETI : Kết thúc thủ tục phục vụ ngắt quay về chương trình chính
hoạt động tương tự như RET.

AJMP Addr11 : Nhảy tuyệt đối không điều kiện trong 2K.

LJMP Addr16 : Nhảy đi không điều kiện trong 64K

Hoạt động tương tự lệnh LCALL.

SJMP rel : Nhảy ngắn không điều kiện trong (-128127) byte

JMP @ A + DPTR:Nhảy không điều kiện đến địa chỉ (A) + (DPTR)

(PC)  (A) + (DPTR)

JZ rel : Nhảy đến A = 0. Thực hành lệnh kế nếu A  0.

JNZ rel : Nhảy đến A  0. Thực hành lệnh kế nếu A = 0.

CJNE A, direct, rel : So sánh và nhảy đến A  direct

(A) < (direct)  C = 1

(A) > (direct)  C = 0

(A) = (direct). Thực hành lệnh kế tiếp

CJNE A, # data, rel : Tương tự lệnh CJNE A, direct, rel.

CJNE Rn, # data, rel : Tương tự lệnh CJNE A, direct, rel.

CJNE @ Ri, # data, rel : Tương tự lệnh CJNE A, direct, rel.

DJNE Rn, rel : Giảm Rn nhảy nếu Rn  0.

DJNZ direct, rel : Tương tự lệnh DJNZ Rn, rel.

4 Các lệnh dịch chuyển dữ liệu :

Tất cả các lệnh dịch chuyển đểu khôg ảnh hưởng đến cờ. Hoạt động của
từng lệnh được tóm tắt như sau :

19
MOV A,Rn : (A)  (Rn)

MOV A, direct : (A)  (direct)

MOV A, @ Ri : (A)  ((Ri))

MOV A, # data : (A)  # data

MOV Rn, A : (Rn)  (A)

MOV Rn, direct : (Rn)  (direct)

MOV Rn, # data : (Rn)  # data

MOV direct, A : (direct)  (A)

MOV direct, Rn : (direct)  (Rn)

MOV direct, direct : (direct)  (direct)

MOV direct, @ Ri : (direct)  ((Ri))

MOV direct, # data : (direct)  data

MOV @ Ri, A : ((Ri))  (A)

MOV @ Ri, direct : ((Ri))  (direct)

MOV @ Ri, # data : ((Ri))  # data

MOV DPTR, # data16 : (DPTR)  # data16

MOV A, @ A + DPTR : (A)  (A) + (DPTR)

MOV @ A + PC : (PC)  (PC) + 1

(A)  (A) + (PC)

MOVX A, @ Ri : (A)  ((Ri))

MOVX A, @ DPTR : (A)  ((DPTR))

MOVX @ Ri, A : ((Ri))  (A)

20
MOVX @ DPTR, A : ((DPTR))  (A)

PUSH direct : Cất dữ liệu vô Stack

POP direct : Lấy từ Stack ra direct

XCH A, Rn : Đổi chổ nội dung của A với Rn

(A)  (Rn)

XCH A, direct : (A)  (direct)

XCH A, @ Ri : (A)  ((Ri))

XCHD A, @ Ri : Đổi chổ 4 bit thấp của (A) với ((Ri))

(A3A0)  ((Ri3Ri0))

5 Các lệnh luận lý (Boolean Instruction) :

Hoạt động của các lệnh luận lý được tóm tắt như sau :

CLR C : Xóa cờ Carry xuống 0. Có ảnh hưởng cờ Carry.

CLR BIT : Xóa bit xuống 0. Không ảnh hưởng cờ Carry

SET C : Set cờ Carry ln 1. Có ảnh hưởng cờ Carry.

SET BIT : Set bit lên 1. Không ảnh hưởng cờ Carry.

CPL C : Đảo bit cờ Carry. Có ảnh hưởng cờ Carry.

CPL BIT : Đảo bit. Không ảnh hưởng cờ Carry.

ANL C, BIT : (C)  (C) AND (BIT): Có ảnh hưởng cờ Carry.

ANL C, /BIT : (C)  (C) AND NOT (BIT): không ảnh hưởng cờ Carry

ORL C, BIT : (C)  (C) OR (BIT): Tác động cờ Carry.

ORL C, /BIT : (C)  (C) OR NOT (BIT): Tác động cờ Carry.

MOV C, BIT : (C)  (BIT): Cờ Carry bị tác động.

21
MOV BIT, C : (BIT)  (C): Không ảnh hưởng cờ Carry.

VI. BỘ ĐỊNH THỜI (TIMER)

1/ Khái niệm:

AT89C51 có 2 bộ timer:

- Timer 0: là một bộ đếm lên tuần tự 16 bit, giá trị đếm chứa trong 2 thanh ghi
TH0, TL0.

- Timer 1: là một bộ đếm tuần tự 16 bit chứa trong TH1 và TL1.

2/ Các thanh ghi của bộ Timer:

- Thanh ghi TMOD (Time mode) là thanh ghi 8 bit.

Bit Name Timer Description

7 GATE 1 Khi GATE = 1, Timer chỉ làm việc khi INT1=1

6 C/T 1 Bit cho đếm sự kiện hay ghi giờ

C/T = 1 : Đếm sự kiện

C/T = 0 : Ghi giờ đều đặn

5 M1 1 Bit chọn mode của Timer 1

4 M0 1 Bit chọn mode của Timer 1

3 GATE 0 Bit cổng của Timer 0

2 C/T 0 Bit chọn Counter/Timer của Timer 0

1 M1 0 Bit chọn mode của Timer 0

0 M0 0 Bit chọn mode của Timer 0

Hai bit M0 và M1 của TMOD để chọn mode cho Timer 0 hoặc Timer 1.

22
M1 M0 MODE DESCRIPTION

0 0 0 Mode Timer 13 bit (mode 8048)

0 1 1 Mode Timer 16 bit

1 0 2 Mode tự động nạp 8 bit

1 1 3 Mode Timer tách ra :

Timer 0 : TL0 là Timer 8 bit được điều khiển bởi


các bit của Timer 0. TH0 tương tự nhưng được điều
khiển bởi các bit của mode Timer 1.

Timer 1 : Được ngừng lại.

- Thanh ghi TCON (Timer control)

Thanh ghi điều khiển bao gồm các bit trạng thái và các bit điều khiển bởi Timer 0
và Timer 1. Thanh ghi TCON có bit định vị. Hoạt động của từng bit được tóm tắt
như sau:

Bit Symbol Bit Address Description

TCON.7 TF1 8FH Cờ tràn Timer 1 được set bởi phần cứng ở
sự tràn, được xóabởi phần mềm hoặc bởi
phần cứng khi các vectơxử lý đến thủ tục
phục vụ ngắt ISR

TCON.6 TR1 8EH Bit điều khiển chạy Timer 1 được set
hoặc xóa bởi phần mềm để chạy hoặc

23
ngưng chạy Timer.

TCON.5 TF0 8DH Cờ tràn Timer 0(hoạt động tương tự TF1)

TCON.4 TR0 8CH Bit điều khiển chạy Timer 0 (giống TR1)

TCON.3 IE1 8BH Cờ kiểu ngắt 1 ngoài. Khi cạnh xuống xuất
hiện trên INT1 thì IE1 được xóa bởi phần
mềm hoặc phần cứng khi CPU định hướng
đến thủ tục phục vụ ngắt ngoài.

TCON.2 IT1 8AH Cờ kiểu ngắt 1 ngoài được set hoặc xóa
bằng phấn mềm bởi cạnh kích hoạt bởi sự
ngắt ngoài.

TCON.1 IE0 89H Cờ cạnh ngắt 0 ngoài

TCON IT0 88H Cờ kiểu ngắt 0 ngoài.

3/ Các chế độ hoạt động của Timer:


- Mode 0: gồm 8 bit của thanh ghi THx, 5 bit của thanh ghi TLx. (Rất ít được sử
dụng)
Timer Clock
TLx (5 bit) THx (8 bit) TFx Over flow

- Mode 1: bộ Timer là bộ đếm gồm 16 bit.

Gồm 8 bit của thanh ghi THx và 8 bit của thanh ghi TLx.

Đếm giá trị từ 0 đền 216-1=65535

24
Với mode 1 bộ timer không tự động nạp lại giá trị đếm sau mỗi lần tràn. Do đó sau
mỗi lần tràn ta phải nạp lại giá trị đặt cho timer.

- Mode 2: là chế độ tự động nạp lại. Bộ timer là bộ đếm 8 bit chứa trong thanh ghi
THx. Thanh ghi THx không thực hiện nhiệm vụ đếm, mà chỉ nạp lại giá trị cho
thanh ghi TLx sau mỗi lần tràn.

- Mode 3:

+Mode 3 là mode Timer tách ra và là sự khác biệt cho mỗi Timer.

+Timer 0 ở mode 3 được chia là 2 timer 8 bit. TL0 và TH0 hoạt động như
những Timer riêng lẻ với sự tràn sẽ set các bit TL0 và TF1 tương ứng.

+Timer 1 bị dừng lại ở mode 3, nhưng có thể được khởi động bởi việc ngắt
nó vào một trong các mode khác. Chỉ có nhược điểm là cờ tràn TF1 của Timer 1
không bị ảnh hưởng bởi các sự tràn của Timer 1 bởi vì TF1 được nối với TH0.

+Mode 3 cung cấp 1 Timer ngoại 8 bit là Timer thứ ba của 8951. Khi vào
Timer 0 ở mode 3, Timer có thể hoạt động hoặc tắt bởi sự ngắt nó ra ngoài và vào
trong mode của chính nó hoặc có thể được dùng bởi Port nối tiếp như là một máy
phát tốc độ Baud, hoặc nó có thể dùng trong hướng nào đó mà không sử dụng
Interrupt.

25
CHƯƠNG II : TÌM HIỂU ĐỘNG CƠ BƯỚC
I. KHÁI QUÁT:
Động cơ bước cho phép xác định vị trí mà không cần dùng mạch hối
tiếp. Động cơ bước khác động cơ bình thường ở chổ, trục giữa của chúng
không quay tự do, mà quay theo từng bước khi các cuộn dây của chúng được
cấp nguồn theo thứ tự thích hợp.

 Bước của động cơ (giá trị của góc giữa hai vị trí ổn định kề nhau của
Roto) càng nhỏ thì độ chính xác trong điều khiển càng cao. Bước của
động cơ phụ thuộc vào số cuộn dây phần ứng, số cực của Stato, số răng
của Roto và phương pháp điều khiển bước đủ hoặc điều khiển nữa bước.
Tùy theo yêu cầu về độ chính xác và kết cấu của động cơ, mà bước của
động cơ thay đổi trong giới hạn từ 1800 - 0,180. Trong đó: động cơ bước
nam châm vĩnh cửu dạng cực móng và có từ trở thay đổi từ 60 - 450, động
cơ bước có từ trở thay đổi có góc bước nằm trong giới hạn từ: 1,80- 300,
và động cơ bước hỗn hợp có góc bước thay đổi trong khoảng 0,360 - 150.
Các giá trị góc của các loại động cơ kể trên được tính trong chế độ điều
khiển bước đủ.
 Chiều quay của động cơ bước không phụ thuộc vào chiều dòng điện chạy
trong các cuộn dây phần ứng, mà phụ thuộc vào thứ tự cuộn dây phần ứng
được cấp xung điều khiển. Nhiệm vụ này do bộ chuyển phát thực hiện.
 Số cuộn dây phần ứng (hay cò gọi là cuộn dây pha) của động cơ bước được
chế tạo từ 2 - 5 cuộn dây pha (hay còn gọi là bối dây) và được đặt đối diện
nhau trong các rãnh ở Stato. Đối với cuộn dây phải có hai cuộn dây thì chỉ
dùng cho điều khiển lưỡng cực (cuộn dây có cực tính thay đổi), với 4 cuộn
dây có thể dùng cho cả hai chế độ điều khiển lưỡng cực và điều khiển đơn
cực.
II. PHÂN LOẠI ĐỘNG CƠ BƯỚC:
Động cơ bước được phân thành các loại như sau:

26
1) Động cơ bước nam châm vĩnh cữu:

 Cấu trúc:
Các cuộn dây quấn trên stator, roto là nam châm vĩnh cữu, giống động cơ
AC đồng bộ.
 Phân loại: đơn cực và lưỡng cực
- Đơn cực:là động cơ có chiều dòng điện qua mỗi cuộn dây không đổi.
- Lưỡng cực là động cơ có chiều dòng điện qua mỗi cuộn dây thay
đổi.
2) Động cơ bước có từ trở biến thiên:

 Cấu trúc:
Roto làm bằng sắt nhẹ, số cực của roto ít hơn số cực của stato, mỗi cuộn
dây được quấn trên 2 cục của stato đối diện nhau.
Hay còn gọi là động cơ phản kháng. Kiểu động cơ này có góc nằm trong
giới hạn từ 1,80  300 trong chế độ điều khiển bước đủ, mômen hãm từ 1 50 Ncm,
tần số khởi động lớn nhất là 1 Khz, và tần số làm việc lớn nhất trong điều kiện

27
không tải là 20 Khz. Stato được chế tạo thành dạng răng với bước cực s, roto của
động cơ cũng được chế tạo thành dạng răng có bước cực r.
3) Động cơ bước loại hỗn hợp:

Hay còn gọi là động cơ bước cảm ứng, có góc bước thay đổi trong khoảng
0,36 - 150 trong chế độ bước đủ, mômen hãm từ 3 - 1000 Ncm, tần số khởi động
lớn nhất là 40 khz. Trong các loại động cơ bước kể trên thì động cơ bước hổn hợp
được sử dụng nhiều hơn cả. Vì loại động cơ này kết hợp các ưu điểm của hai loại
động cơ trên đó là: Động cơ nam châm vĩnh Cửu với dạng cực móng, và động cơ
có từ trở thay đổi.
Cấu tạo của động cơ bước thay đổi hổn hợp là sự kết hợp giữa động cơ
bước nam châm vĩnh cữu và động cơ bước có từ trở thay đổi. Phần Stato được cấu
tạo hoàn toàn giống Stator của động cơ bước có từ trở thay đổi. Trên các cực của
Stato được đặt các cuộn dây pha, mỗi cuộn dây pha được quấn thành 4 cuộn dây
hoặc được quấn thành 2 cuộn dây đặt xen kẻ nhau để hình thành lên các cực N và
S đồng thời đối diện với mỗi cực của bối dây là răng của Roto và cũng được đặt
xen kẽ giữa hai vành răng số 3 của Roto.
 Động cơ hổn hợp cũng được chế tạo với 2, 4 và 5 pha, động cơ 2 và 4 pha
thường cho góc bước từ s = 0,90 - 150 cò động cơ 5 pha thường có có góc
bước từ s = 0,180 - 0,270 .
 Bước răng của Roto được xác định bằng biểu thức sau:
2 360 0
r  
Zr Zr
Trong đó: Zr là số răng của Roto

28
 Góc bước của động cơ là tỷ số giữa bước răng r và số pha m của động cơ
khi cuộn dây được điều khiển lưỡng cực :
r
s 
m
 Động cơ hổn hợp có tần số bước và độ phân giải cao, có mômen quay và
mômen hãm lớn.
 Trong chế tạo động cơ bước ngoài ba loại chính kể trên, để có góc bước
thay rất nhỏ người ta còn chế tạo động cơ bước từ trở thay đổi có nhiều
tầng, kết cấu của loại này được trình bày ở hình .
 Loại động cơ này thường được chế tạo 2, 3, 4 tầng trình bầy kết cấu của
động cơ bước từ trở thay đổi có ba tầng. Trong mỗi tầng số răng của Stato
và Roto giống nhau. Vị trí răng của 3 Stato được đặt giống nhau và được cố
định trên trục Roto, nhưng vị trí răng của 3 Stato được đặt lệch nhau 1/3
bước răng.
 Góc lệch giữa hai tầng kề nhau được xác định bằng biểu thức sau:
r 360 0
 
m Zrm

Nếu Roto có Zr = 12 răng thì góc lệch nhau giữa hai tầng kề nhau là 100
 Khi có một xung dòng điện điều khiển đặt vào tầng 1 thì răng của Roto và
Stato đối đỉnh nhau (vì từ thông chỉ khép kín tại vị trí có từ trở nhỏ nhất).
Lúc này răng của Roto và Stato ở tầng 2 lệch nhau 1 góc là 100, còn răng
của Roto và Stato ở tầng 3 lệch nhau là 200. Cắt xung dòng điện điều khiển
vào tầng 1 và các xung dòng điện điều khiển vào tầng thì Roto của tầng 2
quay một góc 100 để đỉnh răng của Roto trùng với đỉnh răng của stato ở
tầng 2, lúc này răng của Roto và Stato của tầng 3 lệch nhau một góc là 100
so với tầng 2. Quá trình điều khiển tiếp tục cho tới khi trở lại tầng 1. Cuối
cùng ta có quá trình điều khiển theo trình tự 1-2-3-1
III. PHƯƠNG PHÁP ĐIỀU KHIỂN ĐỦ BƯỚC VÀ NỬA BƯỚC:
1. Phương pháp điều khiển nguyên bước:

29
Thể hiện trình tự điều khiển bước đủ của dộng cơ bước nam châm vĩnh cửu
được từ hóa với các cực từ xen kẽ. Nguyên lý làm việc của động cơ bước là dựa
trên sự tác động tương hổ giữa từ trường của Stato và Roto, hình thành mômen
điện từ làm quay Roto đi một góc nhất định.
Bảng làm việc của chế độ nguyên bước:

Nếu ta điều khiển động cơ theo như bảng trên, chuyển mạch tuần tự từ
bước 1 đến bước 4. Động cơ sẽ làm việc ở chế độ nguyên bước như sau

Dạng điều khiển này được gọi là điều khiển bước đủ hay còn gọi là điều
khiển đối xứng.

30
2. Phương pháp điều khiển nửa bước:
Thể hiện trình tự điều khiển nửa bước, quá trình điều khiển nửa bước
tương tự như quá trình điều khiển bước đủ, nhưng trình tự chuyển mạch các cuộn
dây điều khiển như bảng sau:

Với việc điều khiển nửa bước, mỗi bước của động cơ quay được nhỏ hơn ở
chế độ nguyên bước. Như ta thấy, với cung 1 loại động cơ, nếu họat động ở chế độ
nguyên bước, thì chỉ cần 4 bước để thực hiện 1 vong quay, còn ở chế độ nữa bước
là 8.
Xét về yêu cầu đảm bảo độ chính xác trong điều khiển, thì phương pháp
điều khiển nửa bước dễ dàng đáp ứng hơn, nhưng bộ chuyển phát xung điều khiển
phức tạp hơn nhiều so với phương pháp điều khiển bước đủ.

31
IV. NGUYÊN LÝ HOẠT ĐỘNG CỦA ĐỘNG CƠ BƯỚC
1. Động cơ nam châm vĩnh cửu:
Nguyên lý làm việc của động cơ này là dựa vào tác động của một trường điện
từ trên một mômen điện từ, tức là tác động giữa một trường điện từ và một hoặc

32
nhiều nam châm vĩnh cửu. Roto của động cơ tạo thành một hoặc nhiều cặp từ và
mômen điện từ của nam châm được dặt thẳng hàng trên từ trường quay do các
cuộn dây tạo nên.
 Xét cấu trúc của động cơ bước nam châm vĩnh cửu như:
Động cơ có hai cuộn dây lắp ở hai cực của Stato, và một nam châm vĩnh
cửu ở Roto. Khi kích thích một cuộn dây của Stato (đồng thời ngắt điện cuộn kia)
sẽ tạo nên hai cực Bắc (North) và Nam (South) của nam châm. Roto sẽ thẳng đứng
với hướng từ trường
Nếu ta cho dòng điện vào cuộn dây W1 thì vị trí 1 và 3 của Stato tương ứng
sẽ là cực Nam và cực Bắc.
Giả sử trục của nam châm vĩnh cửu của Roto đang lệch với trục 1-3 một
góc  dưới tác dụng của lực hút do các cực trái dấu của nam châm sẽ sinh ra một
lực quay Roto về vị trí 1, vị trí này gọi là vị trí cân bằng. Sau đó cho dòng điện I2
vào cuộn dây W2 (lúc này dòng điện ở cuộn W1 bị ngắt), thanh nam châm sẽ quay
nhanh đến vị trí 2 một góc 900 nếu việc cấp điện liên tục và tuần tự vào cuộn dây
W1, W2, W1, W2, …. Và đảo chiều dòng điện sau mỗi bước, thanh nam châm sẽ
quay thành những vòng tròn, từ một phần tư vòng tròn đến một phần tư vòng tròn
khác.
Các cuộn dây của Stato gọi là các pha. Động cơ bước có thể có nhiều pha:
2, 3, 4, 5 pha, nó được cấp điện cuộn này sang cuộn khác với việc đảo chiều dòng
điện sau mỗi bước quay. Chiều các động cơ phụ thuộc vào thứ tự cung cấp điện
cho các cuộn dây và hướng của từ trường.
2. Động cơ bước từ trở thay đổi:
Nguyên lý làm việc của động cơ bước từ trở thay đổi dựa trên cơ sở định
luật cảm ứng điện từ, tức là dựa trên sự tác động giữa một trường điện từ và một
Roto có từ trở thay đổi theo góc quay.
Roto động cơ điện được chế tạo bằng vật liệu dẫn từ, trên bề mặt Roto
thường có nhiều răng. Mỗi răng của Roto hoặc của Stato gọi là một cực. Trên hai
cực đối diện được mắc nối tiếp hai cuộn dây (ví dụ như cuộn dây AA') tạo thành

33
một phần của động cơ. Như vậy động cơ như hình vẽ có ba pha A, B, C, từ trở
thay đổi theo góc quay của răng. Khi các răng của Roto đứng thẳng hàng với các
cực của Stato, từ trở ở đó sẽ nhỏ nhất. Nếu ta cho dòng điện chạy vào cuộn dây
BB' nó sẽ tạo nên từ trường kéo cực gần nó nhất của roto và làm Roto quay một
góc 300 theo chiều ngược chiều kim đồng hồ. Nếu dòng điện được đưa vào cuộn
dây CC', Roto lại tiếp tục quay một góc 300 nữa … Các cuộn dây AA', BB', CC '
gọi là các pha.
Hướng quay của động cơ không phụ thuộc vào chiều của dòng điện mà phụ
thuộc vào thứ tự cấp điện cho cuộn dây. Nhiệm vụ này do các mạch logic trong bộ
chuyển phát thực hiện. Với cách thay đổi thứ tự hoặc thay đổi cách kích thích các
cuộn dây ta cũng làm thay đổi các vị trí góc quay.
Động cơ bước có từ trở thay đổi có chuyển động êm, số bước lớn và tần số
làm việc cũng khá lớn (từ 2 đến 5 Khz).
 Một số công thức tính cho động cơ bước từ trở thay đổi:
Nr : Số răng roto
Ns : Số răng stato
Np : Số pha
Pr : Góc độ răng roto
s : Góc bước
Rs : Giá trị bước
X = Ns/Np : số răng stato cho một pha
- Góc độ răng giữa hai răng kề nhau được xác định như sau :
360 0 360 0
Pr  ; Ps 
Nr Pr
- Góc bước được xác định bởi biểu thức :
360 0
s  (độ / bước)
Nr .Np

- Giá trị bước

34
360
Rs 
s

- Nếu tần số xung là f thì tốc độ Roto là:


69 f 60 f s
   (vòng / phút)
Rs Np.Nr 6

- Số răng Roto cho một pha:


Nr
X
Np  1

3. Động cơ hổn hợp:


Động cơ hổn hợp là sự kết hợp nguyên tắt làm việc của động cơ có bước
nam châm vĩnh cửu và động cơ bước có từ trở thay đổi nhằm có được đặt tính tốt
nhất của hai loại kể trên là momen lớn và số bước lớn.
Động cơ gồm hai nửa Roto (1) và (2). Nửa(1) có nhiều răng trên Roto, nửa
(2) là nam châm vĩnh cửu. Do đó có sự kết hợp giữa hai phần nên tạo ra sự kích
thích roto mạnh hơn. Động cơ loại này có số bước đạt đến 400 bước, nhưng giá
thành đắt.
4. Động cơ nhiều Stato:

Động cơ gồm nhiều stato trên cùng một trục. Nếu ta dịch chuyển stato đi
một góc đồng thời giữ Roto thẳng hàng hoặc ngược lại có bước rất nhỏ. Khi cung
cấp điện cho stato một cách liên tục, ta sẽ có một động cơ (quay liên tục), đặc tính
của nó không tốt bằng động cơ có từ trở thay đội.
V. ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC:

35
Điều khiển động cơ bước do một thiết bị điện tử gọi là bộ chuyển
phát thực hiện. nó bao gồm các chức năng sau đây:
 Tạo các xung với các tần số khác nhau.
 Chuyển đổi các phần cho phù hợp với thứ tự kích.
 Làm giảm dao động cơ học.

Bộ điều khiển đưa ra các tín hiệu điều khiển đến mạch công suất của
động cơ. Bộ điều khiển đưa ra tín hiệu quay thuận, quay ngược, hay đứng
yên.. Bộ điều khiển ở đậy ta sử dụng vi điều khiển 8951.
Dưới đây là mạch công suất của động cơ:

Ta có thể sử dung transistor hay motfet, để điều khiển động cơ. Khi
T dẫn, dòng điện từ nguồn chạy thẳng xuống đất, không có dòng điện qua
cuôn dây, khi T không dẫn, dòng điện chạy qua cuôn dây của động cơ bước.
Tương tự ta kích tuần tự các cuôn dây còn lại, động cơ sẽ quay, động cơ sẽ
quay ngược lại nếu ta kích theo thứ tự ngược lại.
Ở vị trí khóa của động cơ bước, ta cho dòng diện chạy qua tất cả các
cuộn dây của động cơ. Lúc đó động cơ sẽ không chuyển động, va bị khóa
cứng ở vị trí đó.

36
 Ứng dụng:
Do mạch điều khiển đơn giản, không phức tạp như cac loại động cơ khác,
lại chính xác. Nên động cơ bước được sử dụng nhiều trong cac ứng dụng
công nghiệp như: máy in, đồng hồ v.v….
 Một số động cơ thường gặp

37
CHƯƠNG III : TÌM HIỂU VỀ ANTENA
I.CHỨC NĂNG ANTENA :
Anten là bộ phận đầu tiên trong hệ thống. Có nhiều loại khác nhau,
việc lựa chọn Anten cho đúng với kênh sóng, bố trí lắp đặt cho đúng kỹ
thuật, dùng dây cáp truyền sóng đúng tổng trở. Những yếu tố này quyết định
khả năng nhận sóng điện của Anten.
Anten có 2 loại là UHF và VHF :
 VHF : very high fequency có dải tần thu được từ 30 – 300 MHZ.
 UHF: ultra high fequency có dải tần thu được từ 300MHZ – 32GHz
Nhiệm vụ của Anten:
 Thu tín hiệu cao tần RF được gửi từ đài phát.
 Đáp ứng được băng thông giữa hình và tiếng.
 Đáp ứng được độ lợi cho biên độ tín hiệu lớn nhất là tín hiệu truyền
hình màu ở nơi xa đài phát.
II.CẤU TẠO ANTEN YAGI:
Anten thông dụng và tiện lợi nhất hiện nay là Anten YAGI. Yagi là
tên một nhà bác học người Nhật đã sáng chế ra loại Anten này. Cùng góp
công với YAGI còn có UDA cũng là người Nhật, nên cóp tài liệu gọi là
Anten UDA_YAGI.
Anten có 3 thành phần chính:
a. Chấn tử thu sóng
Thường dùng ngẫu cực có hình vòng cung dẹt. Dây Anten được mắc ở
hai bên đọan hở ra của vòng cung dẹt. Chấn tử thu sóng là bộ phận
chính của Anten.
b. Chấn tử hướng sóng:
Gồm 1 hay nhiều ống nhôm có chiều dài ngắn hơn chấn tử thu sóng
được đặt ở phía trước hướng về đài truyền hình. Những chấn tử hướng

38
sóng có chiều dài càng ngắn thì đặt trước mũi Anten, cón những chấn tử
dài hơn thì càng gần chấn tử thu sóng hơn.
c. Chấn tử phản sóng:
Có chiều dài lớn hơn cả, gồm 1 hay nhiều nhánh tạo thành dàn đặt ngay
sau chấn tử thu sóng. Chấn tử phản sóng có nhiệm vụ phản dội vào chấn
tử thu sóng làm tăng hệ số khuyếch đại.

39
CHƯƠNG IV: TIẾN TRÌNH THƯC HIỆN
I. MẠCH KÍCH CÔNG SUẤT:
Để điều khiển động cơ bước ta sử dụng mạch sau:

Ta sử dụng 1 transistor loại pnp (TIP 127), và 4 Motfet IRF540.


Để động cơ bước họat động cần dòng ic = 1.6A
ic 1. 6
 ib    1.6mA
1000 1000
9  0.7
Ta chọn R1   5k
1.6
Vậy ta chọn R1 và R2 là 10k
Linh kiện Motfet, là loại linh kiện đóng ngắt nhanh và tổn hao do đóng ngắt thấp.
Điều khiển kích đóng ngắt bằng xung điện áp ở mạch cổng. Do đó khi có điện áp
đặt vào 2 cực G và S thì Motfet dẫn. ngược lại, khi VGS=0 thì Motfet ngắt.
II. MẠCH HIỂN THỊ RA LED 7 ĐOẠN :

40
Đây là mạch hiển thị số ra Led 7 đoạn. Do động cơ bước chỉ quay từ 0 đến 3600,
nên ta chỉ sử dụng 3 Led 7 đoạn.
Ở mạch này ta sử dung IC giải mã BCD 7447. Ở đấu vào của 7447 ta đưa vào số
đếm (thập phân, hay số hex), IC 7447 sẽ cho ra mã số tương ứng đến Led 7 đoạn.
Gọi i là dòng điện chạy qua Led, ta chọn i = 10mA
Ta sử dung transistor A1015 để điều khiển đóng ngắt Led.
Vcc  0.2 5  0.2 4.8
i   R5   480 . Ta chon R5= 330
R5 R5 10mA
ic 10
ib    0.1 .mA
 100
Led 7 đoạn có 7 led nhỏ, vậy ib=0.7mA
Vcc  0.7 5  0.7
Rb    6k .ta chọn Rb=1k
ib 0. 7
III. SƠ ĐỒ MẠCH ĐIỀU KHIỂN:

41
VCC VCC VCC

1 Q2 1 Q3 1 Q4
3 R2 L2 3 R3 L3 3 R4 L4
LED1 2 1k 2 1k 2 1k
LED7SEG LED2 LED3
3 A1015 LED7SEG A1015 LED7SEG A1015
C1 CM 3 3
x1 8 CM CM
CM 8 8
VCC 33p Y1 CM CM
C2 11.059
R10 x2 R5
4K7 A 1 14 B0
33p B 2 13 B1
C 3 12 B2
A B C D E F G DP D 4 11 B3
A B C D E F G DP A B C D E F G DP E 5 10 B4
7 6 4 2 1 9 105 F 6 9 B5
2

VCC 7 6 4 2 1 9 105 7 6 4 2 1 9 105 G 7 8 B6


SW2
A B CDE F G A B C DE F G A B C DE F 330
CONG TAC HANH TRINH
1

U1 40
U2
39 21 7 13 B0
VCC

38 P0.0/AD0 P2.0/A8 22 1 1 A 12 B1
37 P0.1/AD1 P2.1/A9 23 2 2 B 11 B2
36 P0.2/AD2 P2.2/A10 24 6 4 C 10 B3
35 P0.3/AD3 P2.3/A11 25 L1 4 8 D 9 B4
34 P0.4/AD4 P2.4/A12 26 L2 VCC 5 BI/RBO E 15 B5
JP2 33 P0.5/AD5 P2.5/A13 27 L3 3 RBI F 14 B6
32 P0.6/AD6 P2.6/A14 28 L4 LT G
2 P0.7/AD7 P2.7/A15 JP3 74LS47
1 1 10
HEADER 2 2 P1.0 P3.0/RXD 11 1
3 P1.1 P3.1/TXD 12 2
P1.2 P3.2/INTO 3

2
JP4 4 13 D4
5 P1.3 P3.3/INT1 14 4
3 P1.4 P3.4/TO 5 U3
6 15 JP5 LM7806C/TO VCC
2 7 P1.5 P3.5/T1 16 6 4 - + 1 1 3
1 8 P1.6 P3.6/WR 17 7 2 IN OUT
x1 19 P1.7 P3.7/RD 8 1 C4 C5

GND
HEADER 3 x2 18 XTAL1 29 ban phim diode bridge 2200uf 10uf
VCC XTAL2 PSEN HEADER 2
31 30

3
EA/VPP ALE/PROG

2
R6 9
SW1 C3 RST
100 10uf
1 2 AT89C51 JP6 D5
reset
2
1 C6
+ DIODE
2000UF
R7 ACQUY 6V
10K

IV. BÁO CÁO KẾT QUẢ ĐẠT ĐƯỢC:


Sau khi hoàn thành Anten xoay có nhớ sử dụng động cơ bước, đã đạt được những
kết quả sau:
Khác với các Anten xoay và lưu vị trí trên thi trường, sử dụng động cơ DC. Anten
này có thể xoay đến bất kỳ vị trí nào, chỉ cần đặt 1 lúc nhiều vị trí cần đến, sau đó
cho động cơ chạy. Động cơ sẽ dừng đúng từng vị trí mà đã đặt trước đó.
Tiện lợi khi sử dụng động cơ bước là mạch điều khiển đơn giản và không cần
mạch hồi tiếp như động cơ servo, mà cũng có thể đến đúng vị trí ta cần.
Để Anten đứng yên khi không sử dụng, ta sử dung bình Acquy, để cấp nguồn điện
giữ cho động cơ đứng yên. Đồng thời sử dụng nguồn điện này để nuôi vi điều
khiển. Để nhớ các vị trí ta đặt.
 Hướng dẫn sử dụng Anten:
Khi có nguồn cấp cho Anten, Anten sẽ xoay đến đến khi đụng vào công tắc hành
trình, động cơ sẽ dừng lại, ta đặt vị trí đó là 00.
 Nút Run: cho phép Anten xoay.

42
 Nút Stop: Anten dừng lại.
 Nút Set: nhấn vào nút set, sau đó dặt vị trí cho Anten.
 Nút Save: khi đặt xong vị trí đầu tiên, nhấn save để lưu lại vị trí đó.
 Nút Change: thay đổi chiều quay cho Anten.
 Nút Clr: để xóa số khi nhấn sai.
V. CHƯƠNG TRÌNH:
#include <sfr51.inc>
LED1 BIT P2.5
LED2 BIT P2.6
LED3 BIT P2.7
TRAM EQU 3CH
CHUC EQU 3BH
DONVI EQU 3AH
TRAM1 EQU 51H
CHUC1 EQU 52H
DONVI1 EQU 53H
SO1 EQU 35H
SO2 EQU 36H
SO3 EQU 37H
HANG_TRAM EQU 3DH
HANG_CHUC EQU 3EH
HANG_DONVI EQU 3FH
SOBUOC EQU 39H;LUU SO BUOC DONG CO BUOC DUOC
STEP BIT P1.3; PORT CHO PHEP DONG CO CHAY
MOC BIT P0.3;CONG TAC HANH TRINH,XAC DINH DIEM GOC BAN
DAU
STOP BIT 20H.0
CHIEUQUAY BIT 20H.1

43
SAVE BIT 20H.5
DEM BIT 20H.3
DAT BIT 20H.2
ORG 0
MAIN: MOV TMOD,#00000001B
MOV TRAM1,#0
MOV CHUC1,#0
MOV DONVI1,#0
MOV SO1,#00H
MOV SO2,#00H
MOV SO3,#00H
MOV SOBUOC,#00H
MOV HANG_DONVI,#00H
MOV HANG_TRAM,#00H
MOV HANG_CHUC,#00H
MOV DONVI,#00H
MOV CHUC,#00H
MOV TRAM,#00H
MOV 34H,#00H
MOV 39H,#0FFH
MOV 41H,#0
MOV 42H,#00H
MOV 43H,#0FFH
MOV 44H,#0FFH
MOV 45H,#0FFH
MOV 46H,#0FFH
MOV 47H,#0FFH
MOV 48H,#0FFH
MOV 49H,#0FFH

44
MOV 4AH,#0FFH
MOV 4BH,#0FFH
MOV 4CH,#0FFH
MOV 5CH,#0
MOV 5DH,#0
MOV 20H,#0
MOV 22H,#0
MOV R5,#0
MOV R6,#10
MOV 11H,#0
;-----------------------------------------------------------------------------
LOOP:
ACALL QUETPHIM
ACALL HIENTHI
ACALL HIENTHI1
ACALL KIEMTRAPHIM
ACALL DOISANGDO
ACALL QUAY1
SJMP LOOP
;-----------------------------------------------------------------------------
KIEMTRAPHIM:;KIEM TRA PHIM NAO DUOC NHAN
MOV A,10H ;0 NHO 10H =1:PHIM DA DUOC NHAN
CJNE A,#1,SUTDOWN ;NEU KHONG CO PHIM NAO DUOC NHAN
THI THOAT KHOI CHUONG TRINH
MOV 10H,#0
MOV A,32H
CJNE A,#0AH,TIEP1 ;NEU PHIM= 0AH,THI CHO BIT STOP=1
SETB STOP ;DONG CO DUNG LAI

45
TIEP1: CJNE A,#0BH,TIEP2 ;NEU PHIM=0BH,THI CHO BIT STOP=0
MOV SO1,#0 ;DONG CO CHAY
MOV SO2,#0
MOV SO3,#0
CLR STOP
CLR 22H.0
MOV P1,38H

TIEP2: CJNE A,#0CH,TIEP3 ;NEU PHIM=0CH,THI GOI CHUONG


TRINH LUU_VI_TRI
ACALL LUU_VI_TRI
MOV SO1,#0
MOV SO2,#0
MOV SO3,#0

TIEP3: CJNE A,#0DH,TIEP4 ;NEU PHIM=0DH,THI DAO BIT


CHIEUQUAY
SETB STOP ;CHIEU QUAY DONG CO SE THAY DOI
JNB MOC,SUTDOWN
CPL CHIEUQUAY
CLR 22H.0
CLR STOP

TIEP4: CJNE A,#0EH,TIEP5 ;NEU PHIM=0EH,BIT DAT=1


SETB STOP ;DAT VI TRI CHO DONG CO
SETB DAT
SETB 22H.0

TIEP5: CJNE A,#0FH,TIEP6 ;NEU PHIM=0FH

46
JNB DAT,TIEP6
MOV SO3,SO2
MOV SO2,SO1
MOV SO1,#0

TIEP6: CJNE A,#10,XUONGHANG;CHON NHUNG PHIM <10,DE DAT VI


TRI
XUONGHANG: JNC SUTDOWN
JNB DAT,SUTDOWN
INC 42H
MOV A,42H
CJNE A,#4,NHAPSO
MOV SO1,#0
MOV SO2,#0
MOV SO3,#0
MOV 42H,#1
NHAPSO:
MOV SO1,SO2
MOV SO2,SO3
MOV SO3,32H
ACALL KIEMTRADO
ACALL QUYRASOBUOC
SUTDOWN: NOP
RET
;-----------------------------------------------------------------------------
QUAY1:
QUAY:

JB STOP,NHAY2

47
JB CHIEUQUAY,NHAY0
INC R5
CJNE R5,#8,NHAY6
MOV R5,#0
SJMP NHAY6
NHAY0: DEC R5
CJNE R5,#0FFH,NHAY6
MOV R5,#7
NHAY6:
CLR STEP
NHAY1: MOV DPTR,#STEPCODE
MOV A,R5
MOVC A,@A+DPTR
MOV P1,A
ORL A,#08H
MOV 38H,A
ACALL DOCSOBUOC
ACALL DOISANGDO
ACALL DELAY
SETB DEM
JNB 22H.1,NHAY4
JNB MOC,NHAY9
CLR 22H.1
SJMP NHAY9
NHAY4: JNB MOC,NHAY8

NHAY9:ACALL QUETPHIM
ACALL KIEMTRAPHIM
ACALL SO_SANH

48
SJMP QUAY
NHAY8: SETB 22H.1
CPL CHIEUQUAY
NHAY2: SETB 20H.4
ACALL LAY_TOA_DO_GOC
SETB STOP
SETB STEP
MOV P1,#11111000B
NOP
RET
;----------------------------------------------------------------------------
DOCSOBUOC:
JNB 20H.4,OUT1
JNB CHIEUQUAY,GIAM
JNB DEM,OUT1
CLR DEM
INC DONVI
INC 41H
MOV A,41H
CJNE A,#200,TANGSOBUOC
SETB 22H.3
MOV 41H,#0
TANGSOBUOC: MOV A,DONVI
CJNE A,#10,OUT1
MOV DONVI,#0
INC CHUC
MOV A,CHUC
CJNE A,#10,OUT1
MOV CHUC,#0

49
INC TRAM
MOV A,TRAM
SJMP OUT1
GIAM: JNB DEM,OUT1
CLR DEM
DEC DONVI
DEC 41H
MOV A,41H
CJNE A,#0FFH,GIAMSOBUOC
CLR 22H.3
MOV 41H,#199
GIAMSOBUOC:
MOV A,DONVI
CJNE A,#0FFH,OUT1
MOV DONVI,#9
DEC CHUC
MOV A,CHUC
CJNE A,#0FFH,OUT1
MOV CHUC,#9
DEC TRAM
MOV A,TRAM
SJMP OUT1
OUT1: NOP
RET
;-----------------------------------------------------------------------------
QUYRASOBUOC:
MOV A,SO1
MOV B,#10
MUL AB

50
ADD A,SO2
MOV B,#9
DIV AB
MOV HANG_TRAM,A
MOV A,B
MOV B,#10
MUL AB
ADD A,SO3
MOV B,#9
DIV AB
MOV HANG_CHUC,A
MOV A,B
MOV B,#10
MUL AB
MOV B,#9
DIV AB
MOV HANG_DONVI,A
MOV A,B
CJNE A,#5,LAMTIEP1
LAMTIEP1: JC LAMTIEP2
INC HANG_DONVI
;QUY RA SO BUOC
LAMTIEP2: MOV A,HANG_TRAM
CJNE A,#2,LAMTIEP3
LAMTIEP3: JNC LAMTIEP4
CLR 22H.2
MOV A,HANG_TRAM
MOV B,#100
MUL AB

51
MOV SOBUOC,A
MOV A,HANG_CHUC
MOV B,#10
MUL AB
ADD A,SOBUOC
ADD A,HANG_DONVI
MOV SOBUOC,A
SJMP LAMTIEP5
LAMTIEP4: SETB 22H.2
SUBB A,#2
MOV B,#100
MUL AB
MOV SOBUOC,A
MOV A,HANG_CHUC
MOV B,#10
MUL AB
ADD A,SOBUOC
ADD A,HANG_DONVI
MOV SOBUOC,A
LAMTIEP5: NOP
RET
;.............................................................................
SO_SANH:
JNB 20H.4,JUMP12
JB 22H.3,JUMP7

MOV A,43H
SUBB A,41H
CJNE A,#00H,JUMP3

52
SETB STOP
JUMP3: MOV A,44H
SUBB A,41H
CJNE A,#00H,JUMP4
SETB STOP
JUMP4: MOV A,45H
SUBB A,41H
CJNE A,#00H,JUMP5
SETB STOP
JUMP5: MOV A,46H
SUBB A,41H
CJNE A,#00H,JUMP6
SETB STOP
JUMP6: MOV A,47H
SUBB A,41H
CJNE A,#00H,JUMP12
SETB STOP
SJMP JUMP12
JUMP7: MOV A,48H
SUBB A,41H
CJNE A,#00H,JUMP8
SETB STOP
JUMP8: MOV A,49H
SUBB A,41H
CJNE A,#00H,JUMP9
SETB STOP
JUMP9: MOV A,4AH
SUBB A,41H
CJNE A,#00H,JUMP10

53
SETB STOP
JUMP10: MOV A,4BH
SUBB A,41H
CJNE A,#00H,JUMP11
SETB STOP
JUMP11: MOV A,4CH
SUBB A,41H
CJNE A,#00H,JUMP12
SETB STOP
JUMP12:
NOP
RET
;-----------------------------------------------------------------------------
LUU_VI_TRI:MOV 42H,#0
JB 22H.2,JUMP1
MOV 43H,44H
MOV 44H,45H
MOV 45H,46H
MOV 46H,47H
MOV 47H,SOBUOC
SJMP JUMP0
JUMP1: MOV 48H,49H
MOV 49H,4AH
MOV 4AH,4BH
MOV 4BH,4CH
MOV 4CH,SOBUOC
JUMP0: NOP
RET

54
;CHUONG TRINH QUET PHIM-------------------------------------------------------
QUETPHIM: JNB 20H.4,QUIT
PUSH ACC
CLR 79H
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,KETTHUC
QUETLAI:
MOV 30H,#0
MOV 31H,#0
MOV R7,#01111111B
QUET: MOV P3,R7
JNB P3.0,LUUPHIM
INC 31H
JNB P3.1,LUUPHIM
INC 31H
JNB P3.2,LUUPHIM
INC 31H
JNB P3.3,LUUPHIM
MOV 31H,#0
INC 30H
MOV A,30H
XRL A,#4
JZ KETTHUC
MOV A,R7
RR A
MOV R7,A
SJMP QUET
LUUPHIM: MOV B,P3

55
MOV R0,#90H
ACALL CHONGNAY
JNB 78H,QUETLAI
MOV A,31H
RL A
RL A
ORL A,30H
MOV DPTR,#KEYTAB; CHI DEN BANG DICH
MOVC A,@A+DPTR; LAY KY TU DUOC DICH
MOV 32H,A
mov 10h,#1
SETB 79H
KETTHUC: MOV P3,#0FFH
POP ACC
QUIT: NOP
RET
CHONGNAY:
CLR 78H
MOV 33H,#200
KTRALAI1: MOV 34H,#2
KTRALAI:
LCALL HIENTHI
LCALL HIENTHI1
MOV A,@R0
JZ THOAT0
XRL A,B
DJNZ 34H,KTRALAI
DJNZ 33H,KTRALAI1
SETB 78H

56
THOAT0:
NOP
RET
;CHUONG TRINH HIEN THI------------------------------------------------------------
HIENTHI: JB 22H.0,L3
JNB STOP,L0
MOV A,TRAM1
ORL A,#0F0H
MOV P2,A
CLR LED3
ACALL DELAY100
SETB LED3
MOV A,CHUC1
ORL A,#0F0H
MOV P2,A
CLR LED2
ACALL DELAY100
SETB LED2
MOV A,DONVI1
ORL A,#0F0H
MOV P2,A
CLR LED1
ACALL DELAY100
SETB LED1
SJMP L3
L0: MOV P2,#00H
ACALL DELAY100
ACALL DELAY100
MOV P2,#0FH

57
L3: NOP
RET
;-----------------------------------------------------------------------------------
HIENTHI1: JNB 22H.0,L1
MOV A,SO1
ORL A,#0F0H
MOV P2,A
CLR LED3
ACALL DELAY100
SETB LED3
MOV A,SO2
ORL A,#0F0H
MOV P2,A
CLR LED2
ACALL DELAY100
SETB LED2
MOV A,SO3
ORL A,#0F0H
MOV P2,A
JNB 20H.7,L2
CLR LED1
ACALL DELAY100
SETB LED1
INC 5CH
MOV A,5CH
CJNE A,#100,L1
MOV 5CH,#0
INC 5DH
MOV A,5DH

58
CJNE A,#5,L1
MOV 5DH,#0
CPL 20H.7
SJMP L1
L2: SETB LED1
ACALL DELAY100
INC 5CH
MOV A,5CH
CJNE A,#100,L1
MOV 5CH,#0
INC 5DH
MOV A,5DH
CJNE A,#5,L1
MOV 5DH,#0
CPL 20H.7
L1: NOP
RET
;-----------------------------------------------------------------------------------
; CHUONG TRINH DOI SANG DO
DOISANGDO:
MOV A,DONVI
MOV B,#9
MUL AB
MOV B,#10
DIV AB
MOV 50H,A
MOV A,B
CJNE A,#5,NEXT1
NEXT1: JC NEXT2

59
INC 50H
NEXT2: MOV A,CHUC
MOV B,#9
MUL AB
ADD A,50H
MOV B,#10
DIV AB
MOV 50H,A
MOV DONVI1,B
MOV A,TRAM
MOV B,#9
MUL AB
ADD A,50H
MOV B,#10
DIV AB
MOV CHUC1,B
MOV TRAM1,A
RET
;----------------------------------------------------------------------------------
KIEMTRADO:
LAMLAI1: MOV A,SO1
CJNE A,#4,LAMTIEP6
LAMTIEP6: JC LAMTIEP7
SUBB A,#3
MOV SO1,A
SJMP LAMLAI1
LAMTIEP7: CJNE A,#3,LAMTIEP9
LAMLAI2: MOV A,SO2
CJNE A,#7,LAMTIEP8

60
LAMTIEP8: JC LAMTIEP9
MOV SO1,#0
SUBB A,#6
MOV SO2,A
SJMP LAMLAI2
LAMTIEP9: NOP
RET
;-----------------------------------------------------------------------------------
LAY_TOA_DO_GOC:
JB MOC,THOAT_CHUONGTRINH
JB 22H.3,THOAT_CHUONGTRINH
MOV 41H,#0
MOV DONVI,#0
MOV CHUC,#0
MOV TRAM,#0
THOAT_CHUONGTRINH:NOP
RET
;-----------------------------------------------------------------------------------
DELAY:
LAP: MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
QUAY_LAI:JB TF0,XOA_CO_TRAN
LCALL QUETPHIM
LCALL HIENTHI
LCALL HIENTHI1
LCALL KIEMTRAPHIM
SJMP QUAY_LAI
XOA_CO_TRAN: CLR TR0

61
CLR TF0
DJNZ R6,LAP
MOV R6,#10

RET
STEPCODE:
DB 10H,30H,20H,60H,40H,C0H,80H,90H
KEYTAB:
DB 00H,04H,08H,0CH
DB 01H,05H,09H,0DH
DB 02H,06H,0AH,0EH
DB 03H,07H,0BH,0FH
DELAY100:
MOV R3,#100
DJNZ R3,$
RET
END
VI. LƯU ĐỒ GIẢI THUẬT:
1 Chương trình chính:

62
2 Chương trình KIEMTRAPHIM:

63
3 Chương trình DOISANGDO:

64
4 Chương trình QUAY:

65
5 Chương trình QUETPHIM:

66
67

You might also like