Hoạt Động Của Thanh Ghi TIME

Một phần của tài liệu Thiết kế Hệ Thống Quảng Cáo. (Trang 28)

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 CA 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. (adsbygoogle = window.adsbygoogle || []).push({});

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 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 bất kỳ cỏch nào khỏc là theo địa chỉ của chỳng vỡ chỳng khụng cú tờn.

2 Cỏc thanh ghi SFSR và cỏc địa chỉ của chỳng.

Trong cỏc thanh ghi được núi đến từ trước đến giờ ta thấy rằng cỏc thanh ghi R0 - R7 là một phần trong 128 byte của bộ nhớ RAM. Vậy cũn cỏc

Một phần của tài liệu Thiết kế Hệ Thống Quảng Cáo. (Trang 28)