AT89C51 cú hai timer 16 bit, mỗi timer cú bốn cỏch làm việc. Người ta sử dụng cỏc timer để:
• Tạo tốc độ baud port nối tiếp trong 89C51.
Trong cỏc ứng dụng định khoảng time, người ta lập trỡnh timer ở những khoảng đều đặn và đặt cờ tràn timer. Cờ được dựng để đồng bộ húa chươ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ào hoặ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 xung nhịp đều đặn của timer để đo thời gian trụi qua giữa hai sự kiện (Vi dụđo độ rộng xung).
Truy xuất cỏc timer của AT89C51 dựng sỏu thanh ghi chức năng đặc biệt cho trong bảng sau:
SFR Mục đớch Địa chỉ Địa chỉ húa từng
bit
TCON Điều khiểm timer 88H Cú
TMOD Chếđộ timer 89H Khụng
TLO Byte thấp của Timer 0 90H Khụng
TL1 Byte thấp của Timer 1 91H Khụng
TH0 Byte cao của Timer 0 92H Khụng
TH1 Byte cao của Timer 1 93H Khụng
Cỏc Thanh nghi chức năng của timer trong 8031
Bảng 2.6:Cỏc Thanh nghi chức năng của timer trong 8031
Thanh Ghi ChếĐộ Timer (TMOD):
Cả hai bộ định thời timer 0 và timer 1 đều dựng chung một thanh nghi được gọi là TMOD để thiết lập cỏc chế độ làm việc khỏc nhau của bộ định thời. Thanh ghi TMOD là thanh nghi 8 bớt gồm cú 4 bớt dành cho bộ timer0 và 4 bớt dành cho timer 1. Trong đú hai bớt thấp của chỳng dung để
thiết lập chếđộ của bộ định thời, cũn 2 bớt cao dựng để xỏc định phộp toỏn. Dưới đõy chung ta sẽ tỡm hiểu về cỏc phột toỏn.
Bớt Tờn Timer Mụ tả 7 Gate 1 Bớt mở cổng = 0, Set TRx 6 C/T 1 Bớt chọn chếđộ Count/ Timer 1=bộđếm sự kiện 0 = Bộđịnh khoảng thời gian 5 M1 1 Bớt 1 của chếđộ mode 4 M0 0 Bớt 0 của chếđộ mode 3 GATE 0 Bớt mở cổng = 0, Set TRx 2 C/T 0 Bớt chọn chếđộ Count/ Timer 1 M1 0 Bớt 1 của chếđộ mode 0 M0 0 Bớt 0 của chếđộ mode
Thanh Ghi Điều Khiển Timer (TCON)
Thanh nghi TCON chứa cỏc bớt trạng thỏi và cỏc bớt điều khiển cho timer 1, timer 0.
Bớt Ký hiệu
Địa chỉ Mụ tả
TCON 7 TF1 8FH Cơ bản tràn timer 1. Đặt bởi phần cứng khi được xúa bở phần mềm, hoặc phần cứng khi ử lý chỉđến chương trỡnh phục vụ ngắt
TCON 6 TR1 8EH Bớt điều khiển timer 1 chạy đặt xúa bằng mềm để cho timể chạy ngừng
TCON 5 TF0 8DH Cờ bỏo tràn timer 0
TCON 4 TR0 8CH Bớt điều khiển timer 0 chạy
TCON 3 IE1 8BH Cớ cạnh ngắt 1 bờn ngoài. Đặt bởi phần khi phỏt hiện một cạnh xuống ở INT1 xúa phần mềm hoạc phần cứng khi CPU chỉ đến ng trỡnh phục vụ ngắt
TCON 2 IT1 8AH Cờ kiểu ngắt 1 bờn ngoài. đặt xúa bằng mềm để ngắt ngoài tich cực cạnh xuống thấp
TCON 1 IE0 89H Cờ cạnh ngắt 0 bờn ngoài TCON 0 IT0 88H Cờ cạnh ngắt 0 bờn ngoài
Bảng 2.8: Cỏc thanh nghi chức năng của timer trong 8031
Chỳng ta đó biết cụng dụng của cỏc cờ TR0 và TR1 để bật/tắt cỏc bộ định thời. Cỏc bớt này thuộc thanh ghi điều khiển bộđịnh thời TCON (Time Control). Đõy là thanh ghi 8 bớt như bảng trờn giời thiệu, bốn bớt cao dựng để lưu cỏc TF, TR cho cả timer 0 và time 1. Cũn bốn bớt thấp được thiết lập dành cho điều khiển bớt ngắt. Cũng cần lưu ý rằng thanh ghi TCON là thanh nghi cú thể định địa chỉ bớt được lờn hoàn toàn cú thể thay cỏc lệnh như “SETB TR1” và “CLR TR1” bằng cỏc lệnh tương ứng như “SET TCON.6” và CLR TCON.6”, xem bảng sau.
Đụi vơi timer 0
SETB TR0 = SETB TCON.4 SETB TR0 = CLR TCON.4 SETB TF0 = SETB TCON.5 CLR TF0 = CLR TCON.5
Đụi với Timer 1
SETB TR1 = SETB TCON.6 CLR TR1 = CLR TCON.6 SETB TF1 = SETB TCON.7 CLR TF1 = CLR TCON.7
Bảng 2.9: Cỏc lệnh tương ứng đối với thanh ghi điều khiển bộđịnh thời
Khởi Động Và Truy Xuất Thanh Ghi Timer
Thụng thường cỏc thanh ghi được khởi động một lần đầu ở chương trinh để đặt ở chế độ làm việc đỳng. Sau đú trong thõn chương trỡnh, cỏc thanh ghi
timer được cho chạy, dừng cỏc bớt được kiểm tra và xúa, cỏc thanh ghi timer được đọc và cập nhật… theo dừi hỏi 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 timer 1 như timer 16 bớt (Chế độ 1) cú xung nhịp từ bộ dao động trờn chớp cho việc định khoảng thời gian.
MOV TMOD, #1B
Lệnh này sẽ đặt M1 = 1 và M0 = 0 cho chế độ 1, C/T=0 và Gate = 0 cho xung nhịp nội và xúa cỏc bớt chếđộ Timer 0. Dĩ nhiờn, timer khụng thật sự bắt đầu định thời cho đến khi bớt điều khiển chạy TR1 được đặt lờn 1.
Nếu cần số đếm ban đầu, cỏc thanh ghi TL1/TH1 cũng phải được khởi động, một khoảng 100àm cú thểđược khởi động bằng cỏc khơi động giỏ trị cho TH1/TL1 là FF9CH
MOV TL1 , #9CH MOV TH1 , #0FFH
Rồi timer được cho chạy bằng cỏch đặt bớt điều khiển chạy như sau:
SETB TR1
Cờ bỏo tràn được tự động đặt lờn một sau 100àm. Phần mềm cú thể đời trong 100àm 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 lờn 1:
WAIT: JNB 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
Một thanh ghi quan trọng khỏc của 8051 là bộđếm chương trỡnh. Bộ đếm chương trỡnh cú nhiệm vụ trỏ đến địa chỉ của lệnh kế tiếp cần được thực hiện. mỗi khi CPU nhận mó lệnh từ bộ nhớ ROM, thỡ bộ đếm chương trỡnh tăng lờn để trỏ đến lệnh kế tiếp. Bộ đếm chương trỡnh 8051 rộng 16bớt, điều đú cú nghĩa là, 8051 cú thể truy cập được địa chỉ chương trỡnh từ 0000 đến FFFFH, tổng cộng là 64Kb. Tuy nhiờn khụng phải thành viờn nào của 8051 cũng cú đủ 64Kb ROM/Chớp. Vấn đề tiếp theo là, khi 8051 được bật nguồn thỡ địa chỉ khởi đầu được bắt đầu từđõu?
Địa chỉ bắt đầu khi 8051 được bật nguồn
Mỗi họ vi điều khiển khi được bật nguồn đều được bắt đầu từ những địa chỉ khỏc nhau. Đối với 8051 địa chỉ bắt đầu từ 0000. Bật nguồn cú nghĩa là cấp điện ỏp Vcc đến chõn reset, núi cỏch khỏc khi 8051 được cấp nguồn, thỡ bộđếm chương trỡnh cú giỏ trị 0000. điều naỳ cú nghĩa nú sẽ thực hiện mó lệnh đầu tiờn được lưu ở ROM 0000. Tại sao lại ở vị trớ này của bộ nhớ ROM? Đú là nhờ chỉ dẫn ORG ở chương trỡnh nguồn. Dưới đõy là toàn bộ trỡnh tự hoạt động của bộđếm chương trỡnh trong quỏ trỡnh nhận và thực thi một chương trỡnh mẫu.
Mó Chương trinh Ở ROM
Để hiểu rừ hơn về bộ đếm chương trỡnh, ta sẽ xem xột hoạt động của bộ đếm chương trỡnh mỗi khi nhận và thực hiện lệnh. Ta khảo sỏt một tệp liệt kờ của chương trỡnh mẫu được lưu ở ROM. Như cú thể thấy mó lệnh và toỏn hạng của từng lệnh được liệt kểở bờn trỏi của tệp liệt kờ.
Địa chỉ ROM Ngụn Ngữ Mỏy Hợp Ngữ
00000 7D25 MOV R5, #25H
00000 7F34 MOV R7, #34H
Địa Chỉ Mó lệnh 0000 7D 0001 25 0002 7F 0003 34 0004 74 0005 00 0006 2D 0007 2F 0008 24 0009 12 000A 80 000B FE Bảng 2.11: Nội dung ROM
Sau khi chương trỡnh được nạp vào ROM của họ 8051, như AT89C51 thỡ mó lệnh và toỏn hạng được đặt luụn bắt đầu từđịa chỉ 0000.
Nội dung ROM của chương trinh trờn được giới thiệu ở bảng sau. Tại địa chỉ 0000 cú mó 7D là mà lệnh chuyển một giỏ trị vào thanh ghi R5, cũn địa chỉ 0001, chứa toỏn hạng (Giỏ trị 250000) Cần được chuyển vào R5. Do vậy lệnh “MOV R5 #25H” cú mó lệnh là “7D25” trong đú 7D là mó lệnh cũn 25 là toỏn hạng. Tương tự mó mỏy “7F 34” được ghi ởđịa chỉ 0002 và 0003 biờu diễn mà lệnh và toỏn hạng của lệnh “MOV R7, #34H” cũng như vậy, mó mỏy “74 00” tại địa chỉ 0004 và 0005 là biểu diễn lệnh “MOV A, #0” ụ nhớ 0006 cú mó 2D là mó lệnh của “ADD A, R5”, cũn ụ nhớ 007 cú nội dung 2F là mó lệnh của “ADD A, R7” mó lệnh của lệnh “ADD A, #12H” được đặt ở ụ nhớ 0008 và toỏn hạng 12H được đặt ở ụ nhớ 0009. ễ nhớ 000A cú mó lệnh của lệnh SJMP và địa chỉ đớch của nú được đặt ở ụ nhớ 000B. 00004 2D ADD A, R5 00006 2F ADD A, R7 00008 2412 ADD A, #12H
Trỡnh Tự Thực Hiện Chương Trỡnh
Giả sử chương trỡnh trờn đó được ghi vào ROM của 8051 thỡ trỡnh tự cỏc bước hoạt động khi được cấp nguồn như sau:
• Khi 8051 được bật nguồn bộ đếm chương trỡnh PC cú nội dung 0000 và bắt đầu
• Nạp mó lệnh đầu tiờn từ vị trớ nhớ đầu tiờn 0000 của ROM chương trỡnh. Đối với chương trỡnh nờu trờn đú là mó 7D(Chuyển một toỏn hạng vào R5). Khi thực hiện
• Mó lệnh CPU nhận giỏ trị 25 và chuyển vào R5. Đến đõy việc thực hiện một lệnh được kết thỳc. Sau đú bộ đếm chương trỡnh được tăng lờn để trỏ tới ụ nhớ 0002 (PC = 0002), tại đõy cú chứa mó 7Flà mó của lệnh chuyển một toỏn hạng vào R7 “MOV R7” ,…..
Khi thực hiện mó lệnh 7F thỡ giỏ trị 34H được chuyển vào R7 sau đú PC được tăng lờn 0004
• ễ nhớ 0004 chứa mó lệnh của lệnh “MOV A, #0”, lệnh này được thựchiện và sau đú PC được tăng lờn 2 đơn vi: PC = 0006, lưy ý tất cả cỏc lệnh nờu trờn đều là cỏc lệnh 2byte
• Với PC= 0006, bộđếm chương trỡnh trỏ tới vị trớ kế kiếplà : “ADD A, R5” Đõy là lệnh 1 byte, sau khi thực hiện lệnh PC = 0007
• Ngăn nhớ 0007 chứa mó 2F là mó lệnh của “ADD A,R7” Đõy là lệnh 1Byte sau khi thực hiện PC được tăng lờn 0008 quỏ trỡnh này cứ tiếp tục cho đến khi tất cả mọi lệnh đều được nhận và thực hiện. Do bộ đếm chương trỡnh cú ý nghĩa và cú cỏch thức làm việc như vậy lờn ở một số bộ vi xử lý, đặc biệt là dũng Intel X86, bộ đếm chương trỡnh cũn được gọi là con trỏ lệnh IP
Điểm cần chỳ ý là khụng cú thành viờn nào của họ 8051 cú thể truy cập được trờn 64kb mó lệnh, vỡ bộđếm chương trỡnh của 8051 là 16bit (Dải địa chỉ từ 0000 đến FFFFH)
Điểm lưu ý số 2 là lệnh đõu tiờn của Rom chương trỡnh đều đặt ở 0000, cũn lệnh cuối cựng phục thuộc vào dung lượng của ROM/Chớp của mỗi thành viờn của họ 8051. Như vậy 8751 và AT98C51 với 4 kb ROM thỡ dải địa chỉ sẽ từ 0000 đến 0FFFH do đú, ngăn nhớđầu tiờn cú địa chỉ 0000 và ngăn nhớ cuối cựng cú địa chi 0FFFH
Với 4k byte khụng gian nhớ ROM trờn Chớp ta cú 4096 byte bằng 1000H ở dạng Hexa (4*1024 = 4096D = 1000H). Bộ nhớ này được sắp xếp trong cỏc ngăn nhớ từ 0000 đến 0FFFH. Lưy ý khụng luụn là ngăn nhớđầu tiờn.
Với 32K byte nhớ ta cú 32768 byte (32*1024 ). Chuyển 32768 về số hexa ta nhận được 8000H.
0FFF
1FFF
CHƯƠNG III
CÁC CHẾ ĐỘ ĐỊNH ĐỊA CHỈ CỦA 8051
CPU cú thể truy cập dữ liệu theo nhiều cỏch khỏc nhau. Dữ liệu cú thể ở trong một thanh ghi hoặc trong bộ nhớ hoặc được cho như một giỏ trị tức thời cỏc cỏch truy cập dữ liệu khỏc nhau được gọi là cỏc chế độ đỏnh địa chỉ. Phần này chỳng ta bàn luận về cỏc chếđộđỏnh địa chỉ của 8051
Cỏc chế độ đỏnh địa chỉ khỏc nhau của bộ vi xử lý được xỏc định như nú được thiết kế và do vậy khi lập trỡnh khụng thể đỏnh địa chỉ khỏc nhau là:
1. tức thời 2. Theo thanh ghi 3. Trực tiếp 4. giỏn tiếp qua thanh ghi 5. Theo chỉ số
I .CÁC CHẾĐỘĐỊNH ĐỊA CHỈ TỨC THỜI VÀ THEO THANH GHI
1 Chếđộđỏnh địa chỉ tức thời
Trong chế độ đỏnh địa chỉ này, toỏn hạng nguồn là một hằng số và như tờn gọi, của nú thỡ khi một lệnh được hợp dịch toỏn hạng đi tức thi ngay sau mó lệnh. Lưu ý rằng trước dữ liệu tức thời phải được đặt dấu ‘’(#)’’ chế độ đỏnh địa chỉ này cú thể được dựng để nạp thụng tin vào bất kỳ thanh ghi nào kể cả thanh ghi con trỏ dữ liệu DPTR.
DPTR là 16 bit nú cũng cú thể được truy cập như 2 thanh ghi 8 bit DPH và DPL trong đú DPH là byte cao và DPL là byte thấp.
2. chếđộđỏnh địa chỉ theo thanh ghi:
Chế độ đỏnh địa chỉ theo thanh ghi là sử dụng cỏc thanh ghi để dữ liệu cần được thao tỏc cỏc .vớ dụ vềđỏnh địa chỉ theo thanh ghi như sau:
Cỏc thanh ghi nguồn và đớch phải phự hợp về kớch thước.
Hay núi cỏch khỏc, nếu viết “ MOV DPTR, A” sẽ cho một lỗi vỡ nguồn là thanh ghi 8 bit và đớch lại là thanh ghi 16 bit.
Để ý rằng ta cú thể chuyển dữ liệu giữa thanh ghi tớch luỹ A và thanh ghi Rn (n từ 0 đến 7) nhưng việc chuyển dữ liệu giữa cỏc thanh ghi Rn thỡ khụng được phộp. Vớ dụ, lệnh “MOV R4, R7” là khụng hợp lệ.
Trong hai chế độ đỏnh địa chỉ đầu tiờn, cỏc toỏn hạng cú thể hoặc ở bờn trong thanh ghi hoặc được gắn liền với lệnh. Trong hầu hết cỏc chương trỡnh dữ liệu cần được xử lý thường ở trong một số ngăn của bộ nhớ RAM hoặc trong ROM .Rất nhiều cỏch để truy cập dữ liệu này mà phần tiếp theo sẽ xột đến.
II. TRUY CẬP BỘ NHỚ SỬ DỤNG CÁC CHẾ ĐỘ ĐỊNH ĐỊA CHỈ KHÁC
NHAU
1 Chếđộđỏnh địa chỉ trực tiếp.
Như đó núi ở trong 8051 cú 128 byte bộ nhớ RAM. Bộ nhớ RAM được gỏn cỏc địa chỉ từ 00 đến FFH và được phõn địachỉ như sau:.
• Cỏc ngăn nhớ từ 00 đến 1FH được gỏn cho cỏc băng thanh ghi và ngăn xếp.
• Cỏc ngăn nhớ từ 20H đến 2FH được dành cho khụng gian đỏnh địa chỉ theo bit để lưu cỏc dữ liệu 1 bit.
• Cỏc ngăn nhớ từ 30H đến 7FH là khụng gian để lưu dữ liệu cú kớch thước 1byte.
Mặc dự toàn bộ byte của bộ nhớ RAM cú thểđược truy cập bằng chế độ đỏnh địa chỉ trực tiếp, nhưng chế độ này thường được sử dụng nhất để truy cập cỏc ngăn nhớ RAM từ 30H đến 7FH. Đõy là do một thực tế là cỏc
chỳng là R0 - R7 cũn cỏc ngăn nhớ khỏc của RAM thỡ khụng cú tờn như vậy. Trong chế độ đỏnh địa chỉ trực tiếp thỡ dữ liệu ở trong một ngăn nhớ RAM mà địa chỉ của nú được biết và địa chỉ này được cho như là một phần của lệnh. Khỏc với chế độ đỏnh địa chỉ tức thỡ mà toỏn hạng tự nú được cấp với lệnh dấu (#) là sự phõn biệt giữa hai chếđộđỏnh địa chỉ.
Nhưđó núi ở trước thỡ cỏc ngăn nhớ trừ 0 đến 7 của RAM được cấp cho bằng 0 của cỏc thanh ghi R0 - R7. Cỏc thanh ghi này cú thểđược truy cập theo 2 cỏch như sau:
MOV A, R4 MOVA, 4
Hai lệnh này giống nhau đều sao nội dung thanh ghi R4 vào A MOV A, 7;
MOV A,R7
Hai lệnh này đều như nhau là sao nội dung R7 vào thanh ghi A
Mặc dự sử dụng cỏc tờn R0 - R7 dễ hơn cỏc địa chỉ bộ nhớ của chỳng nhưng cỏc ngăn nhớ 30H đến 7FH của RAM khụng thểđược truy cập theo