MỤC LỤC
Nhận xét của GVPB.................................................................. trang 1
Nhận xét của GVHD................................................................. trang 2
Lời cảm ơn.................................................................................. trang3
Lời mở đầu................................................................................ trang 4
Mục lục...................................................................................... trang 5
CHƯƠNG I:
GIỚI THIỆU VỀ CÁC LINH KIỆN QUAN TRỌNG SỬ DỤNG TRONG MẠCH
I. GIỚI THIỆU KHÁI QUÁT VỀ HỌ IC MCS-51™............. trang 8
II.IC AT89C51.......................................................................... trang 9
III. GIỚI THIỆU IC 74LS15................................................. trang 35
1.Sơ đồ chân............................................................................ trang 35
2.Bảng sự thật.......................................................................... trang 35
3.Bảng thơng số....................................................................... trang 36
IV.LÝ THUYẾT ĐIỀU KHIỂN TỪ XA................................ trang 36
1.Giới thiệu hệ thống điều khiển từ xa................................... trang 36
IV. ĐIỀU KHIỂN TỪ XA DÙNG TIA HỒNG NGOẠI......... trang38
1. Khái niệm tia hồng ngoại.................................................... trang 38
2.Nguồn phát sóng hồng ngoại .............................................. trang 39
3. Linh kiện thu sóng hồng ngoại........................................... trang 39
4.Ứng dụng.............................................................................. trang 40
V.SƠ ĐỒ KHỐI HỆ THỐNG ĐIỀU KHIỂN TỪ XADÙNG TIA HỒNG NGOẠI trang40
1.Máy phát.............................................................................. trang 40
2.Máy thu................................................................................. trang 41
VI. NGUYÊN TẮC HOẠT ĐỘNG........................................ trang 42
VII. NGUỒN THU HỒNG NGOẠI....................................... trang 44
CHƯƠNG II :
SƠ ĐỒ KHỐI VÀ SƠ ĐỒ NGUYÊN LÝ
I.SƠ ĐỒ VÀ CHỨC NĂNG CỦA TỪNG KHỐI................... trang46
1.Sơ đồ khối của mạch ........................................................... trang 46
2. Chức năng của từng khối.................................................... trang 46
II. HOẠT ĐỘNG MẠCH........................................................ trang 47
III. TÍNH TOÁN VÀ CHỌN LINH KIỆN TRONG MẠCH
1)Mạch reset............................................................................. trang 48
2. Mạch tạo xung..................................................................... trang 48
3.Khối nguồn............................................................................ trang49
4.Khối chấp hành.................................................................... trang 50
5.Khối hiển thị......................................................................... trang 50
6.Giao tiếp bàn phím............................................................... trang 51
7. Giao tiếp bằng remote sony................................................ trang 52
8.Khối xử ly chính .................................................................. trang 53
9.Khối xử ly nhận.................................................................... trang 54
10.Khối ma trận...................................................................... trang 55
CHƯƠNG III:
SƠ ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH
I. CHƯƠNG TRÌNH ĐIỀU KHIỂN PHÍM................. trang 57
1.Lưu đồ giải thuật....................................................................................... trang 57
2.Chương trình ............................................................................................... trang 58
II. CHƯƠNG TRÌNH PHÁT MÃ REMOTE........................ trang 61
1.Lưu đồ giải thuật................................................................ trang 61
2.Chương trình phát mã remote............................................. trang 61
III.CHƯƠNG TRÌNH ĐỒNG HỒ.......................................... trang 73
1.Lưu đồ giải thuật................................................................... trang73
2.Chương trình đồng hồ......................................................... trang 74
IV. CHƯƠNG TRÌNH LED MA TRAÄN.............................. trang138
1.Lưu đồ giải thuật..................................................................................... trang 138
2.Chương trình led ma trận ....................................................................... trang 139
V.CHƯƠNG KẾT LUẬN
CHƯƠNG I:
GIỚI THIỆU VỀ CÁC LINH KIỆN QUAN TRỌNG SỬ DỤNG TRONG MẠCH
I. GIỚI THIỆU KHÁI QUÁT VỀ HỌ IC MCS-51™
MCS-51ä là một họ IC vi điều khiển do Intel phát triển và sản xuất. Một số nhà sản xuất được phép cung cấp các IC tương thích với các sản phẩm MCS-51ä của Intel là Siemens, Advanced Micro Devices, Fujitsu, Philips, Atmel…
Các IC của họ MCS-51ä có các đặc trưng chung như sau:
4 port I/O 8 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 lý (thao tác trên các bit đơn)
210 bit được địa chỉ hóa
Bộ nhân/chia 4 ms.
Số hiệu sản xuất |
Bộ nhớ chương trình trên chip |
Bộ nhớ dữ liệu trên chip |
Số bộ định thời (bộ đếm) |
8031 8051 8751 8951 |
0K 4K ROM 4K EPROM 4K FLASH |
128 byte 128 byte 128 byte 128 byte |
2 2 2 2 |
8032 8052 8752 8952 |
0K 8K ROM 8K EPROM 8K FLASH |
256 byte 256 byte 256 byte 256 byte |
3 3 3 3 |
Ngoài ra, tùy theo số hiệu sản xuất mà chúng có những khác biệt về bộ nhớ và bộ định thời/bộ đếm như trong bảng so sánh dưới đây:
II.IC AT89C51
IC AT 89C51 có tất cả 40 chân. Các chân được mô ta như sau:
Cấu hình chân của at 89C51
Hình 1:Sơ dồ chân
1)Chân cấp nguồn
Chân 40 được nối lên nguồn Vcc=5v
2)Chân GND
Chân 20 được nối mass
3)Port 0
Port(các chân từ 32 đến 39). Port 0 là port xuất nhập bit hai chiều cực D hở. Khi làm nhiệm vụlà port xuất, mỗi chân của có thể hút dòngcủa 8 ngõ vào TTL. Khi các logic 1 được ghi vào chân của port 0, các chân này cóthể được sử dụng làm các ngõvào tổng trởcao.
Port còn được làm cấu hình làm bus địa chỉ(byte thấp) và bus dữ liệu đa hợp trong khi truy xuất bộ nhớ dữ liệu ngoài và các bộ nhớ chương trình ngoài. Trong chế độ đa hợp này, port 0 có các điện trơ kéo lên bên trong.
Port 0 cũng nhận các byte mã trong khi lập trình flash và xuất các buye mã trong khi kiểm tra chương trình. Các điện trở kéo lên bên ngoài cần đến trong khi kiểm tra chương trình
4)Port 1
Port 1(các chân từ 1 đến 8) là port xuất nhập 8 bit hai chiều có các điện trở kéo lên bên trong. Các bộ đệm xuất của port 1 có thể hút và cấp dòng với 4 ngõ vào TTL. Khi các logic 1 được ghi lên các chân của port 1, các chân này được kéo lên mức cao bởi các điện trơ kéo lên bên trong và có thể được sử dụng như các ngõ vào. Khi làm nhiệm vụ port nhập, các chân của port 1 đang được kéo xuống ở mức thấp do tác động bên ngoài sẽ cấp do có các điện trở kéo lên bên trong.
Port1 cũng nhận byte địa chỉ thấp trong thời gian lập trình cho flash và kiểm tra chương trình.
5)Port2
Port2(các chân từ 21 đến 28) là port xuất nhập 8 bit hai chiều có các điện trở kéo lên bên trong.Các bộ đệm xuất của port2 có thể hút và cấp dòng với 4 ngõ vào TTL.Khi các logic 1 được ghi lên các chân của port2, các chân này được kéo lên mức cao bởi các điện trở kéo lên bên trong và có thể được sử dụng như là các ngõ vào.Khi làm nhiệm vụ port nhập, các chân của port2 đang được kéo xuuống mức thấp do tác động bên ngoài sẽ cấp dòng cho các điện trở kéo lên bên trong.
Port2 tạo ra byte cao của bus địa chỉ trong thời gian tìm nạp lệnh từ bộ nhớ chương trình ngoài và trong thời gian truy xuất bộ nhớ dữ liệu ngoài sử dụng các địa chỉ 16 bit(MOVX @DPTR).Trong ứng dụng này, port2 sử dụng các điện trở kéo lên bên trong khi phát các bit 1.Trong thời gian truy xuất bộ nhớ dữ liệu ngoài Sử dụng các địa chỉ 8 bit(MOVX @Ri), port2 phát các nội dung của thanh ghi chức năng đặc biệt port2.
Port2 cũng nhận các bit địa chỉ cao và vài tín hiệu điều khiển trong thời gian lập trình cho flash và kiểm tra chương trình.
6) Port3
Port3(các chân từ 10 đến 17) là port xuất nhập 8 bít hai chiều có các điện trở kéo lên bên trong.Các bộ đệm xuất port3 có thể hút và cấp dòng với 4 ngõ vào TTL.Khi các logic 1 được ghi lên các chân của port3,các chân này được kéo lên mức cao bởi các điện trở kéo lên bên trong và có thể được sử dụng như là các ngõ vào. Khi làm nhiệm vụ của port nhập ,các chân của port3 đang được kéo xuống mức thấp do tác động bên ngoài sẽ cấp dòng do các điện trở kéo lên bên trong.
Port3 cũng còn được sử dụng làm các chức năng khác của AT 89C51 ,các chức năng này được liệt kê như sau:
Chân |
Tên |
Các chức năng chuyển đổi |
P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 |
RXD TXD |
Port nhập nối tiếp Port xuất nối tiếp Ngắt 0 bên ngoài Ngắt 1 bên ngoài Ngõ vào Timer/Counter 0 Ngõ vào Timer/Counter 1 Xung ghi bộ nhớ dữ liệu ngoài Xung đọc bộ nhớ dữ liệu ngoài |
Port 3 cũng nhận một vài tín hiệu điều khiển cho việc lập trình flash và kiểm tra chương trình.
7)RESET
Ngõ vào reset(chân 9) được reset bằng cách giữ chân RST ở mức cao tối thiểu hai chu kỳ máy và sau đó chuyển về mức thấp. Rst có thể được tác động bằng tay hoặc được tác động khi cấp nguồn bằng cách dùng một mạch R - C
Quan trọng nhất là thanh ghi bộ đếm chương trình(PC), được nạp 0000H. khi RST trở lại mức thấp, việc thực thi chương trình luôn luôn bắt đầu ở vị trí đầu tiên trong bộ nhớ chương trình : địa chỉ 0000H. nội dung của RAM trên chip không bị ảnh hưởng bởi hoạt động reset.
Giá trị của các thanh ghi sau khi reset hệ thống:
THANH GHI |
NỘI DUNG |
Bộ đếm chương trình |
0000H |
Thanh chứa A |
00H |
Thanh ghi B |
00H |
PSW |
00H |
SP |
07H |
DTPR |
0000H |
P0 –P3 |
FFH |
IP |
Xxx00000B |
IE |
0xx00000B |
Các thanh ghi định thời |
00H |
SCON |
00H |
SBUF |
00H |
PCON(HMOS) |
0xxxxxxxB |
PCON(CMOS) |
0xxx0000B |
8)ALE/PROG(chân 30)
Xung của ngõra cho phép chốt địa chỉ ALE(addres latch enale) cho phép chốt byte thấp của địachỉtrong thời gian truy xuất bộ nhớ ngoài. Chân nàycũngđược dùng làm ngõ vào xung lập trình(prog), trong thời gian lập trình chp flash
Khi hoạtđộng bình thường xung của ngõra ALE luôn luôn có tần số bằng 1/6 tần số củamạchdaođộng trên chip, có thể sử dụng cho các mục đích định thời bên ngoàivà tạo xung clock.
Khi cần hoạt động cho phép chốt byte thấp của địa chỉ vô hiệu hoá bằng cách xét bit 0 của thanh ghi chức năng đặc biệt có địa chỉ byte là 8EH. Khi bit này được set ALE chỉ tích cực trong thời gian thực thi lệnh MOV hoặc MOVC. Nguợc lại trong này sẽ được thực thi trên mức cao. Việc set bit không cho phép hoạt động chốt byte thấp của địa chỉ se không có tác dụng nếu bộ viđiều khiển đang ở chế độ thực thi chương trình ngoài.
9)Chân cho phép bộ nhớ chương trình PSEN
Chân này cung cấp cho ta 4 tín hiệu điều khiển bus. Tín hiệu cho phép bộ nhớ chương trình PSEN (program store end enale) là tín hiệu xuất trên chân 29. đây là tín hiệu điều khiển cho phép ta truy xuất bộ nhớ chương trình ngoài. Chân nàythường nối với chân cho phép xuất OE(output enale của eprom hoặc rom) để cho phép đọc các byte lệnh.
Tín hiệu PSEN ở logic 0 trong suốt thời gian tìm nạp lệnh. Các mãnhịphân của chương trình hoặc opcode mã thao tác được đọc từ EPROM, qua bus dữ liệu và được chốt vào thanh ghi lệnh IR của AT89C51 để được giải mã.
Khi thực thi một chương trình chứa ở ram nội, PSEN được duy trì ở logic không tích cực logic 1.
10)Chân truy xuất ngoài /Vpp
(External Access Enable) phải được nối với GND để cho phép thiết bị đọc code từ bộ nhớ chương trình ngoài có địa chỉ từ 0000H đến FFFFH. Tuy nhiên, lưu ý rằng nếu bit khoá 1 (lock-bit 1) được lập trình, sẽ được chốt bên trong khi reset.
phải được nối với Vcc khi thi hành chương trình bên trong. Chân này cũng nhận điện áp cho phép lập trình Vpp=12V khi lập trình Flash (khi đó áp lập trình 12V được chọn).
11)Các chân XTAL1 và XTAL2
XTAL1và XTAL2 là ngõ vào và ngõ ra của một mạch khuếch đại đảo được cấu hình đểsử dụng làm mạch dao động bên trong chip. Hoặc một mạch tinh thể thạch anh hoặc một mạch cộng hưởng gốm được sử dụng bên, ngoài tại các chân này. Để kích chip vi điều khiển từ một nguồn xung clock bên ngoài, XTAL2 được thả nổi(không kết nối) trong khi XTAL1 nhận tín hiệu từ mạch dao động bên ngoài không có yêu cầu nào về chu kỳ nhiệm của tín hiệu xung clock bên ngoài từ tín hiệu phải qua flip flop chia 2 trước khi đến mạch tạo xung clock bên trong tuy nhiên các chi tiết kỹ thuật về thời gian mức thấp và mức cao điện áp cực tiểu hay cực đại cần phải xem xét.
Hình2:Kết nối mạch dao động
12)Tổ chức bộ nhớ ngoài
AT89C51 có bộ nhớ theo cấu trúc Harvard: có những vùng bộ nhớ riêng biệt cho chương trình và dữ liệu. Như đã nói ở trên, cả chương trình và dữ liệu có thể ở bên trong; dù vậy chúng có thể được mở rộng bằng các thành phần ngoài lên đến tối đa 64 Kbytes bộ nhớ chương trình và 64 Kbytes bộ nhớ dữ liệu.
Bộ nhớ bên trong bao gồm ROM và RAM trên chip, RAM trên chip bao gồm nhiều phần : phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh ghi và các thanh ghi chức năng đặc biệt.
Hai đặc tính cần lưu ý là :
Các thanh ghi và các port xuất nhập đã được xếp trong bộ nhớ và có thể được truy xuất trực tiếp giống như các địa chỉ bộ nhớ khác.
Ngăn xếp bên trong RAM nội nhỏ hơn so với RAM ngoài như trong các bộ vi xử lý khác.
Chi tiết về bộ nhớ RAM trên chip:
RAM bên trong AT89C51 được phân chia giữa các bank thanh ghi (00H–1FH), RAM địa chỉ hóa từng bit (20H–2FH), RAM đa dụng (30H–7FH) và các thanh ghi chức năng đặc biệt (80H–FFH).
Hình 3: Tóm tắt các không gian nhớ
13) Vùng R AM đa mục đích
Mặc dù trên hình cho thấy 80 byte RAM đa dụng chiếm các địa chỉ từ 30H–7FH, 32 byte dưới cùng từ 00H đến 1FH cũng có thể được dùng với mục đích tương tự (mặc dù các địa chỉ này đã có mục đích khác).
Mọi địa chỉ trong vùng RAM đa dụng đều có thể được truy xuất tự do dùng cách đánh địa chỉ trực tiếp hoặc gián tiếp. Ví dụ, để đọc nội dung ở địa chỉ 5FH của RAM nội vào thanh ghi tích lũy, lệnh sau sẽ được dùng :
MOV A, 5FH
Lệnh này di chuyển 1 byte dữ liệu dùng cách đánh địa chỉ trực tiếp để xác định “địa chỉ nguồn” (5FH). Đích nhận dữ liệu được ngầm xác định trong mã lệnh là thanh ghi tích lũy A.
AM bên trong cũng có thể được truy xuất dùng cách đánh địa chỉ gián tiếp qua R0 hay R1. Ví dụ, hai lệnh sau thi hành cùng nhiệm vụ như lệnh đơn ở trên :
MOV R0, #5FH
MOV A, @R0
Lệnh đầu dùng địa chỉ tức thời để di chuyển giá trị 5FH vào thanh ghi R0, và lệnh thứ hai dùng địa chỉ trực tiếp để di chuyển dữ liệu “được trỏ bởi R0” vào thanh ghi tích lũy.
Tóm tắt bộ nhớ dữ liệu trên chip.
14)Các thanh ghi chức năng đặc biệt(SFR)
Một bản đồ vùng bộ nhớ trên chip được gọi là không gian thanh ghi chức năng đặc biệt (SFR) như được trình bày trong bảng.
Lưu ý rằng không phải tất cả các địa chỉ đều được sử dụng, và các địa chỉ không được sử dụng có thể không được cung cấp trên con chip. Các hành động đọc đến các địa chỉ này nói chung sẽ trả về các dữ liệu ngẫu nhiên, và các hành động viết sẽ có một hiệu ứng không xác định.
Các phần mềm người dùng không nên viết các mức 1 đến những vị trí không được liệt kê này, vì chúng có thể được dùng trong các sản phẩm tương lai khi thêm vào các đặc trưng mới. Trong trường hợp này, các giá trị reset hoặc không tích cực của các bit mới sẽ luôn là 0.
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 lũy 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 chip. Vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi đếm 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, nên không lợi lộc gì khi đặt chúng vào trong RAM trên chip).
Đó là lý do để AT89C51 có nhiều thanh ghi như vậy. Cũng như R0 đến R7, có 21 thanh ghi chức năng đặc biệt (SFR : Special Function Register) ở vùng trên của RAM nội, từ địa chỉ 80H đến FFH. Chú ý rằng hầu hết 128 địa chỉ từ 80H đến FFH không được định nghĩa. Chỉ có 21 địa chỉ SFR là được định nghĩa.
Ngoại trừ tích lũy (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ỉ hóa bit hoặc byte. Người thiết kế phải thận trọng khi truy xuất bit và byte. Ví dụ lệnh sau : SETB 0E0H sẽ set bit 0 trong thanh ghi tích lũy, các bit khác không đổi. Ta thấy rằng E0H đồng thời là địa chỉ byte của cả thanh ghi tích lũy và là địa chỉ bit của bit có trọng số nhỏ nhất trong thanh ghi tích lũy. Vì lệnh SETB chỉ tác động trên bit, nên chỉ có địa chỉ bit là có hiệu quả.
a)Từ trạng thái chương trình PSW
Từ trạng thái chương trình (PSW : Program Status Word) ở địa chỉ D0H chứa các bit trạng thái như bảng tóm tắt sau:
Bit |
Symbol |
Address |
Description |
PSW.7 |
CY |
D7H |
Cary Flag |
PSW.6 |
AC |
D6H |
Auxiliary Cary Flag |
PSW.5 |
F0 |
D5H |
Flag 0 |
PSW4 |
RS1 |
D4H |
Register Bank Select 1 |
PSW.3 |
RS0 |
D3H |
Register Bank Select 0 |
|
|
|
00=Bank 0; address 00H¸07H |
|
|
|
01=Bank 1; address 08H¸0FH |
|
|
|
10=Bank 2; address 10H¸17H |
|
|
|
11=Bank 3; address 18H¸1FH |
PSW.2 |
OV |
D2H |
Overlow Flag |
PSW.1 |
- |
D1H |
Reserved |
PSW.0 |
P |
DOH |
Even Parity Flag |
* Cờ 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 set nếu có một số nhớ sinh ra bởi phép cộng hoặc có một số mượn bởi phép trừ. Ví dụ, nếu thanh ghi tích lũy chứa FFH, thì lệnh ADD A, #1 sẽ trả về thanh ghi tích lũy 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. Ví dụ, lệnh sau sẽ AND bit 25H với cờ nhớ và đặt kết quả trở vào cờ nhớ : ANL C, 25H
* Cờ nhớ phụ
Khi cộng các số BCD, cờ nhớ phụ (AC) được set nếu kết quả của 4 bit thấp trong khoảng 0AH đến 0FH. Nếu các giá trị được cộng 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 lũy) để mang kết quả lớn hơn 9 vào nibble cao.
* Cờ 0
Cờ 0 (F0) là 1 bit cờ đa dụng dành cho 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 xóa sau khi reset hệ thống và được thay đổi bằng phần mềm nếu cần. Ví dụ, ba lệnh sau cho phép bank thanh ghi 3 và di chuyển nội dung của thanh ghi R7 (địa chỉ byte 1FH) đến thanh ghi tích lũy :
SETB RS1
SETB RS0
MOV A, R7
Khi chương trình được hợp dịch, các đại chỉ bit đúng được thay thế cho các ký hiệu “RS1” và “RS0”. Vậy, lệnh SETB RS1 sẽ giống như lệnh SETB 0D4H.
- Cờ tràn
Cờ tràn (OV) được set sau 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ó 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 lũy 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ả về kết quả nguyên trong A và phần dư trong B. Thanh ghi B cũng có thể được xem như thanh ghi đệm đa dụng. Nó được địa chỉ hóa từng bit bằng các địa chi bit F0H đế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. 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ỏi ngăn xếp sẽ đọc dữ liệu và giảm SP. Ngăn xếp của 8051/8031 đượ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
Để khởi động lại SP với ngăn xếp bắt đầu tại 60H,các lệnh sau đây được dùng:
MOV SP, #5FH
Trên AT89C51 ngăn xếp bị giới hạn 32 byte vì địa chỉ cao nhất của RAM trên chip là 7FH. Sở dĩ dùng giá trị 5FH vì SP sẽ tăng lên 60H trước khi cất byte dữ liệu đầu tiên.
Người thiết kế có thể chọn không phải khởi động lại con trỏ ngăn xếp mà để nó lấy giá trị mặc định khi reset hệ thống. Giá trị mặc định đó là 07H và kết quả là ngăn đầu tiên để cất dữ liệu có địa chỉ là 08H. Nếu phần mềm ứng dụng không khởi động lại SP, bank thanh ghi 1(có thể cả 2 và 3) sẽ không dùng được vì vùng RAM này đã được dùng làm ngăn xếp.
Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu, hoặc được truy xuất ngầm bằng các lệnh gọi chương trình con (ACALL, LCALL) và các lệnh trở về (RET, RETI) để cất và lấy lại bộ đếm chương trình.
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). Ba lệnh sau sẽ ghi 55H vào RAM ngoài ở địa chỉ 1000H :
MOV A, #55H
MOV DPTR, #1000H
MOVX @DPTR, A
Lệnh đầu tiên dùng địa chỉ tức thời để tải dữ liệu 55H vào thanh ghi tích lũy. Lệnh thứ hai cũng dùng địa chỉ tức thời, lần này để tải dữ liệu 16 bit 1000H vào con trỏ dữ liệu. Lệnh thứ ba dùng địa chỉ gián tiếp để di chuyển dữ liệu trong A (55H) đến RAM ngoài ở địa chỉ được chứa trong DPTR (1000H).
e) Các thanh ghi port xuất nhập .
Các port của AT89C51 bao 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 đều được địa chỉ hóa từng bit. Điều đó cung cấp một khả năng giao tiếp thuận lợi. Ví dụ nếu một motor được nối qua một cuộn dây có transistor lái đến bit 7 của Port 1, nó có thể được bật và tắt bằng một lệnh đơn :
SETB P1.7 ; bật motor
CLR P1.7 ; tắt motor
Các lệnh trên dùng dấu chấm để xác định một bit trong một byte. Trình hợp dịch sẽ thi hành sự chuyển đổi cần thiết, vì vậy hai lệnh sau đây là như nhau :
CLR P1.7
CLR 97H
Trong một ví dụ khác, xem xét giao tiếp đến một thiết bị với một bit trạng thái gọi là BUSY, được set khi thiết bị đang bận và được xóa khi thiết bị đã sẵn sàng. Nếu BUSY được nối tới P1.5, vòng lặp sau sẽ được dùng để chờ thiết bị trở lại trạng thái sẵn sàng :
WAIT : JB P1.5, WAIT
Lệnh này có nghĩa là “nếu bit P1.5 được set thì nhảy tới nhãn WAIT”. Nói cách khác “nhảy trở lại và kiểm tra lần nữa”.
f) Các thanh ghi timer.
IC AT89C51 chứa hai bộ định thời / đếm 16 bit được dùng cho 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ỉ hóa từng bit.
Thanh ghi TMOD(timer mode):dùng để xác lập chế độ hoạt động cho bộ định thời : 3 bit cao xác lập timer 1
4bit thấp xác lập timer 0
-M1,M0:xác lập chế độ định thời
-Gate: Bit điều khiển cổng. Khi bit TRx trong TCON được set bằng 1 và GATE=1, bộ định thời/ bộ đếm chỉ hoạt động trong khi chân INTx ơ mức cao(điều khiển cứng ). Khi bit GATE=0, bộ định thời/ bộ đếm chỉ hoạt động trong khi TRx=1(điều khiển phần mềm)
C/T: Bit chọn chức năng đếm hay định thời cho bộ định thời/bộ đếm. Khi C/T =0, bộ định thời hoạt động định thời(dùng xung clock nội của hệ thống). Khi C/T =1, bộđịnh thời hoạt động đếm(dùng xung clock nhận trừ ngõ vào Tx)
M1 |
M0 |
Chế độ |
Mô tả |
0 |
0 |
0 |
Bộ định thời 13 bit |
0 |
1 |
1 |
Bộ định thời/ bộ đếm 16 bit |
1 |
0 |
2 |
Bộ định thời / bộ đếm 8 bit tự động nạp lại |
1 |
1 |
3 |
Bộ định thời 0: TL0 là bộ định thời/ đếm 8 bit được điều khiển bởi các bit điều khiển bộ định thời 0. TH0 là bộ định thời 8 bit được điều khiển bởi các bit điều khiển bộ định thời 1 |
h) 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 (các bộ chuyển đổi A/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 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ỉ hóa từng bit) ở địa chỉ 98H.
Sơ đồ khối của port nối tiếp
- Các chế độ của port nối tiếp
SM0 |
SM1 |
Chế độ |
Mô tả |
Tốc độ baud |
0 |
0 |
0 |
thanh ghi dịch |
Cố định(tần số dao động/12) |
0 |
1 |
1 |
UART 8 bit |
Thay đổi(thiết lập bởi bộ định thời) |
1 |
0 |
2 |
UART 9 bit |
Cố định(tần số dao động/12) |
1 |
1 |
3 |
UART 9 bit |
Thay đổi (thiết lập bởi bộ định thời) |
- Thanh ghi điều khiển port nối tiếp
Bit |
Ký hiệu |
Địa chỉ |
Mô tả |
SCON.7 |
SM0 |
9FH |
Bit 0 chọn chế độ của port nối tiếp |
SCON.6 |
SM1 |
9EH |
Bit 1 chọn chế độ của port nối tiếp |
SCON.5 |
SM2 |
9DH |
Bit 2 chọn chế độ của port nối tiếp Bit này chophép truyền thông đa xử lý ở các chế độ 2 và 3; bit RI sẽ không được tích cực nếu bit thứ 9 nhận được tích cực nếu bit thứ 9 nhận được 0 |
SCON.4 |
REN |
9CH |
Cho phép thu. Bit này phải được set để nhận các ký tự |
SCON.3 |
TB8 |
9BH |
Bit phát 8. bit thứ 9 được phát ở các chế độ 2 và 3; được set và xoá bởi phần mềm |
SCON.2 |
RB8 |
9AH |
Bit thu 8. bit thứ 9 nhận được |
SCON.1 |
TI |
99H |
Cờ ngắt phát. Cờ này được set ngay khi kết thúc việc phát một ký tự; được xoá bởi phần mềm |
SCON.0 |
RI |
98H |
Cờ ngắt thu. Cờ này được set ngay khi kết thúc việc thu một ký tự; được xoá bởi phần mềm. |
Trước khi sử dụng port nối tiếp, thanh ghi SCON phải được khởi động đúng chế độ yêu cầu. Set REN=1 và set cờ ngắt phát bằng TI=1 để chỉra rằng port nối tiếp sẵn sàng phát dữ liệu
- Các chế độ hoạt động của port nối tiếp.
Port nối tiếp có 4 chế độ hoat động, có thể chọn được bằng cách viết các số 1 hay 0 vào các bit SM0 và SM1 trong SCON. Có ba chế độ cho phép truyền thông bất đồng bộ, với mỗi ký tự được thu (nhận) hoặc phát đều được đóng khung bằng một bit start và 1 bit stop. Ở chế độ thứ tư, port nối tiếp hoạt động như một thanh ghi dich đơn giản.
- Thanh ghi dịch 8 bit (chế độ 0).
Chế độ 0 được chọn bằng cách ghi các bit 0 vào SM1 và SM0 của SCON, đưa port nối tiếp vào chế độ thanh ghi dịch 8 bit. Dữ liệu nối tiếp vào và ra qua RXD và TXD xuất xung nhịp dịch. 8 bit được phát hoặc thu với bit đầu tiên là LSB. Tốc độ baud cố định ở 1/12 tần số dao động trên chip.
Việc phát đi được khởi động bằng bất cứ lệnh nào ghi dữ liệu vào SBUF. Dữ liệu được dịch ra ngoài trên đường RXD (P3.0) với các xung nhịp được gửi ra đường TXD (P3.1). Mỗi bit phát đi hợp lệ (trên RXD) trong một chu
kỳ máy. Trong mỗi chu kỳ máy, tín hiệu xung nhập xuống thấp ở S3P1 và trở về mức cao ở S6P1.
Trước khi sử dụng port nối tiếp, thanh ghi SCON phải được khởi động đúng chế độ yêu cầu. Set REN=1 và set cờ ngắt phát bằng TI=1 để chỉra rằng port nối tiếp sẵn sàng phát dữ liệu
- Các chế độ hoạt động của port nối tiếp.
Port nối tiếp có 4 chế độ hoat động, có thể chọn được bằng cách viết các số 1 hay 0 vào các bit SM0 và SM1 trong SCON. Có ba chế độ cho phép truyền thông bất đồng bộ, với mỗi ký tự được thu (nhận) hoặc phát đều được đóng khung bằng một bit start và 1 bit stop. Ở chế độ thứ tư, port nối tiếp hoạt động như một thanh ghi dich đơn giản.
- Thanh ghi dịch 8 bit (chế độ 0).
Chế độ 0 được chọn bằng cách ghi các bit 0 vào SM1 và SM0 của SCON, đưa port nối tiếp vào chế độ thanh ghi dịch 8 bit. Dữ liệu nối tiếp vào và ra qua RXD và TXD xuất xung nhịp dịch. 8 bit được phát hoặc thu với bit đầu tiên là LSB. Tốc độ baud cố định ở 1/12 tần số dao động trên chip.
Việc phát đi được khởi động bằng bất cứ lệnh nào ghi dữ liệu vào SBUF. Dữ liệu được dịch ra ngoài trên đường RXD (P3.0) với các xung nhịp được gửi ra đường TXD (P3.1). Mỗi bit phát đi hợp lệ (trên RXD) trong một chu kỳ máy. Trong mỗi chu kỳ máy, tín hiệu xung nhập xuống thấp ở S3P1 và trở về mức cao ở S6P1.
Giản đồ thời gian phát dữ liệu ở chế độ 0
Việc thu được khởi động khi bit cho phép bộ thu (REN) là 1 và bit ngắt thu (RI) là 0. Qui tắc tổng quát là đặt REN khi bắt đầu chương trình để khởi động port nối tiếp, rồi xóa RI để bắt đầu hoạt động nhập dữ liệu. Khi RI bị xóa, các xung nhịp được đưa ra đường TXD, bắt đầu chu kỳ máy kế tiếp, và dữ liệu theo xung nhịp ở đường RXD. Lấy xung nhịp cho dữ liệu vào port nối tiếp xảy ra ở cạnh dương của TXD
Giản đồ thời gian thu dữ liệu ởchế độ 0
Một ứng dụng của chế độ thanh ghi dịch là mở rộng khả năng xuất của AT89C51. IC thanh ghi dịch nối tiếp ra song song có thể được nối vào các đường TXD và RXD của AT89C51 để cung cấp thêm 8 đường ra. Có thể nối xâu chuỗi thêm các thanh ghi dịch để mở rộng thêm.
Chế độ thanh ghi dịch bit của port nối tiếp
- UART 8 bit với tốc độ baud thay đổi được (chế độ 1).
Ở chế độ 1, port nối tiếp của AT89C51 làm việc như một UART 8 bit với tốc độ baud thay đổi được. Một UART (Universal Asynchronous Receiver/Transmitter : Bộ thu/phát bất đồng bộ vạn năng) là một dụng cụ thu và phát dữ liệu nối tiếp với mỗi ký tự dữ liệu đi trước là bit start ở mức thấp và theo sau là bit stop ở mức cao. Đôi khi xen thêm bit kiểm tra chẵn lẻ giữa bit dữ liệu cuối cùng và bit stop. Hoạt động chủ yếu của UART là chuyển đổi song song sang nối tiếp với dữ liệu xuất và chuyển đổi nối tiếp sang song song với dữ liệu nhập.
Ở chế độ 1, 10 bit được phát trên TXD hoặc thu trên RXD. Những bit đó là : 1 bit start (luôn luôn là 0), 8 bit dữ liệu (LSB đầu tiên) và 1 bit stop (luôn luôn là 1) . Với hoạt động thu, bit stop được đưa vào RB8 trong SCON. Trong AT89C51 chế độ baud được đặt bằng tốc độ báo tràn của Timer 1.
Tạo xung nhịp và đồng bộ hóa các thanh ghi dịch của port nối tiếp trong các chế độ 1, 2 và 3 được thiết lập bằng bộ đếm 4 bit chia cho 16, ngõ ra là xung nhịp tốc độ baud. Ngõ vào của bộ đếm này được chọn qua phần mềm
Cấp xung clock cho port nối tiếp
Truyền dữ liệu (phát) được khởi động bằng cách ghi vào SBUF, nhưng vẫn chưa thật sự bắt đầu chạy cho đến khi sự thay thế kế tiếp của bộ đếm chia cho 16 cung cấp tốc độ baud cổng nối tiếp. Dữ liệu được dịch ra ngoài trên đường TXD bắt đầu bằng bit start, theo sau là 8 bit dữ liệu và sau cùng là bit stop. Độ rộng (theo thời gian của mỗi bit) là nghịch đảo của tốc độ baud được lập trình trong timer. Cờ ngắt phát (TI) được đặt lên 1 khi xuất hiện bit stop trên TXD.
Set cờ TI của port nối tiếp
Việc thu dữ liệu được khởi động bằng một chuyển trạng thái từ 1 xuống 0 trên RXD. Bộ đếm 16 tức thời được xóa để đồng bộ số đếm với luồng bit đến. Luồng bit đến được lấy mẫu giữa 16 lần đếm.
Bộ thu sẽ phát hiện được bit start sai bằng cách yêu cầu trạng thái 0 ở (bit start) ở lần đếm thứ 8 sau khi có chuyển trạng thái từ 1 xuống 0 đầu tiên. Nếu điều này không xảy ra, người ta giả sử là bộ thu được kích bởi nhiễu chứ không phải do một ký tự hợp lệ. Bộ thu được reset và quay về trạng thái nghỉ (idle), tìm kiếm (đợi) chuyển trạng thái từ 1 xuống 0 kế.
Giả sử đã phát hiện được bit start hợp lệ, thì tiếp tục thu ký tự. Bit start được bỏ qua và 8 bit dữ liệu được đưa vào thanh ghi dịch cổng nối tiếp theo xung nhịp. Khi đã có được tất cả 8 bit, điều sau đây xảy ra :
1. Bit thứ 9 (bit stop) được chốt vào RB8 trong SCON.
2. SBUF được nạp với 8 bit dữ liệu.
3. Cờ ngắt bộ thu (RI) được đặt lên 1.
Tuy nhiên, những điều này chỉ xảy ra nếu đã có những điều kiện sau :
1. RI = 0
2. SM2 = 1 và bit stop thu được là 1, hoặc SM2 = 0.
Đòi hỏi RI = 0 để bảo đảm là phần mềm đã đọc ký tự trước (và RI được xóa). Điều kiện thứ hai hơi phức tạp nhưng chỉ áp dụng trong chế độ truyền thông đa xử lý. Điều đó hàm ý là (không đặt RI lên 1 trong chế độ truyền thông đa xử lý khi bit dữ liệu thứ 9 là 0).
- UART 9 bit với tốc độ baud cố định (chế độ 2).
Khi SM1 = 1 và SM0 = 0, cổng nối tiếp làm việc ở chế độ 2, như một UART 9 bit có tốc độ baud cố định. 11 bit sẽ được phát hoặc thu : 1 bit start, 8 bit dữ liệu, bit dữ liệu thứ 9 có thể lập trình được và 1 bit stop. Khi phát, bit thứ 9 là bất cứ gì đã được đưa vào TB8 trong SCON (có thể là bit parity). Khi thu, bit thứ 9 thu được sẽ ở trong RB8. Tốc độ baud ở chế độ 2 là 1/32 hoặc 1/16 tần số dao động trên chip.
- UART 9 bit với tốc độ baud thay đổi được(chế độ 3).
Chế độ này giống như chế độ 2 ngoại trừ tốc độ baud có thể lập trình được và được cung cấp bởi timer. Thật ra, các chế độ 1,2 và 3 rất giống nhau. Các khác biệt là ở tốc độ baud (ccó định trong chế độ 2, thay đổi trong các chế độ 1 và 3) và ở số bit dữ liệu (8 bit chế độ 1và 9bit các chế độ 2 và 3).
-
Khởi động và truy xuất các thanh ghi cổng nối tiếp.
- Cho phép thu.
Bit cho phép bộ thu (REN = Receiver Enable) trong SCON phải được đặt lên 1 bằng phầm 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 hai cách. Lệnh SETB REN sẽ đặt REN lên 1, hoặc lệnh MOV SCON, #xxx1xxxxB sẽ đặt REN lên 1 và đặt hoặc xóa các bit khác trong SCON khi cần (Các x phải là 0 hoặc 2 để đặt chế độ làm việc).
- 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 dữ liệu thứ 9 thu được đặt ở RB8. 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 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ý).
- Thêm 1 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, bit P trong từ trạng thái chương trình (PSW) được đặt lên 1 hoặc bị xóa mỗi chu kỳ máy để thiết lập kiểm tra chẵn với 8 bit trong thanh ghi tích lũy. Ví dụ, nếu truyền thông cần 8 bit dữ liệu cộng thêm kiểm tra chẵn, có thể sử dụng các lệnh sau để phát 8 bit trong thanh ghi tích lũy với kiển tra chẵn thêm vào bit thứ 9 :
MOV C, P ; Đặt bit parity chẵn vào TB8
MOV TB8, C ; nó trở thành bit dữ liệu thứ 9
MOV SBUF, A ; Chuyển 8 bit từ ACC vào SBUF.
Nếu cần parity lẻ thì sửa các lệnh lại như sau :
MOV C, P ; Đặt bit parity chẵn vào cờ C
CPL C ; Đổi sang parity lẻ
MOV TB8, C
MOV SBUF, A
Dĩ nhiên, việc sử dụng parity không bị giới hạn ở các chế độ 2 và 3. Ở chế độ 1, 8 bit dữ liệu được truyền đi có thể bao gồm 7 bit dữ liệu cộng thêm bit parity. Để truyền mã ASCII 7 bit với parity chẵn ở bit 8, có thể sử dụng các lệnh sau :
CLR ACC.7 ; bảo đảm MSB được xóa
PMOV C, P ; parity chẵn ở trong
MOV ACC.7, C ; Đặt parity chẵn vào MSB
MOV SBUF, A ; Gởi ký tự đi 7 bit dữ liệu cộng prity chẵn.
- 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 trong truyền thông nối tiếp dùng 8051/8031. Cả hai bit được đặt lên 1 bằng phần cứng, nhưng phải được xóa bằng phần mềm.
Ví dụ, thường RI được đặt lên 1 khi kết thúc việc thu ký tự và báo “bộ đệm thu tràn”. Điều kiện này có thể được kiểm tra trong phần mềm hoặc có thể được lập trình để gây ra một ngắt. Nếu phần mềm muốn nhập một ký tự từ thiết bị được nối vào cổng nối tiếp (có thể là thiết bị đầu cuối hiển thị video), nó phải đợi cho đến khi RI được đặt lên 1, rồi xóa RI và đọc ký tự từ SBUF. Chương trình như sau :
WAIT : JNB RI, WAIT ; Kiểm tra RI cho đến khi nó = 1
CLR RI ; Xóa RI
MOV A, SBUF ; Đọc ký tự
TI được đặt lên 1 ở cuối lúc phát ký tự và báo “ bộ đệm phát trống”. Nếu phần mềm muốn gửi một ký tự đến một thiết bị được nối vào cổng nối tiếp, trước hết nó phải kiểm tra xem cổng nối tiếp sẵn sàng chưa. Nói cách khác, nếu ký tự trước đã được gởi đi, đợi cho đến khi việc truyền dữ liệu hoàn tất trước khi gửi ký tự kế. Các lệnh sau sẽ truyền ký tự trong thanh ghi tích lũy:
WAIT : JNB TI, WAIT ; Kiểm tra TI cho đến khi nó bằng 1
CLR TI ; Xóa TI
MOV SBUF, A ; Gởi ký tự đi.
Các đoạn chương trình trên là một phần của các hàm nhập và xuất ký tự chuẩn.
- Tốc độ baud port 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 8051/8031, 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à 12 MHz, thì tốc độ baud chế độ 0 là 1 MHz.
Các nguồn tạo xung nhịp cho port nối tiếp.
Mặc nhiên sau khi reset hệ thống, tốc độ baud chế độ 2 là tần số bộ dao động chia cho 64. Tốc độ baud cũng bị ảnh hưởng bởi một 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 1 làm gấp đôi tốc độ baud trong các 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ị hiện thời của 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 của Timer 1. Vì timer hoạt động ở tần số tương đối cao, tràn timer được
chia thêm cho 32 (16 nếu SMOD = 1) trước khi cung cấp xung nhịp tốc độ baudcho port nối tiếp.
* Sử dụng Timer 1 làm xung nhịp tốc độ baud
Xét 8051, cách thông dụng để tạo tốc độ baud là khởi động TMOD cho chế độ 8 bit tự động nạp lại (chế độ 2) và đặt giá trị nạp lại đúng vào TH1 để cho tốc độ tràn đúng với tốc độ baud. TMOD được khởi động như sau :
MOV TMOD, #0010xxxxB
Các x là các bit 1 hoặc 0 cần cho timer.
Cũng có thể đạt được các tốc độ baud thấp bằng cách sử dụng timer chế độ 1 với TMOD = 0001xxxxB. Tuy nhiên, tốn thêm phần mềm vì các thanh ghi TH1/TL1 phải được khởi động lại sau mỗi lần tràn. Việc này sẽ được thực hiện trong chương trình phục vụ ngắt. Một chọn lựa khác là cấp xung nhịp cho Timer 1 từ ngoài dùng T1(P3.5). Và luôn luôn tốc độ baud là tốc độ tràn của Timer 1 được chia cho 32 (hoặc cho 16, nếu SMOD = 1).
Công thức tổng quát để xác định tốc độ baud trong các chế độ 1 và 3 là :
Tốc độ baud = Tốc độ tràn của Timer 1 ¸ 32.
Ví dụ, muốn làm việc với tốc độ baud là 1200 baud, thì tốc độ tràn của Timer 1 phải là :
1200 ´ 32 = 38.4 KHz.
Nếu dùng thạch anh 12 MHz, Timer 1 được cấp xung nhịp 1 MHz hay 1000 KHz. Vì tốc đô tràn của Timer 1 là 38.4 KHz và timer được cấp xung nhịp 1000 KHz, thì cần tràn sau 1000 ¸ 38.4 = 26.04 xung nhịp (làm tròn là 26). Vì timer đếm lên và tràn xảy ra khi có sự thay đổi từ FFH xuống 00H ở số đếm. Như vậy giá trị đúng cần nạp vào TH1 là –26. Cách dễ nhất để đặt giá trị nạp lại vào TH1 là :
MOV TH1, # –26
Trình hợp dịch sẽ thực hiện chuyển đổi cần thiết. Trong trường hợp này –26 được chuyển thành 0E6H. Như vậy, lệnh trên hoàn toàn giống với lệnh :
MOV TH1, # 0E6H
Do việc làm tròn nên có sai số nhỏ trong tốc độ baud. Tổng quát thì cho phép dung sai 5% trong truyền thông bất đồng bộ (start/stop). Có thể có được tốc độ baud chính xác nếu dùng thạch anh 11.059 MHz. Bảng sau đây tóm tắt các giá trị nạp lại cho các tốc độ baud thông dụng nhất, dùng thạch anh 12 MHZ hoặc 11.059 MHz :
Bảng tóm tắt tốc độ baud
Tốc độ baud |
Tần số thạch anh |
SMOD |
Giá trị nạp cho TH1 |
Tốc độ baud thực tế |
Sai số |
9600 |
12.000MHz |
1 |
-7(F9H) |
8923 |
7% |
2400 |
12.000MHz |
0 |
-13(F3H) |
2404 |
0.16% |
1200 |
12.000MHz0 |
0 |
-26(E6H) |
1202 |
0.16% |
19200 |
11.059MHz |
0 |
-3(FDH) |
19200 |
0 |
9600 |
11.059MHz |
0 |
-3(FDH) |
9600 |
0 |
2400 |
11.059MHz |
0 |
-12(F4H) |
2400 |
0 |
1200 |
11.059MHz |
0 |
-24(E8H) |
1200 |
0 |
k) 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ỉ A8H. Cả hai thanh ghi được địa chỉ hóa từng bit.
- Cho phép ngắt và không cho phép ngắt.
Một nguyên nhân ngắt được cho phép hoặckhông cho phép riêng rẽ thông qua thanh ghi chức năng đặc biệt định địa chỉ bit, thanh ghi cho phép ngắt IE(interrupt enable) có địa chỉ byte là 0A8H. mỗi một bit của thanh ghi này cho phép hoặc không cho phép từng nguyên nhân ngắt riêng rẽ, thanh ghi IE đồng thời còn có một bit toàn cục(global) cho phép hoặc không cho phép tất cả các ngắt (không cho phép khi được xoá và cho phép khi set bằng 1)
Bit |
Ký hiệu |
Địa chỉ bit |
Mô tả |
IE.7 |
EA |
AFH |
Cho phép/không cho phép toàn cục |
IE.6 |
- |
AEH |
Không sử dung |
IE.5 |
ET2 |
ADH |
Cho phépngắt do bộ định thời 2 |
IE.4 |
ES |
ACH |
Cho phép ngắt doport nối tiếp |
IE.3 |
ET 1 |
ABH |
Chophép nhắt dobộ định thời 1 |
IE.2 |
EX1 |
AAH |
Cho phép ngắt từ bên ngoài |
IE.1 |
ET0 |
A9H |
Cho phép ngắt do bộ định thời 0 |
IE.0 |
EX 0 |
A8H |
Cho phép ngắt từ bên ngoài |
Bảng thanh ghi cho phép ngắt IE
- Ưu tiên ngắt
Mỗi một nguyên nhân ngắt được lập trình riêng rẽ để có một trong hai mức ưu tiên thông qua thanh ghi chức năng đặc biệt được định địa chỉ bit, thanh ghi ưu tiên ngắt IP(interrupt priority), thanh ghi này co địa chỉ byte là 0B8H
Bit |
Ký hiệu |
Địa chỉ bit |
Mô tả |
IP.7 |
|
|
Không sử dụng |
IP.6 |
|
|
Không sử dụng |
....................................................................................
d) Khối hiển thị.
Hiển thị dữ liệu từ khối xử lý thông qua các led 7 đoạn như:
+ Hiển thị thời gian ngày, tháng, năm(dương lịch).
+Hiển thị thời gian cài đặt hẹn giờ cho các thiết bị điện(quạt,bóng đèn…).
e)Khối chấp hành.
Khối chấp hành nhận dữ liệu xử lý từ khối xử nhận để điều khiển đóng ngắt các relay cung cấp điện cho các thiết bị điện.
f) Khối bàn phím.
Đây là khối bao gồm những phím đã được quy định mã sẵn để truyền tín hiệu chỉnh thời gian hay đặt giờ cho các thiết bị.
II. HOẠT ĐỘNG MẠCH.
Ở chế độ bình thường, các LED sẽ hiển thị thời gian, ngày, tháng, năm(dương lịch) với dữ liệu được cung cấp bởi IC AT89C51(IC thứ nhất)
Khi cần điều chỉnh hay hẹn giờ thì ta có thể sử dụng bàn phím giao tiếp với P1 hoặc điều khiển từ remote sony.
Khi có bất kì tín hiệu điều chỉnh nào từ bàn phím hoặc từ remote sony thì sẽ được ICAT 89C51(IC thứ hai) nhận và đem so sánh để xác định tín hiệu:
+ Nếu tín hiệu điều khiển đóng ngắt trực tiếp các thiết bị , thì tín hiệu này dùng để đóng mở các relay cung cấp nguồn cho thiết bị .
+ Ngược lại, tín hiệu này sẽ được truyền sang IC thứ nhất thông qua cổng truyền nối tiếp TxDvà RxD.
Ở đây, tín hiệu sẽ được xác định xem là tín hiệu điều chỉnh giờ hay hẹn giờ cho thiết bị .Tín hiệu này sẽ đem đi so sánh xem có phù hợp với dữ liệu của từng LED mà ta chỉ định trước hay không .Nếu dữ liệu phù hợp sẽ được lưu vào trong bộ nhớ ứng với từng LED mà ta chọn rồi mới hiển thị.
Khi đang điều chỉnh, các LED hiển thị ở chế độ khác, LED nào được chọn thì sẽ sáng hơn các LED khác.
Nếu nhận được tín hiệu thoát, chương trình hiển thị ở chế độ bình thường hiển thị giờ, ngày, tháng, năm(dương lịch).
III. TÍNH TOÁN VÀ CHỌN LINH KIỆN TRONG MẠCH
1)Mạch reset.
1.Mạch Reset
Xét mạch Reset bằng tay,ta có:Vreset=Vcc.e-T
Ta chọn Vreset=3V, T=40ms
R=8,3K
Chọn C=10
2. Mạch tạo xung
Mạch tạo dao động dùng thạch anh đưa vào vi xử lý AT89C51 nhằm đồng bộ hoạt động bên trong .Sơ đồ dao động được mô tả như hình vẽ:
Trong đó các trị số của tụ và tần số của thạch anh được nhà sản xuất khuyến cáo nên dùng vì đặc điểm bộ dao động bên trong vi xử lý AT89C51.Theo nhà sản xuất, XTAL1 và XTAL2 có gía trị thoả:10p30p
Chọn C1=30p
Chọn C2=30p
Để chu kì máy của lệnh là 1,ta chọn thạch anh có giá trị 11.AN1
3.Khối nguồn.
Cung cấp nguồn 220V qua biến thế còn 12V xoay chiều, ta dùng cầu diode để nắn điện và tụ 1000uF lọc, IC KA7812 dùng để ổn áp nguồn điện một chiều 12V. Khi cấp điện áp vào chân 1 và mass vào chân 2 thì chân 3 có ngõ ra là 12V khi dùng IC7812, và chân 1 của IC 7805 nối với chân số 3 của IC7812, chân số 2 nối mass thì điện áp ra chân số 3 của IC 7805 là 5V.Tụ C3 dùng để lọc tần số thấp, tạo ra nguồn DC chuẩn.Tụ 104p dùng để lọc tần số cao để giảm nhiễu cho mạch. Điện trở R1 dùng để hạn dòng cho Led.
Led hoạt động tốt với:
V led=2V,I led=15mA
Chọn R1=220
Khi cấp nguồn 220V thì D1 phân cực thuận, D2 bị phân cực nghịch lên không dẫn.
Khi nguồn 220V bị mất điện diode D2 được phân cực thuận, dòng điện từ pin 9V cung cấp điện áp cho mạch hoạt động bình thường, diode D1 phân cực nghịch .
4.Khối chấp hành.
Hai Trans ghép theo kiểu Darlington, lợi điểm của cách ghép này là trở kháng ngõ vào và độ khuyếch đại cao.Do đó,chỉ cần có điện áp nhỏ là đủ làm cho mạch hoạt động.
Trong đó Vo là nguồn cấp từ VXL.
Vces=0.2
Trở kháng của cuộn dây là:Rl=200
Dòng kích rất nhỏ cũng đủ làm cho mạch hoạt độngR1 được chọn là 1K
5.Khối hiển thị.
Có hai phương pháp để xuất bàn phím ra led 7 đoạn:
- Chốt dữ liệu dùng Ic
- Phương pháp quét led
Đặc tính của AT89C51 chỉ có một chân hoạt động tại một thời điểm nên chỉ có một Led hiển thị. Để thấy được nhiều Led hiển thị cùng một lúc ta lợi dụng vào đặc tính lưu ảnh của mắt. Mắt người phải mất một khoảng thời gian khoảng 0.1s mới phục hồi lại trạng thái như cũ.Trong khoảng thời gian này cảm giác ánh sáng chưa bị mất người ta vẫn còn thấy ảnh của vật. Trong phim ảnh người ta chiếu 25 ảnh/s để người xem có cảm giác như hoạt động của phim là liên tục. Tương tự với Led, nếu ta cho nó nhấp nháy >=25lần/s thì xem như nó sáng liên tục.
Tính toán:
Chọn BJT A1015với các thông số :
+Loại PNP
+Điện áp bão hoà BE: VBE = 0.8V
+Điện áp bão hoà CE: VCE = 0.2V
Điện áp và dòng điện trên mỗi đoạn của Led được chọn Vled=2V
Iled = 20mA
Nếu cấp điện cùng một lúc thì
Ic = Iled = 20*7= 140mA
Ib = =
R2=
Chọn R2=2.2K
VCESAT = 0.2V
Chọn R4=220
Chọn R3= 10
6.Giao tiếp bàn phím.
Bàn phím dùng để điều chỉnh các thiết bị hẹn giờ. Bàn phím được thiết kế theo quy tắc quét cột và quét hàng. Dó đó phần mềm gồm cóhai chương trình con.
+Chương trình thứ nhất (IN_HEX) se xác định xem có phím nào được nhấn không. Bằng cách xem cờ nhớ CY= 1 hay CY = 0. Ngoài ra, chương trình này còn thực hiện công việc chống xung nẩy và đợi nhả phím nhấn.
+Chương trình con thứ hai (GET_KEY) thực hiện công việc quét cột và quét hàng để xem có phím nào được nhấn không. Nếu có, cờ nhớ CY =1, ngược lại CY= 0.
Chức năng từng phím
TB1:Điều khiển thiết bị 1
TB2: Điều khiển thiết bị 2
TB3:Điều khiển thiết bị 3
TB4: Điều khiển thiết bị 4
INC: Tăng số lần cần nhập cho led đang chỉnh
DEC:Giảm số lần cần nhập cho led đang chỉnh
7. Giao tiếp bằng remote sony.
Ưu điểm:
_Gọn nhẹ
_Nguồn phát ổn đỉnh, ít bị nhiễu.
Chức năng của từng phím:
POWER: Thoát khỏi chương trình đang chỉnh trở về hiển thị giờ và ngày, tháng, năm bình thường.
TV/VIDEO: tắt hẹn giờ
Fine+: tắt hoặc mở thiết bị thứ nhất
Fine-: tắt hoặc mở thiết bị thứ hai
TUNE2: tắt hoặc mở thiết bị thứ ba
Các số từ 0 đến 9 dùng nhập số cho các led cần chỉnh
PROG+:chọn led chỉnh giờ đồng hồ theo hướng phút sang năm
PROG-: chọn led chỉnh giờ đồng hồ theo hứơng năm sang phút
VOL+: chọn thiết bị chinh giờ theo hướng tăng dần
VOL-: chọn thiết bị chỉnh giờ theo hướng giam dần
ENTER: chọn led chỉnh giờ thiết bị theo phút sang giờ
MENU: chọn led chỉnh giờ thiết bị từ giờ sang phút
SELECT: chọn hẹn khi đã chỉnh giờ
RED: tắt hoặc mở thiết bị thứ tư
YELOW: bỏ hẹn khi đã chỉnh giờ.
8. Khối xử lý chính.
Hoạt động :
Khối này có nhiệm vụ tạo ra tín hiệu điều khiển từ IC AT89C51 đã lập trình. Với ba chức năng chính .
+Tạo xung chuẩn để đồng hồ chạy đúng .
+Trao đổi dữ nối tiếp với khối xử lý nhận thông qua port nối tiếp (chân P3.0 và P3.1). Nhận dữ liệu khi điều chỉnh và đặt thời gian hẹn. Phát dữ liệu ngược trở lại khối xử lý nhận khi thời gian đặt trước bằng với thời gian cập nhật của đồng hồ .
+ Giải mã chọn led thông qua port2 vào IC74LS154. Đồng thời, xuất dữ liệu hiển thị led trực tiếp qua port 0.
+Dùng hẹn thiết bị được điều khiển từ bàn phím hoặc remote sony thông qua port1.
9.Khối xử lý nhận Khối này có nhiệm vụ nhận và xử lý tín hiệu điều khiển từ bàn phím hoặc nhận tín hiệu phát từ mã Remote sony thông qua IC thu hồng ngoại. Việc nhận tín hiệu từ mã Remote sony được xác lập khi hai chân INT0 và chân P3.7 và có dữ liệu đồng thời từ bàn phím thông qua port1 nếu bàn phím được nhấn. Dữ liệu nhận được sẽ so sánh với dữ liệu đã được lập trình trước để phát tín hiệu sang khối xử lý chính thông qua hai chân p3.0(RxD) và chân p3.1(TxD).
10.Khối hiển thị led ma trận.
Cấu tạo bên trong khối led ma trận gồm những led đơn, chân katot nối chung đưa ra các chân(các cột) led ma trận. Các chân anod của led đơn nối chung tạo các chân (các hàng ) led ma trận. Trong mạch sử dụng port 1 làm hàng của dàn led ma trận (gồm có 8 hàng). Các chân của port 0(p0.4 đến p0.7) được đưa vào 4 chân (20,21,22,23) của IC 74LS154 giải mã ra 16 bit(các chân từ 1 đến 17) nối với các bit cột của led ma trận. Muốn cho các led sáng thì lập trình các ngõ ra của IC74LS154 (Y0 đến Y7) ở mức thấp và các bit do các bit của port 1 đưa vào set lên. Đầu của cột được nối với điện trở để hạn dòng cho led ma trận.
CHƯƠNG III:
SƠ ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH
I. CHƯƠNG TRÌNH ĐIỀU KHIỂN BÀN PHÍM.
1. Lưu đồ giải thuật
2.Chương trình quét phím
$DEBUG
$NOSYMBOLS
$NOPAGING
$TITLE('CHUONG TRINH DONG HO')
ORG 0000H
MAIN:
MOV P2,#0FFH
MOV P1,#00H
H: LCALL IN_HEX
CJNE A,#0,CON ;MOV P2,A
SETB P1.0
CON: CJNE A,#3,CON1
CLR P1.0
CON1: CJNE A,#4,CON2
SETB P1.1
CON2: CJNE A,#5,CON3
CLR P1.1
CON3: CJNE A,#6,CON4
SETB P1.2
CON4: CJNE A,#7,CON5
CLR P1.2
CON5: CJNE A,#8,CON6
SETB P1.3
CON6: CJNE A,#9,CON7
CLR P1.3
CON7: CJNE A,#0AH,CON8
SETB P1.4
CON8: CJNE A,#0BH,CON9
CLR P1.4
CON9: CJNE A,#0CH,CON10
SETB P1.0
CON10: CJNE A,#0DH,CON11
CLR P1.0
CON11: CJNE A,#0EH,CON12
SETB P1.1
CON12: CJNE A,#0FH,CON13
CLR P1.1
CON13: SJMP H