Luận văn Nghiên cứu và thiết kế mạng công nghiệp sử dụng FPGA và CPU 89S8252

BỐ CỤC TRÌNH BÀY PHẦN A :LÝ THUYẾT LIÊN QUAN PHẦN B :THIẾT KẾ PHẦN C :KẾT QUẢ- HƯỚNG PHÁT TRIỂN 1.GIỚI THIỆU MẠNG CÔNG NGHIỆP Trong nhiều thập niên qua việc ứng dụng mạng thông tin vào lĩnh vực công nghiệp đã bùng nổ rất mạnh mẽ.Các hệ thống mạng phát triển rất mạnh và đa dạng . Việc ứng dụng mạng công nghiệp đã mang lại những lợi ích rõ nét Chi phí lắp đặt hệ thống Nhân công điều hành Tiện ích quản lý hệ thống Cải thiện môi trường làm việc

doc93 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2324 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Nghiên cứu và thiết kế mạng công nghiệp sử dụng FPGA và CPU 89S8252, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Khoâng Time out? Khoâng Soá laàn phaùt baèng 3 ? Coù Xoùa Time out Taêng bieán soá laàn phaùt döõ lieäu Xoùa Time out Xoùa bieán soá laàn phaùt döõ lieäu Thoaùt Thoaùt Loãi ñöôøng truyeàn 1.3.2.Thuû tuïc nhaän döõ lieäu Giaûm ñoä daøi khung 1 ñôn vò Ñoä daøi khung =0? Boä ñeäm coù döõ lieäu ? Phuïc hoài caùc con troû vaø caùc thanh ghi Thoaùt Löu giöõ caùc con troû vaø caùc thanh ghi Khoâng Coù Caát döõ lieäu Ñoä daøi khung =0? Coù Kieåm tra ñaàu khung ? Coù Gaùn ñoä daøi khung baèng 5 Gaùn ñoä daøi khung baèng 0 Khoâng Khoâng A B C D Coù E Khoâng Thuû tuïc nhaän döõ lieäu Tính FCS Tính FCS K A Ñoä daøi khung =0? Coù C Khoâng D E Löu döõ lieäu Taêng con troû döõ lieäu B Phaàn dö tính FCS =0 ? Coù Döïng côø baùo nhaän toát Tính FCS K Döïng côø baùo nhaän khoâng toát Tính FCS K Khoâng F Xöû lyù khung leänh Tính FCS K Nhaän ñuùng ñòa chæ ? F Côø nhaän toát khoâng ? Coù Khoâng Traû con troû döõ lieäu veà vò trí ban ñaàu Xoùa côø nhaän Tính FCS K Thoaùt Coù Khoâng Thuû tuïc nhaän döõ lieäu xöû lyù caùc khung leänh nhaän ñöôïc töø Kit convert.dsn göûi leân baèng 2 con troû Con troû giöõ vò trí ban ñaàu cuûa boä ñeäm Con troû giöõ vò trí döõ lieäu coù trong boä ñeäm Khi 2 con troû khaùc nhau chöùng toû trong boä ñeäm coù döõ lieäu.Khi boä ñeäm nhaän ñuû moät khung leänh thì thuû tuïc tính FCS.Keát quaû tính FCS xaùc ñònh khung nhaän toát hay bò loãi .Khi khung nhaän toát thì thuû tuïc tieáp tuïc xöû lyù xem khung döõ lieäu nhaän ñöôïc laø loaïi khung gì thoâng qua byte Command trong khung maø coù nhöõng xöû lyù töông öùng vôùi khung vöøa nhaän . 1.3.2.1.Tính FCS Khoâng Dòch phaûi FCS Dòch phaûi Data Dòch phaûi Command Dòch phaûi Address Dòch phaûi Header Giaûm soá laàn quay 1 ñôn vò Soá laàn quay baèng 0 ? Coù Gaùn soá laàn quay dòch phaûi laø 32 Côø C baèng 1? Côø C baèng 1? Xor byte Header vaø 07h Caäp nhaät byte Header Thoaùt Khoâng Khoâng Coù Xor byte Header vaø 07h Gaùn Header vaøo byte FCS Gaùn Header vaøo byte FCS Coù Tính FCS Giaûi thuaät tính FCS coù ña thöùc sinh: 100000111 Höôùng phaùt: Tính CRC-8 cho 4 byte 1/Header 2/Address 3/Command 4/Data Keát quaû tính FCS laø byte thöù 5 trong khung döõ lieäu phaùt. FCS Data Command Lôùp lieân keát Address Header Khung döõ lieäu phaùt Höôùng thu: Tính CRC-8 cho 5 byte nhaän ñöôïc 1/Header 2/Address 3/Command 4/Data 5/FCS Header Address Command Lôùp lieân keát Data FCS Khung döõ lieäu thu Phaàn dö keát quaû tính FCS baèng 0 thì keát quaû nhaän khoâng loãi .Phaàn dö khaùc 0 thì khung döõ lieäu nhaän bò loãi. Trong giaûi thuaät tính FCS coù söû duïng côø C.Côø C laø keát quaû dòch phaûi cuûa 5 byte khung döõ lieäu.Keát quaû tính ñöôïc löu vaøo byte FCS. 1.4.Chöông trình nguoàn Chöông trình: Frmmain: Private Sub CmdImage1_Click() FrmSystemConfig.Show FrmCom.Show End Sub Private Sub CmdOpenPort_Click() Call PortOpen End Sub Private Sub Form_Load() Demo = " MOÂ HÌNH MAÏNG " Demolbl = Demo & " " TimeReadBuffer.Enabled = True Timereadcode.Enabled = True End Sub Private Sub timer_ack_Timer() MsgBox "Network erro", vbExclamation FrmMain.timer_ack.Enabled = False Rx_frame(0) = 0 Rx_frame(1) = 0 Rx_frame(2) = 0 Rx_frame(3) = 0 Rx_frame(4) = 0 End Sub Private Sub Timer1_Timer() Dim Str As String Str = Left(Demolbl.Caption, 1) Demolbl.Caption = Mid(Demolbl.Caption, 2, Len(Demolbl.Caption) - 1) & Str End Sub Private Sub Timer3_Timer() '============================================= 'Day la doan kiem tra Ack .Neu nhan duoc dung Ack 'thi off kiem tra timoout 'Neu nhu nhan duoc frame tot ma khong dung 'Ack cua kenh vua gui thi cagnh bao dong thoi 'cung off luon timeout 'Kiem tra ACK nhan duoc 'Co Complte_F bao nhan frame tot If Complete_F Then '============================================= Complete_F = False If Crc_F Then MsgBox "Crc8 erro", vbExclamation FrmMain.timer_ack.Enabled = False Else If (Rx_frame(1) Kit) Then MsgBox "Address erro", vbExclamation FrmMain.timer_ack.Enabled = False Else 'Sau 6 s ma chua nhan duoc Ack thi canh bao duong truyen If (Rx_frame(2) Ack_F) Then MsgBox "Ack erro", vbExclamation FrmMain.timer_ack.Enabled = False Else FrmMain.timer_ack.Enabled = False Ack_good = True Msgbox "nhan duoc ack" Rx_header = Rx_frame(0) Rx_address = Rx_frame(1) Rx_command = Rx_frame(2) Rx_data = Rx_frame(3) Rx_fcs = Rx_frame(4) End If End If End If Rx_frame(0) = 0 Rx_frame(1) = 0 Rx_frame(2) = 0 Rx_frame(3) = 0 Rx_frame(4) = 0 End If End Sub Private Sub Timer4_Timer() If Ack_good Then Ack_good = False If Data_send_F Then Data_send_F = False Else Header = 160 Address = Kit Command = Data_F Data = Val(FrmSystemConfig.txtdata1.Text) Call senddata Data_send_F = True MsgBox "gui data1" FrmMain.timer_ack.Enabled = True End If End If End Sub Private Sub TimeReadBuffer_Timer() TimeReadBuffer.Enabled = False Call ReadBuffer End Sub Private Sub timereadcode_Timer() timereadcode.Enabled = False Call Readcode End Sub Frmsystemconfig: Private Sub txdaddress_Change() End Sub Private Sub CmdOpenPort_Click() Call PortOpen End Sub Private Sub Cmdsend_Click() Cmdsend.Enabled = True Data = Val(txtdata1.Text) If Data > 255 Then MsgBox ("Invalid Value,Try again Datatx value:") Exit Sub Else If txtdata1.Text = "" Then MsgBox ("No value,Try again Datatx value:") Exit Sub End If End If Address = Kit If Address > 255 Then MsgBox ("Invalid Value,Try again Addresstx value:") Exit Sub Else If (Kit 1) And (Kit 2) And (Kit 3) And (Kit 4) And (Kit 5) Then MsgBox ("No Kit,Try again Kit value:") Exit Sub End If End If Header = 160 Address = Kit Command = Token_F Call senddata '============================================= 'Cho timer tinh timeout '============================================= MsgBox "Phat xong dang cho ack" FrmMain.timer_ack.Enabled = True FrmMain.Timer3.Enabled = True End Sub Private Sub Combo1_Change() End Sub Private Sub Combo1_Click() End Sub Private Sub CmpBaud_Click() Select Case CmpBaud.ListIndex Case 0 Baud = "1200" Case 1 Baud = "2400" Case 2 Baud = "4800" Case 3 Baud = "9600" Case 4 Baud = "19200" End Select End Sub Private Sub CmpKit_Click() Select Case CmpKit.ListIndex Case 0 Kit = 1 Case 1 Kit = 2 Case 2 Kit = 3 Case 3 Kit = 4 Case 4 Kit = 5 End Select End Sub Private Sub Command1_Click() FrmMain.timer_ack.Enabled = True End Sub Private Sub Form_Load() CmpPort.AddItem "COM1" CmpPort.AddItem "COM2" CmpPort.ListIndex = 0 CmpBaud.AddItem "1200" CmpBaud.AddItem "2400" CmpBaud.AddItem "4800" CmpBaud.AddItem "9600" CmpBaud.AddItem "19200" CmpBaud.ListIndex = 0 Port_Num = 1 Baud = "1200" Token_F = 12 Ack_F = 10 Data_F = 15 Cmdsend.Enabled = True CmpKit.AddItem "1" CmpKit.AddItem "2" CmpKit.AddItem "3" CmpKit.AddItem "4" CmpKit.AddItem "5" FCSTX = 0 Count_F = 0 Timer_F = 0 RX_pointer = 0 Buffer_pointer = 0 End Sub Private Sub Label6_Click() End Sub Private Sub Label7_Click() End Sub Module1 Declare Function OPENCOM Lib "port" (ByVal A$) As Integer Declare Sub CLOSECOM Lib "port" () Declare Sub SENDBYTE Lib "port" (ByVal b%) Declare Function READBYTE Lib "port" () As Integer Declare Sub DTR Lib "port" (ByVal b%) Declare Sub RTS Lib "port" (ByVal b%) Declare Sub TXD Lib "port" (ByVal b%) Declare Function CTS Lib "port" () As Integer Declare Function DSR Lib "port" () As Integer Declare Function RI Lib "port" () As Integer Declare Function DCD Lib "port" () As Integer Declare Sub DELAY Lib "port" (ByVal b%) Declare Sub TIMEINIT Lib "port" () Declare Sub TIMEINITUS Lib "port" () Declare Function TIMEREAD Lib "port" () As Long Declare Function TIMEREADUS Lib "port" () As Long Declare Sub DELAYUS Lib "port" (ByVal l As Long) Declare Sub REALTIME Lib "port" (ByVal i As Boolean) Module2: 'Var Parametter Public NewPort As Integer Public OldPort As Integer Public Port_Num As Integer Public Baud As String Public Setting As String Public RX_str(0 To 255) As String Public RX_pointer As Integer Public RX_code(0 To 255) As Integer Public RX(0 To 2) As String Public Buffer_str(0 To 255) As String Public Buffer_pointer As Integer Public Buffer_code(0 To 255) As Integer Public Header As Integer Public Address As Integer Public Addresstx As Integer Public Command As Integer Public Token_F As Integer Public Ack_F As Integer Public Data_F As Integer Public Rx_header As Integer Public Rx_address As Integer Public Rx_command As Integer Public Rx_data As Integer Public Rx_fcs As Integer Public Data As Integer Public FCSRX As Integer Public FCSTX As Integer Public Lenght_Frame As Integer Public Rx_frame(0 To 4) As Integer Public Frame_pointer As Integer Public Header_f As Boolean Public Complete_F As Boolean Public Crc_F As Boolean Public Kit As Integer Public Ack_good As Integer Public Data_send_F As Integer Public Code_str As String Public Count_Byte As Byte Public fcs As Integer Public data As Integer Public command As Integer Public address As Integer Public crc As Integer Public header As Integer Public rotate As Integer Public fcs_c As Boolean Public data_c As Boolean Public command_c As Boolean Public address_c As Boolean Public header_c As Boolean Public crc_request As Boolean '===========Send Byte to BTS============= Public Sub SendTX(Data As Integer) Dim i As Integer On Error Resume Next If FrmMain.MSComm.PortOpen Then FrmMain.MSComm.PortOpen = False 'Close FrmMain.Mscomm32.ocx End If 'use Port.DLL Setting = "COM" + CStr(Port_Num) + "," + Baud + ",N,8,1" i = OPENCOM(Setting) If i = 0 Then FrmSystemConfig.lblStatusport.Caption = Setting + vbCrLf + "STATUS" + " : CLOSE" + vbCrLf GoTo lable1 Else FrmSystemConfig.lblStatusport.Caption = Setting + vbCrLf + "STATUS" + " : OPEN" + vbCrLf SENDBYTE (Data) CLOSECOM 'Close Port.dll End If lable1: Call PortOpen End Sub '========================= Public Sub PortOpen() Dim ReOpen As Boolean On Error Resume Next NewPort = FrmSystemConfig.CmpPort.ListIndex + 1 OldPort = FrmMain.MSComm.CommPort If Err = 0 Then If NewPort OldPort Then ' If the port number changes, close the old port. If FrmMain.MSComm.PortOpen Then FrmMain.MSComm.PortOpen = False ReOpen = True End If FrmMain.MSComm.CommPort = NewPort If ReOpen Then FrmMain.MSComm.PortOpen = True Setting = Baud & ",N,8,1" FrmMain.MSComm.Settings = Setting End If End If End If Setting = Baud & ",N,8,1" FrmMain.MSComm.Settings = Setting FrmMain.MSComm.PortOpen = Not FrmMain.MSComm.PortOpen If Err Then MsgBox Error$, 48 Port_Num = FrmMain.MSComm.CommPort If FrmMain.MSComm.PortOpen Then FrmSystemConfig.lblStatusport.Caption = "COM" & CStr(Port_Num) + "," + Setting + vbCrLf + "STATUS:" + " OPEN" + vbCrLf Else FrmSystemConfig.lblStatusport.Caption = "COM" & CStr(Port_Num) + "," + Setting + vbCrLf + "STATUS:" + " CLOSE" + vbCrLf End If End Sub '==========ReadBuffer Port to save Buffer========= Public Sub ReadBuffer() If FrmMain.MSComm.InBufferCount Then FrmMain.MSComm.InputLen = 1 Buffer_str(Buffer_pointer) = FrmMain.MSComm.Input Buffer_pointer = Buffer_pointer + 1 If (Buffer_pointer > 255) Then Buffer_pointer = 0 End If End If FrmMain.TimeReadBuffer.Enabled = True End Sub Public Sub Readcode() If (RX_pointer Buffer_pointer) Then '======================================================'Day la doan cap nhat con tro va bien doi ve thanh decimal 'luu giu trong Rx_code If (Buffer_str(RX_pointer) "") And Buffer_str(RX_pointer) " " Then RX_str(RX_pointer) = Buffer_str(RX_pointer) '??? RX_code(RX_pointer) = Asc(LTrim(RX_str(RX_pointer))) ' FrmSystemConfig.txtdata2.Caption = Str(Asc(LTrim(RX_str(RX_pointer)))) ' Code_str = BinaryConvert(RX_code(RX_pointer)) '======================================================'sua chua If Header_f Then Rx_frame(Frame_pointer) = RX_code(RX_pointer) Frame_pointer = Frame_pointer + 1 Else If (RX_code(RX_pointer) = 160) Then Rx_frame(Frame_pointer) = RX_code(RX_pointer) Frame_pointer = Frame_pointer + 1 Header_f = True Else End If End If '====================================================== Else RX_code(RX_pointer) = 32 '======================================================'sua chua If Header_f Then Rx_frame(Frame_pointer) = RX_code(RX_pointer) FrmSystemConfig.txtdata2.Caption = Str(Rx_frame(Frame_pointer)) Frame_pointer = Frame_pointer + 1 Else If (RX_code(RX_pointer) = 160) Then Rx_frame(Frame_pointer) = RX_code(RX_pointer) Frame_pointer = Frame_pointer + 1 Header_f = True Else End If End If '====================================================== Code_str = BinaryConvert(RX_code(RX_pointer)) End If '====================================================== RX_pointer = RX_pointer + 1 End If If (RX_pointer > 255) Then RX_pointer = 0 End If If (Frame_pointer > 4) Then Header_f = False FrmMain.timereadcode.Enabled = True Frame_pointer = 0 '======================================================'Tinh Fcs '====================================================== FCSRX = Rx_frame(0) Xor Rx_frame(1) FCSRX = FCSRX Xor Rx_frame(2) FCSRX = FCSRX Xor Rx_frame(3) If (FCSRX = Rx_frame(4)) Then Complete_F = True Crc_F = False Else Complete_F = True Crc_F = True End If Else FrmMain.timereadcode.Enabled = True End If End Sub '==========BinaryConvert============= Public Function BinaryConvert(Number As Integer) As String Dim Digit As Integer Dim BinaryForm As String BinaryForm = "" Do Digit = Number Mod 2 If Digit = 0 Then BinaryForm = "0" + BinaryForm Else BinaryForm = "1" + BinaryForm End If Number = Number \ 2 Loop Until (Number = 0) BinaryConvert = BinaryForm End Function Public Sub senddata() '============================================= 'Gui khung Token '============================================= 'Gui header Call SendTX(Header) 'Gui dia chi Call SendTX(Address) 'Gui token Call SendTX(Command) 'Gui Data Call SendTX(Data) '============================================= 'Tinh FCS '============================================= FCSTX = Header Xor Address FCSTX = FCSTX Xor Command FCSTX = FCSTX Xor Data 'Gui FCS Call SendTX(FCSTX) End Sub TimeReadBuffer Private Sub TimeReadBuffer_Timer() TimeReadBuffer.Enabled = False Call ReadBuffer End Sub Timereadcode Private Sub timereadcode_Timer() timereadcode.Enabled = False Call Readcode End Sub Timer4 Private Sub Timer4_Timer() If Ack_good Then Ack_good = False If Data_send_F Then Data_send_F = False Else Header = 160 Address = Kit Command = Data_F Data = Val(FrmSystemConfig.txtdata1.Text) Call senddata Data_send_F = True FrmMain.timer_ack.Enabled = True End If End If End Sub Timer3 Private Sub Timer3_Timer() '============================================= 'Day la doan kiem tra Ack .Neu nhan duoc dung Ack 'thi off kiem tra timoout 'Neu nhu nhan duoc frame tot ma khong dung 'Ack cua kenh vua gui thi cagnh bao dong thoi 'cung off luon timeout 'Kiem tra ACK nhan duoc 'Co Complte_F bao nhan frame tot If Complete_F Then Complete_F = False If Crc_F Then MsgBox "Crc8 erro", vbExclamation FrmMain.timer_ack.Enabled = False Else If (Rx_frame(1) Kit) Then MsgBox "Address erro", vbExclamation FrmMain.timer_ack.Enabled = False Else 'Sau 6 s ma chua nhan duoc Ack thi canh bao duong truyen If (Rx_frame(2) Ack_F) Then MsgBox "Ack erro", vbExclamation FrmMain.timer_ack.Enabled = False Else FrmMain.timer_ack.Enabled = False Ack_good = True MsgBox "Nhan duoc ACK" Rx_header = Rx_frame(0) Rx_address = Rx_frame(1) Rx_command = Rx_frame(2) Rx_data = Rx_frame(3) Rx_fcs = Rx_frame(4) End If End If End If Rx_frame(0) = 0 Rx_frame(1) = 0 Rx_frame(2) = 0 Rx_frame(3) = 0 Rx_frame(4) = 0 End If End Sub Timer1 Private Sub Timer1_Timer() Dim Str As String Str = Left(Demolbl.Caption, 1) Demolbl.Caption = Mid(Demolbl.Caption, 2, Len(Demolbl.Caption) - 1) & Str End Sub Timer_Ack Private Sub timer_ack_Timer() MsgBox "Network erro", vbExclamation FrmMain.timer_ack.Enabled = False Rx_frame(0) = 0 Rx_frame(1) = 0 Rx_frame(2) = 0 Rx_frame(3) = 0 Rx_frame(4) = 0 End Sub CmdOpenPort Private Sub CmdOpenPort_Click() Call PortOpen End Sub CmdImage1 Private Sub CmdImage1_Click() FrmSystemConfig.Show FrmCom.Show End Sub Timer5 If crc_request Then '============================================ 'Quay phai 1 bit tu FCS sang Data fcs_c = fcs Mod 2 fcs = Int(fcs / 2) data_c = data Mod 2 data = Int(data / 2) command_c = command Mod 2 command = Int(command / 2) address_c = address Mod 2 address = Int(address / 2) header_c = header Mod 2 header = Int(header / 2) If fcs_c Then data = data + 128 Else End If If data_c Then command = command + 128 Else End If If command_c Then address = address + 128 Else End If If address_c Then header = header + 128 Else End If rotate = rotate - 1 If rotate = 0 Then If header_c Then header = header Xor 7 crc = header crc_request = False Else crc = hader crc_request = False End If Else If header_c Then header = header Xor 7 Else End If End If End If End Sub End Sub 2.Thieát keá phaàn cöùng 2.1.Maïch convert.dsn: Chöùc naêng : Nhaän döõ lieäu töø maùy tính ,sau ñoù ñieàu cheá FSK vaø göûi ñeán caùc Kit Moâ taû: Höôùng phaùt: Tín hieäu göûi töø maùy tính xuoáng theo chuaån RS232.Ngoõ ra TXD ñöa vaøo IC 73M223 ñieàu cheá FSK göûi ra chaân TXA coù bieân ñoä ñænh ñænh laø 5V vaø caùch ly qua T2.T2 coù 2 ngoõ ra laø TX1 vaø TX2 truyeàn döõ lieäu xuoáng caùc Kit. Daïng soùng vaøo ra convert.dsn Start bit Stop bit -12V 12V TXD TXA Höôùng thu: Tín hieäu truyeàn töø caùc Kit trong maïng veà Kit convert daïng FSK ñöôïc ñöa vaøo 2 ngoõ vaøo RX1 ,RX2 cuûa T1 .T1 coù nhieäm vuï caùch ly döõ lieäu nhaän ñöôïc töø ñöôøng truyeàn vôùi Kit convert vaø ñöa tín hieäu vaøo 73M223 ñeå giaûi ñieàu cheá FSK.Döõ lieäu sau khi ñöôïc giaûi ñieàu cheá ñöôïc göûi leân maùy tính . 2.2.Maïch Kit.dsn Chöùc naêng : Höôùng thu: Nhaän döõ lieäu töø maùy tính ñöôïc Kit convert ñieàu cheá FSK vaø caùc Kit trong maïng.Döõ lieäu FSK ñöôïc giaûi ñieàu cheá trôû thaønh tín hieäu nhò phaân .Sau ñoù tín hieäu ñöôïc ñöa vaøo XC95108 ñeå xöû lyù ñoàng boä bit.Keát quaû sau ñoù ñöa veà CPU 89S8252 ñeå xöû lyù ñoàng boä khung , ñoàng boä byte vaø loïc laáy döõ lieäu ñieàu khieån . Höôùng phaùt: Göûi caùc khung döõ lieäu veà maùy tính .CPU89S8252 phaùt khung döõ lieäu ñeán 73M223 ñeå ñieàu cheá FSK .Sau ñoù tín hieäu ñieàu cheá truyeàn veà maùy tính qua T1. Sô ñoà nguyeân lyù 2.2.1.Maïch ñieàu cheá vaø giaûi ñieàu cheá FSK Sô ñoà nguyeân lyù Moâ taû: Höôùng thu: Maïch giaûi ñieàu cheá FSK laøm nhieäm vuï nhaän tín hieäu FSK ,giaûi ñieàu cheá ñöa ra döõ lieäu daïng nhò phaân 1010.. Tín hieäu FSK ñöa vaøo 2 chaân RX1 vaø RX2.T2 laøm nhieäm vuï caùch ly ñöôøng truyeàn vaø chaân Receive nhaän ñöôïc FSK so vôùi ñaát heä thoáng . Receive Daïng tín hieäu FSK taïi chaân Receive Tín hieäu Receive ñöôïc loïc thoâng daûi baäc 4 Butterworth vôùi caùc giaù trò thích hôïp cuûa C5 ,R12,R14 ñöa vaøo chaân RXF.Tín hieäu FSK coù f =1302Hz cho möùc logic 1 vaø f = 2097Hz cho möùc logic zero . 0 5V Data_in_1 Daïng tín hieäu giaûi ñieàu cheá chaân Data_in_1 Höôùng phaùt: Maïch giaûi ñieàu cheá FSK laøm nhieäm vuï nhaän tín hieäu nhò phaân töø CPU 89S8252 ñöa ñeán IC73M223 ñieàu cheá thaønh tín hieäu FSK ñeå phaùt leân ñöôøng truyeàn . Tín hieäu nhò phaân caàn ñöôïc ñieàu cheá ñöôïc ñöa ñeán chaân TXD cuûa IC 73M223. Daïng tín hieäu caàn ñöôïc ñieàu cheá chaân TXD TXD 0 5V Tín hieäu sau khi ñieàu cheá ñöa ra chaân TXA laø tín hieäu FSK, ñöôïc ñöa vaøo chaân Transmit cuûa T1 qua tuï ngaên DC C4.T1 laøm nhieäm vuï caùch ly tín hieäu FSK vôùi ñöôøng truyeàn vaø truyeàn tín hieäu ñi. Transmit Daïng tín hieäu FSK taïi chaân Transmit 2.2.2.Maïch xöû lyù trung taâm Sô ñoà nguyeân lyù Moâ taû: JP1 : Thöïc hieän keát noái khi taûi chöông trình töø maùy tính xuoáng vaø ghi vaøo CPU 89S8252. SCK :Nhòp clock khi ghi chöông trình MISO:Göûi traû lôøi töø CPU veà maùy tính MOSI :Göûi döõ lieäu chöông trình töø maùy tính xuoáng CPU 89S8252 Chaân 16_clk:Taïo xung caáp cho XC95108 thöïc hieän ñoàng boä bit J1: Giao tieáp ngoaïi vi,nhaän leänh ñieàu khieån 2.2.3.Maïch led hieån thò Sô ñoà nguyeân lyù Moâ taû: Maïch led töông öùng caùc keânh ñieàu khieån Giaù trò ñieän trôû R = (Vcc –1.7) / 10 mA = 330 Choïn R = 330 ohm 2.2.4.Maïch xöû lyù ñoàng boä bit Sô ñoà nguyeân lyù Moâ taû: XC95108 nhaän döõ lieäu töø 73M223 xöû lyù ñoàng boä bit,sau ñoù göûi veà CPU J6:Taûi chöông trình töø maùy tính xuoáng XC95108 16_CLK:Xung clock ñoàng boä bit RXD:Göûi döõ lieäu veà CPU 89S8252 ñaõ xöû lyù ñoàng boä DATA_IN:Ngoõ vaøo döõ lieäu chöa xöû lyù ñoàng boä bit TMS,TDI,TDO,TCK :Caùc chaân laäp trình XC95108 2.2.4.1.Hoaït ñoäng xöû lyù ñoàng boä bit Khi döõ lieäu truyeàn trong moät heä thoáng maïng raát deã xaûy ra hieän töôïng nhieãu .Vì vaäy vieäc ñoïc bit start xaùc ñònh bit ñaàu tieân cuûa moät byte thöôøng gaëp loãi .Ñeå traùnh hieän töôïng naøy taïi ñaàu thu caàn xöû lyù ñoàng boä bit. Döõ lieäu sau khi giaûi ñieàu cheá FSK ñöôïc ñöa vaøo maïch xöû lyù ñoàng boä bit.Khi phaùt hieän chuyeån möùc logic töø cao xuoáng thaáp cuûa start bit thì bit start ñöôïc nhaän daïng .Luùc naøy moät boä ñeám 8 xung clock ñöôïc kích hoaït.Sau khi boä ñeám traøn thì döõ lieäu ngoõ vaøo ñöôïc kieåm tra moät laàn nöõa .Neáu laø möùc thaáp thì xaùc nhaän ñaây laø start bit,ngöôïc laïi thì laø do hieän töôïng nhieãu gaây ra vaø maïch vaøo traïng thaùi reset . Khi xaùc nhaän laø start bit thì maïch kích khôûi boä ñeám 16 xung clock ñeå ñoïc döõ lieäu tuaàn töï vaøo .Cöù nhö vaäy maïch ñoàng boä ñoïc vaøo 10 bit cuûa 1 byte.Khi keát thuùc 1 byte thì maïch xöû lyù ñoàng boä laïi ñöôïc reset ñeå chôø bit start cuûa byte keá.Nhö vaäy toác ñoä baud laáy maãu döõ lieäu töø maùy tính göûi xuoáng gaáp 16 laàn toác ñoä baud 1200. 0 5V Trung taâm bit start Bit start 7 bit P Bit stop Hình minh hoïa hoaït ñoäng tìm start bit 2.2.4.2.Sô ñoà macro maïch xöû lyù ñoàng boä bit Maïch xöû lyù ñoàng boä bit ñöôïc thieát keá baèng ngoân ngöõ VHDL treân phaàn meàm Project Manager cuûa haõng Xillinx ñöôïc chia thaønh 8 macro.Moãi macro coù chöùc naêng rieâng . 2.2.4.2.1.Macro Detect start Data_in :Ngoõ vaøo döõ lieäu chöa ñoàng boä bit Reset_Detect_Start:Ngoõ vaøo Detect_Start:Ngoõ ra Chöùc naêng : Khi xuaát hieän start bit thì macro phaùt hieän taïo möùc logic cao ôû ngoõ ra Detect_Start ñoàng thôøi reset macro. ------------------------------------------------------------------------------ library IEEE; use IEEE.std_logic_1164.all; entity sync is port ( Data_in: in STD_LOGIC; Detect_start: out STD_LOGIC; Reset_Detect_start: in STD_LOGIC ); end sync; architecture sync_arch of sync is begin if Reset_Detect_start ='0'then Detect_start <='0'; else if data_in ='0' then Detect_start <='1'; else end if; end if ; end sync_arch; ------------------------------------------------------------------------------ 2.2.4.2.2.Macro Count CE :Ngoõ vaøo CLK:Ngoõ vaøo LOAD:Ngoõ vaøo RESET:Ngoõ vaøo Q0-Q3:Ngoõ ra Chöùc naêng : Sau khi macro Detect_Start phaùt hieän start bit thì macro Count ñeám 8 xung clock ñeå laáy möùc logic trung taâm cuûa start bit. ------------------------------------------------------------------------------ library IEEE; use IEEE.std_logic_1164.all; entity count is port ( CE: in STD_LOGIC; CLK: in STD_LOGIC; LOAD: in STD_LOGIC; RESET: in STD_LOGIC; Q: out STD_LOGIC_VECTOR (0 to 3) ); end count; architecture count_arch of count is signal COUNT : std_logic_vector (3 downto 0); begin process (CLK, RESET) begin if RESET='0' then COUNT <= 0; elsif CLK='1' and CLK'event then if LOAD='0' then COUNT <= '0'; else if CE='1' then COUNT <= COUNT + 1; Q <= COUNT; end if; end if; end if; end if; end process; end count_arch; 2.2.4.2.3.Macro Create_pulse In1: Ngoõ vaøo In2:Ngoõ vaøo In3:Ngoõ vaøo In4:Ngoõ vaøo Out:Ngoõ ra Chöùc naêng : Sau khi macro Count ñeám ñuû 8 xung thì macro Create_pulse taïo xung ñeå ñeå ñoïc laáy möùc logic trung taâm cuûa start bit. ------------------------------------------------------------------------------ --Chöông trình nguoàn taïo moät xung caïnh leân khi ñaõ ñeám ñöôïc 16 xung töø khi phaùt hieän ñöôïc start bit library IEEE; use IEEE.std_logic_1164.all; entity Create_pulse is port ( In1: in STD_LOGIC; In2: in STD_LOGIC; In3: in STD_LOGIC; In4: in STD_LOGIC; Out: out STD_LOGIC ); end Create_pulse; architecture Create_pulse_arch of Create_pulse is begin Out <= In1 and In2 and In3 and In4 end Create_pulse_arch; 2.2.4.2.4.Macro Detect_false_start CLK: Ngoõ vaøo RESET:Ngoõ vaøo DATA_IN:Ngoõ vaøo REFRESH:Ngoõ ra Chöùc naêng :.Macro Create_pulse taïo xung ñeå ñoïc laáy möùc logic trung taâm cuûa start bit .Trong tröôøng hôïp möùc logic ñoïc ñöôïc khoâng phaûi laø möùc thaáp thì macro Detect_false_start seõ reset maïch ñeå doø tìm start bit môùi.Neáu möùc logic ñoïc ñöôïc laø möùc cao thì macro Detect_false_start cho pheùp caùc hoaït ñoäng keá tieáp. ------------------------------------------------------------------------------ library IEEE; use IEEE.std_logic_1164.all; entity detect_false_start is port ( CLK: in STD_LOGIC; RESET: in STD_LOGIC; Data_in: in STD_LOGIC; REFRESH: out STD_LOGIC ); end detect_fale_start; architecture detect_fale_start_arch of detect_fale_start is begin process (CLK) begin if CLK'event and CLK='1' then if RESET='0' then REFRESH <= '0'; else REFRESH <= Data_in; end if; end if; end process; end detect_fale_start_arch; 2.2.4.2.5.Macro Active_reset In1: Ngoõ vaøo In2:Ngoõ vaøo Out1:Ngoõ ra Out2:Ngoõ ra Chöùc naêng :.Khi phaùt hieän loãi trong vieäc doø tìm start bit thì macro Active_reset kích hoaït reset maïch . ------------------------------------------------------------------------------ --Chöông trình nguoàn kích hoaït reset khi nhaän start bit loãi library IEEE; use IEEE.std_logic_1164.all; entity active_reset is port ( In1: in STD_LOGIC; In2: in STD_LOGIC; Out1: out STD_LOGIC; Out2: out STD_LOGIC ); end active_reset; architecture active_reset_arch of active_reset is begin Out2 <= In1 xor '1'; Out1 <= In2 and Out2; end active_reset_arch; 2.2.4.2.6.Macro Enable_16 In1: Ngoõ vaøo In2:Ngoõ vaøo CLK:Ngoõ vaøo Out1:Ngoõ ra Out2:Ngoõ ra Chöùc naêng :.Cho pheùp ñeám 16 xung ñeå ñoïc möùc logic döõ lieäu khi vieäc doø tìm start bit laø chính xaùc. ------------------------------------------------------------------------------ --Chöông trình nguoàn khi nhaän ñuùng start bit library IEEE; use IEEE.std_logic_1164.all; entity enable_16 is port ( In1: in STD_LOGIC; In2: in STD_LOGIC; CLK: in STD_LOGIC; Out1: out STD_LOGIC; Out2: out STD_LOGIC ); end enable_16; architecture enable_16_arch of enable_16 is begin process (CLK) begin if CLK'event and CLK='1' then if In1 then if In2 then Out1 <= '1'; Out2 <= Not Out1 else Out1 <= '0'; Out2 <= Not Out1 else Out1 <= '0'; Out2 <= Not Out1 else end if; end if; end if; end process; end enable_16_arch; ------------------------------------------------------------------------------ 2.2.4.2.7.Macro Select_clock In1: Ngoõ vaøo In2:Ngoõ vaøo Out:Ngoõ ra Chöùc naêng :.Laø ngoõ taïo xung clock ñoïc laáy döõ lieäu ñaõ ñöôïc ñoàng boä bit. Ngoõ taïo xung naøy chæ coù khi vieäc doø tìm start bit laø chính xaùc . ------------------------------------------------------------------------------ --Chöông trình nguoàn choïn xung clock döõ lieäu library IEEE; use IEEE.std_logic_1164.all; entity Select_clock is port ( In1: in STD_LOGIC; In2: in STD_LOGIC; Out: out STD_LOGIC end Select_clock; architecture Select_clock_arch of Select_clock is begin Out <= In1 or In2 end Select_clock_arch; 2.2.4.2.8.Macro 10bit In1: Ngoõ vaøo In2:Ngoõ vaøo Out:Ngoõ ra Chöùc naêng :.Sau khi ñoïc laáy 10 bit cuûa 1 byte döõ lieäu, macro 10bit seõ reset maïch ñeå doø tìm start bit môùi. ------------------------------------------------------------------------------ --Chöông trình nguoàn reset maïch khi nhaän ñuû 10 bit döõ lieäu library IEEE; use IEEE.std_logic_1164.all; entity 10bit is port ( In1: in STD_LOGIC; In2: in STD_LOGIC; Out: out STD_LOGIC ); end 10bit; architecture 10bit_arch of 10bit is begin Out <= In1 nand In2 end 10bit_arch; Chöông trình xöû lyù ñoàng boä ñöôïc bieân dòch thaønh file machdong.jed. 3.Chöông trình 3.1.Caáu truùc cuûa maïng thieát keá Maïng thieát keá ñöôïc toå chöùc thaønh 3 lôùp Lôùp öùng duïng Lôùp lieân keát Lôùp vaät lyù Lôùp öùng duïng : Taïo söï thaân thieän giao tieáp vôùi ngöôøi söû duïng .Lôùp naøy cho pheùp ngöôøi söû duïng quan saùt vaø ñieàu khieån moät caùch ñôn giaûn baèng caùc nuùt leänh vaø baûng keát quaû . Lôùp lieân keát : Xaây döïng khung döõ lieäu giao tieáp vôùi lôùp vaät lyù Lôùp vaät lyù : Phaàn cöùng hoã trôï vieäc truyeàn döõ lieäu Lôùp öùng duïng Lôùp lieân keát Lôùp vaät lyù Data Header Address Lôùp lieân keát Command Lôùp lieân keát Data FCS 3.2.Caáu truùc khung lôùp döõ lieäu Döõ lieäu ñöôïc toå chöùc theo ñònh daïng khung coá ñònh 5 byte . Header Address Command Data FCS 1 byte 1 byte 1 byte 1 byte 1 byte Header: Chieàu daøi 1 byte ,chæ ñònh ñaàu khung coù giaù trò A0 hex Address : Ñòa chæ coù giaù trò töø 00h -> FFh , chieàu daøi 1 byte cho pheùp maïng keát noái vôùi 256 kit xöû lyù Command : Chieàu daøi 1 byte, bao goàm caùc leänh sau : INIT : 0D hex, muïc ñích laø ñeå maùy tính nhaän bieát kit naøo ñang ñöôïc keát noái, ñòa chæ laø bao nhieâu. Khi maùy tính truyeàn khung döõ lieäu coù maõ leänh laø INIT, neáu kit vi xöû lyù naøo coù ñòa chæ truøng vôùi ñòa chæ trong khung döõ lieäu maø maùy tính ñaõ göûi, thì kit xöû lyù seõ göûi khung döõ lieäu ACK leân maùy tính. Nhö vaäy, maùy tính bieát ñöôïc kit naøo ñang keát noái vaø caû ñòa chæ cuûa kit ñoù. Heä thoáng ban ñaàu khi hoaït ñoäng, maùy tính seõ laàn löôït göûi caùc khung döõ lieäu INIT, trong ñoù ñòa chæ taêng daàn töø 00h -> FFh.Do vaäy cho pheùp maùy tính seõ nhaän bieát ñöôïc taát caû kit naøo ñang keát noái. SETADDR : 0E hex, muïc ñích laø thieát laäp ñòa chæ cho kit môùi ñöôïc keát noái. Khi moät kit ñöôïc keát noái, sau khi maùy tính nhaän bieát coù kit môùi ñöôïc keát noái, maùy tính seõ göûi khung döõ lieäu SETADDR trong ñoù coù chöùa ñòa chæ môùi seõ thieát laäp cho kit. TOKEN : 0C hex, maùy tính hay kit maø giöõ TOKEN naøy thì ñöôïc quyeàn truyeàn DATA cho caùc thieát bò khaùc. Ban ñaàu khi heä thoáng môùi hoaït ñoäng, maùy tính ñöôïc giöõ TOKEN. Sau khi maùy tính ñaõ thöïc hieän xong moät soá coâng vieäc nhö kieåm tra keát noái, thieát laäp ñòa chæ, truyeàn xong döõ lieäu xuoáng kit … thì maùy tính truyeàn TOKEN cho caùc kit. Kit seõ traû lôøi baèng ACK. Kit naøo giöõ TOKEN thì seõ ñöôïc quyeàn phaùt döõ lieäu. Sau khi phaùt döõ lieäu xong, kit göûi TOKEN veà maùy tính. Maùy tính laïi truyeàn tieáp TOKEN cho caùc kit khaùc. ACK : 0Ah, khung ACK ñeå baét tay giöõa maùy tính vaø Kit. NMD :0Bh, sau moät khoaûng thôøi gian nhaát ñònh, maùy tính seõ göûi khung NMD xuoáng caùc kit. Neáu coù moät kit môùi naøo vöøa ñöôïc keát noái, kit ñoù khi nhaän ñöôïc Frame naøy seõ traû lôøi vaø maùy tính nhaän bieát ñöôïc coù kit môùi ñöôïc keát noái. DATA :05h, muïc ñích baùo laø khung naøy coù döõ lieäu. Nhö vaäy coù 5 khung : Khung INIT Khung SETADDR Khung TOKEN Khung ACK Khung NMD Data:Döõ lieäu ñieàu khieån töø maùy tính göûi xuoáng caùc Kit hoaëc döõ lieäu töø caùc Kit göûi leân maùy tính FCS:Kieåm tra loãi Giöõa maùy tính vaø caùc Kit hay giöõa caùc Kit vôùi nhau coù moät chöông trình bieân dòch döõ lieäu .Do ñoù caáu truùc khung naøy cho pheùp môû roäng chöông trình vaø hoaøn toaøn khoâng phuï thuoäc vaøo ñoä daøi döõ lieäu . FCS Data Command Lôùp lieân keát Address Header Header Address Command Lôùp lieân keát Data FCS Trình bieân dòch döõ lieäu Khung döõ lieäu phaùt Khung döõ lieäu thu 3.2.1.Trình bieân dòch döõ lieäu Trình bieân dòch laø moät baûng thöïc hieän thao taùc leänh ñöôïc qui ñònh tröôùc.Töông öùng vôùi moät giaù trò cuûa byte döõ lieäu thì trình bieân dòch coù thao taùc töông öùng.Do vaäy vôùi caáu truùc truyeàn khung döõ lieäu 5 byte coá ñònh thì trình bieân dòch hoaït ñoäng raát hieäu quaû ,coù theå môû roäng trình bieân dòch moät caùch meàm deûo. Hoaït ñoäng 1 Hoaït ñoäng 2 Hoaït ñoäng 3 Hoaït ñoäng 4 Hoaït ñoäng n Data Trình bieân dòch 01h 02h 03h 3.3.Caùc thuû tuïc truyeàn döõ lieäu 3.3.1.Thuû tuïc khôûi ñoäng heä thoáng Khi khôûi ñoäng heä thoáng, maùy tính truyeàn khung INIT coù ñòa chæ taêng daàn töø 00 ->FF hex. Neáu kit vi xöû lyù naøo coù ñòa chæ truøng vôùi ñòa chæ trong Frame maø maùy tính ñaõ göûi, thì Kit xöû lyù seõ göûi khung ACK leân maùy tính. Nhö vaäy, maùy tính bieát ñöôïc kit naøo ñang keát noái vaø caû ñòa chæ cuûa kit ñoù. Do vaäy cho pheùp maùy tính seõ nhaän bieát ñöôïc taát caû kit naøo ñang keát noái. FCS Data INT Address Header Header Address ACK Data FCS Phaùt Thu 3.3.2.Thuû tuïc ñaêng nhaäp kit môùi Sau moät khoaûng thôøi gian nhaát ñònh, maùy tính seõ göûi khung NMD xuoáng caùc kit. Neáu coù moät kit môùi naøo vöøa ñöôïc keát noái, kit ñoù khi nhaän ñöôïc khung naøy seõ traû lôøi vaø maùy tính nhaän bieát ñöôïc coù kit môùi ñöôïc keát noái vaø maùy tính seõ ñònh ñòa chæ cho Kit môùi naøy. FCS Data NMD Address Header Header Address ACK Data FCS Phaùt Thu 3.3.3.Thuû tuïc chuyeån Token Ban ñaàu khi heä thoáng môùi hoaït ñoäng, maùy tính ñöôïc giöõ Token. Sau khi maùy tính ñaõ thöïc hieän xong moät soá coâng vieäc nhö kieåm tra keát noái, thieát laäp ñòa chæ, truyeàn xong döõ lieäu xuoáng kit … thì maùy tính truyeàn khung Token cho caùc kit. Kit seõ traû lôøi baèng khung ACK. Kit naøo giöõ TOKEN thì seõ ñöôïc quyeàn phaùt döõ lieäu. Sau khi phaùt döõ lieäu xong, kit göûi TOKEN veà maùy tính. Maùy tính laïi truyeàn tieáp TOKEN cho caùc kit khaùc. . . FCS Data TOKEN Address Header Header Address ACK Data FCS Phaùt Thu 3.3.4.Thuû tuïc truyeàn döõ lieäu Khi Kit naøo giöõ Token, Kit ñoù coù quyeàn truyeàn döõ lieäu . Kit nhaän seõ traû lôøi baèng khung ACK. FCS Data DATA Address Header Header Address ACK Data FCS Phaùt Thu 3.3.5.Thuû tuïc caáp ñòa chæ Sau khi xaùc nhaän ñaêng nhaäp moä kit môùi,maùy tính seõ göûi khung döõ lieäu SETADDR trong ñoù coù chöùa ñòa chæ môùi seõ thieát laäp cho Kit. FCS Data SETADD Address Header Header Address ACK Data FCS Phaùt Thu 3.4.Löu ñoà giaûi thuaät Chöông trình chính Khôûi ñoäng ngaét Xoùa oâ nhôù Xöû lyù döõ lieäu nhaän ñöôïc Chuaån bò döõ lieäu phaùt Xöû lyù bieân dòch döõ lieäu Phaùt döõ lieäu Chöông trình chính Khoâng E Coù D C B A Khoâng Khoâng Gaùn ñoä daøi khung baèng 0 Gaùn ñoä daøi khung baèng 5 Coù Kieåm tra ñaàu khung ? Coù Ñoä daøi khung =0? Xoùa côø ngaét Caát döõ lieäu Coù Khoâng Löu giöõ caùc con troû Vaø caùc thanh ghi Thoaùt ngaét Phuïc hoài caùc con troû Vaø caùc thanh ghi Ngaét noái tieáp ? Cho pheùp phaùt Chöông trình ngaét Ñoä daøi khung =0? Giaûm ñoä daøi khung 1 ñôn vò Tính FCS Tính FCS K A Ñoä daøi khung =0? Coù C Khoâng D E Löu döõ lieäu Taêng con troû döõ lieäu B So saùnh FCS vaødöõ lieäu thöù 5 Coù Döïng côø baùo nhaän toát Tính FCS K Döïng côø baùo nhaän khoâng toát Traû con troû döõ lieäu veà vò trí ban ñaàu Tính FCS K Chöông trình phuïc vuï ngaét Thoaùt ngaét 3.4.1.Löu ñoà thuû tuïc xöû lyù döõ lieäu nhaän ñöôïc Khi nhaän khung döõ lieäu töø maùy tính, thuû tuïc luoân phaûi ñaûm baûo raèng keát quaû tính CRC khoâng vi phaïm loãi .Khi ñoù thuû tuïc xeùt xem keát quaû nhaän ñöôïc laø yeâu caàu gì töø maùy tính . Vieäc xaùc ñònh thuoäc tính cuûa khung döõ lieäu do byte thöù 3 cuûa khung quyeát ñònh Ñaëc tính khung nhö sau: ACK:Yeâu caàu baét tay giöõa maùy tính vaø caùc Kit coù trong maïng NMD:Sau moät khoaûng thôøi gian nhaát ñònh, maùy tính seõ göûi khung NMD xuoáng caùc Kit. Neáu coù moät Kit môùi naøo vöøa ñöôïc keát noái, Kit ñoù khi nhaän ñöôïc khung naøy seõ traû lôøi vaø maùy tính nhaän bieát ñöôïc coù kit môùi ñöôïc keát noái. TOKEN: Maùy tính hay Kit maø giöõ TOKEN thì ñöôïc quyeàn truyeàn döõ lieäu cho caùc thieát bò khaùc. INT: Khi maùy tính truyeàn khung INIT, neáu kit vi xöû lyù naøo coù ñòa chæ truøng vôùi ñòa chæ trong khung maø maùy tính ñaõ göûi, thì Kit seõ göûi ACK leân maùy tính. Nhö vaäy, maùy tính bieát ñöôïc Kit naøo ñang keát noái vaø caû ñòa chæ cuûa Kit ñoù. SETADD: Thieát laäp ñòa chæ cho Kit môùi ñöôïc keát noái. Khi moät Kit ñöôïc keát noái, sau khi maùy tính nhaän bieát coù Kit môùi ñöôïc keát noái, maùy tính seõ göûi SETADDR trong ñoù coù chöùa ñòa chæ môùi seõ thieát laäp cho Kit. DATA:Khung baùo coù döõ lieäu Thuû tuïc xöû lyù döõ lieäu nhaän ñöôïc Keát quaû nhaän toát khoâng Khoâng Thoaùt thuû tuïc Coù Tieáp tuïc Xöû lyù khung ACK Xöû lyù khung DATA Tieáp tuïc Truy caäp döõ lieäu taïi byte thöù 3 qua con troû vaø nhaûy ñeán ñaùp öùng töông öùng Thoaùt thuû tuïc Xöû lyù khung NMD Xöû lyù khung TOKEN Xöû lyù khung INIT Xöû lyù khung SETADD Thuû tuïc xöû lyù döõ lieäu nhaän ñöôïc 3.4.1.1.Ñaùp öùng xöû lyù khung ACK Khi xaùc nhaän laø khung ACK , ñaùp öùng kieåm tra ñòa chæ vaø môû côø ACK ñeå chuaån bò traû lôøi maùy tính ,caäp nhaät con troû .Trong tröôøng hôïp ñòa chæ sai ñaùp öùng caäp nhaät con troû vaø thoaùt . Xöû lyù khung ACK Ñuùng ñòa chæ Khoâng Thoaùt thuû tuïc Coù Môû côø ACK 3.4.1.2.Ñaùp öùng xöû lyù khung NMD Khi xaùc nhaän laø khung NMD ,ñaùp öùng kieåm tra ñòa chæ vaø môû côø ACK ñeå chuaån bò traû lôøi maùy tính ,caäp nhaät con troû .Trong tröôøng hôïp ñòa chæ sai ñaùp öùng caäp nhaät con troû vaø thoaùt . Xöû lyù khung NMD Ñuùng ñòa chæ Khoâng Thoaùt thuû tuïc Coù Môû côø ACK 3.4.1.3.Ñaùp öùng xöû lyù khung TOKEN Khi xaùc nhaän laø khung TOKEN ,ñaùp öùng kieåm tra ñòa chæ vaø môû côø ACK ñeå chuaån bò traû lôøi maùy tính ,caäp nhaät con troû . Xöû lyù khung TOKEN Ñuùng ñòa chæ Khoâng Thoaùt thuû tuïc Coù Môû côø ACK Môû côø TOKEN 3.4.1.4.Ñaùp öùng xöû lyù khung INIT Khi xaùc nhaän laø khung INIT , ñaùp öùng kieåm tra ñòa chæ vaø môû côø ACK ñeå chuaån bò traû lôøi maùy tính ,caäp nhaät con troû .Trong tröôøng hôïp ñòa chæ sai ñaùp öùng caäp nhaät con troû vaø thoaùt . Xöû lyù khung INIT Ñuùng ñòa chæ Khoâng Thoaùt thuû tuïc Coù Môû côø ACK 3.4.1.5.Ñaùp öùng xöû lyù khung SETADD Khi xaùc nhaän laø khung SETADD , ñaùp öùng kieåm tra ñòa chæ vaø môû côø ACK ñeå chuaån bò traû lôøi maùy tính ,caäp nhaät con troû vaø nhaän ñòa chæ môùi .Trong tröôøng hôïp ñòa chæ sai ñaùp öùng caäp nhaät con troû vaø thoaùt . Xöû lyù khung SETADD Ñuùng ñòa chæ Khoâng Thoaùt thuû tuïc Coù Môû côø ACK Caäp nhaät ñòa chæ môùi 3.4.1.6.Ñaùp öùng xöû lyù khung DATA Khi xaùc nhaän laø khung DATA , ñaùp öùng kieåm tra ñòa chæ vaø môû côø ACK ñeå chuaån bò traû lôøi maùy tính ,caäp nhaät con troû vaø nhaän döõ lieäu .Trong tröôøng hôïp ñòa chæ sai ñaùp öùng caäp nhaät con troû vaø thoaùt . Xöû lyù khung DATA Ñuùng ñòa chæ Khoâng Thoaùt thuû tuïc Coù Môû côø ACK Caäp nhaät döõ lieäu Chöông trình : ;======================================================;Chuong trinh xu ly data nhan duoc .Dieu kien de goi duoc chuong trinh ;nay la TF_RESULT =1 ;Trong truong data nhan duoc thi co 5 byte .Tuy nhien ;khong biet ;la byte thu 3 la lenh nao trong 6 lenh sau day ACK EQU 10 NMD EQU 11 TOKEN EQU 12 INT EQU 13 SETADD EQU 14 DATA EQU 15 ;====================================================== XULYDATA_RECEIVE: MOV A,TF_RESULT CJNE A,#1 ,EXIT_XULYDATA_RECEIVE_1 ;====================================================== ;R0 tro toi byte 3 de doc xem Command gi ; Header - Address - "Command" - Data -FCS ;====================================================== MOV R0,RDT_PNT INC R0 INC R0 MOV A,@R0 MOV B,#4 MUL AB MOV DPTR,#EXIT_XULYDATA_RECEIVE_1 PUSH DPL PUSH DPH MOV DPTR,#JUMP0 JMP @A+DPTR EXIT_XULYDATA_RECEIVE_1: RET JUMP0: LJMP COMMAND_ACK RET LJMP COMMAND_NMD RET LJMP COMMAND_TOKEN RET LJMP COMMAND_INT RET LJMP COMMAND_SETADD RET LJMP COMMAND_DATA RET ;====================================================== ;Day la truong hop nhan Command_Ack ;====================================================== COMMAND_ACK: ;====================================================== ;Tro con tro toi byte thu 2 de lay address ; Header - Address - "Command" - Data -FCS ;====================================================== MOV R0,RDT_PNT INC R0 MOV A,@R0 CJNE A,ID,EXIT_COMMAND_ACK SETB FLAG_ACK EXIT_COMMAND_ACK: CALL UPDATE_POINTER RET ;====================================================== ;Day la truong hop nhan Command_NMD ;====================================================== COMMAND_NMD: JB INSTALL_ED,EXIT_COMMAND_NMD ;====================================================== ;FLAG_ACK la co dung de chi thi phai tra loi ACK ;Khi kiem tra thay co nay =1 thi phai tra loi ACK ;====================================================== SETB FLAG_ACK EXIT_COMMAND_NMD: CALL UPDATE_POINTER RET ;====================================================== ;Day la truong hop nhan Command_TOKEN ;====================================================== COMMAND_TOKEN: ;====================================================== ;Tro con tro toi byte thu 2 de lay address ; Header - Address - "Command" - Data -FCS ;====================================================== MOV R0,RDT_PNT INC R0 MOV A,@R0 CJNE A,ID,EXIT_COMMAND_TOKEN ;====================================================== ;Co TOKEN la co uu tien phat .Khi Kit nao giu co nay nay thi se ;duoc uu tien phat.Nhung luu y sau khi chuyen co uu tien phat ;sang kit khac thi phai xoa co nay ;====================================================== SETB TOKEN SETB FLAG_ACK EXIT_COMMAND_TOKEN: CALL UPDATE_POINTER RET ;====================================================== ;Day la truong hop nhan Command_INT ;====================================================== COMMAND_INT: ;====================================================== ;Tro con tro toi byte thu 2 de lay address ; Header - Address - "Command" - Data -FCS ;====================================================== MOV R0,RDT_PNT INC R0 MOV A,@R0 CJNE A,ID,EXIT_COMMAND_INT SETB FLAG_ACK EXIT_COMMAND_INT: CALL UPDATE_POINTER RET ;====================================================== ;Day la truong hop nhan Command_SETADD ;====================================================== COMMAND_SETADD: ;====================================================== ;Tro con tro toi byte thu 3 de lay address ; Header - Address - "Command" - Data -FCS ;====================================================== MOV R0,RDT_PNT INC R0 INC R0 INC R0 MOV A,@R0 MOV ID,A SETB FLAG_ACK CALL UPDATE_POINTER RET ;====================================================== ;Day la truong hop nhan Command_DATA ;====================================================== COMMAND_DATA: ;====================================================== ;Tro con tro toi byte thu 2 de lay address ; Header - Address - "Command" - Data -FCS ;====================================================== MOV R0,RDT_PNT INC R0 INC R0 MOV A,@R0 CJNE A,ID,EXIT_COMMAND_DATA MOV R0,RDT_PNT INC R0 INC R0 INC R0 MOV A,@R0 MOV DATA_BYTE,A SETB FLAG_ACK EXIT_COMMAND_DATA: CALL UPDATE_POINTER RET 3.4.2.Löu ñoà thuû tuïc chuaån bò döõ lieäu phaùt Khi coù leänh yeâu caàu ñieàu khieån töø Kit hoaëc göûi ACK veà maùy tính thì thuû tuïc chuaån bò döõ lieäu phaùt ñöôïc goïi .Thuû tuïc xaây döïng khung döõ lieäu töø thoâng tin laø byte ACK hoaëc byte döõ lieäu ñieàu khieån . FCS Data Command Address Header Address Header Data Command Command Address Header Address Header Header Truïc thôøi gian thieát keá khung döõ lieäu Ñoä daøi khung =0? Coù Gaùn ñoä daøi khung baèng 5 Gaùn ñoä daøi khung baèng 0 Khoâng A B Coù E Khoâng Thuû tuïc chuaån bò döõ lieäu phaùt Coù yeâu caàu ñieàu khieån Thoaùt thuû tuïc Coù Traû lôøi ACK Khoâng Khoâng Tieáp tuïc Coù Coù Tieáp tuïc Gaùn Header vaøo khung Gaùn ñòa chæ göûi ñi Yeâu caàu traû lôøi ACK ? Yeâu caàu göûi döõ lieäu? Gaùn ACK traû lôøi Gaùn côø döõ lieäu Caäp nhaät byte döõ liieäu Coù Coù Khoângù Tình FCS Xoùa côø ACK Xoùa côø döõ lieäu Caáp phaùt con troû ñích Thoaùt thuû tuïc Khoângù 3.4.2.1.Löu ñoà tính FCS Höôùng phaùt: Chuoãi döõ lieäu tính FCS laø 4 byte : Header Address Command Data Keát quaû tính FCS ñöôïc chöùa trong byte thöù 5 cuûa khung döõ lieäu Ña thöùc sinh :100000111 .Tính CRC-8 100000111 1111000000011101 0000110001001 FCS=00111111B Tính CRC-8 coù chuoãi döõ lieäu sau vôùi ña thöùc sinh 100000111 11110000 11010000 10101010 10000000 00000000 10000011 1 01110011 01 8 bit dòch 1000001 11 0110010 100 100000 111 010010 0111 10000 0111 00010 0000000 10 0000111 00 00001110 10101 1000 00111 0110 100100 100 000111 010 1000111 10 0000111 00 10000000 1 10000011 1 00000011 0000000 10 0000111 01 00001110 1 00000111 0 00001001 00000 1000 00111 0001 00111000 FCS Data Command Address Header FCS chöùa keát quaû CRC-8 1 00000111 0 00111111 11110000 11010000 10101010 10000000 00111111 Phaùt FCS Chuoãi döõ lieäu phaùt coù FCS =00111111B Höôùng thu: Chuoãi döõ lieäu tính FCS laø 5 byte : Header Address Command Data FCS Keát quaû tính FCS coù giaù trò laø khoâng thì vieäc truyeàn khoâng bò loãi . Vôùi chuoãi döõ lieäu treân ta coù khung döõ lieäu phía thu nhö sau : ÔÛ höôùng thu giaûi thuaät tính FCS khoâng thay ñoåi .Tuy nhieân 8 bit dòch ôû byte thöù 5 luùc naøy chính laø giaù trò FCS ôû ñaàu phaùt Ña thöùc sinh :100000111 .Tính CRC-8 11110000 11010000 10101010 10000000 00111111 Thu Keát quaû tính phaàn dö baèng 0.Truyeàn khoâng bò loãi Khoâng Xoaù côø C Quay traùi côø C byte FCS Quay traùi côø C byte data Quay traùi côø C byte Command Quay traùi côø C byte Address Quay traùi côø C byte Header Giaûm soá laàn quay Soá laàn quay baèng 0 ? Coù Gaùn soá laàn quay traùi côø C laø 32 Côø C baèng 1? Côø C baèng 1? Xor byte Header vaø 07h Caäp nhaät byte Header Thoaùt Khoâng Khoâng Coù Xor byte Header vaø 07h Gaùn Header vaøo byte FCS Gaùn Header vaøo byte FCS Coù Tính FCS Chöông trình : ;====================================================== ;Tinh CRC-8 ;X^8 + X^2 + X^1 + 1 ;Ti1nh CRC-8 cho 4 byte : ;1/Header ;2/Address ;3/Command ;4/Data ;Ket qua CRC-8 duoc luu vao byte FCS ;Truong du lieu can tinh la 40 byte ;Duoc sap xep nhu sau ;Header-Addree-Command-Data-FCS ;Ngo vao tinh CRC co 4 byte Header-Addree-Command-Data ;la cac gia tri nhan duoc ;Gia tri FCS la zero ;Ngo ra CRC-8 duoc chua trong FCS ;R0 =32 so lan dich ;====================================================== LOOPCRC: CLR C MOV A,34H RLC A MOV 34H,A MOV A,33H RLC A MOV 33H,A MOV A,32H RLC A MOV 32H,A MOV A,31H RLC A MOV 31H,A MOV A,30H RLC A MOV 30H,A DJNZ R0,UNCRC JC LASTCRC RESULT_CRC: MOV CRC,30H MOV 34H,CRC RET UNCRC: JNC LOOPCRC CLR C MOV A,30H XRL A,#07H MOV 30H,A SJMP LOOPCRC LASTCRC: CLR C MOV A,30H XRL A,#07H MOV 30H,A SJMP RESULT_CRC 3.4.3.Löu ñoà thuû tuïc phaùt döõ lieäu Thuû tuïc phaùt döõ lieäu söû duïng 2 con troû ñeå chæ boä ñeäm ñang chöùa döõ lieäu . Con troû nguoàn giöõ vò trí byte döõ lieäu phaùt sau cuøng Con troû ñích ñöôïc caáp phaùt qua thuû tuïc chuaån bò döõ lieäu phaùt .Con troû ñích giöõ vò trí cao nhaát cuûa döõ lieäu phaùt Thuû tuïc ñöôïc goïi khi Kit xöû lyù ñöôïc trao TOKEN . Thuû tuïc phaùt döõ lieäu TOKEN? Coù Con troû ñích ñöôïc caáp phaùt ? Phaùt Thoaùt Khoâng Khoâng PHAT: MOV A,MSI_PNT CJNE A,MSO_PNT,PHAT1 JNB RX_INHIBIT,EXIT_PHAT CLR RX_INHIBIT MOV MSI_PNT,#2BH MOV MSO_PNT,#2BH MOV RI_PNT,#30H MOV RDT_PNT,#30H SJMP EXIT_PHAT PHAT1: JNB FL_SCOM,EXIT_PHAT CLR FL_SCOM MOV R1,MSI_PNT MOV SBUF,@R1 INC R1 MOV MSI_PNT,R1 EXIT_PHAT: RET KEÁT QUAÛ VAØ HÖÔÙNG PHAÙT TRIEÅN 1.Caùc vaán ñeà ñaõ thöïc hieän trong luaän aùn: Thieát keá vaø thi coâng hoaøn thaønh maïch ñieàu cheá ,giaûi ñieàu cheá FSK trao ñoåi döõ lieäu giöõa maùy tính vaø caùc Kit trong maïng Thieát keá vaø thi coâng hoaøn thaønh Kit, trong ñoù thöïc hieän ñieàu cheá giaûi ñieàu cheá FSK ;xöû lyù ñoàng boä bit duøng FPGA ;ñoàng boä khung döõ lieäu. Tìm hieåu vaø xöû duïng CPU 89S8252 phuïc vuï nhu caàu môû roäng . Vieát chöông trình giao tieáp vôùi caùc Kit trong maïng .Giao tieáp cho pheùp ngöôøi söû duïng coù theå khai thaùc maïng moät caùch deã daøng . 2.Nhöõng haïn cheá vaø höôùng phaùt trieån cuûa luaän aùn: 2.1.Nhöõng haïn cheá Chöa thöïc hieän keát noái ñieàu khieån moät maùy coâng nghieäp cuï theå Caùc tuøy choïn ñeå söû duïng coøn haïn cheá Söû duïng coång COM neân toác ñoä coøn haïn cheá 2.2.Höôùng phaùt trieån Caàn laäp trình toái öu hôn nöõa, laøm cho chöông trình linh hoaït hôn trong vieäc xeùt töông quan caùc giaù trò, giaûm toái ña vieäc hao phí taøi nguyeân. Ñaëc bieät neân ñöôïc thöû nghieäm thöïc teá maïng coâng nghieäp. Truyeàn ñoàng boä duøng USB naâng cao toác ñoä truyeàn DATA SHEET CAÙC CHIP SÖÛ DUÏNG 1.89S8252 2.73M223 3.XC95108 TAØI LIEÄU THAM KHAÛO 1.Industrial electronics Thomas E.kissell 2.http:/www.xilinx.com 3.Hôïp ngöõ vaø laäp trình öùng duïng Toáng Vaên On-Hoaøng Ñöùc Haûi 4. 5. 6. 7. 8. 9.

Các file đính kèm theo tài liệu này:

  • docluanvan.doc
  • docAbstract.doc
  • pptbaovepowerpoint.ppt
  • pptbaovepowerpoint1.ppt
  • docBialv.doc
  • rarLATS - NGHIEN CUU VA THIET KE MANG CONG NGHIEP SU DUNG CHIP FPGA VA CPU 89S8252.rar
  • docloicamon.doc
  • docLYLICHKHOAHOC.doc