THÔNG SỐ TỐC ĐỘ

Một phần của tài liệu GIỚI THIỆU LED 7 DOẠN (Trang 79 - 87)

CHƯƠNG V GIAO TIẾP MÁY TÍNH VỚI VI XỬ LÝ

II. THÔNG SỐ TỐC ĐỘ

BAUD

110 2400 19200 57600

300 4800 28800 115200 600 9600 38400 128000 1200 14400 56000 256000

Thuộc tính PortOpen

Thuộc tính PortOpen đặt và trả lại trạng thái của cổng truyền thông (đóng hoặc mở). Thuộc tính này không có trong thời gian thiết kế chương trình. Cú pháp của câu lệnh là :

[form.] MSComm.PortOpen [={True/ False}]

Thông số thiết lập là True để mở cổng, còn False để đóng (giải phóng) cổng và xóa nội dung các bộ đệm nhận và truyền MSComm tự động đóng cổng nối tiếp khi ứng dụng kết thúc (Terminated).

Trước khi dùng thuộc tính này (PortOpen), phải đặt thông số cổng bằng thuộc tính CommPort với một giá trị hợp lệ, nếu ta quên đi thuộc tính này lỗi 68 sẽ phát sinh.

Thí dụ sau đây mở cổng truyền thông số 1 (COM1) với tốc độ baud là 4800 baud, không kiểm tra tính chẵn lẻ, 8 bit dữ liệu, 1 bit stop:

MSComm1.Settings = “4800 ,N ,8 ,1”

MSComm1.CommPort=1 MSComm1.PortOpen=True Kiểu dữ liệu : Boolean.

Các thuộc tính phục vụ việc nhập dữ liệu (Input ,InBufferCount và InBufferSize)

- Thuộc tính Input :

Thuộc tính Input trả lại và xóa bỏ một chuỗi ký tự từ bộ đệm nhận. Thuộc tính này không sẵn có trong khi thiết kế và là chỉ đọc (Read_only) khi chạy chương trình.

Cú pháp của câu lệnh là :

[form.] MSComm.Input

Thuộc tính InputLen quy định số ký tự được đọc bởi câu lệnh Input. Để xác định số các ký tự trong bộ đệm, thuộc tính InBufferCount được kiểm tra. Đặt InputLen là 0 để đọc toàn bộ nội dung của bộ đệm nhận.

Thuộc tính InputMode quyết định kiểu dữ liệu thu về qua thuộc tính Input. Nếu thuộc tính này được set là CommInputModeText thì thuộc tính Input sẽ trả về dữ liệu kiểu text vào 1 biến Variant. Nếu InputMode là comInputModeBinary thì Input sẽ trả về dữ liệu nhị phân trong một mảng các byte vào một biến Variant .

Thí dụ dưới đây chỉ ra cách đọc dữ liệu từ bộ đệm nhận.

MSComm1.InputLen= 0 ‘đọc toàn bộ nội dung của bộ đệm ‘nhận

‘kiểm tra có dữ liệu hay không If MSComm1.InbufferCount then

‘đọc dữ liệu

InString$ = MSComm1.Input End if

Kiểu dữ liệu Variant.

- Thuộc tính InBufferSize:

Thuộc tính InBufferSize đặt và trả lại kích thước bộ đệm nhận, tính theo số byte. Cú pháp của câu lệnh là :

[form.]MSComm .InBufferSize [=numbyte%]

Thuộc tính này có liên quan đến kích thước bộ đệm nhận. Giá trị mặc định là 1024 bytes. Kích thước của bộ đệm phải được đặt sao cho có thể cất giữ được số lớn nhất của các ký tự sẽ được nhận trước khi chương trình ứng dụng có thể đọc chúng từ bộ đệm, trừ khi ta làm việc ở chế độ bắt tay (handshaking).

Kiểu dữ liệu của thuộc tính này là Integer.

- Thuộc tính InBufferCount:

Thuộc tính InBufferCount trả lại số ký tự trong bộ đệm nhận. Nó cũng có thể được sử dụng để xóa bộ đệm bằng cách đặt số của các ký tự bằng 0. Cú pháp câu leọnh nhử sau:

[form.]MSComm.InBufferCount [=count%]

Ta có thể xóa bộ đệm nhận bằng cách đặt thuộc tính InBufferCount = 0.

Kiểu dữ liệu của thuộc tính này là Integer.

