Professional Documents
Culture Documents
Cổng nối tiếp được sử dụng để truyền dữ liệu hai chiều giữa máy tính và ngoại vi,
có
các ưu điểm sau:
- Khoảng cách truyền xa hơn truyền song song.
- Số dây kết nối ít.
- Có thể truyền không dây dùng hồng ngoại.
- Có thể ghép nối với vi điều khiển hay PLC (Programmable Logic Device).
- Cho phép nối mạng.
- Có thể tháo lắp thiết bị trong lúc máy tính đang làm việc.
- Có thể cung cấp nguồn cho các mạch điện đơn giản
Các thiết bị ghép nối chia thành 2 loại: DTE (Data Terminal Equipment) và DCE
(Data Communication Equipment). DCE là các thiết bị trung gian như MODEM còn
DTE là các thiết bị tiếp nhận hay truyền dữ liệu như máy tính, PLC, vi điều khiển, …
Việc trao đổi tín hiệu thông thường qua 2 chân RxD (nhận) và TxD (truyền). Các tín
hiệu còn lại có chức năng hỗ trợ để thiết lập và điều khiển quá trình truyền, được gọi
là các tín hiệu bắt tay (handshake). Ưu điểm của quá trình truyền dùng tín hiệu bắt tay
là có thể kiểm soát đường truyền.
1 . Chuẩn RS-232.
Tại sao phải quy định chuẩn?Để các thiêt bị máy in,máy tính vi điều khiển,rôbôt goi
chung là các thiết bị thu phát có thể làm việc hiệu quả và không gặp rắc rối khi làm
việc phối hợp từ lâu ngươì ta đặt ra các tiêu chuẩn (VD như tiêu chuẩn tốc độ
truyền,cách kiểm soát lỗi trong quá trình truyền,mức điện áp khi truyền )cho các cổng
vào ra tín hiệu của các thiết bị.RS-232 là một trong những chuẩn đó.Chuẩn này ra đời
1962(bởi EIA)
Tín hiệu truyền theo chuẩn RS-232 của EIA (Electronics Industry Associations).
Chuẩn RS-232 quy định mức logic 1 ứng với điện áp từ -3V đến -25V (mark), mức
logic 0 ứng với điện áp từ 3V đến 25V (space) và có khả năng cung cấp dòng từ 10
mA đến 20 mA.
Ngoài ra, tất cả các ngõ ra đều có đặc tính chống chập mạch.
Chuẩn RS-232 cho phép truyền tín hiệu với tốc độ đến 20.000 bps nhưng nếu cáp
truyền đủ ngắn có thể lên đến 115.200 bps
Chuẩn RS- 232 sử dụng phương thức truyền thông không đối xứng, tức là sử dụng
tín hiệu điện áp chênh lệch giữa một dây dẫn và đất. Các cổng của RS – 232 có
ngưỡng điện áp qui ước là -15V (volt) tới -3V , và 3V tới 15V (hoặc -5V, +5V, sự khác
biệt giữa hai giá trị 3, và 5V này được gọi là noise magin - biên độ dao động của
nhiễu).
• Tín hiệu có áp lớn +3V được coi có logic 0 hoặc có giá trị cao (H)
• Tín hiệu có áp nhỏ hơn –3V được coi có logic 1 hoặc giá trị thấp (L).
• Điện áp từ -3V tới +3V không có ý nghĩa.
Chính vì từ – 3V tới 3V là phạm vi không được định nghĩa, trong trường hợp thay
đổi giá trị logic từ thấp lên cao hoặc từ cao xuống thấp, một tín hiệu phải vượt qua
quãng quá độ trong một thơì gian ngắn hợp lý. Điều này dẫn đến việc phải hạn chế
về điện dung của các thiết bị tham gia và của cả đường truyền. Tốc độ truyền dẫn tối
đa phụ thuộc vào chiều dài của dây dẫn. Đa số các hệ thống hiện nay chỉ hỗ trợ với
tốc độ 19,2 kBd (chiều dài cho phép 30 – 50 m).
a.Các đặc tính kỹ thuật của chuẩn RS-232 như sau:
Chiều dài cable cực đại 15m
Tốc độ dữ liệu cực đại 20 Kbps
Điện áp ngõ ra cực đại ± 25V
Trở kháng tải 3K đến 7K
Điện áp ngõ vào ± 15V
Độ nhạy ngõ vào ± 3V
Trở kháng ngõ vào 3K đến 7K
ổng nối tiếp là: 1200 bps, 4800 bps,
9600 bps và 19200 bps.
Cổng COM không phải là một hệ thống bus nó cho phép dễ dàng tạo ra liên kết
dưới hình thức điểm với điểm giữa hai máy cần trao đổi thông tin với nhau, một thành
viên thứ ba không thể tham gia vào cuộc trao đổi thông tin này.
• Các chân và đường dẫn được mô tả như sau:
Phích cắm COM có tổng cộng 8 đường dẫn, chưa kể đến đường nối đất. Trên
thực tế có hai loại phích cắm, một loại 9 chân và một loại 25 chân. Cả hai loại này
đều có chung một đặc điểm.
Việc truyền dữ liệu xảy ra ở trên hai đường dẫn. Qua chân cắm ra TXD máy
tính gởi dữ liệu của nó đến KIT Vi điều khiển. Trong khi đó các dữ liệu mà máy tính
nhận được, lại được dẫn đến chân RXD các tín hiệu khác đóng vai trò như là tín hiệu
hổ trợ khi trao đổi thông tin, và vì thế không phải trong mọi trường hợp ứng dụng đều
dùng hết.
Các tốc độ truyền dữ liệu thông dụng trong cổng nối tiếp là: 1200 bps, 4800
bps, 9600 bps và 19200 bps
Khi thực hiện kết nối như trên, quá trình truyền phải bảo đảm tốc độ ở đầu
phát và
thu giống nhau. Khi có dữ liệu đến DTE, dữ liệu này sẽ được đưa vào bộ đệm và tạo
ngắt.
Ngoài ra, khi thực hiện kết nối giữa hai DTE, ta còn dùng sơ đồ sau:
DTE1 DTE2
Sơ đồ kết nối trong truyền thông nối tiếp dùng tín hiệu bắt tay
Khi DTE1 cần truyền dữ liệu thì cho DTR tích cực tác động lên DSR của DTE2
cho biết sẵn sàng nhận dữ liệu và cho biết đã nhận được sóng mang của MODEM
(ảo). Sau đó, DTE1 tích cực chân RTS để tác động đến chân CTS của DTE2 cho biết
DTE1 có thể nhận dữ liệu. Khi thực hiện kết nối giữa DTE và DCE, do tốc độ truyền
khác nhau nên phải thực hiện điều khiển lưu lượng. Quá trinh điều khiển này có thể
thực hiện bằng phần mềm hay phần cứng. Quá trình điều khiển bằng phần mềm thực
hiện bằng hai ký tự Xon và Xoff.
Ký tự Xon được DCE gởi đi khi rảnh (có thể nhận dữ liệu). Nếu DCE bận thì
sẽ gởi ký tự Xoff. Quá trình điều khiển bằng phần cứng dùng hai chân RTS và CTS.
Nếu DTE muốn truyền dữ liệu thì sẽ gởi RTS để yêu cầu truyền, DCE nếu có khả
năng nhận dữ liệu (đang rảnh) thì gởi lại CTS.
II.Một số ngôn ngữ trong lập trình giao tiếp nối tiếp:
RTSEnable, Settmgs, Sthreshold… được đặt khi viết chương trình, có thể thay đổi khi chạy
Mở cổng
Object.PortOpen [= True/ False]
Value = True : mở cổng
Value = False : đóng cổng và xóa bộ đệm truyền thu,
Cổng tự động đóng khi kết thúc chương trình áp dụng.
Nhập dữ liệu
String$= Object.Input
Dữ liệu chuỗi ở bộ đệm thu được đọc vào biến String$ . Liên
quan đến đọc dữ liệu có các lệnh sau:
Object.InputLen [= numByte%]
InputLen: qui định số ký tự đọc bởi Input. Chọn InputLen =
0 sẽ cho đọc toàn bộ vùng bộ đệm.
Object.InbufferSize = [numbyte%]
InBufferSize đặt và trả về kích thước theo byte của đệm thu,
mặc định là 1024.
Object.InbufferCount [= Count%]
InbufferCount: cho biết số ký hiệu có trong bộ đệm nhận. Xóa
bộ đệm bằng cách cho InbufferCount = 0
Object.InputMode [= value]
InputMode: cho biết loại dữ liệu là văn bản hay nhị phân
Value = 0 : ComInputModeText
Value = 1 : ComInputModeBinary
Ví dụ:
Dim Buffer as Variant
Dim Arr() as Byte
MSComm1.CommPort = 1
MSComm1.PortOpen = True
‘Set InputMode to read binary data
MSComm1.InputMode = comInputModeBinary
Do Until MSComm1.InBufferCount > 10
DoEvents
Loop
Buffer = MSComm1.Input
' Assign to byte array for processing
Arr = Buffer
Xuất dữ liệu
Object.Output [= value]
Xuất chuỗi ký tự hay chuỗi nhị phân ra cổng COM.
Giống như nhập dữ liệu ta có các lệnh hỗ trợ.
OutBufferSize: đặt và trả lại kích thước bộ đệm truyền
OutBufferCount: trả lại số ký tự trong bộ đệm truyền.
Ví dụ: gởi ký tự nhấn phím
Private Sub Form_KeyPress (KeyAscii As Integer)
Dim Buffer as Variant
MSComm1.CommPort = 1
MSComm1.PortOpen = True
Buffer = Chr$(KeyAscii)
MSComm1.Output = Buffer
End Sub
Ví dụ:
‘ gởi chuỗi ký tự
MsComm1.Output = "This is a text string”
‘ gởi số nhị phân
Dim Out( ) As Byte
MsComm1.Output = Out
Gởi tín hiệu Break
object.Break [= True/False]
Đọc chân DCD
inCD= object. CDHolding
nếu inCD True thì DCD ở mức cao, nếu False DCD ở mức thấp.
Đặt thời gian chờ sóng mang
object. CDTimeout [= milliseconds]
Chờ khoảng thời gian cho DCD ở mức cao, nếu hết thời gian mà CDHolding =
false thì tạo sự kiện onComm CDTO (carrier detect Timeout Error).
Đọc CTS
object. CTS Holding
True: mức 1, False: mức 0
Đặt thời gian chờ CTS
Khi DTE gởi RTS thì modem phải gởi trả lại CTS, tính chất object. CTSTimeout
định thời gian chờ, nếu quá thời gian đó mà không có CTS thì tạo sự kiện CTSTO.
Đọc DSR
object. DSRHolding
Đặt thời gian chờ DSR
object. DSRTimeout
Điều khiển DTR
object. DTREnable [=True/False] nếu True thì DTR mức 1 khi mở cổng và mức 0
khi đóng cổng, nếu False thì DTR ở mức 0
Điều khiển RTS
object. RTSEnable [ =True/False]
Khi True RTS sẽ ở mức 1 khi mở cổng và mức 0 khi đóng
cổng
Sthreshold: đặt số byte có trong bộ đệm truyền để báo sự kiện.
Nếu Sthreshold = 1 thì sẽ gọi onComm khi bộ đệm truyền rỗng.
Nếu Sthreshold = 0 thì không gọi.
Đặt số byte của bộ đệm thu tối thiểu để báo sự kiện
object. Rthreshold [= value]
Nếu đặt bằng 1 thì sẽ gọi onComm khi nhận được 1 ký tự.
Nếu đặt bằng 0 thì không gọi.
Giao thức bắt tay
object.Handshaking [= value]
Value = 0 không bắt tay
Value = 1 bắt tay theo RTS/CTS
=2 XON/XOFF
=3 RTS/XON/XOFF
Ví dụ:
Private Sub Form_Load ( )
Dim Buffer$ as string
‘ Dùng COM 1, 9600 baud, không parity, 8 bit data, 1 bit stop
MSComm1. Comport = 1
MSComm1. Settings = “9600, N, 8, 1”
‘ Đọc toàn bộ bộ đệm
MSComm1. Inputlen = 0
‘ Mở cổng và gởi lệnh đến modem chế độ trả lời bằng chữ
MSComm1. PortOpen = True
MSComm1. Output = “ATV1Q0” & Chr$(13)
‘ Chờ trả lời “OK”, nếu có OK thì đóng cổng
Do
DoEvents
Buffer$ = Buffer$ & MSComm1. Input
Loop Until InStr (Buffer$, “OK” & vbCrLf)
MSComm1. PortOpen = False
End Sub
Chương trình trên dùng kỹ thuật hỏi vòng. Ta có thể dùng kỹ thuật sự kiện
object.CommEvent. Khi có sự kiện xảy ra chương trình cho cổng
object_OnComm () sẽ được gọi để xử lý các sự kiện hay các lỗi.
Ví dụ:
Private Sub MSComm1_OnComm ( )
Select Case MSComm1. CommEvent
‘ Xử lý sự kiện hay lỗi bằng cách đặt lệnh dưới mỗi phát biểu Case
‘ Lỗi
Case ComEventBreak ‘Nhận Break
Case ComEventFrame ‘Sai frame
Case ComEventOverrun ‘Mất dữ liệu
Case ComEventRXOver ‘Đệm thu tràn
Case ComEventRXParity ‘Sai Parity
Case ComEventTXFull ‘Đệm phát đầy
Case ComEventDCB ‘Sai khi đọc DCB
‘ Sự kiện
Case ComEvCD ‘Đường CD thay đổi
Case ComEvCTS ‘CTS thay đổi
Case ComEvDSR ‘DSR thay đổi từ 1 xuống 0
Case ComEvRing ‘RI thay đổi
Case ComEvReceive ‘Số byte đệm thu đạt mức Rthreshold
Case ComEvSend ‘Số byte đệm phát ít hơn Sthreshold
Case ComEvEOF ‘Nhận ký tự EOF kết thúc file (mã ASCII 26) trong chuỗi nhập
End Select
End Sub.
Ví dụ: chương trình quay số điện thoại qua modem
Option Explicit
' Variable names beginning with A through Z default to Integer.
DefInt A-Z
Dim CancelFlag, Default$
Private Sub CancelButton_Click()
' CancelFlag tells the Dial procedure to exit.
CancelFlag = True
CancelButton.Enabled = False
End Sub
Private Sub Dial(Number$)
Dim DialString$, FromModem$, dummy, i As Double
i=0
DialString$ = "ATDT" + Number$ + vbCr
' Dial the number.
MSComm1.Output = DialString$
' Wait for "OK" to come back from the modem.
Do
i=i+1
dummy = DoEvents()
' If there is data in the buffer, then read it.
If MSComm1.InBufferCount Then
FromModem$ = FromModem$ + MSComm1.Input
' Check for "OK".
If InStr(FromModem$, "OK") Then
' Notify the user to pick up the phone.
Beep
MsgBox "Please pick up the phone and either press Enter or click OK"
Exit Do
End If
End If
' Did the user choose Cancel?
If i > 100000 Then
Beep
MsgBox "TimeOut, Please check cable and modem"
Exit Do
End If
If CancelFlag Then
CancelFlag = False
Exit Do
End If
Loop
' Disconnect the modem.
MSComm1.Output = "ATH" + vbCr
End Sub
Private Sub DialButton_Click()
Dim Number$, Temp$
DialButton.Enabled = False
QuitButton.Enabled = False
CancelButton.Enabled = True
' Get the number to dial.
Number$ = InputBox$("Enter phone number:", , Default$)
If Number$ = "" Then
DialButton.Enabled = True
QuitButton.Enabled = True
CancelButton.Enabled = False
Exit Sub
End If
Temp$ = Status
Default$ = Number$
Status = "Dialing - " + Number$
' Dial the selected phone number.
Dial Number$
DialButton.Enabled = True
QuitButton.Enabled = True
CancelButton.Enabled = False
Status = Temp$
End Sub
Private Sub Form_Load()
Default$ = "8654357"
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
On Error Resume Next
MSComm1.PortOpen = True
If Err Then
MsgBox "COM1: not available. Change the CommPort property to another port."
Exit Sub
End If
MSComm1.InBufferCount = 0
MSComm1.InputLen = 0
End Sub
Private Sub QuitButton_Click()
' Close the port.
MSComm1.PortOpen = False
End
End Sub
1. Ưng dụng giao tiêp giữa máy tinh và vi điều khiển 8051.
a) Sơ đồ kết nối giữa 8051 và máy tính.
Khi thực hiện giao tiếp với vi điều khiển ,ta phải dùng thêm mạch chuyển mức
logic từ TTL đến 232 và ngược lại .Các vi mạch thường sử dụng là MAX232 của
maxim hay DS275 của Dallas.Mạch chuyển mức logic mô tả như sau:
Sơ đồ kết nối giữa cổng COM với KIT Vi điều khiển 8051 :
Sơ đồ thực thực tế
Vi mạch này nhận mức RS232 đã được gởi tới từ máy tính và biến đổi tín hiệu náy
thành tín hiệu TTL để cho tương thích với IC 8051 và nó cũng thực hiện ngược lại là
biến đổi tín hiệu TTL từ Vi điều khiển thành mức +12V, -12V để cho phù hợp hoạt
động của máy tính. Giao tiếp theo cách này, khoảng cách từ máy tính đến thiết bị
ngoại vi có thể đạt tới trên 20 mét.
Ưu điểm của giao diện này là có khả năng thiết lập tốc độ Baud.
Khi dữ liệu từ máy tính được gởi đến KIT Vi điều khiển 8051 qua cổng COM thì dữ
liệu này sẽ được đưa vào từng bit (nối tiếp) vào thanh ghi SBUF (thanh ghi đệm),
đến khi thanh ghi đệm đầy thì cờ RI trong thanh ghi điều khiển sẽ tự động Set lên 1
và lúc này CPU sẽ gọi chương trình con phục vụ ngắt và dữ liệu sẽ được đưa vào để
xử lý.
Khi lập trình 8051 để truyền các byte ký tự nối tiếp thì cần phải thực hiện các
bước sau đây:
1. Nạp thanh ghi TMOD giá trị 204 báo rằng sử dụng Timer1 ở chế độ 2 để thiết lập
chế độ baud.
2. Nạp thanh ghi TH1 các giá trị cho trong bảng 2 để thiết lập cho chế độ baud truyền
dữ liệu nối tiếp ( Với giả thiết tần số XTAL=11.0592 MHz)
3. Nạp thanh ghi SCON giá trị 50H báo chế độ nối tiếp 1 để đóng khung 8 bít dữ liệu,
một bít Start và một bít Stop.
4. Bật TR1 =1 để khởi động Timer1.
5. Xoá bít TI bằng lệnh “ CLR TI”
6. Byte ký tự cần phải truyền được ghi vào SBUF.
7. Bít cờ TI được hiển thị bằng lệnh “ JNB TI, xx” để báo ký tự đã được truyền hoàn
tất chưa.
8. Để truyền ký tự tiếp theo quay trở về bước 5.
Ví dụ 1:
Hãy viết chương trình cho 8051 để truyền nối tiếp một ký tự “A” với tốc độ 4800
baud liên tục.
Lời giải:
MOV TMOD, # 20 H ; Chọn Timer1 , chế độ 2( tự động nạp lại)
MOV TH1, #-6 ; chọn tốc độ 4800 baud
MOV SCON , #A” ; Truyền 8 bít dữ liệu, 1 bít stop cho phép thu
SETB TR1 ; Khởi động timer1
AGAIN: MOV SBUF, #”A” ; cần truyền ký tự “A”
HERE: JNB TI, HERE &n bsp; ; Chờ đến bít cuối cùng
CLR TI ; Xoá bít TI cho ký tự kế tiếp
SJMB AGAIN ; Tiếp tục gửi lại chữ A
Trong lập trình của 8051 để nhận các byte ký tự nối tiếp thì phải thực hiện các bước
sau đây.
1. Nạp giá trị 20H vào thanh ghi TMOD để báo sử dụng bộ Timer1, chế độ 2(8 bít tự
động nạp lại) để thiết lập tốc độ baud.
2. Nạp TH1 các giá trị cho trong bảng 2 để tạo ra tốc độ baud với giả thiết XTAL=
10.0592 MHz.
3. Nạp giá trị 50 H vào thanh ghi SCON để báo sử dụng chế độ truyền nối tiếp 1 là dữ
liệu được đóng gói bởi 8 bít dữ liệu, 1 bít Start và 1 bít Stop.
4. Bật TR1=1 để khởi động Timer1.
5. Xoá cờ ngắt RI bằng lệnh “ CLR RI”
6. Bít cờ RI được hiển thị bằng lệnh “ JNB RI,xx” để xem toàn bộ ký tự đã được nhận
chưa .
7. Khi RI được thiết lập thì trong SBUF đã có 1 byte. Các nội dung của nó được cất
lưu vào một nơi an toàn.
8. Để nhận một ký tự tiếp theo quay trở về bước 5.
Ví dụ 2: Hãy lập trình 8051 để nhận các byte dữ liệu nối tiếp và đặt chúng vào cổng
P1. Đặt tốc độ baud là 4800, 8 bít dữ liệu và 1 bít Stop1.
Lời giải:
MOV TMOD, #20H ; chọn bộ Timer1, chế độ 2 ( tự động nạp lại)
MOV TH1, # -6 ; chọn tốc độ 4800 baud.
MOV SCON , #50H ; chọn khung dữ liệu 8 bít Stop, bít.
SETB TR1 ; khởi động bộ Timer1
HERE: JNB R1, HERE ; đợi nhận toàn bộ lý tự vào hết
MOV A , SBUF ; lưu cất ký tự vào thanh A
MOV P1, A ; gửi ra cổng P1
CLR RI ; sắn sàng nhận byte kế tiếp.
SJMP HERE ; tiếp tục nhận dữ liệu
Ví dụ 3:
Giả sử cổng nối tiếp của 8051 được nối vào cồng COM của máy tính IBM CP
và mà đang sử dụng chương trình Termina. Exe để gửi và nhận dữ liệu nối tiếp. Cổng
P1 và P2 của 8051 được nối tới các đầu LED và các công tắc chuyển mạch tương
ứng. Hãy viết một chương trình cho 8051.
a, Gửi thông báo “ We are ready’ (chúng tôi đã sẵn sàng) tới máy PC .
b, Nhận bất kỳ dữ liệu gì được Pc gửi đến và chuyển đến các đèn LED đang
nối đến các chân của cổng P1.
c, Nhận dữ liệu trên các chuyển mạch được nối tới P2 và gửi nó tới máy tính
PC nối tiếp. Chương trình phải thực hiện một lần a, nhưng b, và c chạy liên tục với
tốc độ 4800 baud.
Lời giải:
ORG 0
MOV P2, #OFH ;Lấy cổng P2 làm cổng vào
MOV TMD, #20H ;Chọn bộ Timer1, chế độ 2 ( tự động nạp lại)
MOV TH1, # ÒAH ;Chọn tốc độ 4800 baud
MOV SCON, #50H ;Tạo khung dữ liệu 8 bít, 1 bít Stop cho phép
REN
SETB TR1 ; Khởi động bộ Timer1
MOV DPTR, #MYDATA ; Nạp con trỏ đến thông báo
H - 1: CLR A
MOVC A, A + DPTR ; Lấy ký tự
JZ DPTR ;Nếu kí tự cuối cùng muốn gửi ra
ACALL SEND ;Nếu chưa thì gọi chương trình con SEND
INC DPTR ; Chạy tiếp
SJMP H - 1 ; Quay lại vòng lặp
B - 1: MOV A, P2 ; Đọc dữ liệu trên cổng P2
ACALL RECV ; Truyền nó nối tiếp
ACALL RECV ; Nhận dữ liệu nối tiếp
MOV F1, A ; Hiển thị nó ra các đền LED
SJMP B - 1 ; Ở lại vòng lặp vô hạn
; _ _ _ _ _ Truyền dữ liệu nối tiếp ACC có dũư liệu
SEND: MOV SBUF, A ; Nạp dữ liệu
H- 2: JNB TI, H - 2 ; Ở lại vòng lặp vô hạn
CLR TI ; Truyền dữ liệu nối tiếp
RET ; Nhận dữ liệu
; _ _ _ _ _ Truyền dữ liệu nối tiếp ACC có dữ liệu
RECV: JNB RI, RECV ; Nạp dữ liệu
MOV A, SBUF ; Ở lại đây cho đến khi gửi bít cuối cùng
CLR RI ; Sẵn sàng cho kí tự mới
RET ; Trở về mời gọi
; _ _ _ _ _ Nhận dữ liệu nối tiếp trong ACC
Ví dụ: ghép nối vi điều khiển 8951 điều khiển led port 0
ORG 0000H
MOV IE,#00000000B
MOV TMOD,#00100000
MOV TL1#,0FDH
MOV TH1,#0FDH
MOV SCON,#01010000B
SETB TR1
MOV P0,#00000000B
INDEX: ACALL SUB_RXD
ACALL LEDOFF
ACALL LED1
ACALL LED2
ACALL LED3
ACALL LED4
ACALL LED5
ACALL LED6
ACALL LED7
SJMP INDEX
RXD : JNB RI,$
CLR RI
MOV A,SBUF
RET
LEDOFF: CJNE A,#30H,NEXT
MOV P0,#00000000B
ACALL SUB_TXD
SJMP INDEX
LED1: CJNE A,#31H,NEXT
CPL P0.0
ACALL SUB_TXD
SJMP INDEX
LED2: CJNE A,#32H,NEXT
CPL P0.1
ACALL SUB_TXD
SJMP INDEX
LED3: CJNE A,#33H,NEXT
CPL P0.2
ACALL SUB_TXD
SJMP INDEX
LED4: CJNE A,#34H,NEXT
CPL P0.3
ACALL SUB_TXD
SJMP INDEX
LED5: CJNE A,#35H,NEXT
CPL P0.4
ACALL SUB_TXD
SJMP INDEX
LED6: CJNE A,#36H,NEXT
CPL P0.5
ACALL SUB_TXD
SJMP INDEX
LED7: CJNE A,#37H,NEXT
CPL P0.6
ACALL SUB_TXD
SJMP INDEX
NEXT: RET
TXD : MOV SBUF,#43
JNB TI,$
CLR TI
RET
END
Ứng
dụng
giao
tiếp nối
tiếp
trong
chuyển
đổi AD:
Chuyển đổi AD dung cổng nối tiếp 9600,8,E,1