24/05/2018, 22:44

Giao tiếp với vi điều khiển

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 → 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: Mạch chuyển ...

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 → 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:

Mạch chuyển mức logic TTL ↔ RS232

Tuy nhiên, khi sử dụng mạch chuyển mức logic dùng các vi mạch thì đòi hỏi phải dùng chung GND giữa máy tính và vi mạch → có khả năng làm hỏng cổng nối tiếp khi xảy ra hiện tượng chập mạch ở mạch ngoài. Do đó, ta có thể dùng thêm opto 4N35 để cách ly về điện. Sơ đồ mạch cách ly mô tả như sau:

Mạch chuyển mức logic TTL ↔ RS232 cách ly

Khi giao tiếp, vi điều khiển chính là một DTE nên sẽ nối RxD của máy tính với TxD của vi điếu khiển và ngược lại. Mạch kết nối đơn giản giữa vi điều khiển và máy tính như sau:

Kết nối với vi điều khiển

Chương trình nguồn cho vi điều khiển AT89C51:

MOV TMOD,#20h 

MOV SCON,#52h 
; Truyền 8 bit dữ liệu, no parity

MOV TH1,#(-3) 
; Tốc độ truyền 9600 bps

 MOV TL1,#(-3) 

SETB TR1 

Receive:

JNB RI,Transmit   
;Có dữ liệu hay không

CLR RI

MOV A,SBUF   
; Nếu có thì xuất ra LED

Transmit:

JNB TI,Receive  
; Đã truyền xong chưa

CLR TI

MOV A,P2   
;Nếu xong thì truyền trạng thái

MOV SBUF,A  
; của công tăc SW DIP-8

JMP Receive

Giao diện của chương trình trên máy tính:

Chương trình giao tiếp với vi điều khiển

Chương trình nguồn:

VERSION 5.00 

Object="{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"

Begin VB.Form Form1

Caption ="Microcontroller Interface Example"

ClientHeight = 4665

ClientLeft = 60

ClientTop = 345

ClientWidth = 4020

LinkTopic = "Form1"

ScaleHeight = 4665

ScaleWidth = 4020

StartUpPosition = 3 'Windows Default

Begin VB.CheckBox chkSW

Height = 375

Index = 7

Left = 1800

TabIndex = 17

Top = 3480

Width = 1575

End

Begin VB.CheckBox chkSW

Height = 375

Index = 6

Left = 1800

TabIndex = 16

Top = 3000

Width = 1575

End

Begin VB.CheckBox chkSW

Height = 375

Index = 5

Left = 1800

TabIndex = 15

Top = 2520

Width = 1575

End

Begin VB.CheckBox chkSW

Height = 375

Index = 4

Left = 1800

TabIndex = 14

Top = 2040

Width = 1575

End

Begin VB.CheckBox chkSW

Height = 375

Index = 3

Left = 1800

TabIndex = 13

Top = 1560

Width = 1575

End

Begin VB.CheckBox chkSW

Height = 375

Index = 2

Left = 1800

TabIndex = 12

Top = 1080

Width = 1575

End

Begin VB.CheckBox chkSW

Height = 375

Index = 1

Left = 1800

TabIndex = 11

Top = 600

Width = 1575

End

Begin VB.CheckBox chkSW

Height = 375

Index = 0

Left = 1800

TabIndex = 10

Top = 120

Width = 1575

End

Begin VB.CommandButton cmdExit

Caption = "Exit"

Height = 495

Left = 1680

TabIndex = 9

Top = 3960

Width = 975

End

Begin MSCommLib.MSComm MSComm1

Left = 3360

Top = 3960

_ExtentX = 1005

_ExtentY = 1005

_Version = 393216

DTREnable = -1 'True

RThreshold = 1

End

Begin VB.CommandButton cmdSend

Caption = "Send"

Height = 495

Left = 240

TabIndex = 8

Top = 3960

Width = 1095

End

Begin VB.Label lblLED

BackStyle = 0 'Transparent

Caption = "LED7"

Height = 375

Index = 7

Left = 240

TabIndex = 7

Top = 3480

Width = 1095

End

Begin VB.Label lblLED

BackStyle = 0 'Transparent

Caption = "LED6"

Height = 375

Index = 6

Left = 240

TabIndex = 6

Top = 3000

Width = 975

End

Begin VB.Label lblLED

BackStyle = 0 'Transparent

Caption = "LED5"

Height = 375

Index = 5

Left = 240

TabIndex = 5

Top = 2520

Width = 975

End

Begin VB.Label lblLED

BackStyle = 0 'Transparent

Caption = "LED4"

Height = 375

Index = 4

Left = 240

TabIndex = 4

Top = 2040

Width = 975

End

Begin VB.Label lblLED

BackStyle = 0 'Transparent

Caption = "LED3"

Height = 375

Index = 3

Left = 240

TabIndex = 3

Top = 1560

Width = 975

End

Begin VB.Label lblLED

BackStyle = 0 'Transparent

Caption = "LED2"

Height = 375

Index = 2

Left = 240

TabIndex = 2

Top = 1080

Width = 975

End

Begin VB.Label lblLED

BackStyle = 0 'Transparent

Caption = "LED1"

Height = 375

Index = 1

Left = 240

TabIndex = 1

Top = 600

Width = 975

End

Begin VB.Label lblLED

BackStyle = 0 'Transparent

Caption = "LED0"

Height = 375

Index = 0

Left = 240

TabIndex = 0

Top = 120

Width = 975

End

Begin VB.Shape shpLED

BorderColor = &H000000FF&

FillColor = &H000000FF&

FillStyle = 0 'Solid

Height = 375

Index = 7

Left = 840

Shape = 3 'Circle

Top = 3480

Width = 375

End

Begin VB.Shape shpLED

BorderColor = &H000000FF&

FillColor = &H000000FF&

FillStyle = 0 'Solid

Height = 375

Index = 6

Left = 840

Shape = 3 'Circle

Top = 3000

Width = 375

End

Begin VB.Shape shpLED

BorderColor = &H000000FF&

FillColor = &H000000FF&

FillStyle = 0 'Solid

Height = 375

Index = 5

Left = 840

Shape = 3 'Circle

Top = 2520

Width = 375

End

Begin VB.Shape shpLED

BorderColor = &H000000FF&

FillColor = &H000000FF&

FillStyle = 0 'Solid

Height = 375

Index = 4

Left = 840

Shape = 3 'Circle

Top = 2040

Width = 375

End

Begin VB.Shape shpLED

BorderColor = &H000000FF&

FillColor = &H000000FF&

FillStyle = 0 'Solid

Height = 375

Index = 3

Left = 840

Shape = 3 'Circle

Top = 1560

Width = 375

End

Begin VB.Shape shpLED

BorderColor = &H000000FF&

FillColor = &H000000FF&

FillStyle = 0 'Solid

Height = 375

Index = 2

Left = 840

Shape = 3 'Circle

Top = 1080

Width = 375

End

Begin VB.Shape shpLED

BorderColor = &H000000FF&

FillColor = &H000000FF&

FillStyle = 0 'Solid

Height = 375

Index = 1

Left = 840

Shape = 3 'Circle

Top = 600

Width = 375

End

Begin VB.Shape shpLED

BorderColor = &H000000FF&

FillColor = &H000000FF&

FillStyle = 0 'Solid

Height = 375

Index = 0

Left = 840

Shape = 3 'Circle

Top = 120

Width = 375

End End 

Attribute VB_Name = "Form1" 

Attribute VB_GlobalNameSpace = False 

Attribute VB_Creatable = False 

Attribute VB_PredeclaredId = True 

Attribute VB_Exposed = False 

Private Sub
      cmdExit_Click() 

 If MSComm1.PortOpen Then MSComm1.PortOpen = False

 End If 

End 

End Sub 

Private Sub
      cmdSend_Click() 

Dim t As Integer

Dim i As Integer t = 0 

For i = 0 To 7 

t = t + (2 ^ i) * (1 - shpLED(i).FillStyle) Next i 

MSComm1.Output = Chr(t) End Sub 

Private Sub 
      Form_Load()
    

MSComm1.Settings = "9600,N,8,1" MSComm1.CommPort = 1 

MSComm1.PortOpen = True End Sub 

Private Sub 
      lblLED_Click(Index As Integer)

shpLED(Index).FillStyle = 1 - shpLED(Index).FillStyle End Sub 

Private Sub 
      MSComm1_OnComm()
    

Dim t As String 

Dim n As Integer Dim i As Integer 

If MSComm1.CommEvent = comEvReceive Then  n = Asc(MSComm1.Input) 

For i = 0 To 7 

chkSW(i).Value = n Mod 2 

If chkSW(i).Value = 0 Then

chkSW(i).Caption= "Switch " & Str(i) & " off"

Else

chkSW(i).Caption= "Switch " & Str(i) & "on"

End If

n = Fix(n / 2)

Next i

End If

End Sub
0