Các thuộc tính phục vụ việc xuất dữ liệu (Output ,OutBufferCount và OutBufferSize )

- Thuộc tính Output:

Thuộc tính Output sẽ viết một chuỗi ký tự vào bộ đệm truyền, thuộc tính này không có trong thời gian thiết kế chương trình. Cú pháp câu lệnh là :

[form.]MSComm.Output [=outstring$]

Thí dụ sau đây cho biết cách gửi các ký tự mà người dùng gõ vào từ bàn phím:

Private Sub Form_load (KeyAscii as Integer) MSComm1.Outport =Chr$(KeyAscii)

End Sub

Thuộc tính Output có thể xuất dữ liệu dạng text hay dạng binary. Để gửi dữ liệu text, ta phải khai báo một biến kiểu Variant và cho nó chứa chuỗi muốn gửi, sau đó gán biến này cho thuộc tính Output. Để gửi dữ liệu dạng binary, ta phải truyền một biến Variant chứa một mảng các byte cho thuộc tính Output .

Thông thường, nếu ta gửi một chuỗi theo chuẩn ANSI tới ứng dụng, ta có thể gửi dữ liệu dạng text. Nếu ta có dữ liệu mà chứa các ký tự điều khiển được nhúng (embedded) như các ký tự NULL,… thì ta sẽ truyền dữ liệu theo dạng binary.

Kiểu dữ liệu của thuộc tính này là Variant.

- Thuộc tính OutBufferSize :

Thuộc tính OutBufferSize đặt và trả lại kích thước của các ký tự trong bộ đệm truyền. Cú pháp của câu lệnh là :

[form.] MSComm.OutBufferSize [=numbyte%]

Giá trị mặc định của thuộc tính này là 512 bytes. Không nên nhầm lẫn giữa hai thuộc tính OutBufferCount và OutBufferSize với nhau. Thuộc tính OutBufferCount nói lên số bytes hiện đang có trong bộ đệm truyền, còn OutBufferSize quy định tổng kích thước của bộ đệm truyền. Không nên để kích thước bộ đệm truyền quá lớn. Tuy nhiên nếu để quá nhỏ thì sẽ xảy ra hiện tượng tràn dữ liệu (trừ khi làm việc ở chế độ bắt tay). Thông thường nên bắt đầu với kích thước bộ đệm truyền là 512 bytes. Nếu lỗi tràn xảy ra thì phải tăng kích thước bộ đệm cho thích hợp với ứng dụng hiện tại.

Kiểu dữ liệu của thuộc tính này Integer.

- Thuộc tính OutBufferCount :

Thuộc tính OutBufferCount trả lại số ký tự trong bộ đệm truyền. Nhờ thuộc tính này ta có thể xóa nội dung bộ đệm truyền bằng cách đặt giá trị của OutBufferCount=0. Cú pháp của câu lệnh là :

[form.]MSComm.OutBufferCount [=value%]

Kiểu dữ liệu của thuộc tính này là Integer.

- Thuộc tính RTSEnable :

Thuộc tính này xác định xem liệu có cho phép đường RTS hay không. Thông thường tín hiệu RTS (Request To Send) được gửi từ máy tính tới MODEM để yêu cầu sự cho phép truyền dữ liệu. Cú pháp câu lệnh như sau:

[form.]Mscomm1.RTSEnable [=(True | False)]

Ta xác lập giá trị này là True để đặt đường RTS lên mức cao nếu cổng đang mở và xuống mức thấp nếu cổng đang đóng. Đường RTS được sử dụng khi có bắt tay phần cứng sử dụng RTS/CTS. Thuộc tính RTSEnable cho phép hỏi vòng đường RTS nếu ta cần xác định trạng thái của nó.

Kiểu dữ liệu của thuộc tính này : Boolean.

- Thuộc tính CommEvent :

Thuộc tính này trả lại hầu hết sự kiện hoặc lỗi truyền thông gần nhất. Thuộc tính này không có sẵn trong khi thiết kế và là chỉ đọc khi chạy chương trình. Cú pháp câu lệnh là:

[form.]Mscomm1.CommEvent

Mặc dù sự kiện OnComm được phát sinh mỗi khi có một sự kiện hay lỗi truyền thông xảy ra nhưng thuộc tính CommEvent lại chứa mã số của sự kiện hay là lỗi truyền thông đó .Như vậy để xác định xem điều gì đã xảy ra thì ta phải kiểm tra thuộc tính CommEvent .

