báo cháy qua điện thoại
Trang 1PHẦN I: GIỚI THIỆU CHUNG
CHƯƠNG I: SƠ LƯỢC VỀ HỆ THỐNG BÁO CHÁY VÀ ĐIỀU KHIỂN
A HỆ THỐNG BÁO CHÁY:
I CÁCH NHẬN BIẾT VÀ BÁO CHÁY:
Khi một đám cháy xảy ra, ở những vùng cháy thường có những dấu hiệusau:
Lửa, khói, vật liệu chỗ cháy bị phá hủy
Nhiệt độ vùng cháy tăng lên cao
Không khí bị Oxy hóa mạnh
Có mùi cháy, mùi khét
Để đề phòng cháy chúng ta có thể dựa vào những dấu hiệu trên để đặt cáchệ thống cảm biến làm các thiết bị báo cháy Kịp thời khống chế đám cháy ở giaiđoạn đầu
Thiết bị báo cháy điện tử giúp chúng ta liên tục theo dõi để hạn chế các vụcháy tai hại, tăng cường độ an toàn, bình yên cho mọi người
II CÁC BỘ PHẬN CHÍNH:
Trang 2a Cảm biến nhiệt:
Là loại cảm biến dùng để chuyển tín hiệu vật lý (nhiệt độ) thành tín hiệuđiện, đây là loại cảm biến có độ nhạy tương đối cao và tuyến tính Nguyên tắc làmviệc của nó là dòng điện hay điện áp thay đổi khi nhiệt độ tại nơi đặt nó thay đổi.Tuy nhiên nó cũng dễ báo động nhầm khi nguồn điện bên ngoài tác động khôngtheo ý muốn
Các loại cảm biến nhiệt:
IC cảm biến:
Là loại cảm biến bán dẫn được chế tạo thành các IC chuyên dụng với độnhạy cao, điện áp ra thay đổi tỉ lệ thuận với nhiệt độ, một số loại IC được bán bênngoài thị trường là: LM355, LM334,…
Thermistor:
Thermistor là loại điện trở có độ nhạy nhiệt rất cao nhưng không tuyến tínhvà với hệ số nhiệt âm Điện trở giảm phi tuyến với sự tăng của nhiệt độ Vì bảnthân là điện trở nên trong quá trình hoạt động Thermistor tạo ra nhiệt độ vì vậy gâysai số lớn
Thermo Couples:
Thermo Couple biến đổi đại lượng nhiệt độ thành dòng điện hay điện áp
DC nhỏ Nó gồm hai dây kim loại khác nhau nối với nhau tại hai mối nối Khi cácdây nối đặc ở các vị trí khác nhau, trong dây xuất hiện suất điện động Suất điệnđộng tỉ lệ thuận với sự chênh lệnh nhiệt độ giữa hai mối nối Thermo couple có hệsố nhiệt dương
b Cảm biến lửa:
Khi lửa cháy thì phát ra ánh sáng hồng ngoại, do đó ta sử dụng các linhkiện phát hiện tia hồng ngoại để phát hiện lửa Nguyên lý hoạt động là điện trởcủa các linh kiện thu sóng hồng ngoại tăng, nó chuyển tín hiệu ánh sáng thu đượcthành tín hiệu điện để báo động Loại này rất nhạy đối với lửa Tuy nhiên cũng dễbáo động nhầm nếu ta để cảm biến ngoài trời hoặc gần ánh sáng bóng đèn tròn
c Cảm biến khói:
Thường cảm biến khói là bộ phân riêng biệt chạy bằng PIN được thiết kếđể lắp đặt trên trần nhà, trên tường Ngoài yêu cầu kỹ thuật (chính xác, an toàn)còn đòi hỏi phải đảm bảo về mặt thẩm mỹ Có hai cách cơ bản để thiết kế bộ cảmbiến khói
Trang 3Cách thứ nhất sử dụng nguyên tắc Ion hóa Người ta sử dụng một lượng nhỏchất phóng xạ để Ion hóa trong bộ cảm biến Không khí bị Ion hóa sẽ dẫn điện vàtạo thành một dòng điện chạy giữa chạy giữa hai cực đã đợc nạp điệän Khi cácphần tử khói lọt vào khu vực cảm nhận được Ion hóa sẽ làm tăng điện trở trongbuồng cảm nhận và làm giảm luồng điện giữa hai cực Khi luồng điện giảm xuốngtới một giá trị nào đó thì bộ cảm biến sẽ phát hiện và phát tín hiệu báo động.
Cách thứ hai sử dụng các linh kiện thu phát quang Người ta dùng linh kiệnphát quang (Led, Led hồng ngoại…) chiếu một tia ánh sáng qua vùng bảo vệ vàomột linh kiện thu quang (photo diode, photo transistor, quang trở…) Khi có cháy,khói đi ngang qua vùng bảo vệ sẽ che chắn hoặc làm giảm cường độ ánh sángchiếu vào linh kiện thu Khi cường độ giảm xuống tới một giá trị nào đó thì bộ cảmbiến sẽ phát hiện và phát tín hiệu báo động
Trong hai cách này thì phương pháp thứ nhất nhạy hơn và hiệu quả hơnphương pháp thứ hai, nhưng khó thực thi, khó lắp đặt Còn cách thứ hai tuy ít nhạyhơn nhưng linh kiện dễ kiếm và dễ thực thi cũng như dễ lắp đặt
Một nhược điểm của các loại cảm biến này là: mạch báo động có thể sainếu vùng bảo vệ bị xâm nhập bởi các lớp bụi…
d Một số loại cảm biến quang:
Cảm biến quang có thể hoạt động với ánh sáng thấy được hoặc ánh sánghồng ngoại, tử ngoại…
- Quang trở:
Quang trở còn có tên gọi khác là vật dẫn quang (photo con) là linh kiện thụđộng được tạo ra từ vật liệu bán dẫn mà bề mặt của nó được phơi sáng và điện trởcủa nó giãm khi tăng cường độ ánh sáng Trong quang trở các điện tử tự do đượctạo bằng năng lượng ánh sáng, cường độ ánh sáng càng lớn thì số lượng điện tử tự
do càng lớn Loại cảm biến này phi tuyến và có độ trể, do đó ít được dùng
Đặc tuyến của một loại quang trở thông dụng:
Trang 4- Cảm biến quang bán dẫn:
Đây là loại cảm biến dùng các linh kiện bán dẫn quang như: diode, photodiode, phototransistor, …Khi có ánh sáng đập vào mặt bán dẫn làm giải phóng cácđiện tử tự do và các đện tử này sẽ chuyễn động tạo thành dòng điện
- Cảm biến quang nhiệt:
Cảm biến này chuyển quang năng thành nhiệt năng và nhiệt năng này sẽđược nhận biến bằng bộ cảm biến nhiệt, nhiệt độ tỉ lệ với cường độ ánh sáng chiếuvào Loại cảm biến này có độ nhạy thấp, thời gian đáp ứng chậm
Như vậy mỗi loại cảm biến có tính ưu việc riêng của nó Tuy nhiên nếumạnh ở mặt này thì nó sẽ bị hạn chế ở mặt khác, chẳng hạn bộ cảm biến nhiệt chỉphát hiện cháy ở vùng gần cảm biến cảm biến và tỏ ra không hiệu quả ở vùng cónhiều nguồn nhiệt không phải phát sinh ra cháy Còn các bộ cảm biến khác có thểphát hiện cháy trong một phạm vi rộng nhưng có đám cháy có ít khói hoặc do cáctác động không phải do cháy ở tại nơi đặt cảm biến thì sẽ bị phát hiện nhầm Vìvậy tùy theo từng vùng, từng nơi mà ta thiết kế những bộ cảm biến thích hợp
2.Thiết bị báo động:
Thiết bị báo động gồm có hai loại:
Báo động tại chỗ
Báo động qua điện thoại
Báo động tại chỗ ta có thể sử dụng các chuông điện, mạch tạo còi hụ hayphát ra tiếng nói để cảnh báo
Trong các hệ thống báo cháy, bộ cảm biến thường đặt ở những nơi dễ cháyvà nối với các thiết bị báo động bằng dây dẫn điện, do đó trong một số trường hợp
R1M
10M
10001
1m/m2
Trang 5có thể làm dây bị đứt Vì vậy một hệ thống báo cháy sẽ trở nên hiệu quả khi sửdụng các bộ phát vô tuyến Trong đó bộ phận thu gắn với mạch báo động, cònmạch phát gắn với bộ cảm biến Tuy nhiên việc lắp đặt gặp nhiều khó khăn và giáthành cao.
Báo động qua điện thoại giúp ta đáp ứng nhanh các thông tin về sự cố đếncác cơ quan chức năng Khi có tín hiệu báo động sẽ tự động quay số đến các cơquan như: nhà riêng, công an, phòng cháy chữa cháy…
B SƠ LƯỢC VỀ HỆ THỐNG ĐIỀU KHIỂN:
I GIỚI THIỆU CÁC DẠNG MẠCH TỒN TẠI:
1 Mạch điểu khiển xa dùng hồng ngoại:
Mạch này thiết kế và thi công không phứ c tạp, chi phí tổn hao thấp nhưngthuộc loại điều khiển giới hạn ở khoảng cách Khoảng cách điếu khiển càng xa thìcông suất bức xạ tia hồng ngoại sẽ giảm đi làm cho mạch thu tia hồng ngoại khôngnhận dạng được tín hiệu điều khiển
2 Mạch điều khiển xa dùng kỹ thuật số:
Mạch này điều khiển rất thích hợp cho các thí nghiệm có quy mô nhỏ, tốnkém, thiết kế và thi công rất phức tạp hơn các mạch điều khiển khác và giới hạnvề chức năng vì mạch điện do dùng quá nhiều IC số nên mạch điện khá phức tạprất nhiều Khi muốn mở rộng các chức năng điểu khiển thêm thì phải làm lại từđầu nên khả năng thực thi rất nhỏ
3 Mạch điều khiển bằng Vi xử lý:
Mạch này rất thích hợp trong các hệ thống điều khiển có quy mô lớn, phứctạp và sử dụng nhiều chức năng Mạch này không phức tạp ở phần cứng nhưng đòihỏi kỹ thuật viết chương trình vi xử lý thật tốt Mạch này thi công khá phức tạpnhưng tình hiệu quả của nó rất cao so với các mạch điều khiển khác Đối với cácmạch sử dụng nhiều chức năng thì ta nên dùng dạng mạch này vì nó sẽ làm đơngiản rất nhiều mạch phần cứng bù lại chương trình phần mềm trở nên rất phức tạp
II HƯỚNG CHỌN CỦA ĐỀ TÀI:
Trong đồ án này, chúng em trình bày hai phần “ báo cháy qua điện thoại vàđiều khiển thiết bị bằng điện thoại” nên trong phần điều khiển thiết bị chúng emchọn mạch điểu khiển bằng vi xử lý Sử dụng toàn bộ phần mạch chính và pháttriển thêm các phàn bổ sung thì chúng em có phần mạch điều khiển nên phầnmạch không có phức tạp mà lại còn rất đơn giản
Trang 6CHƯƠNG II: GIỚI THIỆU VI ĐIỀU KHIỂN 8031
A TÓM TẮC PHẦN CỨNG:
I GIỚI THIỆU MCS-51: (MCS-51: Family Overview)
MCS-51 là một họ IC điều khiển (micro controller), được chế tạo và bántrên thị trường bởi hãng Intel của Mỹ Họ IC này được cung cấp các thiết bị bởinhiều hãng sản xuất IC khác trên thế giới chẳng hạn: nhà sản xuất IC SIEMENScủa Đức, FUJITSU của Nhật và PHILIPS của Hà Lan Mỗi IC trong họ đều có sựhoàn thiện riêng và có sự hãnh diện riêng của nó, phù hợp với nhu cầu của ngườisử dụng và yêu cầu đặt ra của nhà sản xuất
IC 8031 là IC tiêu biểu trong họ MCS-51 được bán trên thị trường Tất cảcác IC trong họ đều có sự tương thích với nhau và có sự khác biệt là sản xuất saucó cái mới mà cái sản xuất trước không có, để tăng thêm khả năng ứng dụng của
IC đó Chúng có đặc điểm như sau:
OTHER
128 byte RAM 8032\8052
ROM 0K:
8031\8032 4K: 8031 8K:8052
Trang 7 4k byte ROM (được lập trình bởi nhà sản xuất, chỉ có 8051)
128 byte RAM
4 Port I/O 8 bit
2 bộ định thời 16 bit
Giao tiếp nối tiếp
64k không gian bộ nhớ chương trình mở rộng
64k không gian bộ nhớ dữ liệu mở rộng
Một bộ xử lý luận ly ù(thao tác trên các bit đơn)
210 bit được địa chỉ hóa
Bộ nhân /chia 4 bit
1 Bộ nhớ bán dẫn ROM vaØ RAM:
Bộ nhớ là một phần của cấu trúc vi điều khiển, các chương trình và dữ liệuđược lưu trữ trong bộ nhớ, bộ nhớ bán dẫn gồm ROM và RAM
RAM: Là bộ nhớ bán dẫn đọc được hoặt ghi được nhưng không kiên định(không kiên định có nghĩa là : nội dung của dữ liệu sẽ bị mất đi khi mất điện)
ROM: Là bộ nhớ bán dẫn chỉ đọc và kiên định (kiên định có nghĩa là : nộidung dữ liệu sẽ không bị mất đi khi mất điện)
Hầu hết các hệ thống dùng RAM để lưu trữ chương trình thi hành khi màcần giữ lại để lưu trữ thì ghi vào đĩa để cất, còn ROM dùng để lưu trữ thông tin hệthống để khi cấp điện là nó có thể hoạt động hệ thống
2 Các BUS:
Bus là tập hợp nhiều đường dẫn, mỗi bus có một hoặc nhiều mục đích khácnhau tùy thuộc vào cách cài đặt của người sử dụng và cách thiết kế của nhà sảnxuất CPU thường có 3 bus: bus điều khiển, bus địa chỉ, và bus dữ liệu Đối với mỗihoạt động của mình thì CPU lấy dữ liệu trên bus dữ liệu theo địa chỉ được cung cấpbởi bus địa chỉ và hoạt động đó là hoạt động gì thì CPU thi hành theo lệnh đượccấp từ bus điều khiển
Bus địa chỉ cung cấp địa chỉ cho CPU biết địa chỉ để đọc hoặc ghi dữ liệu.Nếu CPU có n đường địa chỉ thì có thể truy xuất được 2n ô nhớ địa chỉ
Trang 8Bus điều khiển là hỗn hợp các tín hiệu điều khiển để điều khiển sự hoạtđộng của CPU (trong CPU hoặc CPU với các thiết bị bên ngoài) để đồng bộ hoạtđộng trên các bus địa chỉ, dữ liệu.
Bus dữ liệu mang thông tin giữa CPU và bộ nhớ, hoặc giữa CPU với cácthanh ghi hoặc giữa CPU với các thiết bị bên ngoài thông qua các thiết bị I/O
II SƠ LƯỢC VỀ CÁC CHÂN CỦA µ C 8031:
8031 là IC vi điều khiển (Microcontroller) do hãng intel sản xuất µC 8031
có tất cả 40 chân có chức năng như các đường xuất nhập Trong đó có 24 chân cótác dụng kép, mỗi đường có thể hoạt động như các đường xuất nhập hoặc như cácđường điều khiển hoặc là thành phần của bus dữ liệu
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 XTAL1 XTAL2 GDN
ALE PSEN\
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
8
0
5 1
Sơ Đồ Chân Của 8031
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7
P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7
PSEN\
ALE EA\
RST
RXD TXD INT0\
INT1\
T0 T1 WR\
RD\
Sơ đồ logic của 8031
Trang 9Chức năng các chân của 8031:
Port 0:
Port 0 là port có hai chức năng ở các chân từ 32÷39 của 8031 Trong cácthiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường vàora
Port 1:
Port 1 là port I\O ở các chân từ 1-8 Các chân được ký hiệu là P0.0, P0.1,P0.2,…P1.7, có thể dùng cho giao tiếp vớicác thiết bị bên ngoài nếu cần Port 1không có chức năng khác vì vậy nó chỉ dùng cho giao tiếp với các thiết bị bênngoài(chẳng hạn ROM, RAM,8255,8279,…)
RXDTXDINT0\
INT1\
T0T1WR\
RD\
Ngõ vào dữ liệu nối tiếp Ngõ ra dữ liệu nối tiếpNgõ vào ngắt cứng thứ 0Ngõ vào ngắt cứng thứ 1Ngõ vào của temer\counter thứ 0Ngõ vào của temer\counter thứ 1Tín hiệu ghi dữ liệu lên bộ nhớ ngoàiTín hiệu đọc bộ nhớ dữ liệu ngoàiBảng: Chức năng của các chân port 3
Ngõ tín hiệu PSEN\ (Progam store enable):
PSEN\ là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớchương trình mở rộng và thường được nối với chân EO\ (output enable) củaEPROM cho phép đọc các byte mã lệnh
Trang 10PSEN ở mức thấp trong thời gian lấy lệnh Các mã nhị phân của chươngtrình được đọc từ EPROM qua bus dữ liệu và được chốt vào thanh ghi bên trong
8031 để giải mã lệnh Khi thi hành chương trình trong ROM nội(µC 8051) PSEN\sẽ ở mức 1
Ngõ tín hiệu điều khiển ALE (Address latch enable):
Khi 8031 truy xuất bộ nhớ bên ngoài, port0 có chức năng là địa chỉ và dữliệu do đó phải tách đường địa chỉ và dữ liệu Tín hiệu ra ALE ở chân thứ 30 dùnglàm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối với
IC chốt
Tín hiệu ra ở ALE là một xung trong khoảng thời gian port 0 đóng vai tròlà địa chỉ thấp nên nên chốt địa chỉ hoàn toàn tự động Các xung tín hiệu ALE cótốc độ bằng 1\6 tần số dao động trên vi điều kkiển và có thể được dùng làm tínhiệu clock cho các phần khác của hệ thống Chân ALE được dùng làm ngõ vàoxung lập trình cho FEROM trong 8051
Ngõ tín hiệu EA\ (External Access: truy xuất dữ liệu bên ngoài):Tín hiệu vào EA\ ở chân 31 thường được mắc lên mức 1 hoặc mức 0 Nếu
ở mức 1 thì µC8051 thi hành chương trình trong ROM nội trong khoảng địa chỉ thấp4k Nếu ở mức 0 thì 8031 thi hành chương trình từ bộ nhớ mở rộng (vì µC8031không có bộ nhớ chương trình trên chip) Chân EA\ được lấy làm chân cấp nguồn21v lập trình cho FROM trong 8051
Ngõ tín hiệu RST (Reset):
Ngõ tín hiệu RST ở chân 9 và ngõ vào Reset của 8031 Khi ngõ vào tínhiệu đưa lên mức cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạpnhững giá trị thích hợp để khởi động hệ thống Khi cấp điện mạch tự động Reset
Ngõ vào bộ dao động X1, X2:
Bộ tạo dao động được tích hợp bên trong 8031, khi sử dụng 8031 ngườithiết kế cần ghép nối thêm tụ, thạch anh Tần số thạch anh được sử dụng cho 8031là 12MHz
Nguồn cho 8031:
Nguồn cho 8031 được cung cấp ở 2 chân là 20 và 40 cấp GND và Vcc.Nguồn cung cấp ở đây là +5v
Trang 11Khả năng của tải port 0 là LS –TTL của port 1,2,3 là 4LS –TTL Cấu trúccủa port được xây dựng từ FET làm cho port có thể xuất nhập dễ dàng Khi FET tắtthì port dễ dàng dùng chức năng xuất Khi FET họat động thì port làm chức năngnhập thì khi đó ngõ nhập mức cao sẽ làm hỏng port.
III KHẢO SÁT CÁC KHỐI BÊN TRONG 8031 − TỔ CHỨC BỘ NHỚ:
Bộ nhớ trong 8031 ba gồm ROM và RAM RAM trong 8031 bao gồmnhiều thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bankthanh ghi và các thanh ghi chức năng đặc biệt 8031 có cấu trúc bộ nhớ theo kiểuHarvard: có những vùng nhớ riêng biệt cho chương trình và dữ liệu Chương trìnhvà dữ liệu có thể chứa bên trong 8051, nhưng 8051 vẫn có thể kết nối với 64k bytechương trình và 64k byte dữ liệu
Hai đặc tính cần chú ý khi dùng µC8031/8051 là:
Các thanh ghi và các port xuất nhập đã được định vị (được định vị cónghĩa là xác định) trong bộ nhớ và có thể truy xuất trực tiếp giống như các bộ nhớđịa chỉ khác
Ngăn xếp bên trong RAM nội nhỏ hơn so với ROM ngoại như cácbộ vi xử lý khác
RAM bên trong 8031 được phân chia như sau:
Các Bank thanh ghi có địa chỉ 00H ÷ 1FH
RAM địa chỉ hóa từng bit có địa chỉ 20H ÷ 2FH
RAM đa dụng có địa chỉ 30H ÷ 7FH
Các thanh ghi có chức năng đặc biệt 80H ÷ FFH
Trang 12a.RAM đa dụng:
Mặc dù trên hình vẽ cho thấy 80 byte đadụng chiếm các địa chỉ từ30H÷7FH, 32 địa chỉ dưới từ 00H÷1FH cũng có thể được dùng với mục đích tươngtự (mặc dù các địa chỉ này cũng đã định với mục đích khác)
Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất tự do dùng kiểuđịa chỉ gián tiếp hoặc trực tiếp Ví dụ: để đọc nội dung ở địc chỉ 5FH của RAM nộivào thanh ghi tích lũy A, có thể dùng một trong hai cách sau:
- Cách 1: MOV A, 5FH
GENERAL PURPOSE RAM 7F7E7D7C7B7A797877767574737271706F6E6D6C6
6D5D4D3D2D1D0 -addressableNot bit addressable8786858483828180
FF F0 E0 D0 B8 B0 A8 A0
99 98 90
8D 8C 8B 8A 89
88
87 83 82 81 80
FF B ACC PSW IP P3 IE P2 SBUF SCON P1
TH1 TH0 TL1 TL0 TMOD
TCON
PCON DPH DPL SP P0Hình II.2.1: Sơ đồ tổ chức bộ nhớ
Trang 13- Cách 2: Ngoài cách trên RAM bên trong cũng có thể được truy xuất bằngcách dùng địa chỉ gián tiếp hoặc trực tiếp qua R0 hay R1:
MOV R0, #%FH
MOV A, @R0
Lệnh đầu tiên dùng để nạp địa chỉ tức thời #5FH vào thanh ghi R0, lệnhthứ 2 dùng để chuyển nội dung của ô nhớ có địa chỉ mà R0 đang chỉ tới vào thanhghi tích lũy A
b RAM địa chỉ hóa từng bit:
8031 chứa 210 bit được địa chỉ hóa, trong đó có 128bit chứa các byte có địachỉ từ 20H÷2FH và các bit còn lại chức trong nhóm thanh ghi có chứa năng đặcbiệt
Ý tưởng truy xuất từng bit bằng phần mềm là một đặc tính mạnh của viđiều khiển nói chung Các bit có thể được đặt, xóa, And, OR…, với một lệnh đơn.Mà điều này đối với vi xử lý đòi hỏi phải có một chuỗi lệnh đọc - sửa - ghi để đạtđược mục đích tương tự như vi điều khiển Ngoài ra các port cũng có thể truy xuấtđược từng bit làm đơn giản đi phần mềm xuất nhập từng bit 128 bit truy xuất từngbit này cũng có thể truy xuất như các byte hoặc các bit phụ thuộc vào lệnh đượcdùng
Ví dụ: để đặt bit thứ 57 ta dùng lệnh sau:
SETB 67H
c.Các Bank thanh ghi:
32 byte thấp của bộ nhớ RAM nội được dùng cho các bank thanh ghi Bộlệnh 8031 hỗ trợ 8 thanh ghi nói trên có tên là R0 ÷ R7 và theo mặc định khi resethệ thống, các thanh ghi này có địa chỉ từ 00H ÷ 07H
Ví dụ: lệnh sau đây sẽ đọc nội dung của ô nhớ có địa chỉ 05H vào thanhghi A
MOV A, R5Đây là lệnh 1 byte dùng địachỉ thanh ghi Tuy nhiên yêu cầu trên có thể thihành bằng lệnh 2 byte dùng địa chỉ trực tiếp nằm trong byte thứ hai:
MOV A,05H
Trang 14Các lệnh dùng các thanh ghi R0 ÷ R7 sẽ ngắn hơn và nhanh hơn so với cáclệnh có chức năng tương tự dùng kiểu địa chỉ trực tiếp Các dữ liệu được dùngthường xuyên nên dùng một trong các thanh ghi này Do có 4 bank thanh ghi nêntại một thời điểm chỉ có một bank thanh ghi được truy xuất bởi các thanh ghi R0 ÷R7 Để chuyển đổi việc truy xuất các bank thanh ghi ta phải thay đổi các bit chọnbank trong thanh ghi trong thanh ghi trạng thái Giả sử bank thanh ghi thứ 3 đangđược truy xuất lệnh sau đây sẽ chuyển nội dung của thanh ghi A vào ô nhớ RAMcó địa chỉ 18H:
MOV R0, ATóm lại ý tưởng dùng các bank thanh ghi cho phép ta chuyển hướngchương trình nhanh và hiệu quả hơn
IV CÁC THANH GHI CÓ CHỨC NĂNG ĐẶC BIỆT:
Các thanh ghi của µC8031/8051 được truy xuất ngầm định bởi bộ lệnh Vídụ “INC A” sẽ tăng nội dung thanh ghi A lên một đơn vị Tác động này được ngầmđịnh trong mã lệnh
Các thanh ghi trong µC8031/8051 được định dạng như một phần của RAMtrên chip Vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi đếm bộ nhớchương trình và thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác động trực tiếp).Cũng như R0 ÷ R7, 8031 có 21 thanh ghi có chức năng đặc biệt ở vùng trên củaRAM nội có địa chỉ từ 80H÷FFH
Chú ý: tất cả 128 địa chỉ từ 80H ÷ FFH không được định nghĩa chỉ có
21 thanh ghi có chức năng đặc biệt được định nghĩa sẳn các địa chỉ Ngoại trừ thanh ghi A có thể được truy xuất ngầm như đã nói, đa số cácthanh ghi có chức năng đặc biệt SFR có địa chỉ hóa từng bit hoặc byte
Chú ý: một vài thanh ghi SFR có thể địa chỉ hóa từng bit hoặc bytenên người lập trình phải thận trọng khi truy xuất bit hoặc byte
1 Từ trạng thái chương trình: (PSW: Program Status Word)
Thanh ghi trạng thái chương trình PSW (Program Status Word) ở địa chỉD0H chứa các bit trạng thái được tóm tắt như sau:
Trang 15PSW.4 RS1 D4H Bit 1 chọn bank thanh ghi
Bảng : Các bit của thanh ghi PSW
♦ Cờ nhớ (CY):
Cờ nhớ Carry có tác dụng kép Thông thường nó được dùng cho các lệnhtoán học: C = 1 nếu phép toán cộng có tràn hoặc phép trừ có mượn và ngược lại C
= 0 nếu phép toán cộng không tràn và phép trừ không có mượn
Ví dụ: lệnh sau sẽ trả về thanh ghi tích lũy kết quả 00H và set cờ nhớ trongPSW nếu thanh ghi tích lũy A chứa FFH
♦ Cờ nhớ phụ AC: (AC: Auxillary Carry Flag)
Khi cộng các số BCD, cờ nhớ phụ AC = 1 nếu kết quả 4 bit thấp trongkhoảng 0A÷0F và ngược lại cờ nhớ phụ AC = 0
♦ Cờ 0 (F0):
Cờ 0 là một bit cờ đa dụng dùng cho các ứng dụng cho người dùng
♦ Các bit chọn bank thanh ghi truy xuất (RS0 và RS1):
Các bit chọn bank thanh ghi nhằm để xác định bank thanhghi được truy xuất.Chúng được xoá sau khi Reset hệ thống và được thay đổi bằng phần mềm nếu cần
Ví dụ: 3 lệnh sau đây cho phép bank thanh ghi 3 được chọn và di chuyển
nội dung thanh ghi R7 (có địa chỉ byte 1FH) vào thanh ghi A
SETB RS1SETB RS0MOV A, R7
Trang 16Khi chương trình được dịch sang mã máy cho 8031 thi hành, các địa chỉ bitđược thay thế bằng các ký tự RS1 và RS0 Vậy lệnh SETB RS1 là SETB 0DH.
♦ Cờ tràn 0V: (Overlow Flag)
Cờ tràn có tác dụng như sau: 0V = 1 sau một lệnh cộng hoặc trừ nếu cóphép toán bị tràn Khi các số có dấu được cộng hay trừ với nhau, phần mềm có thểkiểm tra bit này để kiểm tra xem kết quả có trong tầm xác định hay không Khi cósố không dấu được cộng, bit 0V có thể được bỏ qua Các kết quả lớn hơn +127hoặc nhỏ hơn –128 thì bit 0V=1
Ví dụ: phép cộng sau bị tràn và bit 0V sẽ được set: 0FH + 7FH = 8EH Kết
quả là một số có dấu 8E được xem như –116, không phải là kết quả đúng 142 vìvậy bit 0V = 1
2 Thanh ghi B:
Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi tích lũy A cho cácphép toán nhân và chia Lệnh MUL AB sẽ nhân các giá trị không dấu 8 bit trong Avà B rồi trả về kết quả 16 bit A (byte thấp) và B (byte cao) Lệnh DIV AB sẽ chia
A cho B và trả kết quả phần nguyên trong A và phần dư trong B Thanh ghi có thểđược xem là một thanh ghi đệm đa dụng Nó được địa chỉ hóa từng bit với các địachỉ từ F0H ÷ F7H
3 Con trỏ ngăn xếp:
Con trỏ ngăn xếp SP là một thanh ghi 8 bit ở địa chỉ 81H Nó chứa địa chỉ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ồmcác lệnh cất dữ liệu vào ngăn xếp và lấy dữ liệu ra khỏi ngăn xếp 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 dữ liệu ra khỏingăn xếp sẽ làm giảm SP Ngăn xếp của 8031 được giữ trong RAM ngoại và giớihạ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ủa8031
Ví dụ: Để khởi động SP với ngăn xếp bắt đầu tai địa chỉ 60H, thì dùng lệnh
sau đây:
MOV SP, #5FVới lệnh trên thì ngăn xếp của 8031 chỉ có 32 byte vì địa chỉ cao nhất củaRAM trên vi điều khiển là 7F Sở dĩ giá trị 5F được nạp vào SP vì SP sẽ tăng lên60H trước khi cất byte dữ liệu đầu tiên
Trang 17Khi Reset 8031, SP sẽ mang giá trị mặc định là 07H và dữ liệu đầu tiên sẽđược nạp vào ô nhớ ngăn xếp có địa chỉ 08H Nếu phần mềm ứng dụng khôngkhởi động SP một giá trị mới thì bank thanh ghi l có thể cả 2 và 3 sẽ không dùngđược vì dùng RAM này đã được dùng làm ngăn xếp Ngăn xếp được truy xuất trựctiếp bằng lệnh PUSH và lệnh POP để lưu trữ tạm thời và lấy dữ liệu, hoặc truyxuất ngầm bằng lệnh gọi chương trình con (ACALL và LCALL) và lệnh trở về(RET, RETL) để lưu giá trị của bộ đếm chương trình khi bắt đầu thực hiện chươngtrình con và lấy lại khi kết thúc chương trình con
4 Con trỏ dữ liệu: (DPTR: Data Poiter)
Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộ nhớ ngoài là một thanhghi 16 bit ở địa chỉ 82H (DPL: byte thấp) và 83H (DPH: byte cao) 3 lệnh sau đâysẽ ghi địa chỉ 55H vào RAM ngoại ở địa chỉ 1000H:
5 Các thanh ghi port xuất nhập:
Các Port của 8031 gồm port 0 ở địa chỉ 80H, port 1 ở địa chỉ 90H, port 2 ởđịa chỉ A0H và port 3 ở địa chỉ B0H Tất cả các port này có thể truy xuất từng bitnên rất thuận tiện trong chức năng giao tiếp
Ví dụ: Nếu một motor được nối với cuộn dây có transitor lái đến bit 7 củaport 1, 8031 có bật và tắt bằng một lệnh đơn:
Trang 186 Các thanh ghi Timer:
8031 có chứa hai bộ định thời/ đếm 16 bit được dùng cho việc định thờihoặc đếm sự kiện Timer 0 ở địa chỉ 8AH (TLO: byte thấp) và 8CH (THO: bytecao) Timer 1 ở địachỉ 8BH (TL1: byte thấp)và 8DH (TH1: byte cao) việc khởiđộng Timer được set bởi Timer mode (TMOD) ở địa chỉ 89 và thanh ghi điều khiểnTimer (TCON) ở địa chỉ 88H Chỉ có TCON được địa chỉ hóa từng bit
7 Các thanh ghi port nối tiếp:
8031 chứa 1 port nối tiếp dùng cho việc trao đổi thông tin với các thiết bịnối tiếp như máy tính moderm hoặc giao tiếp với các IC khác (các bộ chuyển đổiA\D, các thanh ghi dịch…) Một thanh ghi gọi là bộ đếm dữ liệu nối tiếp (SBUF) ởđịa chỉ 99H sẽ giữ cả hai dữ liệu phát và dữ liệu nhận Khi truyền dữ liệu thì ghilên SUBF, khi nhận dữ liệu thì đọc SUBF Các mode vận hành khác nhau được lậptrình qua thanh ghi điều khiển port nối tiếp (SCON: được địa chỉ hóa từng bit ở địachỉ 98H)
8 Các thanh ghi ngắt:
8031 có cấu trúc 5 nguồn ngắt và 2 mức ưu tiên Các ngắt bị cấm sau khiReset hệ thống và sẽ được cho phép bằng việc thanh ghi cho phép ngắt (LE) ở địachỉ A8H Cả hai thanh ghi được địa chỉ hóa từng bit
9 Thanh ghi điều khiển công suất:
Thanh ghi điều khiển công suất (PCON) ở địa chỉ 97H chứa nhiều bit điềukhiển chúng được tóm tắt ở bảng sau:
Bit Kí hiệu Ý nghĩa
Không ý nghĩa Không ý nghĩa Bit cờ đa dụng 1Bit cờ đa dụng 2Giảm công suất, được set hoạt mode giảm công suất, chỉthoát khi reset
Mode chờ, set để kích hoạt mode chờ, chỉ thoát khi có
Trang 19ngắt hoặc reset hệ thống.
V BỘ NHỚ NGOÀI:
8031 có khả năng mở rộng bộ nhớ lên đến 64 kB bộ nhớ chương trình và
64 KB bộ nhớ dữ liệu bên ngoài Do đó có thể dùng ROM và RAM nếu cần Khidùng bộ nhớ ngoài port 0 cũng là một port I/O thuần tuý Nó được kết hợp với Busđịa chỉ A0 đến A7 và Bus dữ liệu D0 đến D7 với tín hiệu ALE để chốt byte thấpcủa Bus địa chỉ khi bắt đầu mỗi chu kỳ nhớ Port 2 được cho phép byte cao của địachỉ
1 Truy xuất bộ nhớ chương trình ngoài:
Bộ nhớ chương trình bên ngoài là một bộ nhớ ROM được cho phép bởi tínhiệu PSEN\ Hình vẽ sau đây sẽ mô tả cách kết nối 1 bộ nhớ EPROM với
µC8031/8051
Giản đồ thời gian đọc bộ nhớ chương trình ngoài
Một chu kỳ của µC8031/8051 có 12 xung nhịp Nếu một dao động trên chipđược lái bằng thạch anh 12 Mhz thì một chu kỳ máy kéo dài 1µs Trong một chu kỳ
Port 0 EA\
ALE
Port 2 PSEN\
D7-D0 A7-A0 EPROM
A15-A8 OE\
P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1
Một chu kỳ máy
Trang 20máy sẽ có 2 xung ALE và 2 byte được đọc từ bộ nhớ chương trình (nếu lệnh hiệnhành là lệnh 2 byte thì byte được loại bỏ) Giản đồ thời gian của một lần lấy lệnhđược vẽ ở hình trên:
2 Truy xuất bộ nhớ dữ liệu ngoài:
Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được cho phép ghi /đọc bằng cáctín hiệu điều khiển WR\ và RD\ µC8031/8051 có một lệnh duy nhất truy xuất dữliệu của bộ nhớ dữ liệu ngoài là MOVX dùng con trỏ 16 bit (PDRT) hoặc R0 và R1xem như thanh ghi địa chỉ
3 Giải mã địa chỉ:
Nếu nhiều EPROM hoặc nhiều RAM được giao tiếp với 8031 thì cần có mạchgiải mã địa chỉ Mạch giải mã cũng được thực hiện như các vi xử lý khác, sử dụng
IC 74138 để giải mã
4 Xếp chồng các vùng bộ nhớ và dữ liệu bên ngoài:
Vì bộ nhớ chương trình là ROM nên nảy sinh một vấn đề bất tiện khi pháttriển phần mềm cho 8031 là tổ chức bộ nhớ như thế nào để có thể sửa đổi chươngtrình và có thể ghi trở lại nó được chứa trong bộ nhớ ROM Cách giải quyết là xếpchồng các vùng nhớ chương trình và dữ liệu Một bộ nhớ RAM có thể chứa cảchương trình và dữ liệu bằng cách nối đường OE\ của RAM với một cổng AND cóhai ngõ vào PSEN\ và RD\
Sơ đồ mạch như hình sau cho phép bộ nhớ RAM có hai chức năng vừa làbộ nhớ chương trình vừa là bộ nhớ dữ liệu:
Vậy một chương trình có thể được tải vào RAM bằng cách xem nó như mộtbộ nhớ dữ liệu và thi hành bằng cách xem nó như một bộ nhớ chương trình
VI NGÕ VÀO TÍN HIỆU RESET:
µC8031/8051 có ngõ vào Reset RST tác động ở mức cao trong khoảng thờigian hai chu kỳ xung máy, sau đó xuống mức thấp để 8031 bắt đầu làm việc RSTcó thể kích bằng tay bằng một phím thường hở, sơ đồ mạch Reset như sau:
Trang 21Trạng thái của tất cả thanh ghi trong µC8031/8051 sau khi Reset hệ thốngđược tóm tắt như sau:
Đếm chương trình PCThanh ghi tích lũy AThanh ghi BThanh ghi trạng thái PSW
SPDPRTPort 0 đến port 3
IPIECác thanh ghi định thờiSCON SBUFPCON(HMOS)PCON(CMOS)
0000H00H00H00H07H0000HFFHXXX0 0000B0XX0 0000B00H00H00H0XXX XXXXB0XXX 0000BQuan trọng nhất trong các thanh ghi trên là thanh ghi đếm chương trình, nóđược đặt tại 0000H Khi Reset trở lại mức thấp, việc thi hành chương trình luôn bắtđầu ở địa chỉ đầu tiên trong bộ nhớ chương trình: địa chỉ 0000H Nội dung củaRAM trên chip không bị thay đổi bởi lệnh Reset
B HOẠT ĐỘNG CỦA BỘ ĐỊNH THÌ TIMER:
I GIỚI THIỆU:
Một định nghĩa đơn giản của timer là một chuỗi các flip-flop chia đôi tần sồnối tiếp với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp Ngõ ra của tầngcuối làm xung nhịp cho flip - flop báo tràn của timer (flip - flop cờ) Giá trị nhịphân trong các flip - flop của timer có tể xem như đếm số xung nhịp (hoặc các sựkiện) từ khởi động timer Ví dụ timer 16 bit sẽ đếm từ 0000H đến FFFFH Cờ báotràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H
+5v
10 µ f
Trang 22µC8031/8051 có hai timer 16 bit, mỗi timer có 4 cách làm việc Người ta sửdụng các timer để:
a Định khoảng thời gian
b Đếm sự kiện
c Tạo tốc độ baud cho port nối tiếp trong µC8051/8031
Trong các ứng dụng định nghĩa khoảng thời gian, người ta sử dụng lập trìnhtimer ở một khoảng đều đặn và đặt cờ tràn timer Cờ được sử dụng để đồng bộ hóachương trình để thực hiện một tác động như kiểm tra trạng thái của các ngõ vàohoặc gởi sự kiện ra các ngõ ra Các ứng dụng khác có thể sử dụng việc tạo xungnhịp đều đặn của timer để đo thời gian trôi qua giữa hai sự kiện (Ví dụ: đo độ rộngxung)
Đếm sự kiện dùng để xác định số lần xảy ra của một số sự kiện Một “sựkiện” là bất cứ tác động ngoài nào có thể cung cấp một chuyển trạng thái trên mộtchân của 8051/8031
Truy xuất các timer của 8051/8031 dùng 6 thanh ghi chức năng đặc biệttrong bảng sau:
Địa chỉ Địa chỉ hóa từng bit
TLO Byte thấp của timer 0 8AH KhôngTL1 Byte thấp của timer 1 8BH Không
II THANH GHI CHẾ ĐỘ TIMER (TMOD):
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc chotimer 0 và timer1
7 GATE 1 Bit (mở cổng), khi lên, timer chỉ chạy khi
INT1 ở mức cao
6 C/T 1 Bit chọn chế độ counter/ timer
Trang 231 = Bộ đếm sự kiện
0 = Bộ định khoảng thời gian
5 M1 1 Bit1 của chế độ ( mode)
00: Chế độ 0: timer 13 bit 01: Chế độ 1: timer 16 bit 10: Chế độ 2: tự động nạp lại 8 bit 11: Chế độ 3: tách timer
2 C/T 0 Bit chọn counter/ timer
Tóm tắt thanh ghi TMOD
III THANH GHI ĐIỀU KHIỂN TIMER (TCON)
Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển cho timer0và timer1
TCON.7 TF1 8FH Cờ báo tràn timer Đặt bởi phần cứng khi
tràn, được xóa bởi phần mềm hoặc phầncứng khi bộ xử lí chỉ đến chương trình phụcvụ ngắt
TCON.6 TR1 8EH Bit điều khiển timer1 chạy Đặt/ xóa bằng
timer để cho phần mềm chạy/ ngưng
TCON.5 TF0 8DH Cờ báo tràn timer 0
TCON.4 TR0 8CH Bit điều khiển timer chạy
TCON.3 IE1 8BH Cờ cạnh ngắt cạnh bên ngoài Đặt bởi phần
cứng khi phát hiện một cạnh xuống ởINT1:xóa bằng phần mềm hoặc phần cứngkhi CPU chỉ đến chương trình phục vụ ngắt
TCON.2 IT1 8AH Cờ kiểu ngắt một bên ngoài Đặt/xóa bằng
phần mềm để ngắt ngoài tích cực cạnhxuống/mức thấp
TCON.1 IE0 89H Cờ cạnh ngắt 0 bên ngoài
TCON.0 ITO 88H Cờ kiểu ngắt 0 bên ngoài
Tóm tắt thanh ghi TCON
Trang 24IV CHẾ ĐỘ TIMER:
1 Chế độ 0 – Chế độ TIMER 13 BIT:
- Để tương thích với 804 (có trước 8051)
- 3 bit cao của TLx (TL0 và hoặc TL1) không dùng
2 Chế độ 1 – Chế độ TIMER 16 BIT:
- Hoạt động như timer 16 bit đầy đủ
- Cờ báo tràn là bit TFx trong TCON có thể đọc hoặc ghi bằng phầnmềm
- MSB của giá trị trong thanh ghi timer là bit 7 của THx và LSB là bit
0 của TLx Các thanh ghi timer (TLx/THx) có thể đọc hoặc ghi bất cứlúc nào bằng phần mềm
3 Chế độ 2 – Chế độ tự động nạp lại 8 bit:
TLx hoạt động như 1 timer 8 bit, trong đó THx vẫn giữ nguyên giá trị khinạp Khi số đếm tràn từ FFH đến 00H, không những cờ timer được xét mà giá trịtrong THx đồng thời được nạp vào TLx, việc đếm tiếp tục từ giá trị này lên đếnFFH xuống 00H và nạp lại v.v…Chế độ này rất thông dụng vì sự tràn timer xảy ratrong những khoảng thời gian nhất định và tuần hoàn một khi khởi động TMOD vàTHx
TLx(5 bit)
THx(8 bit)
TFxXung nhịp timer
Cờ báo tràn
TLx(8 bit)
THx(8 bit)
TFxXung nhịp timer
Cờ báo tràn
TLx(8 bit)
THx(8 bit)
TFxXung nhịp timer
Cờ báo tràn
Trang 254 Chế độ 3 – Chế độ tách timer:
- Timer 0 tách thành 2 timer 8 bit (TL0 và TH0), TL0 có cờ báo tràn làTF0 và TH0 có cờ báo tràn là TF1
- Timer 1 ngưng chế độ 3, nhưng có thể khởi động bằng cách chuyểnsang chế độ khác Giới hạn duy nhất là cờ báo tràn TF1 không còn bị tác động khitimer 1 bị tràn vì nó được nối với tới TH0
- Khi timer 1 ở chế độ 3, có thể có thể cho timer 1 chạy và ngưngbắng cách chuyển nó ra ngoài và vào chế độ 3 Nó vẫn có thể được sử dụng bởiport nối tiếp như bộ tạo tốc độ baud hoặc nó có thể sử dụng bằng bất cứ cách nàomà không cần ngắt (vì nó không còn được nối với TF1)
5 Nguồn tạo xung nhịp:
Có hai nguồn tạo xung nhịp có thể có, được chọn bằng cách ghi vào C/T(counter/timer) trong TMOD khi khởi động timer Một nguồn tạo xung nhịp dùngcho định khoảng thời gian, cái khác cho đếm sự kiện
♦ Định khoảng thời gian (interval timing):
Cờ báo tràn
÷ 12
Bộ dao động trong
0: (lên) định khoảng thời gian
Trang 26Nếu C/T=0 hoạt động timer liên tục được chọn vào timer được dùng choviệc định khoảng thời gian Lúc đó, timer lấy xung nhịp từ bộ dao động trên chip.Bộ chia 12 được thêm vào để giảm tần số xung nhịp đến giá trị thích hợp cho cácứng dụng Như vậy, thạch anh 12 MHz sẽ cho tốc độ xung nhịp timer 1 MHz Báotràn timer xảy ra sau một số (cố định) xung nhịp, phụ thuộc vào giá trị ban đầuđược nạp vào các thanh ghi timer TLx/THx.
♦ Đếm sự kiện (Event Couting):
Nếu C/T=1, timer lấy nguồn xung nhịp từ bên ngoài.Trong hầu hết các ứngdụng, nguồn bên ngoài này cung cấp cho timer một xung khi xảy ra một sự kiện –timer dùng đếm sự kiện Số sự kiện được xác định bằng phần mềm bằng cách đọccác thanh ghi TLx/THx vì giá trị 16 bit trong thanh ghi này tăng thêm một cho mỗisự kiện
Nguồn xung nhịp ngoài có từ thay đổi chức năng của các port 3, bit 4 củaport 3 (P3.4) dùng làm ngõ vào tạo xung nhịp bên ngoài cho timer 0 và được gọi là
“T0” Và P3.5 hay “T1” là ngõ vào tạo xung nhịp cho timer 1
Trong các ứng dụng bộ đếm, các thanh ghi Timer được tăng thêm 1 tươngứng với chuyển từ 1 xuống 0 ở ngõ vào bên ngoài: Tx, ngõ vào bên ngoài được lấymẫu trong S5P2 của mọi chu kỳ máy Như vậy, khi ngõ vào cao trong một chu kỳvà thấp trong một chu kỳ kế thì số đếm được tăng thêm một Giá trị mới được xuấthiện trong các thanh ghi trong S3P1 của chu kỳ theo sau chu kỳ trong đó phát hiệnsự chuyển tiếp Do đó, mất 2 chu kỳ máy (2µs) để ghi nhận sự chuyển 1 sang 0, tầnsố ngoài tối đa là 500KHz (giả sử hoạt động ở 12 MHz)
6 Bắt đầu, dừng và điều khiển các Timer:
Phương pháp đơn giản nhất để bắt đầu (cho chạy) và dừng các timer làdùng các bit điều khiển chạy: TRx trong TCON TRx bị xóa sau khi Reset hệthống Như vậy, các timer theo mặc nhiên là bị cấm (bị dừng) TRx được đặt lên 1bằng phần mềm để cho các timer chạy
TRx
Xung nhịp timer
0 = lên: timer dừng
1 = xuống: timer chạy
Các thanh ghi timer
Trang 27Vì TRx ở trong thanh ghi TCON có địa chỉ bit, nên dễ dàng cho việc điềukhiển các timer trong chương trình Ví dụ, cho timer 0 chạy bằng lệnh:
SETB TR0Và dừng bằng lệnh:
CLR TROTrình biên dịch sẽ thực hiện việc chuyển đổi ký hiệu cần thiết từ “TR0”sang địa chỉ bit đúng SETB TR0 chính xác giống như SETB 8CH
Một phương pháp khác để điều khiển các timer là dùng bit GATE trongTMOD và ngõ vào bên ngoài INTx Đặt GATE = 1 cho phép timer sẽ được điềukhiển bằng INTx Việc này rất hiệu dụng cho việc đo độ rộng xung như sau: Giảsử INT0 ở mức thấp nhưng các xung ở mức cao trong khoảng thời gian đo Khởiđộng timer 0 ở chế độ 2 (chế độ timer 16 bit), với TL0/TH0=0000H, Gate=1 vàTR0 = 1 Khi INT0 ở mức cao, timer được mở cổng và được cấp xung nhịp 1 MHz(nếu µC8031/8051 hoạt động ở tần số 12 MHz) Khi INT0 xuống thấp, timer bị
‘đóng cổng’ và thời khoảng của xung tính bằng µs là số đếm trong TL0/TH0 (Cóthể lập trình INT0 để tạo ra một ngắt khi nó xuống thấp)
Hình sau minh họa Timer 1 hoạt động ở chế độ 1 như một timer 16 bit Cácthanh ghi timer TL1/TH1 và cờ báo tràn TF1 trong sơ đồ chỉ các khả năng có thểcó của nguồn tạo xung nhịp và dễ cho chạy, dừng và điều khiển timer
÷ 12
Bộ dao
động trong
0: lên1: xuống
TL1 TH1 TF1 T1
TR1
GATINT1
0: lên1: xuốngC/T
Trang 287 Khởi động và truy xuất các thanh ghi:
Thông thường các thanh ghi được khởi động một lần ở đầu chương trình đểđạt chế độ làm việc đúng Sau đó, trong thân chương trình, các timer được chochạy, dừng, các bit cớ được kiểm tra và xóa, các thanh ghi timer được đọc và cậpnhật v,v… theo đòi hỏi của các ứng dụng
TMOD là thanh ghi thứ nhất được khởi động vì nó đặt chế đôï hoạt động Vídụ các lệnh sau khởi động time1 như timer16 bit(chế độ 1) có xung nhịp từ bộ daođộng trên chip cho vệc định khoảng thời gian:
MOV TMOD = 00010000B
Nếu cần số đếm ban đầu, các thanh ghi timer TL1/TH1 cũng phải đượckhởi động Nhớ lại các timer đếm lên và đặt cờ báo tràn khi có sự chuyển tiếpFFFFH sang 0000H một khoảng 100µs có thể được định thời bằng cách khởi độngtrị cho TL1/TH1 là FF9c:
MOV TL1, # 9CH
MOV TH1, # OFFH
Rồi timer được cho chạy bằng cách điều khiển bit như sau:
SETB TR1
Cờ báo tràn được tự động đạt lên sau 100µ s Phần mềm có thể đợi trong
100µ s bằng cách dùng lệnh rẽ nhánh có điều kiện nhảy đến chính nó trong khi cờbáo tràn chưa được đặt lên 1:
WAIT: JMB TF1, WAIT
Khi timer tràn, cần dừng timer và xóa cờ báo tràn trong phần mềm:
CLR TR1
CLR TF1
* Đọc timer đang chạy:
Trong một số ứng dụng cần đọc giá trị trong các thanh ghi timer đang chạy
Vì phải đọc 2 thanh ghi timer, “sai pha” nếu byte thấp tràn vào byte cao giữa hailần đọc Giá trị có thể đọc được không đúng Giải pháp là đọc byte cao trước, kế đóđọc byte thấp rồi đọc byte cao một lần nữa Nếu byte cao đã thay đổi thì lặp lại các
Trang 29hoạt động đọc Các lệnh dưới đây đọc các lệnh thanh ghi timer TL1/TH1 vào cácthanh ghi R6/R7:
AGAIN: MOV A,TH1
MOV R6, TL1CJNE R7, A
8 Các khoảng ngắn và các khoảng dài:
Dảy các khoảng thời gian có thể định thời là bao nhiêu? vấn đề này đượckhảo sát với 8051/8031 hoạt dộng với tần số 12 Mhz Như vậy xung nhịp của cáctimer có tần số là 1MHz
Khoảng thời gian ngắnnhất có thể bị giới hạn không chỉ bởi tần số xungnhịp của timer mà còn bởi phần mềm Do ảnh hưởng của thời khoảng thời gianthực hiện một lệnh, lệnh ngắn nhất của µC8031/8051 là một chu kỳ máy hay 1 µs.Sau đây là bảng tóm tắt các kỹ thuật để tạo những khoảng thời gian có chiều dàikhác nhau (với giả sử xung nhịp cho µC8031/8051 có tần số 12MHz)
Khoảng thời gian tối đa (µ s ) Kỹ thuật
≈ 1025665535Không giới hạn
- Bằng phần mềm
- Timer 8 bit với tự động nạp lại
- Timer 16 bit
- Timer 16 bit cộng với các vòng lặp phần mềm
Các kỹ thuật để lập trình các khoảng thời gian (Fosc = 12 MHz)
C HOẠT ĐỘNG CỦA BỘ NGẮT (INTERRUPT):
I GIỚI THIỆU:
Một interrupt (ngắt) là sự xảy ra một điều kiện – một sự kiện, mà nó gâytreo tạm thời chương trình trong điều kiện có được phục vụ bởi một chương trìnhkhác
Các Interrupt đóng vai trò quan trọng trong việc thiết kế và cài đặt các ứngdụng vi điều khiển Chúng cho phép hệ thống bất đồng bộ với một sự kiện và giảiquyết một sự kiện trong khi đó một chương trình khác đang thực thi
Một hệ thống được điều khiển bằng interrupt cho ta ảo giác là làm nhiềuviệc đồng thời Dĩ nhiên là CPU đồng thời không thể thực thi hơn một lệnh Nhưngnó có thể tạm treo việc thực thi một chương trình để thực thi một chương trình
Trang 30khác, rồi quay về chương trình thứ nhất Theo cách này, interrupt giống như mộtchương trình con, nhưng có một khác biệt trong hệ thống được điều khiển là sựngắt quảng không xảy ra như kết quả của một lệnh, mà đáp ứng một sự kiện xảy
ra bất đồng bộ với chương trình chính Người ta không biết lúc nào và ở đâuchương trình chính bị ngắt quảng
Chương trình giải quyết ngắt gọi là chương trình phục vụ ngắt (ISR:Iterrupt Service Routine) hoặc bộ xử lý ngắt ISR thực thi đáp ứng ngắt và thôngthường thực hiện tác vụ nhập hay xuất với một thiết bị Khi ngắt xảy ra, chươngtrình chính tạm thời bị treo và rẽ nhánh đến ISR: ISR thi hành và kết thúc bằnglệnh trở về ngắt Chương trình tiếp tục thực thi tại chỗ mà nó tạm dừng Thườngngười ta xem chương trình chính thực thi ở mức nền (cơ sở) và các ISR thực thingắt (Interrupt Level) Người ta dùng thuật ngữ Foreground (phía trước) (Base –Level) chỉ mức nền và Background (phía sau)(Interrupt – level) chỉ mức ngắt Hìnhảnh các ngắt được mô tả trong hình sau:
Thực thi chương trình không có ngắt
Thực thi chương trình có ngắt * : gọi ngắt
** : quay về từ ngắt
II TỔ CHỨC NGẮT CỦA µ C8031/8051:
Thật sự tất cả các nguồn ngắt ở µC8031/8051: 2 ngắt ngoài, 2 từ timer vàmột ngắt Port nối tiếp Tất cả các ngắt theo mặc nhiên đều bị cấm sau khi Resethệ thống và được cho phép bằng phần mềm
Khi có 2 hoặc nhiều ngắt đồng thời, 1 ngắt xảy ra trong khi 1 ngắt khácđang được phục vụ, có cả 2 sự tuần tự hỏi vòng và sơ đồ ưu tiên 2 mức dùng đểxác định thực hiện ngắt Việc hỏi vòng tuần tự thì cố định nhưng ưu tiên ngắt thì cóthể lập trình được
1 Cho phép và cấm các ngắt: (Enabling and Daibling Interrupt)
CHƯƠNG TRÌNH CHÍNH
Trang 31Mỗi nguồn Interrup được cho phép hoặc cấm từng ngắt qua một thanh ghichức năng đặt biệt có địa chỉ bit IE (Interrupt Enable) ở địa chỉ A8H Cũng như xácđịnh bit cho phép riêng biệt cho mỗi nguồn ngắt, có một bit cho phép/cấm toàn bộđược xóa để cấm hoàn toàn các ngắt được xét (đặt lên 1) để cho phép tất cả cácngắt.
Bit Ký hiệu Địa chỉ bit Mô tả (1 = cho phép, 0=cấm)
IE.5 ET2 ADH Cho phép ngắt từ timer 2(8052)
IE.4 ES ACH Cho phép ngắt Port nối tiếp
Bảng: Tóm tắt thanh ghi IEHai bit phải được đặt lên một để cho phép bất kỳ ngắt nào: bit cho phépriêng và bit cho phép toàn bộ.Ví dụ các ngắt từ timer được cho phép như sau:
SETB ET1 ; Cho phép ngắt từ timer 1
SETB EA ; Đặt bit cho phép toàn bộ
Hoặc : MOV IE, #10001000B
Mặc dù hai cách này có cùng một hiệu quả sau khi reset hệ thống nhưnghiệu quả sẽ khác nếu IE được ghi giữa chương trình Cách thứ nhất không ảnhhưởng tới 5 bit trong thanh ghi IE, trái lại cách thứ hai sẽ xóa các bit khác Nênkhởi trị IE theo cách thứ hai ở đầu chương trình (nghĩa là sau khi mở máy hoặcreset hệ thống), nhưng cho phép và cấm các ngắt ngay trong chương trình nêndùng cách thứ nhất để tránh ảnh hưởng đến các bit khác trong thanh ghi IE
2 Ưu tiên ngắt (IP: Interrupt Priority)
Mỗi nguồn ngắt được lập trình riêng vào một trong hai mức ưu tiên quathanh ghi chức năng đặc biệt được địa chỉ bit IP ở địa chỉ B8H
hiệu
Địa chỉ bit Mô tả (1= mức cao hơn, 0 = mức thấp hơn)
IP.5 PT2 BDH Ưu tiên cho ngắt từ timer 2 (8052)
Trang 32IP.4 PS BCH Ưu tiên cho ngắt từ port nối tiếp
IP.3 PT1 BAH Ưu tiên cho ngắt từ timer1
IP.2 PX1 BAH Ưu tiên cho ngắt ngoài
IP.1 PT0 B9H Ưu tiên cho ngắt từ timer 0
IP.0 PX0 B8H Ưu tiên cho ngắt ngoài 0
Bảng: Tóm tắt thanh ghi IP
IP bị xóa sau khi reset hệ thống để (mặc nhiên) đặt tất cả các ngắt ở mức
ưu tiên thấp hơn Ý tưởng “ưu tiên” cho phép một ISR sẽ bị ngắt bởi một ngắt cóđộ ưu tiên cao hơn ngắt đang phục vụ Điều này thì rõ ràng trên µC8051/8031, vìchỉ có hai mức ưu tiên Nếu một ISR có mức ưu tiên thấp đang thực thi khi mộtngắt có ưu tiên cao xảy ra thì ISR bị ngắt ISR cao hơn không bị ngắt
Chương trình mức thực thi ở mức nền (Base-Lavel) và không liên hệ vớibất cứ ngắt nào, có thể luôn luôn bị ngắt quảng bất cứ ưu tiên của ngắt Nếu haiInterrupt (ngắt) có ưu tiên khác nhau xảy ra đồng thời thì Interrupt (ngắt) có độ ưutiên cao hơn được phục vụ trước
3 Hỏi vòng tuần tự (Polling Sequence):
Nếu hai ngắt có cùng độ ưu tiên xảy ra đồng thời, sự hỏi vòng tuần tự sẽxác định cái nào được phục vụ trước tiên Hỏi vòng tuần tự là bên ngoài 0, timer0,bên ngoài, timer1, port nối tiếp và timer
cập nhập ngắt IE1
EX0 ET0
EX1 ET1 ES
PX0 PT0
PX1 PT1 PS
IE0
IE1 IE0
01
1
1
0
01010
0
1
10
các cho phép ngắt cho phép toàn bộ
tuần tự hỏi vòng ngắt ngắt ưu tiên cao
ngắt ưu tiên thấp
Trang 33Hình dươi đây minh họa 5 nguồn ngắt, cơ chế riêng biệt và toàn bộ, hỏivòng tuần tự và các mức ưu tiên Trạng thái của tất cả các nguồn ngắt khả dụngqua các bit cờ tương ứng trong các ISR (Special funetyon Registers) Dĩ nhiên nếucó bất kỳ ngắt nào bị cấm ngắt không xảy ra, nhưng phần mềm vẫn có thể kiểmtra cờ ngắt Các thí dụ về timer và port nối tiếp trong các mục trước đã sử dụng cáccờ ngắt một cách mở rộng mà không dùng ngắt.
Ngắt Port nối tiếp có từ Logic OR của ngắt thu (RI) và phát (TI) Các bit cờtạo các ngắt được tóm tắc trong bảng sau:
Ngắt Cờ Thanh ghi SER và vị trí bit
III XỬ LÝ NGẮT (Processing Interrupt):
Khi ngắt xảy ra và CPU chấp thuận, chương trình chính ngắt quảng nhữnghoạt động sau đây xảy ra:
+ Lệnh hiện hành hoàn tất việc thực thi
+ Cấp PC vào ngăn xếp
+ Trạng thái ngắt hiện hành được cất vào bên trong
+ Các ngắt bị chặn ở mức ngắt
+ Nạp vào PC địa chỉ vectorcủa ISR
+ ISR thực thi
ISR thực thi và đáp ứng ngắt ISR hoàn tất bằng lệnh RET1 (quay về từngắt) Điều này làm lấy lại giá trị cũ PC từ ngăn xếp và lấp lại trạng thái ngắt cũ.Thực thi chương trình chính ở chỗ mà nó bị dừng
Các vector ngắt (Interrupt Vectors):
Khi chấp nhận ngắt, giá trị được nạp vào PC được gọi là vector ngắt Nó làđịa chỉ bắt đầu của ISR cho nguồn tạo ngắt Các vector ngắt được cho bảng sau:
Trang 34Ngắt Cờ Địa chỉ vector
Port nối tiếp T1 hoặc R1 0023H
Bảng : Các vector ngắt Vector Reset hệ thống (RST ở địa chỉ 0000H) được để trong bảng này vìtheo nghĩa này nó giống Interrupt: nó ngắt chương trình chính và nạp giá trị mớicho PC
Khi “chỉ đến một ngắt”, cờ gây ra ngắt tự động bị xóa bởi phần cứng Cácngoại lệ là RI và TI với các ngắt port nối tiếp và TF2, EXF2 với các InterruputTime Vì có hai nguồn có thể cho mỗi ngắt này, không thực tế để CPU xóa cờngắt Các bit này phải được kiểm tra trong ISR để xác định nguồn ngắt và cờ tạongắt sẽ được xóa bằng phần mềm Thông thường một rẽ nhánh xảy ra với một phảiứng thích hợp, phụ thuộc vào nguồn ngắt
Vì các vector ngắt ở phần đầu của bộ nhớ chương trình, nên lệnh thứ nhấtcủa chương trình chính thường là lệnh nhảy qua chương trình chính này Ví dụ nhưlệnh LJMP 0030H
IV THIẾT KẾ CHƯƠNG TRÌNH DÙNG CÁC NGẮT:
Các ví dụ trong các mục trưóc đã không sử dụng các ngắt nhưng đã có vònglặp đợi để kiểm tra các cờ báo tràn (TFO hoặc TF1) hoặc các cờ thu và cờ phátPort nối tiếp (TI và RI) Vấn đề trong phương pháp này là thời gian thực thi có gíatrị của CPU hoàn toàn không bị tiêu tốn trong việc đợi các cờ Điều này hoàn toànkhông thích hợp với các ứng dụng của vi điều khiển, trong đó bộ vi điều khiển phảitương tác với nhiều thiết bị xuất nhập đồng thời
Trong phần này ta sẽ khảo sát cách phát triển chương trình dùng vi điềukhiển
Khung đề nghị cho một chương trình phục vụ ngắt như sau:
ORS 0000H ; điểm vào Reset
Ljmp main; các điểm vào ISR
Org 0030H; điểm vào chương trình chính
Trang 35Main: chương trình chính bắt đầu.
Lệnh thứ nhất nhảy tới địa chỉ 0030H, vừa trên các vị trí mà các ISR bắtđầu Như được vẽ hình sau, chương trình chính bắt đầu ở địa chỉ 0030H
1.Chương trình phục vụ ngắt có kích thước nhỏ :
Các chương trình phục vụ ngắt phải bắt đầu ở gần phần đầu của bộ nhớchương trình ở các địa chỉ trong bảng các vectơr ngắt Mặt dù có 8 byte ở các điểmvào ngắt, thường đủ bộ nhớ để thực hiện các hoạt động mong muốn và quay vềchương trình chính từ IRS
Nếu chỉ có một nguồn ngắt được sử dụng, ví dụ timer 0, thì có thể sử dụngkhung sau:
ORS 000H; Reset
LJMP MAIN
ORG 000BH; điểm vào time 0
TOIRS: ; ISR cho time 0 bắt đầu
RETI; quay về chương trình chính
MAIN: Chương trình chính
Nếu sử dụng nhiều ngắt phải đảm bảo là chúng phải bắt đầu từ vị trí đúngvà không chạy qua ISR kế Vì chỉ có một ngắt được sử dụng trong ví dụ trên,chương trình chính có thể bắt ngay sau lệnh RETI
Chương trình chính
Các điểm vào Resetvà ngắtLJMP main
FFFFH
0030H0029H
0000H
Hình : Tổ chức bộ nhớ khi dùng các ngắt
Trang 362 Các chương trình phục vụ ngắt có kích thước lớn:
Nếu ISR dài hơn 8 byte, có thể cần chuyển nó tới một nơi nào đó trong bộnhớ chương trình hoặc có thể để nó đi lố qua điểm vào của ngắt kế Tiêu biểu làISR bắt đầu với lệnh nhảy đến vùng nhớ khác ở đó có thể mở rộng chiều dài cácISR Ví dụ lúc này chỉ xét timer 0, có thể sử dụng khung sau:
ORS 000H; Reset
LJMP MAIN
ORG 000BH; các vector ngắt tiếp theo
MAIN:
TOISR: ; ISR cho time 0
RETI: ; quay về chương trình chính
Để đơn giản chương trình chỉ làm vệc một lúc ban đầu Chương trình khởiđộng Timer, Port nối tiếp và các thanh ghi ngắt cho thích hợp và rồi không làm gìcả Công vệc được hoàn toàn làm trong ISR Sau các khởi động, chương trình chứacác lệnh sau:
Hay dạng viết gắn gọn:
SJMPKhi ngắt xảy ra, chương trình chính bị ngắt quảng tạm thời trong khi ISRthực thi Lệnh RETIở cuối ISR trả điều khiển về chương trình chính và nó tiếp tụckhông làm gì cả Trong nhiều ứng dụng điều khiển, nhiều công việc thật ra đượcthực hiện hoàn toàn trong ISR
Vì sử dụng ngắt, nên lệnh SJMP (HERE: SJMP HERE) có thểđược thay thế bằng các lệnh thực hiện công việc khác trong ứng dụng
V CÁC NGẮT CỦA µ C8051/8031:
1 Các ngắt Timer:
Trang 37Các ngắt timer có địa chỉ vertor ngắt là 000BH (Timer 0) và 001BH(Timer1) Ngắt Timer xảy ra khi các thanh ghi Timer (TLX/THX) tràn và set các cờbáo tràn (TFX) lên 1.
Chú ý rằng các cờ Timer (TFX) không bị xóa bằng phần mềm Khi chophép ngắt, tự động bị xóa bằng phầm cứng khi CPU chuyển đến ngắt
2 Các ngắt cổng nối tiếp:
Ngắt cổng nối tiếp xảy ra khi cờ ngắt phát (TI) hoặc cờ ngắt thu (RI) đượcđặt lên 1 Ngắt phát xảy ra khi truyền một ký tự vừa được ghi vào SBUF Ngắt thuxảy ra khi một ký tự đã được nhận xong và đang đợi trong SBUF được đọc
Ngắt cổng nối tiếp hơi khác với các ngắt Timer Cờ gây ngắt cổng nối tiếpkhông bị xóa bằng phần cứng khi CPU chuyển tới ngắt Nguyên do là có hai nguốncổng ngắt nối tiếp: TI và RI Nguồn ngắt phải được xác định trong ISR và cờ tạongắt sẽ được xóa bằng phần mềm
3 Các ngắt ngoài:
Các ngắt xảy ra khi có một mức thấp hoặc cạnh xuống trên chân INT0hoặc INT1 của µC8051/8031 Đây là chức năng chuyển đổi của các bit Port 3: P3.2(Chân 12) và P3.3 (chân 13)
Các cờ tạo ngắt là các bit IE0 và IE1 trong TCON Khi quyền điều khiểnđã chuyển đến ISR, cờ tạo ngắt chỉ được xóa nếu ngắt được tích cực ở cạnh xuống.Nếu ngắt được tích cực theo mức, thì nguồn yêu cầu ngắt bên ngoài sẽ điều khiểnmức của cờ thay cho phần cứng
Sự lựa chọn ngắt tích cực mức thấp hay tích cực cạnh xuống được lập trìnhqua các bit IT0 và IT1 trong TCON Ví dụ, nếu IT1 = 0, ngắt ngoài 1 được kíchkhởi bằng mức thấp ở chân INT1 Nếu IT1 = 1, ngắt ngoài 1 được kích khởi bằngcạnh Trong chế độ này, nếu các mẫu liên tiếp trên chân INT1 chỉ mức cao trongmột chu kỳ và thấp trong một chu kỳ kế, cờ yêu cầu ngắt IE1 trong TCON được đặtlên một Rồi bit cờ IE2 yêu cầu ngắt
Vì các chân ngắt ngoài đã được lấy mẫu một lần ở mỗi chu kỳ máy, ngõvào nên được giữ trong tối thiểu 12 chu kỳ dao động để đảm bảo lấy mẫu đúng.Nếu ngắt ngoài được tác động theo cạnh xuống, nguồn bên ngoài sẽ giử chân yêucàu cao tối thiểu 1 chu kỳ và giữ nó ở mức thấp một chu kỳ nữa để phát hiện đượccạnh xuống IE1 và IE0 tự động được xóa khi CPU chuyển tới ngắt
Nếu ngắt ngoài được tác động theo mức, nguồn bên ngoài phải giữ yêucầu tác động cho đến khi ngắt được yêu cầu thự c sự được tạo ra Rồi nó phải tác
Trang 38động yêu cầu trước khi ISR được hoàn tất, nếu không một ngắt một ngắt sẽ đượclập lại Thông thường khi vào ISR người ta làm nguồn yêu cầu đưa tín hiệu tạongắt về trạng thái không tác động.
D TẬP LỆNH CỦA µ C8051/8031:
Tập lệnh của µC8051/8031 gồm có 225 lệnh gồm 139 lệnh một byte, 92lệnh byte và 24 lệnh 3 byte
I CÁC CHẾ ĐỘ ĐÁNH ĐỊA CHỈ:
Trong tập lệnh có 8 chế độ đánh địa chỉ:
1 Địa chỉ thanh ghi (Register Addressing):
µC 8051/8031có bốn bank thanh ghi, mỗi bank thanh ghi có 8 thanh ghiđánh từ R0 đến R7 Tại mỗi thời điểm chỉ có một bank thanh ghi được tích cực.Muốn chọn bank thanh ghi nào ta chỉ cần gán các bit nhị phân thích hợp vàoRSI(PSW.4) và PRO(PSW.3) trong thanh ghi trạng thái chương trình (PSW)
Ngoài ra, một thanh ghi có chức năng đặc biệt như 8 thanh ghi tích lũy, contrỏ dữ 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ệnh này thanh ghi tích lũy được ký hiệu là”A”, con trỏ dữ liệulà”DTPR”, thanh ghi đếm chương trình “PC”, cờ nhớ là”C”, cặp thanh ghi tích lũylà”A,B”
Địa chỉ thanh ghi
2 Địa chỉ trực tiếp (Direct Addressing):
Trong chế độ này, các thanh ghi bên trong µC8051/8031 được đánh địa chỉtrực tiếp bằng 8 bit địa chỉ nằm trong byte thứ hai của mã lệnh
Địa chỉ trực tiếp
Địa chỉ trực tiếpMã lệnh
Trang 39Dù vậy trình tự hợp dịch cho phép gọi tên các thanh ghi có chức năng đặcbiệt (có địa chỉ trực tiếp từ 80H đến FFH) Ví dụ, Port cho Port 0, TMOD cho thanhghi chế độ Timer,…
3 Địa chỉ gián tiếp (Indirect Addressing):
RO và RI được dùng để chỉ địa chỉ ô nhớ mà tác động đến Người ta quiước dùng dấu @ trước RO và RI
Địa chỉ gián tiếp
4 Địa chỉ tức thời:
Người ta dùng dấu # trướ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 ký số hay một biểu thức toán học… Trình hợp dịch sẽ tự độngtính toán và thay thế dữ liệu trực tiếp vào mã lệnh
Địa chỉ tức thời
5 Địa chỉ tương đối (Relaytive Addessing):
Địa chỉ tương đối được dùng trong các lệnh nhảy µC8031/8051 dùng giá trị
8 bit có dấu để cộng thanh đếm chương trình (PC) Tầm nhảy của lệnh này trongkhoảng từ –128 đến 127 ô nhớ Trước khi cộng, thanh ghi PC sẽ tăng đến địa chỉcủa 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ế chứ không phải lệnh nhảy.Thường lệnh này có liên quan đến nhãn được định nghĩa trước
Trang 40Địa chỉ tương đối
6 Địa chỉ tuyệt đối (Absolute Addessing):
Địa chỉ tuyệt đối dùng trong các lệnh ACALL và AJMP Các lệnh 2 Bytedùng để rẽ nhánh vào một trang 2 Kbyte của bộ nhớ chương trình bằng cách cấp
11 bit địa chỉ thấp (A0 A10) để xác định địa chỉ đích trong trang mã Còn 5 bit caocủa địa chỉ đích (A11 A15) chính là 5 bit cao hiện hành trong thanh ghi đếmchương trình Vì vậy, địa chỉ của lệnh theo sau lệnh rẽ nhánh và địa chỉ đích củalệnh rẽ nhánh cần phải cùng trang mã 2KByte (có cùng 5 bit địa chỉ cao)
Địa chỉ tuyệt đối
7 Địa chỉ dài (Long Addressing):
Địa chỉ dài dùng cho lệnh LCALL và LJMP Các lệnh này chiếm 3 byte vàdùng 2 byte sau (byte 2 và byte 3) để xác định địa chỉ đích của lệnh (6bit) Ưuđiểm của lệnh nàylà có thể sử dụng trong toàn vùng nhớ 64KB Tuy nhiên, lệnhnày chiếm nhiều byte và phụ thuộc vào vị trí ô nhớ
Địa chỉ dài
8 Địa chỉ tham chiếm:
Địa 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
Mã lệnh offset tương đốiA10
Xác định trang mã Xác định địa chỉ tương đối trong mã