Ngày nay với sự phát triển của công nghiệp vi điện tử, kỹ thuật số các hệ thống điều khiển dần dần được tự động hóa. Với kỹ thuật tiên tiến vi xử lý, vi mạch số….được ứng dụng vào lĩnh vực điều khiển tự động với chương trình thiết lập trước thay thế cho các hệ thống điều khiển cơ khí thô sơ, tốc độ xử lý chậm, ít chính xác. Hiện nay, hầu hết các quy trình sản xuất hàng tiêu dùng quy trình sấy đóng vai trò quan trọng quyết định đến chất lượng sản phẩm. Do đó, việc đo được nhiệt độ, độ ẩm và khống chế các yếu tố này theo đúng yêu cầu mong muốn là điều hết sức quan trọng và cần thiết. Để kiểm soát được nhiệt độ, độ ẩm trong buồng sấy, dùng vi điều khiển 8051 để tự động hoá quá trình là phương pháp tiện lợi, giá thành thích hợp cho những ứng dụng rộng rãi. Được sự đồng ý của Khoa Điện Trường Đại học Bách khoa Đà Nẵng, em tiến hành thực hiện đề tài “Dùng vi điều khiển để đo nhiệt độ, độ ẩm và khống chế độ ẩm trong phòng kớn”.
Trang 1Hiện nay, hầu hết cỏc quy trỡnh sản xuất hàng tiờu dựng quỏ trỡnh sấy đóngvai trũ quan trọng quyết định đến chất lượng sản phẩm Do đó, việc đo được nhiệt
độ, độ ẩm và khống chế các yếu tố này theo đúng yêu cầu mong muốn là điều hếtsức quan trọng và cần thiết
Để kiểm soát được nhiệt độ, độ ẩm trong buồng sấy, dùng vi điều khiển 8051
để tự động hoá quá trỡnh là phương pháp tiện lợi, giỏ thành thớch hợp cho nhữngứng dụng rộng rói Được sự đồng ý của Khoa Điện - Trường Đại học Bách khoa Đà
Nẵng, em tiến hành thực hiện đề tài “Dùng vi điều khiển để đo nhiệt độ, độ ẩm và
khống chế độ ẩm trong phũng kớn”
II Giới hạn đề tài:
- Đo nhiệt độ và độ ẩm phũng kớn, khống chế độ ẩm trong phũng theo một
giỏ trị đặt trước
- Tính toán hệ số khối lượng hơi nước trong không khí trong phạm vi hoạtđộng của thiết bị đo theo tiêu chuẩn của hơi nước bóo hoà theo nhiệt độ và hiển thịthông số này khi giá trị độ ẩm được thiết lập
III Mục đích nghiên cứu:
Trang 2Trong các thiết bị điện và điện tử dân dụng, các bộ vi điều khiển, điều khiểnhoạt động của ti vi, máy giặt, đầu đọc laser, điện thọai, lò vi-ba… Trong hệ thốngsản xuất tự động, bộ vi điều khiển được sử dụng trong Robot, dây chuyền tự động.Các hệ thống càng “thông minh” thì vai trò của hệ vi điều khiển càng quan trọng.
II.LịCH Sử PHáT TRIểN CủA CáC Bộ VI ĐIềU KHIểN:
Bộ vi điều khiển được phát triển từ bộ vi xử lí, từ những năm 70 của thế kỷ
XX, do sự phát triển và hoàn thiện về công nghệ vi điện tử dựa trên kỹ thuật MOS(Metal-Oxide-Semiconductor), mức độ tích hợp của các linh kiện bán dẫn trongmột chip ngày càng cao
Năm 1971 xuất hiện bộ vi xử lí 4 bit loại TMS1000 do công ty texasInstruments vừa là nơi phát minh vừa là nhà sản xuất Nhìn tổng thể thì bộ vi xử líchỉ có chứa trên một chip những chức năng cần thiết để xử lí chương trình theo mộttrình tự, còn tất cả bộ phận phụ trợ khác cần thiết như: bộ nhớ dữ liệu, bộ nhớchương trình, bộ chuyển đổi AID, khối điều khiển, khối hiển thị, điều khiển máy in,khối đồng hồ và lịch là những linh kiện nằm ở bên ngoài được nối vào bộ vi xử lí.Đến năm 1976 Công ty INTEL (Interlligen-Electronics) mới cho ra đời bộ viđiều khiển đơn chip đầu tiên trên thế giới với tên gọi 8048, là chip đầu tiên của họ
vi điều khiển MCS 48 Bên cạnh bộ xử lí trung tâm 8048 còn chứa bộ nhớ dữ liệu,
bộ nhớ chương trình, bộ đếm và phát thời gian các cổng vào và ra Digital trên mộtchip
Các công ty khác cũng lần lược cho ra đời các bộ vi điều khiển 8 bit tương tựnhư 8048 và hình thành họ vi điều khiển MCS-48 (Microcontroller-sustem-48).Đến năm 1980 Công ty INTEL cho ra đời thế hệ thứ hai của bộ vi điều khiểnđơn chip với tên gọi 8051
Bộ vi điều khiển đầu tiên của Tập đoàn SIEMENS cung cấp chip SAB 8051,một cải tiến của 8051 có 6 Port xuất/nhập 8 bit, đặc biệt có một bộ biến đổi AD 8bit với 8 kênh ngõ vào
Ngoài ra còn có các công ty khác cũng có những họ vi điều khiển riêng như:
Họ 68HCOS của công ty Motorola
GVHD: ThS Lâm Tăng Đức Trang:- 2 - SVTH: Võ Ngọc Tuyến
Trang 3Họ pic cuả công ty Microchip
IC vi điều khiển 8051/8031 thuộc họ MCS51 có các đặt điểm sau :
- 4KB ROM (được lập trình bởi nhà sản xuất chỉ có ở 8051)
- 128 byte RAM
- 4port I/0 8 bit
- Hai bộ định thời 16 bit
- Mạch giao tiếp nối tiếp
- 64KB không gian bộ nhớ chương trình mở rộng
- 64 KB không gian bộ nhớ dữ liệu mở rộng
- Bộ xử lý Bit (thao tác trên các bit riêng lẻ)
- 210 bit được địa chỉ hóa
ROM 0K:
8031\8032 4K:8951 8K:8052
Trang 4Hình 2.1 : Sơ Đồ Khối 8051 / 8031
Phần chính của vi điều khiển 8051 / 8031 là bộ xử lí trung tâm (CPU: central processing unit ) bao gồm :
- Thanh ghi tích lũy A
- Thanh ghi tích lũy phụ B, dùng cho phép nhân và phép chia
- Đơn vị logic học (ALU : Arithmetic Logical Unit )
- Từ trạng thái chương trình (PSW : Prorgam Status Word)
- Bốn băng thanh ghi
Hai bộ định thời 16 bit hoạt động như một bộ đếm
Các cổng (port0, port1, port2, port3 ) Sử dụng vào mục đích điều khiển
ở cổng 3 có thêm các đường dẫn điều khiển dùng để trao đổi với một bộ nhớbên ngoài, hoặc để đầu nối giao diện nối tiếp, cũng như các đường ngắt dẫn bênngoài
Giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ, làmviệc độc lập với nhau Tốc độ truyền qua cổng nối tiếp có thể đặt trong vảy rộng vàđược ấn định bằng một bộ định thời
Trong vi điều khiển 8051 / 8031 có hai thành phần quan trọng khác đó là bộnhớ và các thanh ghi :
Bộ nhớ gồm có bộ nhớ Ram và bộ nhớ Rom (chỉ có ở 8031) dùng để lưu trữ
dữ liệu và mã lệnh
Các thanh ghi sử dụng để lưu trữ thông tin trong quá trình xử lí Khi CPU làmviệc nó làm thay đổi nội dung của các thanh ghi
2./ Chức năng các chân vi điều khiển :
a.port0 : là port có 2 chức năng (các chân từ 32 đến 39) trên 8051 trong các
thiết kế cỡ nhỏ dùng làm điện tụ xuất/nhập Đối với các thiết kế cỡ lớn (với bộ nhớ
mở rộng) port0 trở thành bus địa chỉ và bus dữ liệu đa hợp
b.port1 : port1 là một port I/O (các chân 1 đến 8) trên 8051 Các chân được ký
hiệu P1.0, P1.1,…., P1.7 có thể dùng cho các thiết bị ngoài nếu cần Port1 không cóchức năng khác, vì vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bịngoài
GVHD: ThS Lâm Tăng Đức Trang:- 4 - SVTH: Võ Ngọc Tuyến
Trang 5c.port2 : port2 là một port công dụng kép (các chân 21 đến 28) trên 8051 được
dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng
d.Port3 : port3 là một port công dụng kép (các chân 10 đến 17) Các chân
port3 có nhiều chức năng riêng (mỗi chân có chức năng riêng liên quan đến các đặctrưng cụ thể của 8051)
Bảng 2.1 : Chức năng của các chân trên port3
e PSEN (Program Store Enable ): 8051/8031 có 4 tín hiệu điều khiển bus
PSEN là tín hiệu ra trên chân 29 Nó là tín hiệu điều khiển để cho phép bộ nhớchương trình mở rộng và thường được nối đến chân OE (Output Enable) của mộtEPROM để cho phép đọc các bytes mã lệnh
PSEN sẽ ở trong thời gian tìm - nạp lệnh Các mã nhị phân của chương trìnhđược đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh của 8051 để giải mãlệnh Khi thi hành chương trình trong ROM nội (8051) PSEN sẽ ở mức thụ động(logic1)
f ALE (Address Latch Enable ) :
8051 sử dụng chân 30, chân xuất tín hiệu cho phép chốt địa chỉ ALE để giải
đa hợp (Demultiplexing) bú dữ liệu và bus địa chỉ Khi Port0 sử dụng đa hợp phânALE xuất đến hiện chốt địa chỉ vào 1 thanh ghi ngoài hay nửa đầu chu kỳ bộ nhớ(Memory cycle) sau đó các thanh ghi bên ngoài trong nửa đầu của chu kỳ bộ nhớ.Sau đó, các chân port 0 dùng để xuất/nhập dữ liệu trong nửa sau chu kỳ của bộ nhớ.Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có thể được dùng là nguồn xung nhịp cho các hệ thống Nếu xung trên 8051 là 12MHzthì ALE có tần số 2MHz Chỉ ngoại trừ khi thi hành lệnh MOVX, một xung ALE sẽ
Trang 6bị mất Chân ALE cũng được làm ngõ vào cho xung lập trình cho EPROM trong 8051.
h RST (Reset) :
Ngõ vào RST (chân 9) là ngõ reset của 8051 Khi tín hiệu này được đưa lênmức cao (trong ít nhất 2 chu kỳ máy), các thanh ghi trong 8051 được tải những giátrị thích hợp để khởi động hệ thống
i Các chân XTAL1 và XTA2 :
Như trong hình vẽ, 8051 có một bộ dao động trên chip Nó thường được nối với thạch anh giữa hai chân 18 và 19 Các tụ ổn định cũng cần thiết như đã vẽ Tần
số thạch anh thông thường là 12MHz
ALE EA\
RST
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
18
19
12 MHz
P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0
17 16 15 14 13 12 11 10
RD WR T1 T0 INT1 INT0 TXD RXD
8951
29 30 31 9
Trang 7Hình 2.2: Sơ đồ chân 8051
3 Tổ chức bộ nhớ :
8051 / 8031 có cấu trúc theo bộ nhớ harvard :có những vùng cho bộ nhớ riêng biệt cho chương trình dữ liệu.Cả chương trình và dữ liệu có thể ở bên trong
8051,dù vậy chúng có thể được mở rộng bằng các thành phần ngoài lên đến
64Kbyte bộ nhớ chương trình và 64 Kbyte bộ nhớ dữ liệu
Bộ nhớ bên trong bao ROM(8051) và RAM trên chip,RAM trên chip bao gồm nhiều phần:các dãy thanh ghi(00H-1FH),phần lưu trữ địa chỉ hoá từng
bit(20H-2FH),phần lưu trữ đa dụng(30H-7FH) và các thanh ghi chức năng đặt biệt(80H-FFH)
MOV A, 5FH
Lệnh này di chuyển một byte dữ liệu bằng cách đánh địa chỉ trực tiếp để xácđịnh “địa chỉ nguồn”(5FH) Đích nhận dữ liệu được ngầm định trông mã lệnh làthanh ghi tích luỹ A
Trang 8RAM bên trong cũng có thể được truy xuất bằng cách đánh địa chỉ gián tiếpqua RO hay R1 Ví dụ,hai lệnh sau thi hành cùng nhiệm vụ như lệnh trên :
MOV R0, #5FH
MOV A, @R0
Lệnh đầu dùng địa chỉ tức thời để di chuyển giá trị 5FH vào thanh ghi R0 vàlệnh thứ hai dùng địa chỉ trực tiếp để di chuyển dữ liệu “được trỏ bởi R0” vàothanh ghi tích luỹ
địa chỉ byte địa chỉ bit
7F
302F2E2D2C2B2A292827262524232221201F1817100F080700
R0-R7
Bảng tóm tắt bản đồ vùng nhớ trên chip data 8051
GVHD: ThS Lâm Tăng Đức Trang:- 8 - SVTH: Võ Ngọc Tuyến
Trang 9địa chỉ byte địa chỉ bit
FF F0 E0 D0 B8 B0 A8 A0
99 98 90
8D 8C 8B 8A 89
TL1 TL0 TMOD
Không định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bit
88 87
83 82 81
Không định địa chỉ bit PCON
DPH DPL SP
Không định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bit
Trang 1080 87 86 85 84 83 82 81 80 PO
Tĩm tắc bộ nhớ dữ liệu trên chip
b.RAM địa chỉ hố từng bit:
8051 / 8031 chứa 210 vị trí bit được địa chỉ hố,trong đĩ 128 bit là ở các byte20H đến 2FH,và phần cịn lại trong các thanh ghi chức năng đặc biệt.ý tưởng truyxuất từng bit từng bit riêng rẽ bằng phần mềm là một đặt tính của vi điều khiển nĩichung Các bit cĩ thể được đặt, xố, AND, OR bằng một lệnh đơn.Đa số các bộ vi
xử lí địi hỏi một chuổi lệnh đọc sửa ghi để nhận được cùng kết quả
Hơn nữa,các port I/O cũng được địa chỉ từng bit làm đơn giản phần mềm xuất nhậptừng bit
128 bit ở các byte 20H đến 2FH cĩ thể được truy xuất như các byte hay các bit phụthuộc vào lệnh được dùng, ví dụ để đặt bit 67H, ta dùng lệnh sau:
SETB 67H
Chú ý rằng “địa chỉ bit 67H” là bit cĩ trọng số lớn nhất (MSB) ở “địa chỉ byte2CH” lệnh trên sẽ khơng tác động đến các bit khác của địa chỉ này
c.Các dãy thanh ghi:
32 byte thấp của bộ nhớ nội là các dãy thah ghi Bộ nhớ lệnh của
8051/8031hổ trợ 8 thanh ghi (R0 đến R7) và theo mặc định(sau khi reset hệ thống)
và các thanh ghi này ở các địa chỉ 00H-07H Lệnh sau đây sẽ đọc nội dung ở đia chỉ 05H vào thanh ghi tích luỹ
MOV A,R5
ẹãy laứ leọnh moọt byte duứng ủũa chổ thanh ghi Taỏt nhiẽn, thao taựctửụng tửù coự theồ ủửụùc thi haứnh baống leọnh 2 byte duứng ủũa chổ trửùc tieỏpnaốm trong byte thửự hai:
MOV A,05H
Caực leọnh duứng caực thanh ghi R0 ủeỏn R7 thỡ seừ ngaộn vaứ nhanh hụncaực leọnh duứng ủũa chổ trửùc tieỏp Caực giaự trũ dửừ lieọu ủửụùc duứngthửụứng xuyẽn nẽn duứng moọt trong caực thanh ghi naứy
Bank thanh ghi tớch cửùc coự theồ chuyeồn ủoồi baống caựch thay ủoồicaực bit chón bank thanh ghi trong tửứ tráng thaựi chửụng trỡnh (PSW) Giaỷsửỷ raống bank thanh ghi 3 ủửụùc tớch cửùc, leọnh sau seừ ghi noọi dung cuỷathanh ghi tớch luừy vaứo ủũa chổ 18H:
MOV R0,A
Y tưởng dùng các dãy thanh ghi cho phép “chuỷên hướng” chương trình nhanh và hiệu quả( từng phần riêng rẽ của phần mềm sẽ cĩ một hanh ghi riêng rẽ khơng phụ thuộc vào các phần khác
4./ Các thanh ghi chức năng đặc biệt:
GVHD: ThS Lâm Tăng Đức Trang:- 10 - SVTH: Võ Ngọc Tuyến
Trang 11Các thanh ghi nội của 8051/8031 được truy xuất ngầm định bởi lệnh Ví dụ lệnh “INC A” sẽ tăng nội dung của thanh ghi tích lũy A lên 1 Tác động này được ngầm định trong mã lệnh.
Các thanh ghi trong 8051/8031 được định dạng như một phần của RAM trên chip Vì vậy một thanh ghi sẽ cĩ một địa chỉ (ngoại trừ thanh ghi trực tiếp, sẽ
khơng cĩ lợi khi đặt chúng vào trong RAM trên chip).Đĩ là lý do để 8051/8031 cĩ nhiều thanh ghi Cũng như R0 đến R7, cĩ 21 thanh ghi chức năng đặc biệt (SFR: Special Funtion Register) ở vùng trên của RAM nội, từ địa chỉ 80H đến FFH Chú
ý rằng hầu hết 128 địa chỉ từ 80H đến FFH khơng được định nghĩa Chỉ cĩ 21 địa chỉ SFR là được định nghĩa
Ngoái trửứ tớch luừy (A) coự theồ ủửụùc truy xuaỏt ngầm nhử ủaừ noựi,
ủa soỏ caực SFR ủửụùc truy xuaỏt duứng ủũa chổ trửùc tieỏp chuự yự raống moọtvaứi SFR coự theồ ủửụùc ủũa chổ hoựa bit hoaởc byte Ngửụứi thieỏt keỏ phaỷithaọn tróng khi truy xuaỏt bit vaứ byte Vớ dú leọnh sau:
SETB 0E0H
Seừ Set bit 0 trong thanh ghi tớch luừy, caực bit khaực khõng thay ủoồi Ta thaỏy raống E0H ủồng thụứi laứ ủũa chổ byte cuỷa thanh ghi tớch luừy vaứ laứ ủũa chổ bit coự tróng soỏ nhoỷ nhaỏt trong thanh ghi tớch luừy Vỡ leọnh SETB chổ taực ủoọng trẽn bit, nẽn chổ coự ủũa chổ bit laứ coự hieọu quaỷ
a Từ trạng thái chương trình PSW (Program Status Word):
D2HD1HD0H
Cờ nhớ
Cờ nhớ phụ
Cờ 0Chọn dãy thanh ghi (bit 1)Chọn dãy thanh ghi (bit 0)
00=bank 0;địa chỉ 00H-07H01=bank 1:địa chỉ 08H-0FH10=bank 2:địa chỉ 10H-17H11=bank 3:địa chỉ 18H-1FH
ADD A,#1
Sẽ trả về thanh ghi tích luỹ kết quả 00H và set cờ nhớ trong PSW
Trang 12Cờ nhớ cũng cĩ thể xem như một thanh ghi 1 bit cho các lệnh thao tác trênbit Ví dụ, lệnh sẽ AND bit 25H với cờ nhớ CY và đặt kết quả trở vể cờ nhớ:
ANL C,25H
Cờ nhớ phụ:
Khi cộng các số BCD, cờ nhớ phụ (AC) được set nếu kết quả của 4 bit thấptrong khoảng 0AH đến 0FH Nừu các giá trj cộng được là số BCD, thì sau lệnhcộng cần cĩ DA A( hiệu chỉnh thập phân thanh ghi tích luỹ)để mang kết quả lớnhơn 9 trở về tầm từ 09
Cờ 0
Cờ 0 (F0)là một bit đa dụng dùng cho các ứng dụng của người dùng
Các bit chọn dãy thanh ghi
(RSO và RS1) dùng xác định dãy thanh ghi tích cực Chúng được xố sau khireset hệ thống và được thay đổi mức logic bằng phần mềm nếu cần Ví dụ, balệnh sau cho phép dãy thanh ghi 3 và di chuyển nội dung cuả thanh ghi R7 (địa chỉbyte 1FH) đến thanh ghi tích luỹ:
SETB RS1
SETB RSO
MOV A,R7
Khi chương trình được hợp dịch các địa chỉ bit đúng được thay thế cho các
ký hiệu “RS1” và “RS0” Vởy lệnh SETB RS1 sẽ giơng như lệnh SETB 0D4H
Cờ tràn
Cờ tràn (OV) được set sau phép tốn cộng hoặc trừ nếu cĩ xuất hiện một tràn
số học Khi các số cĩ dấu được cộng hoặc trừ với nhau, phần mềm cĩ thể kiểmtra bit này để xác định xem kết quả của nĩ co nằm trong tầm xác định khơng Khicác số khơng dấu khơng được cộng, bit OV cĩ thể được bỏ qua Các kết quả lớnhơn -127 hoặc nhỏ hơn +128 sẽ set cờ OV bằng 1
b Thanh ghi B:
Thanh ghi B ụỷ ủũa chổ F0H ủửụùc duứng chung vụựi thanh ghi A trong caựcpheựp toaựn nhãn vaứ chia Leọnh MUL AB seừ nhãn 2 giaự trũ khõng daỏu 8bit trong A vaứ B rồi traỷ về keỏt quỷa 16 bit trong A (byte thaỏp) vaứ B (bytecao) Leọnh DIV AB seừ chia A cho B rồi traỷ về keỏt quỷa nguyẽn trong Avaứ phần dử trong B Thanh ghi B cuừng coự theồ ủửụùc xem nhử thanh ghiủeọm ủa dúng Noự ủửụùc ủũa chổ hoựa tửứng bit baống caực ủũa chổ bit FOHủeỏn F7H
c Con trỏ ngăn xếp(stack):
Con troỷ ngaờn xeỏp (Stack Pointer) laứ moọt thanh ghi 8 bit ụỷ ủũa chổ 81H.Noự chửựa ủũa chổ cuỷa byte dửừ lieọu hieọn haứnh trẽn ủổnh cuỷa ngaờn xeỏp.Caực leọnh trẽn ngaờn xeỏp bao gồm caực thao taực caỏt dửừ lieọu vaứo ngaờnxeỏp vaứ laỏy dửừ lieọu ra khoỷi ngaờn xeỏp Leọnh caỏt dửừ lieọu vaứo ngaờnxeỏp seừ laứm taờng SP trửụực khi ghi dửừ lieọu, vaứ leọnh laỏy dửừ lieọu ra
GVHD: ThS Lâm Tăng Đức Trang:- 12 - SVTH: Võ Ngọc Tuyến
Trang 13khoỷi ngaờn xeỏp seừ laứm giaỷm SP Ngaờn xeỏp cuỷa 8051/8031 ủửụùc giửừtrong RAM noọi vaứ ủửụùc giụựi hán caực ủũa chổ coự theồ truy xuaỏt baốngủũa chổ giaựn tieỏp chuựng laứ 128 byte ủầu cuỷa 8051/8031.
Để khởi động lại SP ngăn xếp bắt đầu tại 60H, các lệnh sau đây được dùng:MOV SP,#5FH
Trên 8051/8031 ngăn xếp bị giới hạn 32 byte vì địa chỉ cao nhất của RAM trên chip là 7FH Dùng giá trị 5FH vì SP sẽ tăng lên 60H trước khi cất byte dữ liệu đầu tiên
Người thiết kế cĩ thể chon khơng phảI khởi động lại con trỏ ngăn xếp mà để
nĩ lấy giá trị mặc định khi reset hệ thống Giá trj mặc định đĩ là 07H và kết quả là ngăn đầu tiên để cất dữ liệu cĩ địa chỉ 08H Nếu phần mềm ứng dụng khơng khởi động lại SP , dãy thanh ghi 1 (cĩ thể cả 2 và 3) sẽ khơng được dùng vì vùng RAM này đã được dùng làm ngăn xếp
Ngaờn xeỏp ủửụùc truy xuaỏt trửùc tieỏp baống caực leọnh PUSH vaứ POP ủeồ lửu giửừ tám thụứi vaứ laỏy lái dửừ lieọu hoaởc ủửụùc truy xuaỏt ngầm baống caực leọnh gói chửụng trỡnh con (ACALL, LACALL) vaứ caực leọnh trụỷ về (RET,RETI) ủeồ caỏt vaứ laỏy lái boọ ủeỏm chửụng trỡnh
d Con trỏ dữ liệu(DPTR):
DPTR ủửụùc duứng ủeồ truy xuaỏt boọ nhụự ngoaứi laứ moọt thanh ghi 16 bit
ụỷ ủũa chổ 82H(DPL: byte thaỏp) vaứ 83H (DPH:byte cao) Ba leọnh sau seừ ghi55H vaứo RAM ngoaứi ụỷ ủũa chổ 1000H:
e Các thanh ghi port xuất nhập:
Caực port cuỷa 8051/8031 bao gồm Port 0 ụỷ ủũa chổ 80H, Port 1 ụỷ ủũachổ 90 H, Port 2 ụỷ ủũa chổ A0H vaứ Port 3 ụỷ ủũa chổ B0H Taỏt caỷ caực Portủều ủửụùc ủũa chổ hoựa tửứng bit ẹiều ủoự cung caỏp moọt khaỷ naờng giaotieỏp thuaọn lụùi
f Các thanh ghi định thời(timer):
8051/8031 chửựa 2 boọ ủũnh thụứi/ủeỏm 16 bit ủửụùc duứng trong vieọcủũnh thụứi hoaởc ủeỏm sửù kieọn Timer 0 ụỷ ủũa chổ 8AH (TL0:byte thaỏp) vaứ8CH (TH0:byte cao).Timer 1 ụỷ ủũa chổ 8BH (TL1:byte thaỏp) vaứ 8DH (TH1:byte cao) Vieọc vaọn haứnh timer ủửụùc set bụỷi thanh ghi Timer Mode (TMOD)
Trang 14ụỷ ủũa chổ 89H vaứ thanh ghi ủiều khieồn timer (TCON) ụỷ ủũa chổ 88H Chổcoự TCON ủửụùc ủũa chổ hoựa tửứng bit.
g Các thanh ghi port nối tiếp:
8051/8031 chửực moọt port noỏi tieỏp trẽn chip daứnh cho vieọc trao ủoồithõng tin vụựi caực thieỏt bũ noỏi tieỏp nhử maựy tớnh, modem hoaởc cho vieọcgiao tieỏp vụựi caực IC khaực coự giao tieỏp noỏi tieỏp (coự boọ chuyeồn ủoồi A/
D, caực thanh ghi dũch ) Moọt thanh ghi gói laứ boọ ủeọm dửừ lieọu noỏi tieỏp(SBUF) ụỷ ủũa chổ 99H seừ giửừ caỷ hai giửừ lieọu truyền vaứ nhaọn Khitruyền dửừ lieọu thỡ ghi lẽn SBUf, khi nhaọn dửừ lieọu thỡ ủóc SBUF Caựcmode vaọn haứnh khaực nhau ủửụùc laọp trỡnh qua thanh ghi ủiều khieồn portnoỏi tieỏp (SCON) (ủửụùc ủũa chổ hoựa tửứng bit) ụỷ ủũa chổ 98H
h Các thanh ghi ngắt:
8051/8031 coự caỏu truực 5 nguồn ngaột, 2 mửực ửu tiẽn Caực ngaột bũcaỏm sau khi reset heọ thoỏng vaứ seừ ủửụùc cho pheựp baống vieọc ghi thanh ghicho pheựp ngaột (IE) ụỷ ủũa chổ A8H mức ưu tiên ngắt được thiết lập qua thanhghi ưu tiên ngắt IP cĩ địa chỉ B8H.Cả hai thanh ghi ủửụùc ủũa chổ hoựa tửứng bit
i Các thanh ghi điều khiển nguồn:
Thanh ghi ủiều khieồn nguồn (PCON) ụỷ ủũa chổ 87H chửựa nhiều bitủiều khieồn Chuựng ủửụùc toựm taột trong baỷng sau:
Bit gaỏp ủõi toỏc ủoọ baud, neỏu ủửụùc set thỡ toỏc ủoọ baud seừ taờng gaỏp ủõi trong caực mode 1,2 vaứ 3 cuỷa port noỏi tieỏp
Khõng ủũnh nghúaKhõng ủũnh nghúaKhõng ủũnh nghúaBit cụứ ủa mục đích 1Bit cụứ ủa mục đích 2Nguồn giảm, được set để tích cực chế độ nguồn giảm,chỉ thốt khi reset hệ thốngMode nghĩ set ủeồ kớch hoát mode nghĩ chổ thoaựt khi coự ngaột hoaởc reset heọ thoỏng
Baỷng 2.3 :Thanh ghi ủiều khieồn nguồn (PCON)
5/ Bộ nhớ ngồi:
8051/8031 coự khaỷ naờng mụỷ roọng boọ nhụự ủeỏn 64K boọ nhụựchửụng trỡnh vaứ 64K boọ nhụự dửừ lieọu bẽn ngoaứi Do ủoự coự theồ duứngthẽm ROM vaứ RAM neỏu cần
GVHD: ThS Lâm Tăng Đức Trang:- 14 - SVTH: Võ Ngọc Tuyến
Trang 15Khi duứng boọ nhụự ngoaứi, port 0 khõng coứn laứ moọt port I/O thuầntuựy nửừa Noự ủửụùc hụùp kẽnh giửừa bus ủũa chổ (A0-A7) vaứ bus dửừ lieọu(D0-D7) vụựi tớn hieọu ALE ủeồ choỏt byte thaỏp cuỷa ủũa chổ khi baột ủầumoĩi chu kyứ boọ nhụự Port 2 thõng thửụứng ủửụùc duứng cho byte cao cuỷabus ủũa chổ.
Trong nửỷa ủầu cuỷa moĩi chu kyứ boọ nhụự, byte thaỏp cuỷa ủũa chổủửụùc caỏp trong port 0 vaứ ủửụùc choỏt baống xung ALE Moọt IC choỏt74HC373 (hoaởc tửụng ủửụng) seừ giửừ byte ủũa chổ thaỏp trong phần coứn láicuỷa chu kyứ boọ nhụự Trong nửỷa sau cuỷa chu kyứ boọ nhụự port 0 ủửụùcduứng nhử bus dửừ lieọu vaứ ủửụùc ủóc hoaởc ghi tuứy theo leọnh
a/ Truy xuất bộ nhớ chương trình ngồi :
Boọ nhụự chửụng trỡnh ngoaứi laứ một IC ROM ủửụùc pheựp bụỷi tớnhieọu PSEN
Moọt chu kyứ maựy cuỷa 8051/8031 coự 12 chu kyứ xung nhũp Neỏu boọdao ủoọng trẽn chip ủửụùc laựi bụỷi moọt thách anh 12MHz thỡ chu kyứ maựykeựo daứi 1s Trong moọt chu kyứ maựy seừ coự 2 xung ALE vaứ 2 byte ủửụùcủóc tửứ boọ nhụự chửụng trỡnh (neỏu leọnh chỉ cĩ 1 byte thỡ byte thửự 2ừ ủửụùcloái boỷ) Giaỷn ủồ thụứi gian cuỷa moọt lần laỏy leọnh ủửụùc veừ ụỷ hỡnh2.5:
Hình 2.4:Giao tiếp giữa 8051 và EPROM
Port 0
EA 8051 ALE
Port 2 PSEN
D0-D7 A0-A7 EPROM
A8-A15 OE
D Q 74HC373 G
Trang 16
Hình 2.5:Giản đồ thời gian đọc bộ nhớ chương trình ngồi.
b/ Truy xuất bộ nhớ dữ liệu ngồi :
Boọ nhụự dửừ lieọu ngoaứi laứ moọt boọ nhụự RAM ủửụùc cho pheựpghi/ủóc baống caực tớn heọu WR vaứ RD (caực chãn P3.6 vaứ P3.7).Chổ coựmoọt caựch truy xuaỏt boọ nhụự dửừ lieọu ngoaứi laứ vụựi leọnh MOVX duứngcon troỷ dửừ lieọu (DPTR) 16 bit hoaởc R0 vaứ R1 xem nhử thanh ghi ủũa chổ
Keỏt noỏi bus ủũa chổ vaứ bus dửừ lieọu giửừa RAM vaứ 8051/8031 cuừnggioỏng EPROM vaứ do ủoự cuừng coự theồ lẽn ủeỏn 64 byte boọ nhụự RAM.Ngoaứi ra, chãn RD cuỷa 8051/8031 ủửụùc noỏi tụựi chãn cho pheựp xuaỏt(OE) cuỷa RAM vaứ chãn WR ủửụùc noỏi tụựi chãn ghi (WR) cuỷa RAM
Hình2.6: Giao tiếp giữa 8051/8031 và RAM
Gian đồ thời gian cho lệnh đọc bộ nhớ dữ liệu ngồi được vẽ trên hình sau đối với lệnh MOVX A,@DPTR:
GVHD: ThS Lâm Tăng Đức Trang:- 16 - SVTH: Võ Ngọc Tuyến
Port 0
8051 EA
ALE
Port 2
RD WR
Trang 17Hình 2.7:Giản đồ thời gian của lệnh MOVX
Giaỷn ủoà thụứi gian cho leọnh ghi (MOVX @DPTR, A) cuừng tửụng tửùchổ khaực ủửụứng WR seừ thay vaứo ủửụứng RD vaứ dửừ lieọu ủửụùc xuaỏt ratreõn port 0 (RD vaón giửừ mửực cao)
c/ Giải mã địa chỉ:
Nếu có nhiều EPROM hoặc có nhiều RAM hoặc cả hai giao tiếp với 8051 ta
cần giãi mã địa chỉ Thí dụ, nếu các RAM và ROM 8 bit được sử dụng, địa chỉ phảiđược giãi mã để chọn IC nhớ này trên các giới hạn 8K: 0000H-1FFFH, 2000H –3FFFH,…Một IC giải mã điển hình là 74HC138 với các ngõ ra được nối với ngõvào chọn chip CS của IC nhớ (như hình) cho bộ nhớ có nhiều EPROM 2764(8K)
và RAM 6264 (8K) Do đường cho phép riêng rẽ (PSEN cho bộ nhớ chương trình,
RD và WR cho bộ nhớ dữ liệu), 8051 có thể quản lý bộ nhớ đến 64K với EPROM
và 64 K cho RAM
Trang 18Hình 2.8:Giãi mã địa chỉ (Address Decording)
6/ Lệnh reset:
8051/8031 ủửụùc reset baống caựch giửừ chãn RST ụỷ mửực cao tối thiểu
2 chu kyứ maựy vaứ traỷ noự về mức thaỏp RST coự theồ ủửụùc kớch khi caỏpủieọn duứng moọt mách R-C
EPROM 8KBytes
Select another EPROM/RAM
Trang 19Trạng thái của tất cả các thanh ghi của 8051/8031 sau khi reset hệ thống được tĩm tắt trong bảng sau:
Đếm chương trìnhThanh chứa A Thanh ghi B
PSWSPDPTRPort 0-3IPIECác thanh ghi định thời
SCONSBUFPCON(HMOS)PCON(CMOS)
0000H00H00H00H07H0000HFFHxxx00000B0xx00000B00H00H00H0xxxxxxB0xxx0000B
Bảng 2.3 trạng thái các thanh ghi sau khi reset
Quan tróng nhaỏt trong caực thanh ghi trẽn laứ thanh ghi ủeỏm chửụngtrỡnh, noự ủửụùc ủaởt lái 0000H Khi RST trụỷ lái mửực thaỏp, vieọc thi haứnhchửụng trỡnh luõn baột ủầu ụỷ ủũa chổ ủầu tiẽn trong boọ nhụự trong chửụngtrỡnh: ủũa chổ 0000H Noọi dung cuỷa RAM trẽn chip khõng bũ thay ủoồi bụỷileọnh reset
7 Hoạt động của bộ định thời (timer)
7.1 Giới thiệu:
Moọt ủũnh nghúa ủụn giaỷn cuỷa timer laứ moọt chuoĩi caực flip-flop chiaủõi tần soỏ noỏi tieỏp vụựi nhau, chuựng nhaọn tớn hieọu vaứo laứm nguồnxung nhũp Ngoừ ra cuỷa tần soỏ cuoỏi laứm nguồn xung nhũp cho flip-flopbaựo traứn cuỷa timer (flip-flop cụứ) Giaự trũ nhũ phãn trong caực flip-flop cuỷatimer coự theồ xem nhử soỏ ủeỏm soỏ xung nhũp (hoaởc caực sửù kieọn) tửứ khikhụỷi ủoọng timer Vớ dú timer 16 bit seừ ủeỏm lẽn tửứ 0000H ủeỏn FFFFH.Cụứ baựo traứn seừ lẽn 1 khi soỏ ủeỏm traứn tửứ FFFFH ủeỏn 0000H
8051/8031 cú 2 timer 16 bit, mỗi timer cú bốn cỏch làm việc Người ta sử dụng cỏctimer để : a) định khoảng thời gian, b) đếm sự kiện c) tạo tốc độ baund cho port nối tiếp trong 8051/8031
Trong caực ửựng dúng ủũnh khoaỷng thụứi gian, ngửụứi ta laọp trỡnh timer
ụỷ moọt khoaỷng ủều ủaởn vaứ ủaởt cụứ traứn timer Cụứ ủửụùc duứng ủeồủồng boọ hoựa chửụng trỡnh ủeồ thửùc hieọn moọt taực ủoọng nhử kieồm tra
Trang 20tráng thaựi cuỷa caực cửỷa ngoừ vaứo hoaởc gửỷi caực sửù kieọn ra caực ngoừ ra.Caực ửựng dúng khaực coự theồ sửỷ dúng vieọc táo xung nhũp ủều ủaởn cuỷatimer ủeồ ủo thụứi gian trõi qua giửừa hai sửù kieọn (vớ dú : ủo ủoọ roọngxung).
ẹeỏm sửù kieọn duứng ủeồ xaực ủũnh soỏ lần xaồy ra cuỷa moọt sửù kieọn.Moọt “sửù kieọn” laứ baỏt cửự taực ủoọng ngoaứi naứo coự theồ cung caỏp moọtchuyeồn tráng thaựi trẽn moọt chãn cuỷa 8051/8031 Caực timer cuừng coựtheồ cung caỏp xung nhũp toỏc ủoọ baud cho port noỏi tieỏp trong 8051/8031
Truy xuaỏt timer cuỷa 8051/8031 duứng 6 thanh ghi chửực naờng ủaởc bieọtcho trong baỷng sau:
bitTCON
Byte thaỏp cuỷa timer1
Byte cao cuỷa timer 0Byte cao cuỷa timer 1
88H89H8AH8BH8CH8DH
Coự Khõng Khõng Khõng Khõng Khõng
Bảng 2.4: Thanh ghi chức năng đặc biệt dùng timer.
7.2 Thanh ghi chế độ timer (TMOD)
Thanh ghi TMOD chửựa hai nhoựm 4 bit duứng ủeồ ủaởt cheỏ ủoọ laứm vieọc cho timer 0 vaứ timer 1
Bit Tẽn Timer Mõ taỷ
11
0000
Bit (Mụỷ) coồng, khi lẽn 1 timer chổ cháy khi INT1
ụỷ mửực cao.Bit Bit chọn chế độ counter/timer
1 bộ đếm sự kiện
0 bộ định khoảng thời gianBit 1 của chế độ (mode)Bit 0 của chế độ
00:chế độ 0 : timer 13 bit01: chế độ 1 :timer 16 bit10: chế độ 2 :tự động nạp lại 8255A bit11: chế độ 3 :tỏch timer
Bit mở cổng Bit chọn counter/timerBit 1 của chế độ
GVHD: ThS Lâm Tăng Đức Trang:- 20 - SVTH: Võ Ngọc Tuyến
Trang 21Bit 0 của chế độ
Bảng 2.5: Túm tắt thanh ghi TMOD
7.3 Thanh ghi ủiều khieồn timer (TCON)
Thanh ghi TCON chửựa caực bit tráng thaựi vaứ caực bit ủiều khieồn cho timer 0 vaứ timer 1
89H88H
Cụứ baựo traứn timer 1 ẹaởt bụỷi phần cửựng
khi traứn, ủửụùc xoựa bụỷi phần mềm hoaởc phần
cửựng khi boọ xửỷ lyự chổ ủeỏn chửụng trỡnh phúc vú
ẹaởt/xoựa baống phần mềm ủề ngaột ngoaứi tớch cửùc cánh xuoỏng/mửực thaỏp
Cụứ cánh ngaột 0 bẽn ngoaứi
Cụứ kieồu ngaột 0 bẽn ngoaứi
Baỷng 2.6: Toựm taột thanh ghi TCON
7 4 Caực cheỏ ủoọ timer.
a/ Cheỏ ủoọ 0, cheỏ ủoọ timer 13 bit.
ẹeồ tửụng thớch vụựi 8048 (coự trửựụực 8051)
Ba bit cao cuỷa TLX (TL0 / TL1) khõng duứng
Xung nhũp
Timer Cụứ baựo traứn
b/ Cheỏ ủoọ 1- cheỏ ủoọ timer 16 bit :
Hoát ủoọng nhử timer 16 bit ủầy ủuỷ
(5 bit) (8 bit)
TFx
Trang 22Cụứ baựo traứn laứ bit TFx trong TCON coự theồ ủóc hoaởc ghi baống phầm mềm.
MSB cuỷa giaự trũ trong caực thanh ghi timer laứ bit 7 cuỷa THx vaứ LBS laứ bit 0 cuỷa TLx Caực thanh ghi timer (TLx/THx) coự theồ ủửụùc ủóc hoaởc ghi baỏt cửự luực naứo baống phầm mềm
Xung nhũp
Timer Cụứ baựo traứn
c/ Cheỏ ủoọ 0- cheỏ ủoọ tửù ủoọng náp lái 8 bit.
TLx hoát ủoọng nhử moọt timer 8 bit, trong khi ủoự THx vaĩn giửừ
nguyẽn giaự trũ ủửụùc náp Khi soỏ ủeỏm traứn tửự FFH ủeỏn 00H, khõng nhửừng cụứ timer ủửụùc set maứ giaự trũ trong THx ủồng thụứi ủửụùc náp vaứo TLx Vieọc ủeỏm tieỏp túc tửứ giaự trũ naứy lẽn ủeỏn FFH xuoỏng 00H vaứ náp lái cheỏ ủoọ naứy raỏt thõng dúng vỡ sửù traứn timer xaỷy ra trong nhửừng khoaỷng thụứi gian nhaỏt ủũnh vaứ tuần hoaứn moọt khi ủaừ khụỷi ủoọngTMOD vaứ THx
Xung nhũp
timer Cụỷ baựo traứn
Náp lái
d/ Cheỏ ủoọ 3- cheỏ ủoọ taựch timer:
Timer 0 taựch thaứnh hai timer 8 bit (TL0 vaứ TH0), TL0 coự cụứ baựo traứn laứ TF0 vaứ TH0 coự cụứ baựo traứn laứ TF1
Timer 1 ngửng ụỷ cheỏ ủoọ3, nhửng coự theồ ủửụùc khụỷi ủoọng baống caựch chuyeồn sang cheỏ ủoọ khaực Giụựi hán duy nhaỏt laứ cụứ baựo traứn TF1 khõng coứn bũ taực ủoọng khi timer 1 bũ traứn vỡ noự ủaừ ủửụùc noỏi tụựi TH0
Khi timer 0 ụỷ cheỏ ủoọ 3, coự theồ cho timer 1 cháy vaứ ngửng baống caựch chuyeồn noự ra ngoaứi vaứ vaứo cheỏ ủoọ 3 Noự vaĩn coự theồ ủửụùc sửỷ dúng bụỷi port noỏi tieỏp nhử boọ táo toỏc ủoọ baund hoaởc noự coự theồ ủửụùc sửỷ dúng baống baỏt cửự caựch naứo khõng cần ngaột (vỡ noự khõng coứn ủửụùc noỏi vụựi TF1)
GVHD: ThS Lâm Tăng Đức Trang:- 22 - SVTH: Võ Ngọc Tuyến
TL1 TH1
Trang 237.5 Nguồn táo xung nhũp.
Coự hai nguồn táo xung nhũp coự theồ coự,ủượcù chón baống caựch ghi vaứo bit C/T (counter/timer) trong TMOD khi khụỷi ủoọng timer Moọt nguồn táo xung nhũp duứng cho ủũnh khoaỷng thụứi gian, caựi khaực cho ủeỏm sửù kieọn
Crytal
Timer Clock T0 or T1
pin
0=Up (Internal Timing)1=Down (Event Counting)
Nguồn xung táo nhũp
- ẹũnh khoaỷng thụứi gian (interval timing)
Neỏu C/T =0 hoát ủoọng timer liẽn túc ủửụùc chón vaứ timer ủửụùcduứng cho vieọc ủũnh khoaỷng thụứi gian Luực ủoự, timer laỏy xung nhũp tửứboọ dao ủoọng trẽn chip Boọ chia 12 ủửụùc thẽm vaứo ủeồ giaỷm tần soỏ xungnhũp ủeỏn giaự trũ thớch hụùp cho phần lụựn caực ửựng dúng Nhử vaọy tháchanh 12 MHz seừ cho toỏc ủoọ xung nhũp timer 1 MHz.Bao traứn timer xaỷy ra saumoọt soỏ (coỏ ủũnh) xung nhũp, phú thuoọc vaứo giaự trũ ban ủầu ủửụùc nápvaứo caực thanh ghi timer TLx/THx
- ẹeỏm sửù kieọn (Event counting)
- Neỏu C/T=1, timer laỏy xung nhũp tửứ nguồn bẽn ngoaứi Trong hầuheỏt caực ửựng dúng nguồn bẽn ngoaứi naứy cung caỏp cho timer moọtxung khi xaỷy ra moọt “sửù kieọn “, timer duứng ủeỏm sửù kieọn ủửụùc xaựcủũnh baống phần mềm baống caựch ủóc caực thanh ghi TLx/THx vỡ giaựtrũ 16 bit trong caực thanh ghi naứy taờng thẽm 1 cho moĩi sửù kieọn
On chip Osillator
12
T
C /
Trang 24Nguồn xung nhũp ngoaứi coự tửứ thay ủoồi chức naờng cuỷa caực chãnport 3 Bit 4 cuỷa port 3 (P3.4) duứng laứm ngoừ vaứo táo xung nhũp bẽn trongtimer 0 vaứ ủửụùc gói laứ “T0” Vaứ P3.5 hay “T1” laứ ngoừ vaứo táo xungnhũp cho timer 1.
7.6.
Baột ủầu dửứng vaứ ủiều khieồn caực timer.
Phửụng phaựp mụựi ủụn giaỷn nhaỏt ủeồ baột ủầu (cho cháy) vaứ dửứngcaực timer laứ duứng caực bit ủiều khieồn cháy :TRx trong TCON, TRx bũ xoựasau khi reset heọ thoỏng Nhử vaọy, caực timer theo maởc nhiẽn laứ bũ caỏm (bũdửứng) TRx ủửụùc ủaởt lẽn 1 baống phần mềm ủeồ cho caực timer cháy
Xung nhũp
0=lẽn : timer dửứng1=xuoỏng : timer cháy
Cho cháy vaứ dửứng timer
Vỡ TRx ụỷ trong thanh ghi TCON coự ủũa chổ bit, nẽn deĩ daứng cho vieọc
ủiều khieồn caực timer trong chửụng trỡnh.Vớ dú: cho timer 0 cháy baống
leọnh : SETB TR0 vaứ dửứng baống leọnh SETB TR0.
Trỡnh biẽn dũch seừ thửùc hieọn vieọc chuyeồn ủoồi kyự hieọu cần thieỏt tửứ
“TR0” sang ủũa chổ bit ủuựng SETB TR0 chớnh xaực gioỏng nhử SETB 8CH 7.7.
Khụỷi ủoọng vaứ truy xuaỏt caực thanh ghi timer.
Thõng thửụứng caực thanh ghi ủửụùc khụỷi ủoọng moọt lần ụỷ ủầuchửụng trỡnh ủeồ ủaởt cheỏ ủoọ laứm vieọc cho ủuựng Sau ủoự trong thãnchửụng trỡnh caực timer ủửụùc cho cháy, dửứng, caực bit cụứ ủửụùc kieồm travaứ xoựa, caực thanh ghi timer ủửụùc ủóc vaứ cập nhaọt theo ủoứi hoỷi cuỷacaực ửựng dúng
TMOD laứ thanh ghi thửự nhaỏt ủửụùc khụỷi ủoọng vỡ noự ủaởt cheỏ ủoọ
hoát ủoọng Vớ dú caực leọnh sau khi khụỷi ủoọng timer 1 nhử timer 16 bit(cheỏ ủoọ 1) coự xung nhũp tửứ boọ dao ủoọng trẽn chớp cho vieọc ủũnhkhoaỷng thụứi gian
MOV TMOD,#00010000B
Leọnh naứy seừ ủaởt M1=0 vaứ M0=1 cho cheỏ ủoọ 1, C/T=0 vaứ GATE=0
cho xung nhũp noọi vaứ xoựa caực bit cheỏ ủoọ timer 0 Dú nhiẽn timer thaọt sửù
khõng baột ủầu ủũnh thụứi cho ủeỏn khi bit ủiều khieồn cháy TR1 ủửụùc ủaởt
lẽn 1
Neỏu cần soỏ ủeỏm ban ủầu, caực thanh ghi timer TL1/TH1 cuừng phaỷi ủửụùc
khụỷi ủoọng Nhụự lái laứ caực timer ủeỏm lẽn vaứ ủaởt cụứ baựo traứn khi coựsửù chuyeồn tieỏp
GVHD: ThS Lâm Tăng Đức Trang:- 24 - SVTH: Võ Ngọc Tuyến
TRx
Trang 25FFFFH sang 0000H.
- ẹóc timer ủang cháy
Trong moọt soỏ ửựng dúng cần ủóc giaự trũ trong caực thanh ghi timerủang cháy Vỡ phaỷi ủóc 2 thanh ghi timer “sai pha” coự theồ xaồy ra neỏu bytethaỏp traứn vaứo byte cao giửừa hai lần ủóc Giaự trũ coự theồ ủóc ủửụùckhõng ủuựng Giaỷi phaựp laứ ủóc byte cao trửụực, keỏ ủoự ủóc byte thaỏprồi ủóc byte cao lái moọt lần nửừa Neỏu byte cao ủaừ thay ủoồi thỡ laọp láicaực hoát ủoọng ủóc
7.8 Caực khoaỷng ngaộn vaứ caực khoaỷng daứi.
Daừy caực khoaỷng thụứi gian coự theồ ủũnh thụứi laứ bao nhiẽu ? vaỏnủề naứy ủửụùc khaỷo saựt vụựi 8051/8031 hoát ủoọng vụựi tần soỏ12MHz.Nhử vaọy xung nhũp cuỷa caực timer coự tần soỏ laự 1 MHz
Khoaỷng thụứi gian ngaộn nhaỏt coự theồ coự bũ giụựi hán khõng chổ bụỷi tầnsoỏ xung nhũp cuỷa timer maứ coứn bụỷi phần mềm Do aỷnh hửụỷng cuỷathụứi khoaỷng thửùc hieọn moọt leọnh Leọng ngaộn nhaỏt 8051/8031 laứ moọtchu kyứ maựy hay 1s Sau ủãy laứ baỷng toựm taột caực kyừ thuaọt ủeồ táonhửừng khoaỷng thụứi gian coự chiều daứi khaực nhau (vụựi giaỷ sửỷ xung nhũpcho 8051/8031 coự tần soỏ 12 MHz)
Khoaỷng thụứi gian toỏi ủa Kyừ thuaọt
10
256
65535
Khõng giụựi hán
- Baống phần mềm
- Timer 8 bit vụựi tửù ủoọng náp lái
- Timer 16 bit
- Timer 16 bit coọng vụựi caực voứng laọp phần mềm
Caực kyừ thuaọt ủeồ laọp trỡnh caực khoaỷng thụứi gian (FOSC=12 MHz)
8 Hoát ủoọng port noỏi tieỏp.
8.1 Giụựi thieọu.
8051/8031 coự moọt port noỏi tieỏp trong chip coự theồ hoát ủoọng ụỷnhiều cheỏ ủoọ khaực trẽn moọt daừy tần soỏ roọng Chửực naờng chuỷ yeỏucuỷa moọt port noỏi tieỏp laứ thửùc hieọn chuyeồn ủoồi song song sang noỏi tieỏpvụựi dửừ lieọu xuaỏt vaứ chuyeồn ủồi noỏi tieỏp sang song song vụựi dửừ lieọunhaọp
Truy xuaỏt phần cửựng ủeỏn port noỏi tieỏp qua caực chãn TxD vaứRxD Caực chãn naứy coự caực chửực naờng khaực vụựi hai bit cuỷa port 3 P3
ụỷ chãn 11 (TxD) vaứ P3.0 ụỷ chãn 10 (RxD)
Port noỏi tieỏp cho hoát ủoọng song cõng (full duplex : thu vaứ phaựtủồng thụứi) vaứ ủeọm luực thu (receiver buffering) cho pheựp moọt kyự tửù seừủửụùc thu vaứ ủửụùc giửừ trong khi kyự tửù thửự hai ủửụùc nhaọn Neỏu CPU
Trang 26ủóc kyự tửù thửự nhaỏt trửụực khi kyự tửù thửự hai ủửụùc thu ủầy ủuỷ thỡ dửừlieọu seừ khõng bũ maỏt.
Hai thanh ghi chửực naờng ủaởc bieọt cho pheựp phần mềm truy xuaỏtủeỏn port noỏi tieỏp laứ : SBUF vaứ SCON Boọ ủeỏm port noỏi tieỏp (SBUF) ụỷủịa chổ 99H thaọt sự laứ hai boọ ủeỏm.Vieỏt vaứo SBUF ủeồ truy xuaỏt dửừ lieọuthu ủửụùc ẹãy laứ hai thanh ghi riẽng bieọt thanh ghi chổ ghi ủeồ phaựt vaứthanh ghi ủeồ thu
TxD (P3.1) RxD (P3.0)
CLK
Q D
CLKXung nhũp toỏc ẹoọ baud (thu)Xung nhũp toỏc
ẹoọ baud (thu)
Hỡnh 2.10: Sụ ủồ port noỏi tieỏp.
Thanh ghi ủiều khieồn port noỏi tieỏp (SCON) ụỷ ủũa chổ 98H laứ thanhghi coự ủũa chổ bit chửựa caực bit tráng thaựi vaứ caực bit ủiều khieồn Caực bitủiều khieồn ủaởt cheỏ ủoọ hoát ủoọng cho port noỏi tieỏp, vaứ caực bit trángthaựi baựo caựo keỏt thuực vieọc phaựt hoaởc thu kyự tửù Caực bit tráng thaựicoự theồ ủửụùc kieồm tra baống phần mềm hoaởc coự theồ ủửụùc laọp trỡnh ủeồtáo ngaột
Tần soỏ laứm vieọc cuỷa port noỏi tieỏp coứn gói laứ toỏc ủoọ baund coựtheồ coỏ ủũnh (laỏy tửứ boọ giao ủoọng cuỷa chip) Neỏu sửỷ dúng toỏc ủoọbaund thay ủoồi, timer 1 seừ cung caỏp xung nhũp toỏc ủoọ baund vaứ phaỷiủửụùc laọp trỡnh
8.2 Thanh ghi ủiều khieồn port noỏi tieỏp.
Cheỏ ủoọ hoát ủoọng cuỷa port noỏi tieỏp ủửụùc ủaởt baống caựch ghivaứo thanh ghi cheỏ ủoọ port noỏi tieỏp (SCON) ụỷ ủũa chổ 98H Sau ủãy caựcbaỷng toựm taột thanh ghi SCON vaứ caực cheỏ ủoọ cuỷa port noỏi tieỏp :
Bit Kyự hieọu ẹũa chổ Mõ taỷ
SCON.7 SM0 9FH Bit 0 cuỷa cheỏ ủoọ port noỏi tieỏpSCON.6 SM1 9EH Bit 1 cuỷa cheỏ ủoọ port noỏi tieỏpSCON.5 SM2 9DH Bit 2 cuỷa cheỏ ủoọ 2 noỏi tieỏp
GVHD: ThS Lâm Tăng Đức Trang:- 26 - SVTH: Võ Ngọc Tuyến
SUBF
SBUF (chỉ đọc)
BUS nội 8051/8031
SBUF (chỉ đọc)
Trang 27cho pheựp truền thõng ủaừ xửỷlyự
trong caực cheỏ ủoọ 2 vaứ 3 ;RIseừ
khõng bũ taực ủoọng neỏu bitthửự
9 thu ủửụùc laứ 0
1 ủeồ thu (nhaọn) caực kyự tửùSCON.3 TB8 9BH Bit 8 phaựt, bit thửự 9 ủửụùc phaựt
caực cheỏ ủoọ 2 vaứ 3; ủửụùc ủaởtvaứ xoựa baống phần mềmSCON.2 RB8 9AH Bit 8 thu, bit thửự 9 thu ủửụùcSCON.1 TI 99H Cụứ ngaột phaựt ẹaởt lẽn 1 khi
keỏt thuực phaựt kyự tửù; ủửụùcxoựa
phần mềm
Keỏt thuực thu kyự tửù; ủửụùcxoựa
Baống phần mềm
Baỷng 2.7:Toựm taột thanh ghi cheỏ ủoọ port noỏi tieỏp SCON.
SM0 SM1 Cheỏ ủoọ Mõ taỷ Toỏc ủoọ baud
0 0 0 Thanh ghi dũch Coỏ ủũnh (Fosc/12)
0 1 1 UART 8 bit Thay ủoồi (ủaởt baống timer)
1 0 2 UART 9 bit Coỏ ủũnh (Fosc/12 hoaởc Fosc/64)
1 1 3 UART 9 bit Thay ủoồi (ủaởt baống timer)
Baỷng 2.8: Caực cheỏ ủoọ port noỏi tieỏp.
Trửụực khi sửỷ dúng port noỏi tieỏp, phaỷi khụỷi ủoọng SCON cho ủuựngcheỏ ủoọ Vớ dú, leọnh sau:
MOV SCON,#01010010B
Khụỷi ủoọng port noỏi tieỏp cho cheỏ ủoọ 1 (SM0/SM1=0/1), cho pheựpboọ thu (REN=1) vaứ ủaởt cụứ ngaột phaựt (TP=1) ủeồ chổ boọ phaựt saỹn saứnghoát ủoọng
8.3 Khụỷi ủoọng vaứ truy xuaỏt caực thanh ghi coồng noỏi tieỏp.
a Cho pheựp thu:
Bit cho pheựp boọ thu (REN = Receiver Enable) trong SCON phaỷi ủửụùcủaởt lẽn 1 baống phần mềm ủeồ cho pheựp thu caực kyự tửù Thõng thửụứng
Trang 28thửùc hieọn vieọc naứy ụỷ ủầu chửụng trỡnh khi khụỷi ủoọng coồng noỏi tieỏp,timer Coự theồ thửùc hieọn vieọc naứy theo hai caựch Leọnh :
c Thẽm 1 bit parity:
Thửụứng sửỷ dúng bit dửừ lieọu thửự 9 ủeồ thẽm parity vaứo kyự tửù.Nhử ủaừ xeựt ụỷ caực chửụng trửụực, bit P trong tửứ tráng thaựi chửụng trỡnh(PSW) ủửụùc ủaởt lẽn 1 hoaởc bũ xoựa bụỷi chu kyứ maựy ủeồ thieỏt laọp kieồmtra chaỹn vụựi 8 bit trong thanh tớch luừy
d Caực cụứ ngaột:
Hai cụứ ngaột thu vaứ phaựt (RI vaứ TI) trong SCON ủoựng moọt vai troứquan tróng truyền thõng noỏi tieỏp duứng 8051/8031 Caỷ hai bit ủửụùc ủaởtlẽn 1 baống phần cửựng, nhửng phaỷi ủửụùc xoựa baống phần mềm
8.4 Toỏc ủoọ baud port noỏi tieỏp.
Nhử ủaừ noựi, toỏc ủoọ baund coỏ ủũnh ụỷ caực cheỏ ủoọ 0 vaứ 2 Trongcheỏ ủoọ 0 noự luõn luõn laứ tần soỏ dao ủoọng trẽn chip ủửụùc chia cho 12 Thõng thửụứng thách anh aỏn ủũnh tần soỏ dao ủoọng trẽn chip cuỷa8051/8031 nhửng cuừng coự theồ sửỷ dúng nguồn xung nhũp khaực Giaỷ sửỷvụựi tần soỏ dao ủoọng danh ủũnh laứ 12 MHz, tỡm toỏc ủoọ baud cheỏ ủoọ 0 laứ
1 MHz
Maởc nhiẽn, sau khi reset heọ thoỏng, toỏc ủoọ baud cheỏ ủoọ laứ 2 tần soỏ boọ dao ủoọng chia cho 64 Toỏc ủoọ baud cuừng aỷnh hửụỷng bụỷi 1 bit trong thanh ghi ủiều khieồn nguồn cung caỏp (PCON) Bit 7 cuỷa PCON laứ bit SMOD ẹaởt bit SMOD lẽn moọt laứm gaỏp ủõi toỏc ủoọ baud trong cheỏ ủoọ 1,2 vaứ 3 Trong cheỏ ủoọ 2, toỏc ủoọ baud coự theồ bũ gaỏp ủõi tửứ giaự trũ maởc nhiẽn cuỷa 1/64 tần soỏ dao ủoọng (SMOD=0) ủeỏn 1/32 tần soỏ dao ủoọng (SMOD=1).
Trang 29SMOD=0
SMOD=1
b Cheỏ ủoọ 2
SMOD=0
SMOD=1
c Cheỏ ủoọ 1 vaứ 3
Hỡnh 2.12 Caực nguồn táo xung nhũp cho port noỏi tieỏp.
Vỡ PCON khõng ủửụùc ủũnh ủũa chổ theo bit, nẽn ủeồ ủaởt bit SMODlẽn 1 cần phaỷi theo caực leọnh sau:
MOV A,PCON laỏy giaự trũ hieọn thụứi cuỷa PCON
SETB ACC.7 ủaởt bit 7 (SMOD) lẽn 1
MOV PCON,A ghi giaự trũ ngửụùc về PCON
Caực toỏc ủoọ baud trong caực cheỏ ủoọ 1 vaứ 3 ủửụùc xaực ủũnh baốngtoỏc ủoọ traứn cuỷa timer 1 Vỡ timer hoát ủoọng ụỷ tần soỏ tửụng ủoỏi cao,traứn timer ủửụùc chia thẽm cho 32 (hay 16 neỏu SMOD=1) trửụực khi cung caỏpxung nhũp toỏc ủoọ baud cho port noỏi tieỏp
9 Hoát ủoọng ngaột:
Ngaột laứ hoát ủoọng ngửứng tám thụứi moọt chửụng trỡnh naứy ủeồ thihaứnh moọt chửụng trỡnh khaực Caực ngaột coự moọt vai troứ quan tróng trongthieỏt keỏ vaứ khaỷ naờng thửùc thi cuỷa vi ủiều khieồn Chuựng cho pheựp heọthoỏng ủaựp ửựng khõng cuứng luực tụựi moọt cõng vieọc vaứ giaỷi quyeỏtmoọt cõng vieọc ủoự trong khi moọt chửụng trỡnh khaực ủang thửùc thi
Moọt heọ thoỏng ủửụùc ủiều khieồn baống ngaột cho aỷo giaực laứ laứmnhiều vieọc ủồng thụứi Dú nhiẽn CPU moĩi lần khõng theồ thửùc thi moọtchửụng trỡnh ủeồ thửùc thi moọt chửụng trỡnh khaực, rồi quay về chửụng trỡnhủầu khi coự yẽu cầu ngaột Chửụng trỡnh giaỷi quyeỏt ngaột ủửụùc gói laứchửụng trỡnh phúc vú ngaột (ISR : Interrupt Sevice Reutine)
9.1 Toồ chửực ngaột.
ễỷ 8051 coự 5 nguồn ngaột:
- 2 ngaột ngoaứi
- 2 ngaột tửứ timer
- 1 ngaột port noỏi tieỏp
Taỏt caỷ caực ngaột seừ khõng ủửụùc ủaởt sau khi reset heọ thoỏng vaứcho pheựp ngaột riẽng reừ bụỷi phần mềm
32
16
Trang 30a Cho pheựp vaứ khõng cho pheựp ngaột.
Moĩi nguồn ngaột ủửụùc cho pheựp hoaởc khõng cho pheựp tửứng ngaộtmoọt qua thanh ghi chửực naờng ủaởc bieọt coỏ ủũnh ủũa chổ bit IE (InterruptEnable : cho pheựp ngaột) ụỷ ủũa chổ A8H Cuừng nhử caực bit cho pheựp moĩinguồn ngaột, coự moọt bit cho pheựp hoaởc caỏm toaứn boọ ủửụùc xoựa ủeồcaỏm taỏt caỷ caực ngaột hoaởc ủửụùc ủaởt lẽn 1 ủeồ cho pheựp taỏt caỷ caựcngaột
Bit Kyự hieọu ẹũa chổ bit Mõ taỷ (1=cho pheựp,0=caỏm)
AFHAEHADHACHABHAAHA9H
A8H
Cho pheựp hoaởc caỏm toaứn boọ
Khõng ủửụùc ủũnh nghúaCho pheựp ngaột tửứ timer 2 (8052)
Cho pheựp ngaột Port noỏi tieỏp Cho pheựp ngaột tửứ timer 1Cho pheựp ngaột ngoaứi 1Cho pheựp ngaột tửứ timer 0Cho pheựp ngaột ngoaứi 0 Toựm taột thanh ghi IE
b ệu tiẽn ngaột:
Moĩi nguồn ngaột ủuụùc laọp trỡnh riẽng vaứo moọt trong hai mửực ửu tiẽn qua thanh ghi chửực naờng ủaởc bieọt ủửụùc ủũa chổ bit Ip (Interrupt priority: ửu tiẽn ngaột) ụỷ ủũa chổ B8H
hieọu
ẹũa chổ bit Mõ taỷ (1=mửực cao hụn,0=mửực
thaỏp)IP.7
BDHBCHBBHBAHB9H B8H
Khõng ủửụùc ủũnh nghúaKhõng ủửụùc ủũnh nghúa
ệu tiẽn cho ngaột tửứ timer 2 (8052)
ệu tiẽn cho ngaột Port noỏi tieỏp
ệu tiẽn cho ngaột tửứ timer 1
ệu tiẽn cho ngaột ngoaứi
ệu tiẽn cho ngaột tửứ timer 0
ệu tiẽn cho ngaột ngoaứi 0 Toựm taột thanh ghi IP
Caực ngaột ửu tiẽn ủửụùc xoựa sau khi reset heọ thoỏng ủeồ ủaởt taỏt caỷcaực ngaột ụỷ mửực ửu tiẽn thaỏp hụn
9.2 Xửỷ lyự ngaột.
GVHD: ThS Lâm Tăng Đức Trang:- 30 - SVTH: Võ Ngọc Tuyến
Trang 31Khi coự moọt ngaột xaồy ra vaứ ủửụùc CPU chaỏp nhaọn, chửụng trỡnhchớnh bũ ngaột quaừng Nhửừng hoát ủoọng sau xaồy ra:
- Thi haứnh hoaứn chổnh leọnh ủang hieọn haứnh
- Cất DC vaứo ngaột xeỏp
- Tráng thaựi ngaột hieọn haứnh ủửụùc caỏt bẽn trong
- Caực ngaột ủửụùc chaởn tái mửực cuỷa ngaột
- Nap vaứp DC ủũa chổ Vector cuỷa ISR
- ISR thửùc thi
ISR thửùc thi vaứ ủaựp ửựng ngaột, ISR hoaứn taỏt baống leọnh RET1 ẹiềunaứy laứm laỏy lái giaự trũ cuừ cuỷa PC tửứ ngaờn xeỏp vaứ laỏy lái trángthaựi ngaột cuừ Chửụng trỡnh lái tieỏp túc thi haứnh tái nụi maứ noự dửứng
Caực Vector ngaột
Khi chaỏp nhaọn ngaột, giaự trũ ủửụùc náp vaứo PC ủửụùc gói laứ Vectorngaột Noự laứ ủũa chổ baột ủầu cuỷa ISR cho nguồn táo ngaột Caực Vectorngaột ủửụùc cho ụỷ baỷng sau:
Reset heọ thoỏngBẽn ngoaứi 0Timer 0
Bẽn ngoaứi 1Timer 1
Port noỏi tieỏp
RSTIE0TF0IE1TF1
TI hoaởc RI
0000H0003H000BH0013H001BH
0023H
Caực Vector ngaột
Vector reset heọ thoỏng (RST ụỷ ủũa chổ 0000H) noự gioỏng nhử moọtngaột Noự ngaột chửụng trỡnh chớnh vaứ taỷi vaứo PC moọt giaự trũ mụựi
Khi chổ ủeỏn moọt ngaột cụứ gãy ngaột tửù ủoọng bũ xoựa bụỷi phầncửựng, trửứ ra R1, T1 cho caực ngaột coồng noỏi tieỏp Vỡ coự hai nguồn coựtheồ coự cho ngaột naứy, khõng thửùc teỏ ủeồ CPU xoựa cụứ ngaột naứy Caựcbit phaỷi ủửụùc kieồm tra trong ISR ủeồ xaực ủũnh nguồn ngaột vaứ cụứ táongaột seừ ủửụùc xoựa baống phần mềm
9.3 Caực ngaột cuỷa 8051:
a Caực ngaột timer:
Caực ngaột timer coự ủũa chổ Vector ngaột laứ 000BH (timer 0) vaứ 001BH(timer 1) Ngaột timer xaồy ra khi caực thanh ghi timer (TLx ITHx) traứn vaứ setcụứ baựo traứn (TFx) lẽn 1 Caực cụứ timer (TFx) khõng bũ xoựa baống phầnmềm Khi cho pheựp caực ngaột, TFx tửù ủoọng bũ xoựa baống phần cửựng khiCPU chuyeồn ủeỏn ngaột
b Caực ngaột coồng noỏi tieỏp:
Trang 32Ngaột coồng noỏi tieỏp xaồy ra khi hoaởc cụứ phaựt (TI) hoaởc cụứ ngaộtthu (KI) ủửụùc ủaởt lẽn 1 Ngaột phaựt xaồy ra khi moọt kyự tửù ủaừ ủửụùcnhaọn xong vaứ ủang ủụùi trong SBUP ủeồ ủửụùc ủóc.
Caực ngaột coồng noỏi tieỏp khaực vụựi caực ngaột timer Cụứ gãy rangaột coồng noỏi tieỏp khõng bũ xoựa baống phần cửựng khi CPU chuyeồn tụựingaột Do coự hai nguồn ngaột coồng noỏi tieỏp Ti vaứ RI Nguồn ngaột phaỷiủửụùc xaực ủũnh trong ISR vaứ cụứ táo ngaột seừ ủửụùc xoựa baống phầnmềm Caực ngaột timer cụứ ngaột ủửụùc xoựa baống phần cửựng khi CPUhửụựng tụựi ISR
c Caực ngaột ngoaứi :
- Caực ngaột ngoaứi xaồy ra khi coự moọt mửực thaỏp hoaởc cánh xuoỏngtrẽn chãn INT0 hoaởc INT1 cuỷa vi ủiều khieồn ẹãy laứ chửực naờngchuyeồn ủoồi cuỷa caực bit Port 3.(Port 3.2 vaứ Port 3.3)
Caực cụứ táo ngaột naứy laứ caực bit IE0 vaự IE1 trong TCON Khi quyền ủiềukhieồn ủaừ chuyeồn ủeỏn ISR, cụứ táo ra ngaột chổ ủửụùc xoựa neỏu ngaộtủửụùc tớch cửùc baống cánh xuoỏng Neỏu ngaột ủửụùc tớch cửùc theo mửực,thỡ nguồn yẽu cầu ngaột bẽn ngoaứi seừ ủiều khieồn mửực cuỷa cụứ thay chophần cửựng
Sửù lửùa chón ngaột tớch cửùc mửực thaỏp hay tớch cửùc cánh xuoỏngủửụùc laọp trỡnh qua caực bit IT0 vaứ IT1 trong TCON Neỏu IT1 = 0, ngaộtngoaứi 1 ủửụùc taực ủoọng baống mưực thaỏp ụỷ chãn IT1 Neỏu IT1 = 1 ngaộtngoaứi 1 seừ ủửụùc taực ủoọng baống cánh xuoỏng Trong cheỏ ủoọ naứy, neỏucaực maĩu liẽn tieỏp trẽn chãn INT1 chổ mửực cao trong moọt chu kyứ vaứchổ mửực thaỏp trong chu kyứ keỏ, cụứ yẽu cầu ngaột IE1 trong TCON ủửụùcủaởt lẽn 1, rồi bit IE yẽu cầu ngaột
Neỏu ngaột ngoaứi ủửụùc taực ủoọng baống cánh xuoỏng thỡ nguồn bẽnngoaứi phaỷi giửừ chãn taực ủoọng ụỷ mửực cao toỏi thieồu moọt chu kyứ vaứgiửừ noự ụỷ mửực thaỏp thẽm moọt chu kyứ nửừa ủeồ ủaỷm baỷo phaựt hieọnủửụùc cánh xuoỏng Neỏu ngaột ngoaứi ủửụùc taực ủoọng theo mửực thỡ nguồnbẽn ngoaứi phaỷi giửừ tớn hieọu yẽu cầu taực ủoọng cho ủeỏn khi ngaột ủửụùcyẽu cầu ủửụùc thaọt sửù táo ra vaứ khõng taực ủoọng yẽu cầu ngaột trửụựckhi ISR ủửụùc hoaứn taỏt Neỏu khõng moọt ngaột khaực seừ ủửụùc laởp lái.
a/ Định địa chỉ thanh ghi:
8051/8031 cĩ 4 dãy thanh ghi mỗi dãy cĩ 8 thanh ghi đánh số từ R0 đến R7
GVHD: ThS Lâm Tăng Đức Trang:- 32 - SVTH: Võ Ngọc Tuyến
Trang 33Tại mỗi thời đỉêm chỉ có một dãy thanh ghi được tích cực Muốn chọn dãy thanhghi nào ta chỉ cần gán bit nhị phân thích hợp vào RS1 (PSW.4) và RS0(PSW.3)trong thanh ghi trạng thái chương trình (PSW).
Mã lệnh n n n
Địa thỉ thanh ghi
Ngoài ra một số thanh ghi đặc biệt như thanh ghi tích luỹ con trỏ giữ liệu…cũng được xác định trong các lệnh nên không cần các bit địa chỉ Trong các lệnhnày các thanh ghi tích luỹ được xác định là A, con trỏ dữ liệu là DPTR, thanh ghiđếm chương trình là PC, cờ nhớ là C , cặp thanh ghi tích luỹ B là AB
c/ Địa chỉ gián tiếp :
R0 và R1 được dùng để chứa địa chỉ ô nhớ mà lệnh tác động đến, người ta quy ước dùng dấu @ trước R0 hoặc R1
Địa chỉ gián tiếp
d/ Địa chỉ tức thời:
Người ta dùng # trước các toán hạng tức thời Các toán hạng đó có thể là một hằng
số, một tham số hay biểu thức toán học Trường hợp dịch sẽ tự động tính toánvà thay thế dữ liệu trực tiếp vao mã lệnh
Địa chỉ tức thời
e/ Địa chỉ tương đối :
Địa chỉ tương đối chỉ dùng trong các lệnh nhảy 8051/8031 dùng giá trị 8 bit có dấu để cộng thêm vào thanh ghi đếm chương trình(PC).Tầm nhảy của lệnh này
Trang 34chỉ theo sau lệnh nhảy rồi tính toán địa chỉ offset cần thiết để nhảy đến địa chỉ yêu cầu.Như vậy địa chỉ mới là địa chỉ tương đối so với lệnh kế tiếp chứ không phải là bản thân lệnh nhảy Thường lệnh này có liên quan đến nhãn được định nghĩa trước
địa chỉ tương đối
f/ Địa chỉ tuyệt đối:
Địa chỉ tuyệt đối chỉ dùng trong các lệnh ACALL và AJMP Các lệnh 2 byte nàydùng để rẽ nhánh vào một trang 2 Kbyte cuả bộ nhớ chương trình bằng cách cấp 11bit địa chỉ thấp (A0-A10) để xác định địa chỉ bit trong mã.Còn 5 bit cao của địa chỉđích(A11-A15) chính là 5 bit cao hiện hành trong thanh ghi đếm chương trình Vìvậy địa chỉ của lệnh theo sau lệnh rẽ nhánh và địa chỉ của lệnh rẽ nhánh và địa chỉđích của lệnh rẽ nhánh phỉa cùng trang mã 2 Kbyte (có cùng 5 bit địa chỉ cao)
Xác định trang mã xác định điạ chỉ trong trang mã
địa chỉ tuyệt đối
h/ Địa chỉ tham chiếu :
Đia chỉ tham chiếu dùng một thanh ghi cơ bản (hoặc thanh ghi đếm chươngtrình PC hoặc thanh ghi con trỏ dữ liệu DPTR) và địa chỉ offset (trong thanh ghi A)
để tạo địa chỉ được tác động cho các lệnh JMP hoặc MOVC Các bảng nhảy vàbảng tìm kiếm dễ dàng được tạo ra để sử dụng địa chỉ tham chiếu
GVHD: ThS Lâm Tăng Đức Trang:- 34 - SVTH: Võ Ngọc Tuyến
Trang 35Địa chỉ tham chiếu
Các chi tiết thiết lập lệnh:
Rn :Thanh ghi R0 đến R7 của dãy thanh ghi được chọn
Data : 8 bit địa chỉ vùng dữ liệu bên trong Nó có thể là vùng RAM dữ liệu
trong (0-127) hoặc các thanh ghi chức năng đặc biệt
@Ri : 8 bit vùng RAM dữ liệu trong (0-125) được đánh giá địa chỉ gián tiếp
qua thanh ghi R0 hoặc R1
#data : Hằng 8 bit chức trong câu lệnh
#data 16 : Hằng 16 bit chức trong câu lệnh
Addr16 : 16 bit địa chỉ được dùng trong LCALL và LJMP
Addr11 : 11 bit địa chỉ được dùng trong lệnh ACALL và AJMP
Rel : Byte offset 8 bit có dấu được dùng trong lệnh SJMP và những lệnh
nhảy có điều kiện
Bit : Bit được định địa chỉ trực tiếp trong RAM dữ liệu nội hoậc các thanh
ghi chức năng đặt biệt
a Nhóm lệnh sử lý số học:
ADD A,Rn (1byte, 1 chu kỳ máy) :cộng nội dung thanh ghi Rn vào thanh ghi A.ADD A,data (2,1): Cộng trực tiếp 1 byte vào thanh ghi A
ADD A,@Ri (1,1): Cộng gián tiếp nội dung RAM chứa tại địa chỉ được khai
báo trong Ri vào thanh ghi A
ADD A,#data (2,1):Cộng dữ liệu tức thời vào A
ADD A,Rn (1,1): Cộng thanh ghi và cờ nhớ vào A
ADD A,data (2,1): Cộng trực tiếp byte dữ liệu và cờ nhớ vào A
ADDC A,@Ri (1,1): Cộng gián tiếp nội dung RAM và cờ nhớ vào A
ADDC A,#data (2,1): Cộng dữ liệu tức thời và cờ nhớ vào A
SUBB A,Rn (1,1): Trừ nội dung thanh ghi A cho nội dung thanh ghi Rn và
cờ nhớ
SUBB A,data (2,1): Trừ trực tiếp A cho một số và cờ nhớ
SUBB A,@Ri (1,1): Trừ gián tiếp A cho một số và cờ nhớ
SUBB A,#data (2,1): Trừ nội dung A cho một số tức thời và cờ nhớ
INC A (1,1): Tăng nội dung thanh ghi A lên 1
INC Rn (1,1): Tăng nội dung thanh ghi Rn lên 1
Trang 36INC data (2,1): Tăng dữ liệu trực tiếp lên 1.
INC @Ri (1,1): Tăng gián tiếp nội dung vùng RAM lên 1
DEC A (1,1): Giảm nội dung thanh ghi A xuống 1
DEC Rn (1,1): Giảm nội dung thanh ghi Rn xuống 1
DEC data (2,1): Giảm dữ liệu trực tiếp xuống 1
DEC @Ri (1,1): Giảm gián tiếp nội dung vùng RAM xuống 1
INC DPTR (1,2): Tăng nội dung con trỏ dữ liệu lên 1
MUL AB (1,4): Nhân nội dung thanh ghi A và nội dung thanh ghi B.DIV AB (1,4): Chia nội dung thanh ghi A cho nội dung thanh ghi B
DA A (1,1,): hiệu chỉnh thập phân thanh ghi A
ANL A,#data (2,1): AND nội dung thanh ghi với dữ liệu tức thời
ANL data,A (2,1): AND một dữ liệu trực tiếp với A
ANL data,#data (3,2): AND một dữ liệu trực tiếp A với một dữ liệu tức thời.ANL C,bit (2,2):AND cờ nhớ với 1 bit trực tiếp
ANL C,/bit (2,2): AND cờ nhớ với bù 1 bit trực tiếp
ORL A,Rn (1,1): OR thanh ghi A với thanh ghi Rn
ORL A,data (2,1): OR thanh ghi A với một dữ liệu trực tiếp
ORL A,@Ri (1,1): OR thanh ghi A với một dữ liệu gián tiếp
ORL A,#data (2,1):OR thanh ghi A với một dữ liệu tức thời
ORL data,A (2,1): OR một dữ liệu trực tiếp với thanh ghi A
ORL data,#data (3,1):OR một dữ liệu trực tiếp với một dữ liệu tức thời
ORL C,bit (2,2): OR cờ nhớ với một bit trực tiếp
ORL C,/bit (2,2): OR cờ nhớ với bù một bit trực tiếp
XRL A,Rn (1,1): XOR thanh ghi A với thanh ghi Rn
XRL A,data (2,1): XOR thanh ghi A với một dữ liệu trực tiếp
XRL A,@Ri (1,1): XOR thanh ghi A với một dữ liệu gián tiếp
XRL A,#data (2,1): XOR thanh ghi A với một dữ liệu tức thời
XRL data,A (2,1): XOR một dữ liệu trực tiếp với thanh ghi A
XRL dara,#data (3,1): XOR một dữ liệu trực tiếp với dữ liệu tức thời
SETB C (1,1): Đặt cờ nhớ
SETB bit (2,1): đặt một bit trực tiếp
CLR A (1,1): Xoá thanh ghi A
Trang 37CPL bit (2,1): Bù một bit trực tiếp
RL A (1,1): Quay trái nội dung thanh ghi A
RLC A (1,1): Quay trái nội dung thanh ghi A qua cờ nhớ
RR A (1,1): Quay phải nội dung thanh ghi A
RRC A (1,1): Quay phải nội dung thanh ghi A qua cờ nhớ
SWAP (1,1): Quay trái nội dung thanh ghi A 1 nibble (1/2byte)
c/ Nhóm lệnh chuyển dữ liệu::
MOV A,Rn (1,1):Chuyển nội dung thanh ghi Rn vào thanh ghi A
MOV A,data (2,1): Chuyển dữ liệu trực tiếp vào thanh ghi A
MOV A,@Ri (1,1): Chuyển dữ liệu gián tiếp vào thanh ghi A
MOV A,#data (2,1): Chuyển dữ liệu tức thời vào thanh ghi A
MOV Rn,data (2,2): Chuyển dữ liệu trực tiếp vào thanh ghi Rn
MOV Rn,#data (2,1): Chuyển dữ liệu trực tiếp vào thanh ghi Rn
MOV data,A (2,1): Chuyển nội dung thanh ghi A vào một dữ liệu trực tiếp.MOV data,Rn (2,2): Chuyển nội dung thanh ghi Rn vào một dữ liệu trực tiếp.MOV data,data (3,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu trực tiếp.MOV data,@Ri (2,2): Chuyển một dữ liệu gián tiếp vào một dữ liệu gián tiếpMOV data,#data (3,2): Chuyển một dữ liệu tức thời vào một dữ liệu trực tiếp MOV @Ri,A (1,1): Chuyển nội dung thanh ghi A vào một dữ liệu gián tiếp.MOV @Ri,data (2,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu gián tiếp MOV @Ri,#data (2,1): Chuyển một dữ liệu tức thời vào một dữ liệu gián tiếp.MOV DPTR,#data6 (3,2): Chuyển một hằng 16 bit vào thanh ghi con trỏ dữ liệu.MOV C,bit (2,1): Chuyển một bit trực tiếp vào cờ nhớ
MOV bit,C (2,2): Chuyển cờ nhớ vào một bit trực tiếp
MOV A,@A+DPTR (1,2): Chuyển byte bộ nhớ chương trình có địa chỉ
@A+DPRT vào thanh ghi A
MOVC A,@A+PC (1,2): Chuyển byte bộ nhớ chương trình có địa chỉ @A+PC vàothanh ghi A
MOV A,@Ri (1,2): Chuyển dữ liệu ngoài (8 bit địa chỉ) vào thanh ghi A.MOVX A,@DPTR (1,2): Chuyển dữ liệu ngoài (16 bit địa chỉ) vào thanh ghi A.MOVX @Ri,A (1,2): Chuyển nội dung A ra dữ liệu ngoài (8 bit địa chỉ)
MOVX @DPTR,A (1,2): Chuyển nội dung A ra dữ liệu ngoài (16 bit địa chỉ).PUSH data (2,2) : Chuyển dữ liệu trực tiếp vào ngăn xếp và tăng SP
POP data (2,2) : Chuyển dữ liệu trực tiếp vào ngăn xếp và giảm SP
XCH A,Rn (1,1) : Trao đổi dữ liệu giữa thanh ghi Rn và thanh ghi A
XCH A,data (2,1) : Trao đổi giữa thanh ghi A và một dữ liệu trực tiếp
XCH A,@Ri (1,1) : Trao đổi giữa thanh ghi A và một dữ liệu gián tiếp
XCHD A,@R (1,1): Trao đổi giữa nibble thấp (LSN) của thanh ghi A với LSN của
dữ liệu gián tiếp
d/ Nhóm lệnh xử lý bit:
Trang 38ACALL addr11 (2,2): Gọi chương trình con dùng địa chỉ tuyệt đối.
LCALL addr16 (3,2): Gọi chương trình con dùng địa chỉ dài
RET (1,2): Trở về từ lệnh gọi chương trình con
RET1 (1,2): Trở về từ lệnh gọi ngắt
AJMP addr11 (2,2): Nhảy tuyệt đối
LJMP addr16 (3,2): Nhảy dài
SJMP rel (2,2):Nhảy ngắn
JMP @A+DPTR (1,2): Nhảy gián tiếp từ con trỏ dữ liệu
JZ rel (2,2): Nhảy nếu A=0
JNZ rel (2,2): Nhảy nếu A không bằng 0
JC rel (2,2): Nhảy nếu cờ nhớ được đặt
JNC rel (2,2): Nhảy nếu cờ nhớ không được đặt
JB bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt
JNB bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp không được đặt
JBC bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt, rồi xoá bit.CJNE A,data,rel (3,2): So sánh dữ liệu trực tiếp với A và nhảy nếu không bằng.CJNE A,#data,rel (3,2): So sánh dữ liệu tức thời với A và nhảy nếu không bằng.CJNE Rn,#data,rel (3,2): So sánh dữ liệu tức thời với nội dung thanh ghi Rn và
nhảy nếu không bằng
CJNE @Ri,#data,rel (3,2): So sánh dữ liệu tức thời với dữ liệu gián tiếp và nhảy nếu không bằng
DJNZ Rn,rel (2,2): Giảm thanh ghi Rn và giảm nếu không bằng
DJNZ data,rel (3,2): Giảm dữ liệu trực tiếp và nhảy nếu không bằng
Tóm tắt hoạt động của các lệnh
JC rel (2,2) : Nhảy đến rel nếu cờ Carry C được set bằng 1
JNC rel (2,2) : Nhảy nếu cờ nhớ không được set bằng 1 (C=0)
JB bit,rel (3,2) : Nhảy nếu bit được set bằng 1
JNB bit,rel (3,2) : Nhảy nếu bit không được set bằng 1
JBC bit,rel (3,2) : Nhảy nếu bit được set bằng 1 và xoá bit
ACALL addr11 (2,2) : Lệnh gọi chương trình con (gọi tuyệt đối trong 2K) LCALL addr16 (2,2) : Lệnh gọi dài chương trìnhcon trong 64K
RET (1,2) : Kết thúc chương trình con trở về chương trình chính
RETI (1,2) : Kết thúc thủ tục phục vụ ngắt quay về chương trình
chính,hoạt
GVHD: ThS Lâm Tăng Đức Trang:- 38 - SVTH: Võ Ngọc Tuyến
Trang 39động tương tự như RET.
AJMP Addr11 (2,2) : Nhảy tuyệt đối không điều kiện trong 2K
LJMP Addr16 (2,2) : Nhảy dài không điều kiển trong 64K (hoạt động tương tự như lệnh LCALL)
SJMP rel (2,2) : Nhảy ngắn không điều kiện
JMP @A+DPTR (1,2) : Nhảy không điều kiện đến địa chỉ A + DPTR
JZ rel (2,2) : Nhảy nếu A=0
JNZ rel (2,2) : Nhảy nếu A khác 0
CJNE A.direct,rel (3,2) : So sánh và nhảy đến rel nếu khụng bằng
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 và nhảy nếu Rn = 0
DJNZ direct, rel : Tương tự lệnh DJNZ Rn, rel
4 5 6 7
3 7
3 6
3 3 3
Trang 40Hỡnh 3.1: Sơ đồ chân và sơ đồ logic 8255A.
Tên các chân 8255A:
D7-D0 Data bus (Bi-Direction)
RESET Reset input