Các lỗi truyền thông bao gồm :

Hằng số Giá trị Mô tả

comEventBreak 1001 Đã nhận được tín hiệu Break

comEventFrame 1004 Phần cứng phát hiện một lỗi khung truyền

comEventOverrun 1006 Tràn cổng .Phần cứng không thể đọc được ký tự này trước khi ký tự kế gửi đến và bị mất

comEventRxOver 1008 Tràn bộ đệm nhận .Hết chỗ trong bộ đệm nhận comEventRxParity 1009 Phần cứng phát hiện ra một lỗi chẵn lẻ

comEventTxFull 1010 Bộ đệm truyền đầy .Bộ đệm truyền bị đầy khi cố đưa thêm ký tự vào hàng đợi

comEventDCB 1011 Một lỗi xuất hiện ở bộ điều khiển dữ liệu(Data Control Block) cuûa port

Các sự kiện truyền thông bao gồm:

Hằng số Giá

trị Mô tả

ComEvSend 1 Có ít hơn số ký tự định bởi SThreshold trong bộ đệm truyeàn

comEvReceive 2 Đã nhận số ký tự bằng với số ký tự định bởi Rthreshold .Sự kiện này được phát ra liên tục cho đến khi ta dùng thuộc tính Input để chuyển dữ liệu khỏi bộ đệm nhận . ComEvCTS 3 Có sự thay đổi trên đường CTS

ComEvDSR 4 Có sự thay đổi trên đường DSR .Sự kiện này chỉ phát sinh khi DSR chuyển từ 1 về 0

ComEvCD 5 Có sự thay đổi trên đường CD (Carrier Detect)

ComEvRing 6 Phát hiện tiếng chuông (gọi). Một số vi mạch UART không hỗ trợ việc này.

ComEvEOF 7 Ký tự EOF (Mã ASCII 26) được nhận.

Kiểu dữ liệu của thuộc tính này : Integer - Thuộc tính InputLen :

Đặt và trả lại số ký tự mà thuộc tính Input đọc được từ bộ đệm nhận .Giá trị mặc định của thuộc tính này là bằng 0 .Đặt InputLen =0 để điều khiển truyền thông đọc hết nội dung bộ đệm nhận .Cú pháp câu lệnh như sau :

[form.] Mscomm1.InputLen [=numchars%]

Thuộc tính này rất có hữu ích khi đọc dữ liệu từ các máy có lối ra được định dạng cố định về chiều dài khối dữ liệu .

Kiểu dữ liệu của thuộc tính này : Integer - Thuộc tính ParityReplace:

Đặt và trả lại ký tự dùng thay thế ký tự không hợp lệ trong dòng dữ liệu khi lỗi chẵn lẻ xảy ra .Cú pháp :

[form.]Mscomm1.ParityReplace [=char$]

Bit chẵn lẻ là bit được truyền cùng với các bit dữ liệu và được dùng cho việc kiểm tra lỗi .Khi dùng bit chẵn lẻ ,điều khiển truyền thông sẽ cộng tất cả các bit có giá trị bằng 1 và kiểm tra tổng số các bit đó xem là chẵn hay lẻ (tương ứng với việc xác lập bit chẵn lẻ khi mở cổng ) .Theo mặc định ,điều khiển dùng dấu chấm hỏi (?) để thay thế các ký tự không hợp lệ .Đặt ParityReplace là “ “ để bỏ khả năng thay thế ký tự khi lỗi chẵn lẻ xuất hiện .Sự kiện OnComm vẫn được phát sinh và thuộc tính CommEvent được đặt thành comEventRxParity .

Kiểu dữ liệu của thuộc tính này : String

- Thuộc tính Rthreshold:

Đặt và trả lại số ký tự sẽ nhận trước khi điều khiển Mscomm1 đặt thuộc tính comEvent thành comEvReceive và phát sinh sự kiện OnComm .Cú pháp :

[form.] Mscomm1.Rthreshold [=numchar%]

Xác lập bằng 0 để làm mất khả năng phát sinh sự kiện OnComm khi nhận các ký tự .Xác lập bằng 1,chẳng hạn, để làm phát sinh sự kiện OnComm mỗi khi có 1 ký tự được nhận vào bộ đệm nhận

Kiểu dữ liệu của thuộc tính này : Integer

♣♣

♣♣ Hàm ComInput:

Trả lại và xóa chuỗi ký tự ở bộ đệm nhận .Cú pháp như sau :

