Để đỏnh giỏ chất lượng của cuộc truyền dữ liệu qua cổng nối tiếp thỡ một trong những thụng số đặc trưng quan trọng là tốc độ truyền/nhận dữ liệu. Trong kỹ thuật truyền dữ liệu qua cổng nối tiếp ta thấy cú bit bắt đầu, bit dừng. Trong một số trường hợp cú bit chẵn lẻ đó được bổ xung vào, như vậy cú tới 10 bit được truyền trong khi chỉ cú 7 bit dữ liệu, cũn trong trường hợp sử dụng 2 bit dừng thỡ cú tới 11 bit truyền trong khi chỉ cú 7 bit dữ liệu. Như vậy nếu cú 10 kớ tự được gửi trong 1 giõy và nếu như cú 11 bit được sử dụng cho 1 kớ tự thỡ tốc độ truyền thụng sẽ là 110 bit/s. Như vậy giữa tốc độ truyền bit và tốc độ truyền kớ tự là khỏc nhau. Ngoài tốc độ truyền bit người ta cũn sử dụng tốc độ baud. Đõy là tờn của một nhà kỹ thuật người Phỏp đó giành nhiều cụng sức để nghiờn cứu về truyền thụng và người ta đó lấy tờn ụng để làm đơn vị truyền dữ liệu. Thụng thường tốc độ bit và tốc độ baud là đồng nhất, chỉ trong trường hợp cú mụdem do cú thờm quỏ trỡnh biến đổi tớn hiệu nờn 2 tốc độ này nú khỏc nhau.
Bảng 5.2: Tốc độ bps liờn quan với số cỏc ký tự được truyền trong mỗi giõy
Tốc độ (bps) Ký tự / giõy 110 300 600 1200 2400 4800 9600 19200 56600 11 30 60 120 240 480 960 1920 5660
5.2. GIAO TIẾP MÁY TÍNH VỚI VISUAL BASIC:
Giao tiếp qua cổng COM được sử dụng phổ biến, theo chuẩn RS232, cỏc bit dữ liệu nối tiếp nhau trờn một đường truyền trờn một đường dẫn với một tốc độ cụ thể do người lập trỡnh quy định, chiều dài ký tự cú thể là 5, 6, 7, và 8 bit kết hợp với bit start và bit stop, bit parity (chẵn lẻ) để tạo thành một frame (khung truyền). Ngoài đường truyền dữ liệu, port giao tiếp này cũn cú cỏc đường điều khiển thu, phỏt, kiểm tra lỗi. Cỏch giao tiếp này cho phộp truyền ở khoảng cỏch lớn vỡ khả năng chống nhiễu khỏ nhỏ. Mặt khỏc vỡ đường truyền là nối tiếp nờn thành viờn thứ ba khụng thể tham gia vào cuộc trao đổi thụng tin.
Ưu điểm lớn nhất của kiểu giao tiếp này là sử dụng ớt đường truyền, ớt nhiễu tớn hiệu nờn cú thể truyền quóng đường xa… Nhưng mặt khỏc do bản chất là truyền thụng nối tiếp nờn cổng nối tiếp khụng được sử dụng cho cỏc ứng dụng thời gian thực hay điều khiển song song.
Để sử dụng cỏc hàm hỗ trợ giao tiếp qua cổng COM trong thư viện Port.dll bạn phải "mở cổng" bằng hàm OPENCOM, vớ dụ:
i = OPENCOM("COM1,9600,N,8,1")
Trong đú, COM1 là cổng COM thứ 1, 9600 là tốc độ baud, N:khụng kiểm tra chẵn, lẻ, 8: số Bit trong 1 Frame truyền, 1: số Bit Stop.
- Trong Visual Basic thiết lập chế độ điều khiển truyền thụng nối tiếp MSComm bằng cỏch chọn Project – Component (Ctrl T ) – Microsoft Comm Control 6.0, biểu tượng hỡnh điện thoại tượng trưng cho MSComm hiện lờn, khi cần sử dụng kộo biểu tượng này vào trong Form chương trỡnh .
- Cú 2 cỏch để trao đổi thụng tin: + Điều khiển sự kiện:
Cỏch này sử dụng thuộc tớnh được hỗ trợ sẵn OnComm để bẫy cỏc sự kiện .
+ Hỏi vũng:
Để xỏc định sự kiện mới hoặc lỗi bằng cỏc này ta kiểm tra cỏc đặc tớnh ComEvent sau mỗi chu kỡ chương trỡnh. Cỏch này khụng tối ưu vỡ mỏy tớnh cần cú thời gian để thực hiện hỏi vũng và thường được sử dụng trong cỏc ứng dụng đơn giản.
Cỏc thuộc tớnh của Mscomm:
MSComm là một điều khiển ActiveX dựng trong truyền thụng nối tiếp. Cỏc tớnh chất của điều khiển này được dựng để thiết lập giao tiếp với cỏc thiết bị ngoại vi qua cổng RS232.
- COMMPORT: Đặc tớnh này đặt và trả lại số cổng truyền thụng được chọn.
Cỳ phỏp:
[form.]MSComm.Commport = [PortNumber%] . PortNumber% cú giỏ trị từ 1 đến 16 ( mặc định là 1). . Kiểu dữ liệu của đặc tớnh này là : Integer .
- SETTINGS: Đặt và trả lại cỏc thụng số cho truyền thụng cho cổng nối tiếp: baudrate, tớnh chẵn lẻ, số bit dữ liệu, số bit stop.
Cỳ phỏp:
[form.]MSComm.Settings = [ParamString$]
. ParamString$ là cỏc thụng số theo thứ tự như sau: baudrate, parity, số bit data, số bit stop.
. Kiểu dữ liệu của đặc tớnh này là : String
- PORTOPEN: Đặc tớnh này trả lại và đặt trạng thỏi cổng truyền thụng (True hoặc False).
Cỳ phỏp:
[form.]MSComm.PortOpen = [True/False]
a - Cỏc đặc tớnh phục vụ việc nhập dữ liệu:
- INPUT: Trả lại và xoỏ bỏ một kớ tự từ bộ đệm nhận và là thuộc tớnh chỉ đọc
(Read Only).
Cỳ phỏp:
[form.]MSComm.Input
- Inputlen: qui định số kớ tự được đọc bằng lệnh Input. Đặt Inputlen = 0 để đọc toàn bộ bộ đệm.
- InBufferCount: xỏc định số kớ tự trong bộ đệm nhận.
- InputMode: xỏc định kiểu dữ liệu đọc về : CommInputModeText: kiểu Text
(mó Ascii), CommInputModeBinary: kiểu nhị phõn.
- Inbuffercount: Trả lại số kớ tự trong bộ đệm nhận. Đặt InbufferCount = 0 là xoỏ toàn bộ bộ đệm nhận .
Cỳ phỏp:
[form.]InBufferCount = [Count%] Kiểu dữ liệu của đặc tớnh này là: Integer
b - Cỏc đặc tớnh phục vụ việc xuất dữ liệu:
- OUTPUT: Viết một kớ tự vào bộ đệm truyền . Cỳ phỏp:
[form.]MSComm.Output = [OutString$]
+ Kớ tự gởi đi cú thể dạng Text hay dạng Binary. Thụng thường nếu ta gởi một chuỗi theo dạng chuẩn ANSI thỡ nờn gởi theo dạng Text, ngược lai khi gởi cỏc kớ tự điều khiển như: NULL thỡ nờn gởi dưới dạng Binary .
+ Kiểu dữ liệu của đặc tớnh này là: Variant
- OutBufferCount: Trả lại số kớ tự bộ đệm truyền. Đặt OutBufferCount = 0 sẽ xoỏ toàn bộ bộ đệm truyền. Trả lại số kớ tự trong bộ đệm truyền.
Cỳ phỏp:
[form.]MSComm.OutBufferCount = [Value%] Kiểu dữ liệu của đặc tớnh này là: Integer
Cỏc tớnh chất của MSComm được sắp xếp theo chức năng: Thiết lập tham số cho cổng:
+ CommID: trả lại handles đồng nhất tới thiết bị truyền thụng, cú kiểu Long. Tớnh chất này khụng cú lỳc thiết kế mà chỉ cú khi thi hành, thuộc tớnh này là ReadOnly.
+ CommPort: dạng Object.CommPort = value. Value là chỉ số của cổng Com cú giỏ trị từ 1 đến 16 và mặc định cú giỏ trị = 1. Cần phải thiết lập thụng số này trước khi mở cổng. Sẽ cú lỗi error 68 (Device unavailable) nếu như khụng mở được cổng này.
+ InBuferSize: thiết lập hoặc trả lại kớch thước của bộ đệm nhận, tớnh = byte. Mặc định là 1024 byte. Khụng được nhầm lẫn với đặc tớnh InBufferCount là số byte đang chờ trong bộ đệm nhận.
+ InputLen: Object.InputLen[= value] thiết lập hoặc trả lại số byte mỗi lần thuộc tớnh Input đọc trong bộ đệm nhận. Mặc định giỏ trị Value = 0 tức là thuộc tớnh Input sẽ đọc hết nội dung của bộ đệm nhận khi thuộc tớnh này được gọi. Nếu số kớ tự trong bộ đệm nhận khụng bằng InputLen thỡ thuộc tớnh Input sẽ trả lại kớ tự rỗng “”. Vỡ thế cần phải chọn cỏch kiểm tra InBufferCount để chắc chắn số kớ tự yờu cầu đó cú đủ trước khi dựng lệnh Input. Tớnh chất này rất cú ớch khi đọc dữ liệu một mỏy mà dữ liệu ra được định dạng bằng cỏc khối cú kớch thước cố định.
+ InputMode: Object.InputMode[= value]. Value = 0 hay = comInputModeText dữ liệu nhận được dạng văn bản kiểu kớ tự theo chuẩn ANSI. Dữ liệu nhận được sẽ là một xõu. Value=1 hay = comInputModeBinary dựng nhận mọi kiểu dữ liệu như kớ tự điều khiển nhỳng, kớ tự NULL, ... Giỏ trị nhận được từ Input sẽ là một mảng kiểu Byte.
+ NullDiscard: Object.NullDiscard [= value] tớnh chất này quyết định kớ tự trống cú được truyền từ cổng đến bộ đệm nhận hay khụng. Nếu value = True
kớ tự này khụng được truyền. Value = False kớ tự trống sẽ được truyền. Kớ tự trống được định nghĩa theo chuẩn ASCII là kớ tự 0 – chr$(0).
+ OutBuferSize: giống như InBuferSize, mặc định là 512.
+ ParityReplace: thiết lập và trả lại kớ tự thay thế kớ tự khụng đỳng trong lỗi giống nhau.
+ PortOpen: thiết lập và trả lại tớnh trạng của cổng (đúng hoặc mở). object.PortOpen [= value]. Value = True cổng mở. Value = False cổng đúng và xúa toàn bộ dữ liệu trong bộ đệm nhận và truyền. Cần phải thiết lập thuộc tớnh CommPort đỳng với tờn của cổng trước khi mở cổng giao tiếp. Thờm vào đú, cổng giao tiếp của thiết bị phải hỗ trợ giỏ trị trong thuộc tớnh Setting thỡ thiết bị mới hoạt động đỳng, cũn khụng thỡ nú sẽ hoạt động rất dở nếu khụng núi là nú chạy khụng tốt. Đường DTR và RTS luụn giữ lại trạng thỏi của cổng.
+ RthresHold: Object.Rthreshold [= value] value kiểu số nguyờn. Thiết lập số kớ tự nhận được trước khi gõy lờn sự kiện comEvReceive. Mặc định = 0 tức là khụng cú sự kiện OnComm khi nhận được dữ liệu. Thiết lập = 1 tức là sự kiện OnComm xảy ra khi bất kỡ kớ tự nào được chuyển đến bộ đệm nhận.
+ Settings: object.Settings [= value] thiết lập hoặc trả lại cỏc thụng số tần số baud, bit dữ liệu, bit chẵn lẻ, bit stop. Nếu value khụng cú giỏ trị khi mở sẽ gõy ra lỗi 380 (Invalid property value).
+ SThreshold: thiết lập và và trả lại số kớ tự nhỏ nhất được cho phộp trong bộ đệm gửi để xảy ra sự kiện OnComm = comEvSend. Theo mặc định giỏ trị này = 0 tức là khi truyền sẽ khụng gõy ra sự kiện OnComm. Nếu thiết lập thụng số này = 1 thỡ sự kiện OnComm xảy ra khi bộ đệm truyền rỗng. Sự kiện OnComm = comEvSend chỉ xảy ra khi mà số kớ tự trong bộ đệm truyền nhỏ hơn hoặc = Sthreshold. Nếu số kớ tự trong bộ đệm này luụn lớn hơn Sthreshold thỡ sự kiện này khụng thể xảy ra.
Truyền nhận dữ liệu:
+ CommEvent: trả lại phần lớn sự kiện giao tiếp hoặc cú lỗi. CommEvent xảy ra khi cú lỗi hoặc khi xảy ra sự kiện nào đú.
+ EOFEnable: Object.EOFEnable [= value] quyết định cỏc hành động nếu MSComm tỡm thấy kớ tự kết thỳc file. Nếu value = true khi tỡm thấy kớ tự kết thỳc
file thỡ sẽ gõy lờn sự kiện comEvEOF trong OnCommEvent. Nếu value = false thỡ sẽ khụng gõy lờn sự kiện này.
+ InBufferCout: trả lại số kớ tự đang cú trong bộ đệm nhận Cú thể xoỏ bộ đệm nhận bằng cỏch đặt thuộc tớnh này = 0. Khụng nhầm với thuộc tớnh InBufferSize là tổng kớch thước của bộ đệm nhận.
+ Input: nhận xoỏ dữ liệu bộ đệm nhận. Nếu InputMode là comInputModeText thỡ giỏ trị trả về sẽ là một xõu tức cú kiểu String, dữ liệu dạng text trong một biến kiểu Variant. Nếu InputMode = comInputModeBinary thỡ thuộc tớnh này sẽ trả lại dữ liệu dạng nhị phõn dưới dạng một mảng kiểu byte trong một biến Variant.
+ OutBufferCount: trả lại số kớ tự trong bộ đệm truyền.
+ Output: ghi dữ liệu vào bộ đệm truyền. Cú thể truyền kiểu text hoặc kiểu nhị phõn. Nếu truyền bằng kiểu text thỡ cho một biến Variant = kiểu String, nếu truyền kiểu nhị phõn thỡ cho cho Output = Variant là một mảng kiểu Byte.
Bắt tay( handshaking):
+ Break : thiết lập hoặc xoỏ tớn hiệu Object.Break [= value] Value = True hoặc False. Khi set Value = True thỡ thụng số Break này sẽ gửi một tớn hiệu Break. Tớn hiệu Break trỡ hoàn việc truyền dữ liệu và đưa đường truyền vào trạng thỏi Break tới khi mà Value = False.
+ CDHolding: quyết định xem sự truyền này đến đõu bằng cỏch truy vấn đường CD (Carrier Detect). Carrier Detect là tớn hiệu gửi từ modem tới mỏy tớnh kết nối với nú thống bỏo rằng nú đang online. Nếu giỏ trị = True thỡ nú đường CD đang ở mức cao, nếu = False thỡ đường dõy này đang ở mức thấp. Tớnh chất này khụng cú trong lỳc thiết kế chỉ cú trong khi chạy chương trỡnh. Carrier Detect được biết như là Receive Line Signal Detect (RLSD).
+ CTSHolding: quyết định khi nào bạn gửi dữ liệu bằng cỏch truy vấn trạng thỏi đường Clear To Send (CTS). Thụng thường tớn hiệu CTS được gửi từ modem tới mỏy tớnh kết nối với nú để bỏo rằng đang quỏ trỡnh truyền dữ liệu. Thuộc tớnh Readonly chỉ xuất hiện khi chạy chương trỡnh. Đường Clear To Send dựng trong RTS/CTS (Request To Send/Clear To Send) bắt tay phần cứng.
CTSHolding cho ta biết một cỏch để tự tay dũ đường Clear To Send nếu cần biết trạng thỏi của nú.
+ DSRHolding: biết trạng thỏi của đường Data Set Ready (DSR). Tớn hiệu Data SetReady truyền từ modem tới mỏy tớnh nối với nú để thụng bỏo rằng modem đó sẵn sàng hoạt động. Tớnh chất này dựng khi viết Data Set Ready/Data Terminal Ready handshaking routine cho mỏy Data Terminal Equipment (DTE) mỏy trang bị đầu cuối dữ liệu.
+ DTREnable: tớnh chất này quyết định khi nào cho phộp đường Data Terminal Ready (DTR) trong truyền thụng. Tớn hiệu DTR gửi từ mỏy tớnh tới modem để bỏo rằng mỏy tớnh sẵn sàng là nơi nhận dữ liệu. Khi DTREnable = True thỡ đường Data Terminal Ready set lờn cao khi cổng mở, và thấp khi cổng đúng. Nếu DTREnable = False thỡ đường đú luụn mức thấp. Trong phần lớn trường hợp set đường Data Terminal Ready thành thấp để hang up telephone.
+ Handshaking: thiết lập và trả lại giao thức (protocol) bắt tay phần cứng. Object.Handshaking[= Value]. Handshaking chỉ là giao thức truyền thụng nội tại quyết định bởi dữ liệu nào được truyền từ cổng phần cứng tới bộ đệm nhận. Khi kớ tự của dữ liệu tới cổng nối tiếp, thiết bị truyền thụng sẽ chuyển nú vào trong bộ đệm nhận và chương trỡnh của bạn cú thể đọc chỳng. Nếu khụng cú bộ đệm dữ liệu hoặc chương trỡnh của bạn cần đọc kớ tự trực tiếp từ phần cứng, bạn cú thể mất dữ liệu bởi vỡ kớ tự từ phần cứng đến rất nhanh. Giao thức Handshaking đảm bảo dữ liệu khụng bị mất, khi dữ liệu đến cổng quỏ nhanh thỡ thiết bị truyền thụng sẽ chuyển dữ liệu vào trong bộ đệm nhận.
+ RTSEnable: quết định khi nào cho phộp đường Request To Send (RTS), tớn hiệu RTS từ mỏy tớnh tới modem để yờu cầu được tryền dữ liệu. Khi RTSEnable = True thỡ đường RTS mức cao khi cổng mở, tớch mức thấp khi cổng đúng. Và hiển nhiờn khi RTSEnable thỡ đường RTS luụn mức thấp. RTS dựng trong RTS/CTS hardware handshaking. RTSEnable cho phộp dũ đường RTS khi cần biết tỡnh trạng của đường này. Cỏc tớnh chất trờn khụng cú lỳc thiết kế giao diện mà chỉ cú lỳc chạy chương trỡnh (dựng trong viết code).
CHƯƠNG 6
6.1. GIỚI THIỆU CHUNG:
Ở chương này trỡnh bày lưu đồ thuật toỏn được sử dụng trong mạch. Chương trỡnh cho vi điều khiển dựng ngụn ngữ ASSEMBLY. Chương trỡnh giao tiếp với mạch và mạng Internet dựng ngụn ngữ VISUAL BASIC.
6.2. LƯU ĐỒ THUẬT TOÁN:
6.2.1. Lưu đồ chương trỡnh chớnh:MAIN MAIN
Thieỏt laọp caực thoõng soỏ ban ủaàu
HOI_CHUONG = 3
Giaỷm HOI_CHUONG
Keỏt noỏi thueõ bao
CALL DIEU_KHIEN END ẹUÙNG SAI ẹUÙNG SAI HOI_CHUONG = 0 Tớn hieọu chuoõng?
6.2.2. Lưu đồ chương trỡnh con DIEU_KHIEN:CALL NHAN_TH_DTMF CALL NHAN_TH_DTMF CALL THOI_GIAN_CHO_NHAN DIEU_KHIEN SLNP = 1 PHÍM * NHAÄP PASS SLNP = 2 PHAÙT TB TèNH TRAẽNG TB PHAÙT"MễỉI NHAÄP PASS"
SLNP = 3 PHÍM # PHÍM * PHÍM 0 MAế TB? PHÍM 1
PHAÙT "BAÄT" PHAÙT " TAẫT"
PHAÙT TB CHOẽN MAế TB RET ẹ ẹ ẹ ẹ ẹ ẹ ẹ ẹ ẹ S S S S S S S S S ẹ S SLNP = 0 TAấNG SLNP SLNP = 2 SLNP: Số lần nhấn phớm.
6.2.3. Lưu đồ chương trỡnh con NHAN_TH_DTMF:NHAN_TH_DTMF NHAN_TH_DTMF A = 0 P1 -> A A -> PHIMNHAN A*11110000 -> A RET
THOI_GIAN_CHO_NHAN P3.3=1 DEC CHO_NHAN CH_NHAN = 10 CHO_NHAN = 0 P3.3 = 0 CHO_NHAN = 10 DEC CHO_NHAN CHO_NHAN = 0 RET ẹ ẹ ẹ S S S S ẹ
6.2.7. Lưu đồ chương trỡnh con ngắt nhận dữ liệu từ mỏy tớnh:NHAN_DL NHAN_DL Cễỉ NHAÄN = 1? SBUF -> A XOÙA Cễỉ NHAÄN RI SAI ẹUÙNG DL NHAÄN = DL SO SAÙNH? ẹUÙNG
ẹIEÀU KHIEÅN THIEÁT Bề
RETI
SAI
6.2.8. Lưu đồ chương trỡnh con XUNG và SO0, SO1, …, SO9: ẹệA 1 VAỉO R7 SOÁ 1 CALL XUNG GIAÛM R7 R7 = 0 XUNG SETB P2.0 CALL DELAY60MS CLR P2.0 CALL DELAY40MS RET RET SAI ẹUÙNG ẹUÙNG SAI RET R7 = 0 GIAÛM R7 CALL XUNG SOÁ 2 ẹệA 2 VAỉO R7 ẹUÙNG SAI RET R7 = 0 GIAÛM R7 CALL XUNG SOÁ 3 ẹệA 3 VAỉO R7 ẹUÙNG SAI RET R7 = 0