(NB) Giáo trình Kỹ thuật vi điều khiển (Nghề Điện tử dân dụng): Phần 2 do CĐ nghề Vĩnh Long biên soạn nhằm trình bày kiến thức cơ bản về cổng nối tiếp, ngắt và phần mềm hợp ngữ. Để hiểu rõ hơn, mời các bạn tham khảo chi tiết nội dung giáo trình này.
Trang 1- Thực hiện cổng truyền thông nối tiếp đúng yêu cầu kỹ thuật;
- Thực hiện thu phát dữ liệu nối tiếp bằng 8051 đạt yêu cầu kỹ thuật
Nội dung:
1 Mở đầu
Máy tính truyền dữ liệu theo hai phương pháp: truyền dữ liệu song song và truyền dữ liệu nối tiếp
❖ Truyền song song: Sử dụng nhiều dây dẫn để truyền dữ liệu giữa các
thiết bị có khoảng cách gần nhau (khoảng vài mét) Phương pháp này cho phép truyền dữ liệu với tốc độ cao nhờ sử dụng nhiều dây dẫn để truyền dữ liệu đồng thời nên tại một thời điểm có thể truyền được nhiều
bit thông tin nhưng khoảng cách truyền thì có nhiều hạn chế
❖ Truyền nối tiếp: Sử dụng một dây dẫn để truyền dữ liệu (một dây phát
đi và một dây thu về) giữa các thiết bị có khoảng cách xa nhau (khoảng vài trăm mét trở lên) Phương pháp này sẽ truyền dữ liệu với tốc độ chậm hơn (so với phương pháp truyền song song) vì chỉ sử dụng một dây dẫn để truyền dữ liệu nên tại một thời điểm chỉ có thể truyền được một bit thông tin nhưng khoảng cách truyền thì không bị hạn chế như ở
phương pháp song song
Chip 8051 có một port nối tiếp (serial port) với các tính năng như sau:
Trang 2141
❖ Lưu ý: Ở trường hợp đặc trưng thứ hai thì dữ liệu thứ nhất sẽ không bị
mất nếu CPU đọc xong dữ liệu thứ nhất trước khi dữ liệu thứ hai được nhận đầy đủ
2.Thanh ghi điều khiển
Các thanh ghi chức năng đặc biệt của port nối tiếp:
❖ SBUF (Serial Buffer Register): thanh ghi đệm của port nối tiếp
❖ SCON (Serial Control Register): thanh ghi điều khiển port nối tiếp
Đại lượng đặc trưng cho tốc độ truyền dữ liệu nhanh hay chậm là tốc độ baud
(baud rate) hay còn gọi là tần số hoạt động của port nối tiếp có thể là giá trị cố định
hay thay đổi tùy theo yêu cầu của người lập trình Khi chế độ tốc độ baud thay đổi được sử dụng, bộ định thời 1 cung cấp xung clock tốc độ baud và ta phải lập trình sao cho phù hợp Ở phiên bản chip 8031/8052, bộ định thời 2 cũng có thể được lập trình
để cung cấp xung clock tốc độ baud
3 Chế độ làm việc
+ Thanh ghi SBUF
Thanh ghi SBUF (Serial Buffer Register): được dùng để lưu giữ dữ liệu cần phát đi
và dữ liệu đã nhận được Việc ghi dữ liệu vào thanh ghi SBUF sẽ nạp dữ liệu để phát
đi và việc đọc dữ liệu từ thanh ghi SBUF sẽ truy xuất dữ liệu đã thu được
Thanh ghi SBUF bao gồm 2 thanh ghi:
Thanh ghi phát (bộ đệm phát): dùng để lưu giữ dữ liệu cần phát đi
Thanh ghi thu (bộ đệm thu): dùng để lưu giữ dữ liệu đã nhận được
Cấu trúc của thanh ghi SBUF:
Trang 3142
Ví dụ: Các lệnh ghi dữ liệu vào SBUF và đọc dữ liệu từ SBUF
+ Thanh ghi SCON
Thanh ghi SCON (Serial Control Register): chứa các bit dùng để điều khiển chế độ hoạt động và báo trạng thái của port nối tiếp
Cấu trúc của thanh ghi SCON:
Trang 4143
Các chế độ của port nối tiếp:
Trước khi sử dụng port nối tiếp cần phải:
Ví dụ: Khởi động port nối tiếp ở chế độ 1, cho phép port thu dữ liệu từ chân RxD
SM0 = 0, SM1 = 1 → cho phép port hoạt động ở chế độ 1
REN = 1 → cho phép port nối tiếp được phép thu dữ liệu
Trang 5144
TI = 1 → chuẩn bị port nối tiếp sẵn sàng phát dữ liệu qua chân TxD
RI = 0 → chuẩn bị port nối tiếp sẵn sàng thu dữ liệu qua chân RxD
3.1.Thanh ghi dịch 8 bit
+ Chế độ 0 – Thanh ghi dịch 8 bit:
Quá trình phát dữ liệu:
❖ Quá trình khởi động: Ghi dữ liệu cần phát vào SBUF Việc phát dữ
liệu bắt đầu: Dữ liệu từ SBUF được dịch ra chân RxD đồng thời với các
xung clock dịch bit được gởi ra chân TxD (mỗi bit được truyền đi trên chân RxD trong 1 chu kỳ máy)
Trang 6145
❖ Giản đồ thời gian phát dữ liệu:
Quá trình thu dữ liệu:
❖ Quá trình khởi động: Set bit cho phép thu (REN=1) → Xóa cờ ngắt thu (RI=0) Việc thu dữ liệu bắt đầu: Các xung clock dịch bit được gởi ra
chân TxD và dữ liệu từ thiết bị bên ngoài được dịch vào chân RxD bởi các xung clock dịch bit này (việc dịch dữ liệu vào chân RxD xảy ra ở cạnh lên của xung clock dịch bit)
❖ Giản đồ thời gian thu dữ liệu:
Ứng dụng: Một ứng dụng khả thi của chế độ 0 (chế độ thanh ghi dịch bit) là mở
rộng thêm các ngõ ra cho chip 8051 Một vi mạch thanh ghi dịch nối tiếp – song song
có thể được nối với các chân TxD và RxD của chip 8051 để cung cấp thêm 8 đường xuất (xem hình vẽ bên dưới) Các thanh ghi dịch bit khác có thể ghép cascade với thanh ghi dịch bit đầu tiên để mở rộng thêm nữa
Trang 7146
3.2 Chế độ UART 8 bit có tốc độ baud thay đổi
+ Chế độ 1 – UART 8 bit có tốc độ baud thay đổi:
Trong chế độ 1, port nối tiếp của 8051 hoạt động như một bộ thu phát không đồng bộ 8 bit có tốc độ baud thay đổi (UART -Universal Asynchronous Receiver Transmitter)
UART là một bộ thu phát dữ liệu nối tiếp với mỗi ký tự dữ liệu được đứng trước bởi một bit START (logic 0) và được đứng sau bởi một bit STOP (logic 1) Thỉnh thoảng, một bit chẵn lẽ (Parity bit) được chèn vào giữa bit dữ liệu sau cùng và bit stop Hoạt động chủ yếu của UART là biến đổi dữ liệu phát từ song song thành nối tiếp và biến đổi dữ liệu thu từ nối tiếp thành song song
Hình vẽ khuông dạng dữ liệu khi được sử dụng ở chế độ UART:
Khuông dạng của một dữ liệu khi sử dụng chế độ UART 8 bit:
Trang 8147
Quá trình phát dữ liệu:
❖ Quá trình khởi động: Ghi dữ liệu cần phát vào SBUF Việc
phát dữ liệu bắt đầu: Dữ liệu từ SBUF được dịch ra chân TxD (theo
thứ tự: Start bit → 8 bit data (D0 D7) → Stop bit) → cờ TI=1
❖ Tốc độ baud: do người lập trình thiết lập và được qui định bởi tốc độ tràn của
Timer 1
❖ Thời gian của 1 bit trên đường truyền: bằng nghịch đảo của tốc độ baud (1 /
Baud rate)
❖ Cờ ngắt phát TI = 1: khi bit stop được xuất hiện trên chân TxD
Quá trình thu dữ liệu:
❖ Quá trình khởi động: Một sự chuyển trạng thái từ mức 1 xuống mức 0 tại chân RxD (tức xuất hiện bit Start) Việc thu dữ liệu bắt đầu: 8 bit dữ liệu được dịch vào
trong SBUF (theo thứ tự: D0→D1→…→D7) → Stop bit (bit thứ 9) được đưa vào bit RB8 (thuộc thanh ghi SCON) → cờ RI=1
Trang 9148
❖ Tốc độ baud: do người lập trình thiết lập và được qui định bởi tốc độ tràn của Timer 1
❖ Hai điều kiện bắt buộc để thực hiện quá trình thu dữ liệu như trên:
• RI = 0 → Yêu cầu này có nghĩa là chip 8051 đã đọc xong dữ liệu trước đó
và xoá cờ RI
• (SM2 = 1 và Stop bit = 1) hoặc SM2 = 0 → chỉ áp dụng trong chế độ
truyền thông đa xử lý Yêu cầu này có nghĩa là không set cờ RI bằng 1 trong chế độ truyền thông đa xử lý khi bit dữ liệu thứ 9 là 0
❖ Cờ ngắt thu RI = 1: khi 8 bit dữ liệu đã được nạp vào SBUF
Lưu ý: Trường hợp các tín hiệu nhiễu xuất hiện trên đường truyền (làm cho đường
truyền xuất hiện mức thấp) dẫn đến làm cho bộ thu nhận dạng sai, cho đó là sự xuất hiện của START bit (logic 0) và tiến hành thực hiện quá trình thu dữ liệu, từ đó dẫn đến kết quả nhận vào sẽ không đúng Để tránh điều này xảy ra thì khi đường truyền có
sự chuyển trạng thái từ 1 xuống 0, bộ thu yêu cầu mức 0 này phải được duy trì trên đường truyền trong một khoảng thời gian xác định Nếu không đảm bảo được như thế,
bộ thu được giả sử rằng đã nhận được nhiễu thay vì nhận được START bit hợp lệ Lúc
đó bộ thu sẽ được thiết lập lại, quay về trạng thái nghỉ và chờ sự chuyển trạng thái từ 1 xuống 0 kế tiếp trên đường truyền
3.3.UART 9 bit với tốc độ baud cố định
(Tương tự như UART 8 bit, chỉ khác ở số bit dữ liệu là 9 bit)
Trang 10149
Khuông dạng của một dữ liệu khi sử dụng chế độ UART 9 bit:
3.4.Chế độ UART với tốc độ baud cố định
+ Chế độ 3 – UART 9 bit có tốc độ baud thay đổi:
(Tương tự như UART 9 bit, chỉ khác ở tốc độ baud có thể thay đổi)
Khuông dạng của một dữ liệu khi sử dụng chế độ UART 9 bit:
4 Khởi tạo và truy suất thanh ghi PORT nối tiếp
Trong các chế độ truyền dữ liệu nối tiếp của 8051 đã nêu trên thì trên thực tế sử dụng, để thực hiện việc thu và phát dữ liệu nối tiếp giữa chip 8051 với các thiết bị
Trang 11150
khác (8051, máy tính, các thiết bị SPI,…) thường người lập trình chỉ sử dụng hai chế
độ sau : Mode 1 (UART 8 bit có tốc độ baud thay đổi) hoặc Mode 3 (UART 9 bit có tốc độ baud thay đổi) Còn hai chế độ còn lại thì rất ít sử dụng khi cần truyền dữ liệu nối tiếp Cho nên ở đây chúng ta chỉ xem xét đến trình tự thực hiện việc lập trình (bao gồm thao tác khởi động và điều khiển thu/phát dữ liệu) để 8051 có thể truyền (phát) và nhận (thu) dữ liệu thông qua port nối tiếp theo hai chế độ UART nêu trên
WAIT: JNB TI, WAIT
❖ Xoá cờ ngắt phát TI (chuẩn bị cho lần phát dữ liệu tiếp theo):
Trang 12151
(2): Giá trị dùng để qui định chế độ hoạt động của Timer 1 (dùng để tạo tốc độ
baud cho việc truyền dữ liệu nối tiếp) Để đơn giản trong việc lập trình, ta có thể khởi động thanh ghi TMOD theo như trình bày dưới đây (chủ yếu ở đây ta chỉ cần sử dụng
Timer 1 ở Mode 2 – Chế độ 8 bit tự động nạp lại):
Mode 2: (2)… = 20H
(3): Giá trị dùng để qui định tốc độ baud cho port nối tiếp Giá trị này phụ
thuộc vào tần số thạch anh, bit SMOD và tốc độ baud mà người lập trình mong muốn
(xem thêm “Bảng tính tốc độ baud cho port nối tiếp” như trên đã trình bày)
(3)… = M
)1(
Osc
f M
Trong đó: fOsc (Hz): tần số thạch anh
Baud rate (bps): tốc độ baud của port nối tiếp
(4): Dữ liệu cần phát đi thông qua port nối tiếp Dữ liệu này có thể là nội dung của một ô nhớ, thanh ghi hoặc một giá trị tức thời
Nên nhớ rằng, nếu có yêu cầu thì bit gửi kèm theo (ví dụ như bit Parity) cần phải thêm vào trước khi tiến hành quá trình phát dữ liệu (Mode 1: kèm thêm vào vị trí
của bit D7, Mode 3: kèm thêm vào vị trí của bit TB8)
Trang 13(1): Xem thêm “Lập trình 8051 truyền (phát) dữ liệu nối tiếp”
(2): Xem thêm “Lập trình 8051 truyền (phát) dữ liệu nối tiếp”
(3): Xem thêm “Lập trình 8051 truyền (phát) dữ liệu nối tiếp”
(4): Địa chỉ của một ô nhớ, thanh ghi mà dữ liệu thu được từ port nối tiếp sẽ lưu giữ vào trong đó
Nên nhớ rằng, nếu có yêu cầu thì bit gửi kèm theo (ví dụ như bit Parity) cần phải được xử lý trước khi tiến hành việc cất dữ liệu thu được (Mode 1: nằm tại vị trí
của bit D7, Mode 3: nằm tại vị trí của bit RB8)
5 Truyền thông đa xử lý
Giao tiếp nối tiếp có nghĩa là truyền dữ liệu từng chút một tại một thời điểm, khi
truyền thông song song, số lượng bit có thể được truyền tại một thời điểm phụ thuộc vào số lượng dòng dữ liệu có sẵn để liên lạc
Hai phương thức giao tiếp nối tiếp là
• Truyền thông đồng bộ: Chuyển dữ liệu hàng loạt trong cấu trúc khung tại
Giao tiếp không đồng bộ
Giao tiếp nối tiếp không đồng bộ được sử dụng rộng rãi để truyền byte theo định
hướng
Cấu trúc khung trong giao tiếp không đồng bộ:
thấp
chúng tôi sử dụng gói dữ liệu 8 bit, luôn được gửi sau bit START
cho biết kết thúc khung Stop bit luôn logic cao
Trong khung giao tiếp nối tiếp không đồng bộ, bit START đầu tiên được theo sau bởi byte dữ liệu và ở bit STOP cuối cùng, tạo thành một khung 10 bit Đôi khi bit cuối cùng cũng được sử dụng như bit chẵn lẻ
Trang 14• Sau khi hệ thống reset thì bit SMOD = 0 (chế độ mặc định)
• Vì thanh ghi PCON không được định địa chỉ từng bit, nên để tăng gấp đôi tốc độ baud (tức làm cho SMOD=1) ta phải thực hiện bằng những dòng lệnh sau:
7 Bài tập
- Ứng dụng port nối tiếp trong lập trình điều khiển thiết bị ngoại vi
+ Sơ đồ nguyên lý
Trang 15154
Hình 0.1: Sơ đồ nguyên lý khối LED đơn (Point LED)
Hình 0.2: Sơ đồ nguyên lý khối nút nhấn (Momentary Switch)
❖ Sơ đồ bố trí linh kiện
Hình 0.3: Khối LED đơn (Point LED)
Hình 0.4: Khối nút nhấn (Momentary Switch)
BÀI THỰC HÀNH
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch điều khiển truyền dữ
liệu thông qua port nối tiếp Thay đổi trạng thái của các LED tại vi điều khiển 2 (Slave) theo trạng thái của các nút nhấn tại vi điều khiển 1 (Master)
Lưu đồ giải thuật:
❖ Bước 1: Vẽ lưu đồ giải thuật của chương trình điều khiển
D22 LED D23 LED
LED
D27 LED
J3 BARLED2
1 3 5 7
D25 LED D21
LED D19 LED
D31 LED D30 LED D12
LED D10 LED
D24 LED D7
LED
1 3 5 7 9
D8 LED
D26 LED D9
LED
1 3 5 7 9
D15 LED D2
LED
D20 LED D14
LED
J5 BARLED4
1 3 5 7 J2
BARLED1
1 3 5 7
D5 LED
J4 BARLED3
1 3 5 7
D32 LED D3
LED
D11 LED
1 3 5 7 9
D16 LED D6
LED
D18 LED D17 LED
D28 LED
KEY 0
SW6 KEY 4 SW4
KEY 2
SW9 KEY 7 SW3
KEY 1
SW7 KEY 5
J25
POWER
1 3
SW8 KEY 6
J26
PUSH KEY
1 3 5 7
VCC
KEY1
KEY7
KEY0 KEY3 KEY5 KEY2 K5
K2 K4
K7
K0 VCC
K7 K5 K3 K1
Trang 16155
Hình 0.5: Lưu đồ giải thuật của chương trình
Chương trình điều khiển:
Sử dụng phần mềm Topview Simulation để thực hiện việc viết chương trình và
biên dịch, kiểm tra lỗi cú pháp của chương trình
❖ Bước 2: Khởi động phần mềm Topview Simulation
❖ Bước 3: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình là: S1_MASTER.ASM và S1_SLAVE.ASM
❖ Bước 4: Viết chương trình điều khiển dưới đây vào máy tính
Chương trình cho vi điều khiển Master:
ORG 00H
MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload)
MOV TH1,#-3 ; Baud rate = 9600
MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit
SETB TR1 ; Kich hoat Timer 1
AGAIN:
MOV A,P0 ; Lay du lieu tu SW
SJMP AGAIN ; Thuc hien lai
; Truyen du lieu noi tiep, Data = ACC
SEND:
Trang 17156
MOV SBUF,A ; Lay du lieu
JNB TI,$ ; Cho truyen xong du lieu
CLR TI ; Xoa co bao, san sang cho lan truyen tiep theo
RET ; Quay ve
; -
END
Chương trình cho vi điều khiển Slave:
ORG 00H
MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload)
MOV TH1,#-3 ; Baud rate = 9600
MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit
SETB TR1 ; Kich hoat Timer 1
AGAIN:
MOV P1,A ; Xuat len LED
SJMP AGAIN ; Thuc hien lai
; Nhan du lieu noi tiep, ACC = Data
RECV:
JNB RI,$ ; Cho nhan xong du lieu
MOV A,SBUF ; Cat du lieu nhan vao thanh ghi A
CLR RI ; Xoa co bao, san sang cho lan nhan tiep theo
RET ; Quay ve
; -
END
❖ Bước 5: Lưu chương trình trên vào máy tính
❖ Bước 6: Thực hiện biên dịch và kiểm tra lỗi chương trình
• Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thông thường do cú pháp của các lệnh không chính xác, cần phải được kiểm tra lại Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 5
• Nếu không có lỗi xuất hiện thì phần mềm sẽ tự động tạo tập tin mã máy
với tên là: S1_MASTER.HEX, S1_SLAVE.HEX và thực hiện tiếp theo
các phần nội dung dưới đây
Mô phỏng hoạt động:
Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mô phỏng
quá trình hoạt động của hệ thống vi điều khiển
❖ Bước 7: Khởi động phần mềm ISIS 7 Professional (Protues 7.10)
❖ Bước 8: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển truyền dữ liệu thông qua port nối tiếp như Hình 5.4.4 dưới đây
Trang 18157
Hình 0.6: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển
Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính với tên tập tin
là: SerialPort_1.DSN Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng hoặc lấy mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học
❖ Bước 9: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 6) cho hệ thống vi điều khiển: S1_MASTER.HEX,
về thực hiện từ Bước 5 (do giải thuật chương trình không chính xác) hoặc Bước 8 (do mạch mô phỏng vẽ không chính xác)
• Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây
+ Lắp mạch và nạp chương trình điều khiển
P0.7M
P0.0M
P0.0M P0.2M P0.4M P0.6M
P0.7M P0.5M P0.3M P0.1M
P0.7S
P0.0S
P0.0S P0.2S P0.4S P0.6S
P0.7S P0.5S P0.3S P0.1S
D0M D0M D1M D1M D2M D2M D3M D3M D4M D4M D5M D5M D6M D6M D7M D7M
P2.1S P2.3S P2.5S
P2.4M
P2.6M
A1 C1 E1 G1
A1 C1 E1 G1 P2.0M
P2.2M
A2 C2 E2 G2
A2 C2 E2 G2
P2.4S P2.6S
A3 C3 E3 G3
A3 C3 E3 G3 P2.0S
P2.2S
A4 C4 E4 G4
A4 C4 E4 G4
XTAL2 18 XTAL1 19
ALE 30 EA 31 PSEN 29
RST 9
P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34P0.6/AD6 33P0.7/AD7 32
P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8
P3.0/RXD 10P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15 P2.7/A15 28
P2.0/A8 21P2.1/A9 22 P2.2/A10 23P2.3/A11 24P2.4/A12 25 P2.5/A13 26 P2.6/A14 27
2 4 6 8
ALE 30
EA 31 PSEN 29RST 9
P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32
P1.0 1P1.1 2 P1.2 3 P1.3 4P1.4 5P1.5 6 P1.6 7P1.7 8
P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD
17 P3.6/WR
16 P3.5/T115
P2.7/A15 28
P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27
2 4 6 8
D1
R3
330 +5V
D2
R4
330 +5V
D3
R5
330 +5V
D4
R6
330 +5V
D5
R7
330 +5V
D6
R8
330 +5V
D7
R9
330 +5V
1B 12B 2 3B 3 4B 45B 56B 6 7B 78B 8
1C 18 2C 17 3C 16 4C 15 5C 14 6C 13 7C 12 8C 11
COM 10
U2
ULN2803
2 4 6 8
1
RP3
10K
+5V +5V
1B 1 2B 2 3B 3 4B 4 5B 5 6B 6 7B 7 8B 8
1C 182C 17 3C 16 4C 155C 146C 13 7C 128C 11
COM 10
U3
ULN2803
2 4 6 8
1
RP4
10K
+5V +5V
D8
R10
330 +5V
D9
R11
330 +5V
D10
R12
330 +5V
D11
R13
330 +5V
D12
R14
330 +5V
D13
R15
330 +5V
QB 12C
2 QC 11 D
6 QD 10 BI/RBO 4
QE 9RBI 5
QF 15LT
7 QA 13 B 1
QB 12C
2 QC 11 D
6 QD 10 BI/RBO 4
QE 9RBI
5 QF 15 LT
Trang 19158
Sử dụng các khối "Microcontroller Unit Slot", "Point LED", "Momentary
Switch" và "Power Supply" có sẵn trên mô hình thực hành vi điều khiển để lắp ráp
mạch theo thiết kế bên trên
❖ Bước 11: Kết nối các khối trên mô hình như Hình 5.4.5 để tạo thành hệ
thống mạch điều khiển như bên trên
• Tắt nguồn AC cấp cho mô hình thực hành
Hình 0.7: Sơ đồ kết nối mạch trên mô hình
Sử dụng phần mềm Flash Magic để thực hiện việc nạp chương trình cho vi điều
khiển P89V51RB2 trên mô hình thực hành
❖ Bước 12: Bật nguồn AC cấp cho mô hình thực hành
❖ Bước 13: Khởi động phần mềm Flash Magic
❖ Bước 14: Kiểm tra cấu hình phần mềm (loại vi điều khiển, cổng COM, tốc
độ truyền, chuẩn giao tiếp,
❖ Bước 15: Chọn tập tin chương trình điều khiển (tập tin mã máy đã được tạo
ra từ Bước 6): S1_MASTER.HEX, S1_SLAVE.HEX
❖ Bước 16: Nạp chương trình vào vi điều khiển
❖ Bước 17: Nhấn nút "Master Reset" ở khối "Microcontroller Unit Slot" để
chạy chương trình và quan sát trực tiếp kết quả trên mô hình thực hành
• Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại Sau khi hoàn tất việc kiểm tra và hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 15
• Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành
BÀI TẬP THỰC HÀNH
Nội dung: "Chương trình, mô phỏng và lắp ráp mạch điều khiển truyền dữ liệu
thông qua port nối tiếp Thay đổi trạng thái của các LED tại vi điều khiển 2 (Slave) theo trạng thái của các nút nhấn tại vi điều khiển 1 (Master) và ngược lại"
Trang 20159
Lưu đồ giải thuật:
Chương trình cho vi điều khiển Master:
ORG 00H
MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload)
MOV TH1,#-3 ; Baud rate = 9600
MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit
SETB TR1 ; Kich hoat Timer 1
AGAIN:
MOV P1,A ; Xuat len LED
SJMP AGAIN ; Thuc hien lai
; Truyen du lieu noi tiep, Data = ACC
SEND:
MOV SBUF,A ; Lay du lieu
JNB TI,$ ; Cho truyen xong du lieu
CLR TI ; Xoa co bao, san sang cho lan truyen tiep theo
RET ; Quay ve
; Nhan du lieu noi tiep, ACC = Data
RECV:
MOV A,P0 ; Lay du lieu tu SW
JNB RI,RECV ; Cho nhan xong du lieu
MOV A,SBUF ; Cat du lieu nhan vao thanh ghi A
CLR RI ; Xoa co bao, san sang cho lan nhan tiep theo
RET ; Quay ve
Trang 21160
MOV TH1,#-3 ; Baud rate = 9600
MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit
SETB TR1 ; Kich hoat Timer 1
AGAIN:
MOV P1,A ; Xuat len LED
SJMP AGAIN ; Thuc hien lai
; Truyen du lieu noi tiep, Data = ACC
SEND:
MOV SBUF,A ; Lay du lieu
JNB TI,$ ; Cho truyen xong du lieu
CLR TI ; Xoa co bao, san sang cho lan truyen tiep theo
RET ; Quay ve
; Nhan du lieu noi tiep, ACC = Data
RECV:
MOV A,P0 ; Lay du lieu tu SW
JNB RI,RECV ; Cho nhan xong du lieu
MOV A,SBUF ; Cat du lieu nhan vao thanh ghi A
CLR RI ; Xoa co bao, san sang cho lan nhan tiep theo
RET ; Quay ve
; -
END
BÀI TẬP ỨNG DỤNG
Bài 1: Viết chương trình điều khiển truyền dữ liệu thông qua port nối tiếp hoạt
động như sau: Ban đầu 8 LED của vi điều khiển Slave tắt hết Thực hiện nhấn một trong các nút nhấn của vi điều khiển Master để chọn lựa kiểu hiển thị trên 8 LED của
vi điều khiển Slave (chỉ thực hiện kiểu hiển thị 1 lần, không lặp lại)
o Nhấn nút “KEY8/MASTER”: 8 LED đơn “D0-D7/SLAVE” sáng tắt
o Nhấn nút “KEY9/MASTER”: 8 LED đơn “D0-D7/SLAVE” sáng đuổi từ trái sang phải
o Nhấn nút “KEY10/MASTER”: 8 LED đơn “D0-D7/SLAVE” sáng dần từ trái sang phải
o Nhấn nút “KEY11/MASTER”: 8 LED đơn “D0-D7/SLAVE” sáng dần từ hai bên vào giữa
o Nhấn nút “KEY12/MASTER”: 8 LED đơn “D0-D7/SLAVE” tắt hết
o Nhấn nút “KEY13/MASTER”: 8 LED đơn “D0-D7/SLAVE” sáng hết
Bài 2: Viết chương trình điều khiển truyền dữ liệu thông qua port nối tiếp hoạt
động như sau: Ban đầu 16 LED của vi điều khiển Master và Slave tắt hết Thực hiện nhấn một trong các nút nhấn của vi điều khiển Master và Slave để chọn lựa trạng thái
làm việc của 16 LED này
Trang 22Hình 0.1: Sơ đồ nguyên lý khối LED đơn (Point LED)
Hình 0.2: Sơ đồ nguyên lý khối nút nhấn (Momentary Switch)
Hình 0.3: Sơ đồ nguyên lý khối LED 7 đoạn (7 Segment LED)
D22 LED D23 LED
LED
D27 LED
J3 BARLED2
1 3 5 7
D25 LED D21
LED D19 LED
D31 LED D30 LED D12
LED D10 LED
D24 LED D7
LED
1 3 5 7 9
D8 LED
D26 LED D9
LED
1 3 5 7 9
D15 LED D2
LED
D20 LED D14
LED
J5 BARLED4
1 3 5 7 J2
BARLED1
1 3 5 7
D5 LED
J4 BARLED3
1 3 5 7
D32 LED D3
LED
D11 LED
1 3 5 7 9
D16 LED D6
LED
D18 LED D17 LED
D28 LED
KEY 0
SW6 KEY 4 SW4
KEY 2
SW9 KEY 7 SW3
KEY 1
SW7 KEY 5
J25
POWER
1 3
SW8 KEY 6
J26
PUSH KEY
1 3 5 7
VCC
KEY1
KEY7
KEY0 KEY3 KEY5 KEY2 K5
K2 K4
K7
K0 VCC
K7 K5 K3 K1
SEL4 SEL1
SEL7 SEL5
SEL0 SEL2
F D G DP E C A
J58 7SEG6 IN
1 3 5 7
J53
SEL LED IN
1 3 5 7
D G
Q5 A1015
U22 LED7
U25 LED7
R34 2K2
R36 2K2
Q6 A1015
1 3 5 7
R33 2K2
Q4 A1015
J59 7SEG5 IN
1 3 5 7 VCC
VCC VCC
F E
DP B
G D A
Trang 23162
Hình 0.4: Sơ đồ nguyên lý khối giải mã 7 đoạn (7 Segment Decoder)
Hình 0.5e: Sơ đồ nguyên lý khối giao tiếp máy tính (PC Interface)
❖ Sơ đồ bố trí linh kiện
Hình 0.6: Khối LED đơn (Point LED)
SEL B
SEL0 SEL3
SEL2 SEL2
SEL3 SEL1
E C G DP F A
C G
D F E DP A
C136 104
U102A 74139 A 2 B 3
G 1
7SEG OUT 3
1 3 5 7
D0 7 D1 1 D2 2 D3 6
BI/RBO 4
J219
DECODER 2-4 1
J220
DECODER OUT
1 3
D
J214
BCD IN 3-4
1 3 5 7
B
C G
A C
F E
C138 104
J209
DECODER OUT
1 3 5 7
J215
7SEG OUT 2
1 3 5 7
D
J218
DECODER OUT
1 3
B A
D DP F B
D0 7 D1 1 D2 2 D3 6
BI/RBO 4
C137 104
J216
7SEG OUT 4
1 3 5 7
SEL4 SEL7 SEL2 SEL0 SEL C
N/A2
DTR
CTS
C39 10u
TXD
RXD
C34 10u
RTS
DSR
N/A1
C43 10u
N/A2
DTR
CTS
C40 10u
J70
RS232C-PC
1 3 5 7
TXD RTS DSR
J80
USB 2
1 3
N/A
DTR CTS
N/A RXD
J72
POWER
1 3
U34 MAX232
T1OUT 14
T2OUT 7
J78
PS2-1-PC
1
R81 10K
C41 10u
R82 10K
C36 104
TXD RXD
TXD
U33 MAX232
T1OUT 14 T2OUT 7
JR1 PS2
1 2
J74
TXD/RXD 1
1
C44 10u
J82
PS2-2-PC
1
C33 10u
P2
LPT
13 12 11 10 9 21 8 20 7 19 6 18 5 17 4 16 3 15 2 14 1
D1
J75
CONTROL LPT-PC
1 3
J79
TXD/RXD 2
1
C42 104
R84 10K
C38 10u
R83 10K J81
USB2-PC
1
VCC VCC
VCC VCC
D2 VCC
D3
VCC
VCC
VCC VCC
D4 D7 D5
BUSY ACK PE SEL
INIT AF STB
SEL IN
STB AF ERR D0
INIT D1 SEL IN D2
PE SEL
D3 D4
-DATA
-DATA +DATA
+DATA
D6 D5
D7
BUSY ACK
RXD TXD
GND GND
GND GND
GND
GND GND
GND
D6 D4
D0 D2
BUSY ACK\
CLOCK DATA
GND +5V GND
Trang 24163
Hình 0.7: Khối nút nhấn (Momentary Switch)
Hình 0.8: Khối LED 7 đoạn (7 Segment LED)
Hình 0.9: Khối giải mã 7 đoạn (7 Segment Decoder)
Trang 25+ Lưu đồ giải thuật
❖ Bước 1: Vẽ lưu đồ giải thuật của chương trình điều khiển
Trang 26165
Hình 0.11: Lưu đồ giải thuật của chương trình
+ Chương trình điều khiển
Sử dụng phần mềm Topview Simulation để thực hiện việc viết chương trình và
biên dịch, kiểm tra lỗi cú pháp của chương trình
❖ Bước 2: Khởi động phần mềm Topview Simulation
❖ Bước 3: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình là: S1_VituralTerminal.ASM
❖ Bước 4: Viết chương trình điều khiển dưới đây vào máy tính
;***************************************************
;CHUONG TRINH DIEU KHIEN GIAO TIEP PORT NOI TIEP TRUC TIEP GIUA
VI DIEU KHIEN
;VOI MAY TINH THONG QUA CONG COM (RS-232)
;TRUYEN SO LIEU TU 8051 (NHAP VAO BANG NUT NHAN VA HIEN THI SO LIEU TREN LED DON)
;QUA MAY TINH (HIEN THI TREN PHAN MEM HYPER TERMINAL)
; KEY 0: 8051 GUI KY TU 'A'
; KEY 1: 8051 GUI KY TU 'B'
Trang 27;QUA 8051 (HIEN THI TREN LED 7 DOAN)
; KY TU 'A': 8051 HIEN THI 0
;KET NOI: 8 SWITCH -> PORT 0 (ACT = 0)
; 8 LED -> PORT 1 (CO SU DUNG DEM DAO - ACT = 1)
;KHOI DONG PORT NOI TIEP
MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload)
MOV TH1,#-3 ; Baud rate = 9600
MOV SCON,#52H ; Data = 8 bit, Stop = 1 bit
SETB TR1 ; Kich hoat Timer 1
;****************************************************
AGAIN:
Trang 28167
SJMP AGAIN ; Thuc hien lai
;****************************************************
; - Kiem tra xu ly cac du lieu nhan duoc
;**************************************************** TEST_DATA:
CJNE A,#'A',COMP1 ; Kiem tra nhan duoc ky tu 'A'
MOV P2,#00H ; Xuat LED hien thi
COMP1:
CJNE A,#'B',COMP2 ; Kiem tra nhan duoc ky tu 'B'
MOV P2,#01H ; Xuat LED hien thi
COMP2:
CJNE A,#'C',COMP3 ; Kiem tra nhan duoc ky tu 'C'
MOV P2,#02H ; Xuat LED hien thi
COMP3:
CJNE A,#'0',COMP4 ; Kiem tra nhan duoc ky tu '0'
MOV P2,#03H ; Xuat LED hien thi
COMP4:
CJNE A,#'1',COMP5 ; Kiem tra nhan duoc ky tu '1'
MOV P2,#04H ; Xuat LED hien thi
COMP5:
CJNE A,#'2',COMP6 ; Kiem tra nhan duoc ky tu '2'
MOV P2,#05H ; Xuat LED hien thi
COMP6:
CJNE A,#'@',COMP7 ; Kiem tra nhan duoc ky tu '@'
MOV P2,#06H ; Xuat LED hien thi
COMP7:
Trang 29168
CJNE A,#'#',COMP_EXIT ; Kiem tra nhan duoc ky tu '#'
MOV P2,#07H ; Xuat LED hien thi
JB P0.1,NEXT2 ; Kiem tra KEY1 (co chong doi)?
JB P0.2,NEXT3 ; Kiem tra KEY2 (co chong doi)?
Trang 30JB P0.4,NEXT5 ; Kiem tra KEY4 (co chong doi)?
JB P0.5,NEXT6 ; Kiem tra KEY5 (co chong doi)?
JB P0.6,NEXT7 ; Kiem tra KEY6 (co chong doi)?
Trang 31JNB TI,$ ; Cho truyen xong du lieu
CLR TI ; Xoa co bao, san sang cho lan truyen tiep theo
MOV SBUF,A ; Lay du lieu
RET ; Quay ve
;****************************************************
; Nhan du lieu noi tiep, ACC = Data
;****************************************************
RECV:
JNB RI,RECV ; Cho nhan xong du lieu
CLR RI ; Xoa co bao, san sang cho lan nhan tiep theo
MOV A,SBUF ; Cat du lieu nhan vao thanh ghi A
RET ; Quay ve
Trang 32❖ Bước 5: Lưu chương trình trên vào máy tính
❖ Bước 6: Thực hiện biên dịch và kiểm tra lỗi chương trình
• Nếu cĩ bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thơng thường do cú pháp của các lệnh khơng chính xác, cần phải được kiểm tra lại Sau khi hồn tất việc hiệu chỉnh sai sĩt thì quay trở về thực hiện từ Bước 5
• Nếu khơng cĩ lỗi xuất hiện thì phần mềm sẽ tự động tạo tập tin mã máy
với tên là: S1_VituralTerminal.HEX và thực hiện tiếp theo các phần nội
dung dưới đây
+ Mơ phỏng hoạt động
Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mơ phỏng
quá trình hoạt động của hệ thống vi điều khiển
❖ Bước 7: Khởi động phần mềm ISIS 7 Professional (Protues 7.10)
❖ Bước 8: Vẽ sơ đồ thiết kế mạch mơ phỏng điều khiển truyền dữ liệu giữa vi điều khiển 8051 và máy tính như Hình 5.5.4 dưới đây
Hình 0.12: Sơ đồ nguyên lý mơ phỏng hệ thống điều khiển
P0.7S
P0.0S
P0.0S P0.2S P0.4S P0.6S
P0.7S P0.5S P0.3S P0.1S
P2.0S
P2.7S
P2.1S P2.3S P2.5S
P2.4S
P2.6S
A3 C3 E3 G3
A3 C3 E3 G3
P2.0S
P2.2S
A4 C4 E4 G4
A4 C4 E4 G4
MẠCH ĐIỀU KHIỂN GIAO TIẾP CỔNG NỐI TIẾP
P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27
D1
R3
330 +5V
D2
R4
330 +5V
D3
R5
330 +5V
D4
R6
330 +5V
D5
R7
330 +5V
D6
R8
330 +5V
D7
R9
330 +5V
KEY7 KEY6 KEY5 KEY4 KEY3 KEY2 KEY1 KEY0
1B 1 2B 2 3B 3 4B 4 5B 5 6B 6 7B 7 8B 8
1
RP4
10K
+5V +5V
CTS
Trang 33172
Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính với tên tập tin
là: SerialPort_PC.DSN Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng hoặc lấy mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học
❖ Bước 9: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo
ra từ Bước 6) cho hệ thống vi điều khiển: S1_VituralTerminal.HEX
❖ Bước 10: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn
hình máy tính
• Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thông thường do giải thuật chương trình không chính xác hoặc do mạch mô phỏng vẽ không chính xác, cần phải được kiểm tra lại Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở
về thực hiện từ Bước 5 (do giải thuật chương trình không chính xác) hoặc Bước 8 (do mạch mô phỏng vẽ không chính xác)
• Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây
+ Lắp mạch và nạp chương trình điều khiển
Sử dụng các khối "Microcontroller Unit Slot", "Point LED", "7 Segment
Display", "7 Segment Decoder", "PC Interface" và "Power Supply" có sẵn trên mô
hình thực hành vi điều khiển để lắp ráp mạch theo thiết kế bên trên
❖ Bước 11: Kết nối các khối trên mô hình như Hình 5.5.5 để tạo thành hệ thống
mạch điều khiển như bên trên
• Tắt nguồn AC cấp cho mô hình thực hành
Hình 0.13: Sơ đồ kết nối mạch trên mô hình
Trang 34173
Sử dụng phần mềm Flash Magic để thực hiện việc nạp chương trình cho vi điều
khiển P89V51RB2 trên mô hình thực hành
❖ Bước 12: Bật nguồn AC cấp cho mô hình thực hành
❖ Bước 13: Khởi động phần mềm Flash Magic
❖ Bước 14: Kiểm tra cấu hình phần mềm (loại vi điều khiển, cổng COM, tốc độ
truyền, chuẩn giao tiếp,
❖ Bước 15: Chọn tập tin chương trình điều khiển (tập tin mã máy đã được tạo ra
từ Bước 6): S1_VituralTerminal.HEX
❖ Bước 16: Nạp chương trình vào vi điều khiển
❖ Bước 17: Nhấn nút "Master Reset" ở khối "Microcontroller Unit Slot" để
chạy chương trình và quan sát trực tiếp kết quả trên mô hình thực hành
• Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại Sau khi hoàn tất việc kiểm tra và hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 15
• Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành
BÀI TẬP THỰC HÀNH
Nội dung: "Chương trình điều khiển truyền dữ liệu giữa vi điều khiển và PC thông
qua port nối tiếp" với yêu cầu sau:
❖ Truyền dữ liệu từ 8051 (nhập bằng nút) qua máy tính (hiển thị trên phần mềm Hyper Terminal)
• KEY 0: 8051 gửi chuỗi ký tự 'TRUONG DAI HOC CONG NGHIEP TP HCM'
• KEY 1: 8051 gửi chuỗi ký tự 'KHOA CONG NGHE DIEN TU'
• KEY 2: 8051 gửi chuỗi ký tự 'BO MON DIEN TU CONG NGHIEP'
• KEY 3: 8051 gửi chuỗi ký tự 'MICRO-CONTROLLER SYSTEM 51'
❖ Truyền dữ liệu từ máy tính (nhập trên Hyper Terminal) qua 8051 (hiển thị trên LED ma trận)
• Các ký tự hiển thị được "A" – "Z" và "0" – "9"
Sơ đồ mạch điện mô phỏng:
Trang 35174
Sơ đồ lắp ráp trên mơ hình:
Chương trình điều khiển:
;***************************************************
;CHUONG TRINH DIEU KHIEN GIAO TIEP PORT NOI TIEP TRUC TIEP GIUA
VI DIEU KHIEN
;VOI MAY TINH THONG QUA CONG COM (RS-232)
;TRUYEN SO LIEU TU 8051 (NHAP VAO BANG NUT NHAN) QUA MAY TINH
;(HIEN THI TREN PHAN MEM HYPER TERMINAL)
; KEY 0: 8051 GUI CHUOI KY TU 'TRUONG DAI HOC CONG NGHIEP TP HCM'
; KEY 1: 8051 GUI CHUOI KY TU 'KHOA CONG NGHE DIEN TU'
; KEY 2: 8051 GUI CHUOI KY TU 'BO MON DIEN TU CONG NGHIEP'
P0.7S
P0.0S
P0.0S P0.2S P0.4S P0.6S
P0.7S P0.5S P0.3S P0.1S
COL3 COL5 COL7
MẠCH ĐIỀU KHIỂN GIAO TIẾP CỔNG NỐI TIẾP
XTAL2 18XTAL1 19
ALE 30
EA 31 PSEN 29 RST 9
P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32
P1.0 1P1.1 2P1.2 3 P1.3 4P1.4 5 P1.5 6P1.6 7P1.7 8
P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD
17 P3.6/WR
16 P3.5/T115
P2.7/A15 28
P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27
2 4 6 8
Q2
A1015 +5V
Q4
A1015 +5V
Q6
A1015 +5V
Q8
A1015 +5V
1C 182C 173C 16 4C 155C 14 6C 137C 128C 11
Trang 36;(HIEN THI TREN LED MA TRAN)
; CAC KY TU HIEN THI DUOC 'A' - 'Z', '0' - '9'
;
;MO PHONG PROTUES: SERIALPORT_PC_MATRIX
;***************************************************
;KET NOI: 8 SWITCH -> PORT 0 (ACT = 0)
; ROW -> PORT2, RED COLUMN -> PORT1 (CO DEM DAO)
; PHUONG PHAP: QUET COT (ACT = 1) - HIEN THI HANG (ACT = 0)
;***************************************************
$MOD51
ORG 00H
;****************************************************
;KHOI DONG PORT NOI TIEP
MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload)
MOV TH1,#-3 ; Baud rate = 9600
MOV SCON,#52H ; Data = 8 bit, Stop = 1 bit
SETB TR1 ; Kich hoat Timer 1
;****************************************************
MOV DPTR,#CODEDISP_MATRIX ; Dia chi ma ky tu hien thi tren LED
ma tran (mac dinh
AGAIN: ; khi chua nhan du lieu thi LED ma tran tat het)
CJNE A,07H,NEW_DATA ; Kiem tra so sanh ky tu vua nhan voi ky tu
da nhan tu truoc
SJMP OLD_DATA ; Thuc hien lai (neu khong co su khac nhau giua hai la nhan)
NEW_DATA: ; Thanh ghi R7 chua ma ky tu nhan duoc
MOV R7,A ; Cat ma ky tu vua nhan (co su khac nhau giua hai lan nhan) OLD_DATA:
SJMP AGAIN ; Thuc hien lai
Trang 37176
;***************************************************
;CTC KIEM TRA TRANG THAI CAC NUT NHAN VA DIEU KHIEN TRUYEN
;DU LIEU TUONG UNG VOI NUT DUOC NHAN QUA PORT NOI TIEP
Trang 38SEND_KEY: ; Truyen du lieu, ket thuc khi du lieu truyen di la 99H
MOV A,#0 ; Offset dau tien trong vung du lieu truyen di
CJNE A,#99H,SEND_KEY_NEXT ; Kiem tra lay het du lieu trong vung
du lieu
SJMP EXIT_TEST ; Thoat khi phat hien ra du lieu ket thuc la 99H
SEND_KEY_NEXT:
INC DPTR ; Chuyen sang du lieu ke tiep
SJMP SEND_KEY ; Quay lai de truyen du lieu ke tiep
;ANH CUA KY TU NHAN DUOC A - Z VA 0 - 9
;THANH GHI R7 CHUA KY TU NHAN DUOC TU PORT NOI TIEP
;THANH GHI DPTR CHUA DIA CHI VUNG DU LIEU HIEN THI TREN MA TRAN CUA KY TU
;****************************************************
TEST_DATA:
COMP_A:
CJNE R7,#'A',COMP_B ; Kiem tra nhan duoc ky tu A
MOV DPTR,#(CODEDISP_MATRIX+8) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_B:
CJNE R7,#'B',COMP_C ; Kiem tra nhan duoc ky tu B
Trang 39CJNE R7,#'C',COMP_D ; Kiem tra nhan duoc ky tu C
MOV DPTR,#(CODEDISP_MATRIX+24) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_D:
CJNE R7,#'D',COMP_E ; Kiem tra nhan duoc ky tu D
MOV DPTR,#(CODEDISP_MATRIX+32) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_E:
CJNE R7,#'E',COMP_F ; Kiem tra nhan duoc ky tu E
MOV DPTR,#(CODEDISP_MATRIX+40) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_F:
CJNE R7,#'F',COMP_G ; Kiem tra nhan duoc ky tu F
MOV DPTR,#(CODEDISP_MATRIX+48) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_G:
CJNE R7,#'G',COMP_H ; Kiem tra nhan duoc ky tu G
MOV DPTR,#(CODEDISP_MATRIX+56) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_H:
CJNE R7,#'H',COMP_I ; Kiem tra nhan duoc ky tu H
MOV DPTR,#(CODEDISP_MATRIX+64) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_I:
CJNE R7,#'I',COMP_J ; Kiem tra nhan duoc ky tu I
MOV DPTR,#(CODEDISP_MATRIX+72) ; Dia chi ma ky tu hien thi tren LED ma tran
Trang 40179
AJMP COMP_EXIT
COMP_J:
CJNE R7,#'J',COMP_K ; Kiem tra nhan duoc ky tu J
MOV DPTR,#(CODEDISP_MATRIX+80) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_K:
CJNE R7,#'K',COMP_L ; Kiem tra nhan duoc ky tu K
MOV DPTR,#(CODEDISP_MATRIX+88) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_L:
CJNE R7,#'L',COMP_M ; Kiem tra nhan duoc ky tu L
MOV DPTR,#(CODEDISP_MATRIX+96) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_M:
CJNE R7,#'M',COMP_N ; Kiem tra nhan duoc ky tu M
MOV DPTR,#(CODEDISP_MATRIX+104) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_N:
CJNE R7,#'N',COMP_O ; Kiem tra nhan duoc ky tu N
MOV DPTR,#(CODEDISP_MATRIX+112) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_O:
CJNE R7,#'O',COMP_P ; Kiem tra nhan duoc ky tu O
MOV DPTR,#(CODEDISP_MATRIX+120) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_P:
CJNE R7,#'P',COMP_Q ; Kiem tra nhan duoc ky tu P
MOV DPTR,#(CODEDISP_MATRIX+128) ; Dia chi ma ky tu hien thi tren LED ma tran
AJMP COMP_EXIT
COMP_Q: