I.1 Lời nói đầu 3
I.2 Nhiệm vụ của đề tài 4
I.3 ý tưởng thiết kế 4
I.4 Phương án thực hiện 4
Phần II : Lý thuyết liên quan 5
II.1 Matrix 8x8 6
II.2 Transistor 18
II.3 IC số 25
II.3.1 IC 74245 25
II.3.2 IC 74164 30
II.4 IC ULN2803 33
II.5 Vi điều khiển 36
Phần III : Thiết kế mạch 82
III.1 Sơ đồ khối & chức năng từng khối 82
III.2 Thiết kế chi tiết 83
III.2.1 Khối nguồn 83
III.2.2 Khối Điều khiển (khối CPU) 85
III.2.3 Khối đệm dữ liệu 91
III.2.4 Khối quét cột 93
III.2.5 Khối hiển thị 93
Phần IV: Thi công mạch 96
IV.1 Sơ đồ nguyên lý 96
IV.2 Bố trí linh kiện 98
IV.3 Sơ đồ board 100
Phần V : Tổng kết 103
V.1 Kết luận 103
V.2 Nêu hướng phát triển của đề tài 103
V.3 Tài liệu tham khảo 104
95 trang |
Chia sẻ: lethao | Lượt xem: 5028 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Tốt nghiêp mạch quang báo - Điều khiển ma trận led, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
kỳ dao động từ P1 – S3 đến hết P1 – S4 và từ P1 – S6 đến hết P1 – S1 của chu kỳ máy tiếp theo. Trong khoảng thời gian phát xung chọn thì byte m• lệnh được đọc từ bộ nhớ chương trình để nhập và on chip.
b) Bộ nhớ dữ liệu ngoại trú
Hình 1.8 Truy cập bộ nhớ dữ liệu ngoài
Bộ nhớ dữ liệu ngoại trú được cho phép bởi các tín hiệu / WR và /RD ở các chân P3.6 và P3.7. Vi điều khiển truy cập bộ nhớ dữ liệu ngoài bằng địa chỉ hai byte (thông qua cổng P0 và P2) hoặc 1 byte (thông qua cổng P0).
Từ sơ đồ trên ta thấy.
- /EA được nối với +Vcc để cho phép vi điều khiển với bộ nhớ chương trình nội trú.
- /RD nối với đường cho phép xuất dữ liệu (/OE – Output data Enable) của Ram.
- /WR nối với đường cho phép ghi dữ liệu (/WE – Write data Enable) của Ram.
Nguyên lý truy cập bộ nhớ dữ liệu ngoại trú được thể hiện bằng các đồ thị thời gian. Tuy nhiên, tuỳ thuộc vào nhiệm vụ đọc dữ liệu từ bộ nhớ hay ghi dữ liệu vào bộ nhớ mà nguyên lý truy cập bộ nhớ dữ liệu là khác nhau.
- Quá trình đọc dữ liệu từ bộ nhớ ngoại trú:
Khi truy cập bộ nhớ dữ liệu ngoại trú, bộ vi điều khiển phát ra một xung chốt địa chỉ (ALE) cho bộ chốt bên ngoài (Latch) trong mỗi chu kỳ máy, tồn tại trong hai chu kỳ dao động từ P2 – S4 đến P1 – S5. Để địa chỉ hoá bộ nhớ dữ liệu ngoài, byte thấp của địa chỉ từ thanh ghi con trỏ dữ liệu ( DPL) hoặc Ri của vi điều khiển được xuất qua cổng P0 trong khoảng các trạng thái S5 của chu kỳ máy trong chu kỳ lệnh. Tiếp theo byte thấp của địa chỉ từ bộ đếm chương trình ( PCL) cũng được xuất qua cổng P0 đưa tới bộ đếm chương trình để thực hiện lệnh tiếp theo. Byte cao của địa chỉ từ DPTR (DPH) của vi điều khiển được xuất qua cổng P2 trong khoảng thời gian từ S5 đến S4 của chu kỳ máy tiếp theo. Sau đó byte cao của địa chỉ từ PC (PCH) cũng được xuất qua cổng P2 để đưa đến bộ nhớ chương trình. Nếu địa chỉ có độ dài 1 byte thì nó được xuất qua cổng P0 từ DPL hoặc Ri. Tiếp theo xung chốt, vi điều khiển xuất ra tín hiệu điều khiển /RD để cho phép đọc dữ liệu từ bộ nhớ ngoài. Xung /RD tồn tại trong 3 trạng thái của mỗi chu kỳ máy từ P1 – S1 đến P2 – S3, và trong khoảng thời gian này dữ liệu từ bộ nhớ ngoài được đọc vào vi điều khiển.
- Quá trình ghi dữ liệu vào bộ nhớ ngoài trú:
Tương tự như quá trình đọc dữ liệu, nhưng ở đây chúng ta dùng tín hiệu điều khiển ghi /WR.
4) Các thanh ghi chức năng đặc biệt
Các thanh ghi nội của AT89C51 được truy xuất ngầm định bởi bộ lệnh. Ví dụ lệnh “INC A” sẽ tăng nội dung của thanh ghi tích luỹ A lên 1. Tác động này được ngầm định trong m• lệnh.
Các thanh ghi trong AT89C51 được định dạng như một phần của RAM trên chíp. Vì vậy mỗi 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 để AT89C51 có nhiều thanh ghi. Cũng như R0 đến R7, có 21 thanh ghi chức năng đặc biệt ở vùng trên của RAM nội, từ địa chỉ 80H đến FFH. Chú ý rằng hầu hết đị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ỹ A có thể được truy xuất ngầm như đ• nói, đa số các SFR được truy xuất dùng địa chỉ trực tiếp. Chú ý rằng một vài SFR có thể được địa chỉ hoá bit hoặc byte. Người thiết kế phải thận trọng khi truy xuất bit và byte
a) Từ bảng trạng thái chương trình:
Từ trạng chương (PSW) ở địa chỉ D0H chứa các bit trạng thái như bảng tóm tắt sau:
Bit Ký hiệu Địa chỉ ý nghĩa
PSW.7 CY D7H Cờ nhớ
PSW.6 AC D6H Cờ nhớ phụ
PSW.5 F0 D5H Cờ 0
PSW.4 RS1 D4H Bit 1 chọn thanh ghi
PSW.3 RS0 D3H Bit chọn băng thanh ghi
00 = bank 0; địa chỉ 00H - 07H
01 = bank; địa chỉ 08H – 0FH
10 = bank 2; địa chỉ 10H – 17H
11 = back 3; địa chỉ 18H – 1FH
PSW.2 OV D2H Cờ tràn
PSW.1 D1H Dự trữ
PSW.0 P D0H Cờ parity chẵn
Bảng 1.2 Từ trạng thái chương trình
• Cờ nhớ (CY) có công dụng kép. Thông thường nó được dùng cho các lệnh toán học : nó sẽ được sét nếu có một số nhớ sinh ra bởi phép cộng hoặc có một số mượn phép trừ. Ví dụ, nếu thanh ghi tích luỹ chứa FFH, thì lệnh sau: ADD A,#1
Sẽ trở về thanh ghi tích luỹ kết quả 00H và set cờ nhớ trong PSW
Cờ nhớ cũng có thể xem như một thanh ghi 1 bit cho các lệnh luận lý thi hành trên bit.
• 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ấp trong khoảng OAH đến OFH. Nếu các giá trị cộng được là số BCD, thì sau lệnh cộng cần có DA A (hiệu chỉnh thập phân thanh ghi tích luỹ) để mang kết quả lớn hơn 9 trở về tâm từ 0 đến 9.
• Cờ 0
Cờ 0 (F0) là một bit cờ đa dụng dành các ứng dụng của người dùng
• Các bit chọn bank thanh ghi
Các bit chọn bank thanh ghi (RS0 và RS1) xác định bank thanh ghi được tích cực. Chúng được xoá sau khi reset hệ thống và được thay đổi bằng phần mềm nếu cần
• Cờ tràn
Cờ tràn (OV) được set một lệnh cộng hoặc trừ nếu có một phép toán bị tràn. Khi các số có dấu được cộng hoặc trừ với nhau, phần mềm có thể kiểm tra bit này để xác định xem kết quả của nó có nằm trong tầm xác định không.
Khi các số không dấu được cộng, bit OV có thể được bỏ qua. Các kết quả lớn hơn + 127 hoặc nhỏ hơn -128 sẽ set bit OV.
b. Thanh ghi B:
Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi tích luỹ A cho các phé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 A và B rồi trả về kết quả 16 bit trong A (byte thấp) và B (byte cao). Lệnh DIV AB sẽ chia A cho B rồi trả kết quả nguyên trong A và phần nguyên trong B. Thanh ghi B cũng có thể xem như thanh ghi đệm đa dụng. Nó được địa chỉ hoá tong bit bằng các địa chỉ bit FOH đến F7H.
c. 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 của ngăn xếp. Các lệnh trên ngăn xếp bao gồm các thao tác cất dữ liệu vào ngăn xếp và lấy dữ liệu ra khỏi 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ỏi ngăn xếp sẽ dọc dữ liệu làm giảm SP. Ngăn xếp của AT89C51 được giữ trong RAM nội và được giới hạn các địa chỉ có thể truy xuất bằng địa chỉ gián tiếp, chúng là 128 byte đầu của AT89C51.
d. Con trỏ dữ liệu:
Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộ nhớ ngoài là một thanh ghi 16 bit ở địa chỉ 82H (DPL: byte thấp) và 83H (DPH: byte cao).
e. Các thanh ghi port xuất nhập:
Các port của AT89C51 bao gồm Port0 ở địa chỉ 80H, Port1 ở địa chỉ 90H, port2 ở địa chỉ A0H và port3 ở địa chỉ B0H. Tất cả các port đều được địa chỉ hoá tong bit. Điều đó cung cấp một khả năng giao tiếp thuận lợi.
f. Các thanh ghi Timer:
AT89C51 chứa 2 bộ định thời đếm 16 bit được dùng trong việc định thời hoặc đếm sự kiện. Timer 0 ở địa chỉ 8AH (TL0: byte thấp) và 8CH (TH0: byte cao). Timer 1 ở địa chỉ 8BH (TL1: byte thấp) và 8DH (TH1: byte cao). Việc vận hành Timer được set bởi thanh ghi Timer Mode (TMOD) ở địa chỉ 89H và thanh ghi điều khiển timer (TCON) ở địa chỉ 88H. Chỉ có TCON được địa chỉ hoá từng bit.
g. Các thanh ghi port nối tiếp:
AT89C51 chứa một port nối tiếp trên chip dành cho việc trao đổi thông tin với các thiết bị nối tiếp như máy tính, modem hoặc cho việc giao tiếp với các IC khác có giao tiếp nối tiếp. 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 truyền và nhận. Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF. Các mode vận hành khác nhau được lập trình qua thanh ghi điều khiển port nối tiếp (SCON) (được địa chỉ hoá từng bit) ở địa chỉ 98H.
h. Các thanh ghi ngắt:
AT89C51 có cấu trúc 5 nguồn ngắt, 2 mức ưu tiên. Các ngắt bị cấm sau khi reset hệ thống và sẽ được cho phép bằng việc ghi thanh ghi cho phép ngắt (IE) ở địa chỉ 8AH. Cả hai thanh ghi được địa chỉ hoá tưng bit.
5. Hoạt động của bộ định thời (timer)
5.1 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ần số cuối làm nguồn 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ó thể xem như số đếm số xung nhịp từ khi khởi động timer. Ví dụ timer 16 bit sẽ đếm lên từ 0000H đến FFFFH. Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H.
AT89C51 có 2 timer 16 bit, mỗi timer có bốn cách làm việc. Người ta sử dụng các timer để : định khoảng thời gian; đếm sự kiện hoặc tạo tốc độ baud cho port nối tiếp trong AT89C51.
Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở một khoảng đều đặn và đặt cờ tràn timer. Cờ được dùng để đồng bộ hoá 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 cửa ngõ vào hoặc gửi các 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.
Đếm sự kiện dùng để xác định số lần xảy ra của một 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ột chân của AT89C51. Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho port nối tiếp trong AT89C51.
Truy xuất timer của AT89C51 dùng 6 thanh ghi chức năng đặc biệt cho trong bảng sau:
SFR Mục đích Địa chỉ
TCON Điều khiển timer 88H
TMOD Chế độ timer 89H
TL0 Byte thấp của timer 0 8AH
TL1 Byte thấp của timer 1 8BH
TH0 Byte cao của timer 0 8CH
TH1 Byte cao của timer 1 8DH
Bảng 1.4: Thanh ghi chức năng đặc biệt dùng timer.
5.2 Thanh ghi chế độ timer (TMOD)
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho timer 0 và timer 1.
Bit Tên Timer Mô tả
7 GATE 1 Bit (mở) cổng, khi lên 1 timer chỉ chạy khi INT1 ở mức cao
6 C/T 1 Bit chọn chế độ counter/timer
1 = bộ đếm sự kiện
0 = bộ định khoảng thời gian
5 M1 1 Bit 1 của chế độ (mode)
4 M0 1 Bit 0 của chế độ
3 GATE 0 Bit (mở) cổng
2 C/T 0 Bit chọn chế độ counter/timer
1 M1 0 Bit 1 của chế độ
0 M0 0 Bit 0 của chế độ
Bảng 1.5: Tóm tắt thanh ghi TMOD
5.3 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 timer 0 và timer1
Bit Ký hiệu Địa chỉ Mô tả
TCON.7 TF1 8FH Cờ báo tràn timer1. Đặt ở phần cứng khi tràn được xoá ở phần mềm hoặc phần cứng khi bộ xử lý chỉ đến chương trình phục vụ ngắt
TCON.6 TR1 8EH Bit điều khiển timer 1 chạy. Đặt/xoá bằng phần mềm cho timer chạy/ngưng
TCON.5 TF0 8DH Cờ báo tràn timer0
TCON.4 TR0 8CH Bit điều khiển timer 0 chạy
TCON.3 IE1 8BH Cờ cạnh ngắt 1 bên ngoài
TCON.2 IT1 8AH Cờ kiểu ngắt 1 bên ngoài, phần cứng khi phát hiện một cạnh xuống ở INT1 xoá bằng phần mềm hoặc phần cứng khi CPU chỉ đến chương trình phục vụ ngắt. Đặt/xoá bằng phần mềm để ngắt ngoài tích cức cạnh xuống mức thấp.
TCON.1 IE0 89H Cờ cạnh ngắt 0 bên ngoài
TCON.0 IT0 88H Cờ kiểu ngắt 0 bên ngoài
Bảng 1.6: Tóm tắt thanh ghi TCON
5.4 Các chế độ timer
On-chip AT89C51 có 2 thanh ghi Timer/Counter dài 16 bit, đó là: Timer 0 và Timer 1. Trong On-chip AT89C52, ngoài Timer 0 và Timer 1 nó còn có thêm bộ Timer 2. Cả 3 bộ Timer này đều có thể được điều khiển để thực hiện chức năng thời gian hay bộ đếm, thông qua thanh ghi TMOD.
Khi thanh ghi Timer/Counter làm việc ở kiểu Timer, thì sau mỗi chu kỳ máy nội dung trong thanh ghi được gia tăng thêm 1 đơn vị. Vì vậy thanh ghi này đếm số chu kỳ máy. Một chu kỳ máy có 12 chu kỳ dao động, do đó tốc độ đếm của thanh ghi là 1/12 tần số dao động.
Khi thanh ghi Timer/Counter làm việc ở kiểu Counter, xung nhịp bên ngoài được đưa vào để đếm ở T0 hoặc T1. Nội dung thanh ghi được tăng lên khi có sự chuyển trạng thái từ 1 về 0 tại chân đầu vào ngoài T0 hoặc T1. Xung nhịp ở các đầu vào ngoài được lấy mẫu tại thời điểm S5P2 của mỗi chu kỳ máy. Khi quá trình lấy mẫu phát hiện ra mức cao ở 1 chu kỳ và mức thấp ở chu kỳ tiếp theo, thì bộ đếm được tăng lên. Giá trị mới của bộ đếm xuất hiện trong thanh ghi tại thời điểm S3P1 của chu kỳ máy sau khi sự chuyển trạng thái đ• được phát hiện. Vì vậy để nội dung của thanh ghi tăng lên 1 đơn vị phải mất 2 chu kỳ máy, nên tốc độ đếm tối đa là 1/24 tần số bộ dao động. Không có sự giới hạn số vòng thực hiện của tín hiệu ở đầu vào ngoài, nhưng nó sẽ giữ ít nhất 1 chu kỳ máy đầy đủ để đảm bảo chắc chắn rằng một mức đ• cho được lấy mẫu ít nhất 1 lần nữa trước khi nó thay đổi.
Do xung nhịp bên ngoài có tần số bất kỳ nên các bộ Timer (0 và 1) có 4 chế độ làm việc khác nhau để lựu chọn: (13 bit Timer, 16 bit Timer, 8 bit auto-reload, split Timer).
Timer 0 và Timer 1:
Trong AT89C51 và AT89C52 đều có các bộ Timer 0 và 1. Chức năng Timer hay Counter được chọn lựa bởi các bit điều khiển C/(/T) trong thanh ghi TMOD. Hai bộ Timer/Counter này có 4 chế độ hoạt động, được lựa chọn bởi cặp bit (M0, M1) trong TMOD. Chế độ 0, 1 và 2 giống nhau cho các chức năng Timer/Counter, nhưng chế độ 3 thì khác. Bốn chế độ hoạt động được mô tả như sau:
+ Chế độ 0: Cả 2 bộ Timer 0 và 1 ở chế độ 0 có cấu hình như một thanh ghi 13 bit, bao gồm 8 bit của thanh ghi THx và 5 bit thấp của TLx. 3 bit cao của TLx không xác định chắc chắn, nên được làm ngơ. Khi thanh ghi được xoá về 0, thì cờ ngắt thời gian TFx được thiết lập. Bộ Timer/Counter hoạt động khi bit điều khiển TRx được thiết lập (TRx=1) và, hoặc Gate trong TMOD bằng 0, hoặc /INTx=1. Nếu đặt GATE=1 thì cho phép điều khiển Timer/ Counter bằng đường vào ngoài /INTx, để dễ dàng xác định độ rộng xung.
Khi hoạt động ở chức năng thời gian thì bit C/(/T)=0, do vậy xung nhịp từ bộ dao động nội, qua bộ chia tần cho ra tần số f=fosc/12 được đưa vào để đếm trong thanh ghi Timer/Counter. Khi hoạt động ở chức năng bộ đếm thì bit C/(/T)=1, lúc đó xung nhịp ngoài đưa vào sẽ được đếm.
Hinh 1.9 Chế độ 0 của Timer 1
+ Chế độ 1: hoạt động tương tự như chế độ 0, chỉ khác là thanh ghi Timer/Counter được sử dụng cả 16 bit. Xung nhịp được dùng kết hợp với các thanh ghi thời gian byte thấp và byte cao (TH1 và TL1). Khi xung Clock được nhận, bộ Timer sẽ đếm tăng lên: 0000h, 0001h, 0002,…Khi hiện tượng tràn xẩy ra, cờ tràn sẽ chuyển FFFFh về 0000h, và bộ Timer tiếp tục đếm. Cờ tràn của Timer 1 là bit TF1 ở trong TCON, nó được đọc hoặc ghi bởi phần mềm, xem hình 3.8 (Timer/Counter 1 Mode 1: 16 bit Counter).
Hinh 1.10 Chế độ 1 của Timer 1
Hinh 1.11 Chế độ 2 của Timer 1
+ Chế độ 2: Chế độ này của thanh ghi Timer cũng hoạt động tương tự như 2 chế độ trên, nhưng nó được tổ chức như bộ đếm 8 bit (TL1) với chế độ tự động nạp lại, như hình 3.9. Khi xẩy ra hiện tượng tràn ở TL1, không chỉ thiết lập bit TF1 mà còn tự động nạp lại cho TL1 bằng nội dung của TH1, đ• được thiết lập bởi phần mềm. Quá trình nạp lại cho phép nội dung của TH1 không bị thay đổi. Chế độ 2 của Timer/Counter 0 cũng tương tự như Timer/Counter 1.
+ Chế độ 3: ở chế độ này, chức năng Timer/Counter 0 và chức năng Timer/Counter 1 khác nhau. Bộ Timer 1 ở chế độ 3 chỉ chứa chức năng đếm của nó, kết quả giống khi đặt TR1=0. Bộ Timer 0 ở chế độ 3 thiết lập TH0, TL0 như là 2 bộ đếm riêng biệt. Mạch Logic đối với chế độ 3 của Timer 0 thể hiện ở hình 3.10. Bộ đếm TL0 được điều khiển bởi các bit: C/(/T), GATE, TR0, /INT0 và khi đếm tràn nó thiết lập cờ ngắt TF0. Bộ đếm TH0 chỉ được điều khiển bởi bit TR1, và khi đếm tràn nó thiết lập cờ ngắt TF1. Vậy, TH0 điều khiển ngắt Timer/Counter 1.
Chế độ 3 thường được dùng khi yêu cầu cần có bộ thời gian hoặc bộ đếm ngoài 8 bit. Đối với Timer 0 ở chế độ 3, AT89C51 có thể có 3 bộ Timer/Counter, còn AT89C52 có thể có 4 bộ. Khi Timer 0 hoạt động ở chế độ 3, thì Timer 1 có thể được bật hoặc tắt bằng chuyển mạch ngoài. ở chế độ này, Timer 1 có thể được sử dụng bởi cổng nối tiếp như một bộ tạo tốc độ Baud, hoặc trong bất kỳ ứng dụng nào mà không yêu cầu một ngắt.
Hình 1.12 Chế độ 3 của Timer 0
5.4 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 bit C/T (counter/timer) trong TMOD khi khởi động timer. Một nguồn tạo xung dùng cho định khoảng thời gian, cái khác cho đếm sự kiện.
- Định khoảng thời gian
Nếu C/T = 0 hoạt động timer liên tục được chọn và timer được dùng cho việ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 phần lớn các ứng dụng. Như vậy thạch anh 12MHz sẽ cho tốc độ xung nhịp timer 1MHz. Báo tràn timer xảy ra sau một số 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 counting)
- Nếu C/T = 1, timer lấy xung nhịp từ nguồn bên ngoài. Trong hầu hết các ứng dụ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 được xác định bằng phần mềm bằng cách đọc các thanh ghi TLx/THx vì giá trị 16 bit trong các thanh ghi này tăng thêm 1 cho mỗi sự kiện.
Nguồn xung nhịp ngoài có từ thay đổi chức năng của các chân port 3. Bit 4 của port 3 (P3.4) dùng làm ngõ vào tạo xung nhịp bên trong timer 0 và được gọi là “T0”. Và P3.5 hay “T1” là ngõ vào xung nhịp cho timer 1.
5.5 Bắt đầu dừng và điều khiển các timer
Phương pháp mới đơn giản nhất để bắt đầu (cho chạy) và dừng cac timer là dùng các bit điều khiển chạy: TRx trong TCON, TRx bị xoá sau khi reset hệ thống. Như vậy, các timer theo mặc nhiên là bị cấm (bị dừng)
Vì TRx ở trong thanh ghi TCON có địa chỉ bit, nên dễ dàng cho việc điều khiển các timer trong chương trình. Ví dụ: cho timer 0 chạy bằng lệnh: SETB TR0 và dừng bằng lệnh CLR TR0. Trì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.
5.6 Khởi động và truy xuất các thanh ghi timer
Thông thường các thanh ghi được khởi động một lần ở đầu chương trình để đặt các tín hiệu cho đúng. Sau đó trong thân chương trình các timer được cho chạy, dừng, các bit cờ được kiểm tra và xoá, các thanh ghi timer được đọc và cập nhật… 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 timer 1 như timer 16 bit (chế độ 1) có xung nhịp từ bộ dao động trên chip cho việc định khoảng thời gian.
MOV TMOD,#00010000B
Lệnh này sẽ đặt M1 =0 và M0 = 1 cho chế độ 1, C/T = 0 và GATE = 0 cho xung nhịp nội và xoá các bit chế độ timer 0. Dĩ nhiên timer thật sự không bắt đầu định thời cho đến khi bit điều khiển chạy TR1 được đặt lên 1.
Nếu cần số đếm ban đầu, các thanh ghi timer TL1/TH1 cũng phải được khởi động. Nhớ lại là các timer đếm lên và đặt cờ báo tràn khi có sứ chuyển tiếp.
- Đọ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” có thể xảy ra nếu byte thấp tràn vào byte cao giữa hai lầ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 lại một lần nữa. Nếu byte cao đ• thay đổi thì lập lại các hoạt động đọc.
Ví dụ các lệnh sau khi khởi động timer 1 như timer 16 bit (chế độ 1) có xung nhịp từ bộ dao động trên chip cho việc định khoảng thời gian.
6) Hoạt động port nối tiếp
6.1 Giới thiệu
AT89C51 có một port nối tiếp trong chip có thể hoạt động ở nhiều chế độ khác trên một d•y tần số rộng. Chức năng chủ yếu của một port nối tiếp là thực hiện chuyển đổi song song với dữ liệu nhập.
Truy xuất phần cứng đến port nối tiếp qua các chân TXD và RXD. Các chân này có các chức năng khác với hai bit của port 3. P3.1 ở chân 11 (TXD) và P3.0 ở chân 10 (RXD).
Port nối tiếp cho hoạt động song công (full duplex: thu và phát đồng thời) và đệm lúc thu cho phép một ký tự sẽ được thu và được giữ trong khi ký tự thư hai được nhận. Nếu CPU đọc ký tự thứ nhất trước khi ký tự thứ hai được thu đầy đủ thì dữ liệu sẽ không bị mất. Hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến port nối tiếp là: SBUF và SCON. Bộ đếm port nối tiếp (SBUF) ở địa chỉ 99H thật sự là hai bộ đếm. Viết vào SBUF để truy xuất dữ liệu thu được. Đây là hai thanh ghi riêng biệt thanh ghi chỉ ghi để phát và thanh ghi để thu.
TXD (P3.1) RXD (P3.0)
CLK
Q D
CLK
Xung nhũp toỏc
ẹoọ baud (thu)
Xung nhịp tốc
độ baud (thu)
Hỡnh 2.9: Sụ ủoà port noỏi tieỏp.
Thanh ghi điều khiển port nối tiếp (SCON) ở địa chỉ 98H là thanh ghi có địa chỉ bit chứa các bit trạng thái và các bit điều khiển. Các bit điều khiển đặt chế độ hoạt động cho port nối tiếp, và các bit trạng thái báo cáo kết thúc việc phát hoặc thu ký tự. Các bit trạng thái có thể được kiểm tra bằng phần mềm hoặc có thể được lập trình để tạo ngắt.
Tần số làm việc của port nối tiếp còn gọi là tốc độ baud có thể cố định (lấy từ bộ dao động của chip). Nếu sử dụng tốc độ baud để thay đổi timer 1 sữ cung cấp xung nhịp tốc độ baud và phải được lập trình.
6.2 Thanh ghi điều khiển port nối tiếp
Chế độ hoạt động của port nối tiếp được đặt bằng cách chi vào thanh ghi chế độ port nối tiếp (SCON) ở địa chỉ 98H. Sau đây các bảng tóm tắt thanh ghi và chế độ của port nối tiếp:
Bit Ký hiệu địa chỉ Mô tả
SCON.7 SM0 9FH Bit 0 của chế độ port nối tiếp
SCON.6 SM1 9EH Bit 1 của chế độ port nối tiếp
SCON.5 SM2 9DH Bit 2 của chế độ port nối tiếp cho phép truyền thông tin đ• xử lý trong các chế độ 2 và 3; RI sẽ không bị tác động nếu bit thứ 9 thu được là 0
SCON.4 REN 9CH Cho phép bộ thu phải đặt lên 1 để thu (nhận) các ký tự
SCON.3 TB8 9BH Bit 8 phát, bit thứ 9 được phát các chế độ 2 và 3; được đặt và xoá bằng phần mềm
SCON.2 RB8 9AH Bit 8 thu, bit thứ 9 thu
SCON.2 T1 99H Cờ ngắt phát. Đặt lên 1 khi kết thúc phát ký tự ; được xoá bằng phần mềm
SCON.0 R1 98H Cờ ngắt thu. Đặt lên 1 khi kết thúc thu ký tự; được xoá bằ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 Chế độ Mô tả Tốc độ baud
0 0 0 Thanh ghi dịch Cố định (Fosc/12)
0 1 1 UART 8 bit Thay đổi ( đằt bằng timer)
1 0 2 UART 9 bit Thay đổi (Fosc/12 hoặc Fosc/64)
1 1 3 UART 9 bit Thay đổi ( đằt bằng timer)
Baỷng 2.8: Caực cheỏ ủoọ port noỏi tieỏp.
Trước khi sử dụng port nối, phải khởi động SCON cho đúng chế độ. Ví dụ lệnh sau:
MOV SCON,#0101001B
Khởi động port nối tiếp cho chế độ 1 (SMO/SM1 = 0/1), cho phép bộ thu (REN = 1) và đặt cờ ngắt phát (TP = 1) để chỉ bộ phát sẵn sàng hoạt động.
6.3 Khởi động và truy xuất các thanh ghi cổng nối tiếp.
a. cho phép thu:
Bit cho phép thu (REN) trong SCON phải được đặt lên 1 bằng phần mềm để cho phép thu các ký tự. Thông thường thực hiện việc này ở đầu chương trình khi khởi động cổng nối tiếp, timer… có thể thực hiện việc này theo 2 cách. Lệnh:
SETB REN
Sẽ đặt REN lên 1
b. bit dữ liệu thứ 9:
Bit dữ liệu thứ 9 cần phát trong các chế độ 2 và 3, phải được nạp vào trong TB8 bằng phần mềm. Bit dữ liệu thứ 9 thu được đặt ở RBS. Phần mềm có thể cần hoặc không cần bit dữ liệu thứ 9, phụ thuộc vào các đặc tính kỹ thuật của thiết bị nối tiếp sử dụng (bit dữ liệu thứ 9 cũng đóng một vai trò quan trọng trong truyền thông đa xử lý).
c. Thêm một bit parity:
Thường sử dụng bit dữ liệu thứ 9 để thêm parity vào ký tự. Như đ• xét ở các chương trước, pit P trong từ trạng thái chương trình (PSW) được đặt lên 1 hoặc bị xoá bởi chu kỳ máy để thiết lập kiểm tra chẵn với 8 bit trong thanh tích luỹ.
d. Các cờ ngắt:
Hai cờ ngắt thu và phát (RI và TI) trong SCON đóng một vai trò quan trọng truyền thông nối tiếp dùng AT89C51. Cả hai bit được đặt lên 1 bằng phần cứng, nhưng phải được xoá bằng phần mềm.
6.4 Tốc độ baud nối tiếp.
Như đ• nói, tốc độ baud cố định ở các chế độ 0 và 2. Trong chế độ 0 nó luôn luôn là tần số dao động trên chip được chia cho 12. Thông thường thạch anh ấn định tần số dao động trên chip của AT89C51 nhưng cũng có thể sử dụng nguồn xung nhịp khác. Giả sử với tần số dao động danh định là 12MHz, tìm tốc độ baud chế độ 0 là 1 MHz.
SMOD=0
Hỡnh 2.10. Caực nguoàn taùo xung nhũp cho port noỏi tieỏp.
Mặc nhiên, sau khi reset hệ thống, tốc độ baud chế độ là 2 tần số bộ dao động chia cho 64. Tốc độ baud cũng ảnh hưởng bởi 1 bit trong thanh ghi điều khiển nguồn cung cấp (PCON). Bit 7 của PCON là bit SMOD. Đặt bit SMOD lên một làm gấp đôi tốc độ baud trong chế độ 1, 2 và 3. Trong chế độ 2, tốc độ baud có thể bị gấp đôi từ giá trị mặc nhiên của 1/64 tần số dao động (SMOD = 0) đến 1/32 tấn số dao động (SMOD = 1)
Vì PCON không được định địa chỉ theo bit, nên để đặt bit SMOD lên 1 cần phải theo các lệnh sau:
MOV A, PCON lấy giá trị ngược về PCON
SETB ACC.7 đặt bit 7 (SMOD) lên 1
MOV PCON, A ghi giá trị ngược về PCON
Các tốc độ baud trong các chế độ 1 và 3 được xác định bằng tốc độ tràn timer 1. Vì timer hoạt động ở tần số tương đối cao, tràn timer được chia cho 32 (hay 16 nếu SMOD = 1) trước khi cung cấp xung nhịp tốc độ baud cho port nối tiếp.
7) Hoạt động ngắt
Ngắt là hoạt động ngừng tạm thời một chương trình này để thi hành một chương trình khác. Các ngắt có một vai trò quan trọng trong thiết kế và khả năng thực thi của vi điều khiển. Chúng cho phép hệ thống đáp ứng không cùng lúc tới một công việc và giải quyết một công việc đó 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 ngắt cho ảo giác là làm nhiều việc đồng thời. Dĩ nhiên CPU mỗi lần không thể thực thi một chương trình để thực thi một chương trình khác, rồi quay về chương trình ban đầu. Khi có yêu cầu ngắt. Chương trình giải quyết ngắt được gọi là chương trình phục vụ ngắt (ISR: Interrup Sevice Reutine).
7.1) Tổ chức ngắt
ở AT89C51 có 5 nguồn ngắt:
- 2 ngắt ngoài
- 2 ngắt timer
- 1 ngắt port nối tiếp
Tất cả các ngắt sẽ không được đặt sau khi reset hệ thống và cho phép ngắt riêng rẽ bởi phần mềm.
a. Cho phép và không cho phép ngắt.
Mỗi nguồn ngắt đ
Các file đính kèm theo tài liệu này:
- Đồ Án Tốt Nghiêp Mạch quang báo - Điều khiển ma trận Led.docx