ComInput(ByVal hwnd As Integer ,LpData as Any ,ByVal do Data as Integer ) As Integer

Hàm này tương tự như thuộc tính Input nhưng trả lại số byte nhận được .

♣ Hàm ComOutput:

Viết một chuỗi ký tự vào bộ đệm truyền .Cú pháp như sau :

ComOutput(ByVal hwnd As Integer ,LpData as Any ,ByVal do Data as Integer ) As Integer

Hàm này tương tự như thuộc tính Output nhưng trả lại số byte ký tự được gửi đi c) Sự kiện Oncomm:

Sự kiện OnComm được phát sinh vào bất cứ khi nào giá trị của thuộc tính CommEvent thay đổi . Cú pháp sự kiện :

Thuộc tính CommEvent chứa mã số của lỗi hay sự kiện phát sinh bởi sự kiện OnComm. Nếu đặt các thuộc tính Rthreshold hoặc SThreshold bằng 0 sẽ vô hiệu bẫy sự kiện Receive và Send .

d) Hỏi vòng ở cổng RS-232

Thường khi làm việc với điều khiển Mscomm1, ta dùng phương pháp điều khiển theo sự kiện .Nhưng ta cũng có thể sử dụng kỹ thuật hỏi vòng để thông tin qua cổng RS-232. Chương trình ví dụ sau đây sử dụng COM2 để gửi thông báo “Hello”

và sau đó chờ chuỗi nhận. Kỹ thuật này quy định là sẽ nhận được đáp ứng bằng cách kiểm tra liên tục số các ký tự nhận được trong bộ đệm nhận (InBufferCount). Khi có nhiều hơn một ký tự trong bộ đệm lối vào thì ký tự này sẽ được đọc. Chương trình như sau :

Private Sub Form_Load()

Dim Str as String ‘chuỗi để chứa dữ liệu nhập Mscomm11.ComPort =1 ‘duứng COM1

Mscomm11.Settings=”9600 ,N ,8 ,1” ‘9600 baud ,khoâng ‘parity ,8 bits data ,1 ‘stop bit

Mscomm11.InputLen=0 ‘đọc hết bộ đệm lối vào khi Input đã được duứng

Mscomm11.PortOpen=True ‘mở cổng Text1.text=”Sending : Hello”

Mscomm11.Output=”Hello” ‘gửi thông báo Do ‘chờ đáp ứng từ cổng

DoEvents

Loop Until Mscomm11.InBufferCount>=2 Str = Mscomm11.Input ‘đọc bộ đệm Input Text2.Text=”Received:” +Str

Mscomm11.PortOpen=False ‘đóng cổng nối tiếp End Sub

e) Các thông báo lỗi (Error Messages Code)

Số lỗi Mô tả Số lỗi Mô tả

380 Giá trị thuộc tính không hợp lệ 8009 Lỗi ở các thông số mặc định 383 Thuộc tính là chỉ đọc,

comSetNotSupport 8010 Phần cứng không sẵn dùng (bị khóa bởi thiết bị khác) 394 Thuộc tính là chỉ đọc,

comGetNotSupport 8011 Không thể định vị được hàng đợi (queues)

8000 Tác động không hợp lệ lên cổng đã

mở 8012 Cổng chưa mở

8001 Giá trị timeout cần phải lớn hơn Zero 8013 Cổng đã mở rồi 8002 Số cổng không hợp lệ 8014 Không thể cho phép khai

báo(nitification)comm 8003 Thuộc tính chỉ có khi chạy chương

trình 8015 Không đặt trạng thái cho comm được

8004 Thuộc tính là chỉ đọc khi chạy chương

trình 8016 Không đặt mặt nạ sự kiện comm được

8005 Cổng đã mở rồi 8018 Tác động chỉ hợp lệ khi cổng đã mở

8006 Số nhận dạng thiết bị là không hợp lệ

hoặc không được hỗ trợ 8019 Thiết bị bận

8007 Giá trị Baud xác định là không hợp lệ 8020 Lỗi đọc thiết bị truyền thông 8008 Kích thước byte xác định là không

hợp lệ 8021 Lỗi bên trong liên quan khối ủieàu khieồn thieỏt bũ cuỷa port

Một phần của tài liệu GIỚI THIỆU LED 7 DOẠN (Trang 79 - 87)

Tải bản đầy đủ (PDF)

(109 trang)