CỔNG SONG SONG : Là một khe gắn trên máy tính ngày nay hầu hết được tích hợp trên mainboard thường được dùng để nối với máy in printer hoặc thiết bị sử dụng cổng song khác.. Ngoài ra nó
Trang 1BỘ CÔNG THƯƠNG
TRƯỜNG ĐH CÔNG NGHIỆP HÀ NỘI
CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
ĐỒ ÁN MÔN HỌC ĐO LƯỜNG ĐIỀU KHIỂN MÁY TÍNH
Đề Số: 19 NỘI DUNG
1 Thiết kế mô hình bảng LED điện tử gồm 2 ma trận LED đơn sắc sử dụng cổng song song.
Yêu cầu:
Mạch điện tử được thiết kế trên máy tính bằng phần mềm chuyên dụng
Sử dụng PPI 8255A để ghép nối với cổng song song và điều khiển 02 ma trận led
Xây dựng 01 bảng mã font gồm các chữ hoa không dấu
Hệ thống có thể hiển thị 1 dòng chữ chạy (không dấu) bất kỳ nhập từ bàn phím máy tính
Trang 2Mục Lục
I Giới thiệu về Visual Basic 6.0
II Cổng song song
III Vào ra dữ liệu
IV Code chương trình
V Giao diện phần mềm
VI Sơ đồ nguyên lý mạch
VII.Nguyên lý hoạt động
VIII Ưu điểm – Nhược điểm
IX Tài liệu tham khảo
Trang 3I GIỚI THIỆU VỀ VISUAL BASIC 6.0
Visual Basic 6.0 (VB) là một ngôn ngữ lập trình hướng đối tượng, trực quantrên môi trường Windows VB cung cấp một bộ công cụ hoàn chỉnh để đơn giản hóa việc triển khai lập trình ứng dụng, có thể nói đây là cách nhanh và tốt nhất để học và lập trình ứng dụng trên Microsoft Windows
Phần "Visual- Trực quan" đề cập đến phương pháp được sử dụng
để tạo giao diện đồ họa người dùng (GUI - Graphical User Interface)
VB có sẵn rất nhiều những bộ phận trực quan gọi là các điều khiển (Controls) mà người lập trình có thể sắp đặt vị trí và quyết định các đặc tính của chúng trên một khung giao diện màn hình, gọi là form Việc thiết kế các giao diện người dùng ứng dụng trên VB
có thể hình dung đơn giản như việc vẽ giao diện trên Word hoặc trên Paint Prush của Windows
Phần "Basic" đề cập đến ngôn ngữ BASIC (Beginners All-Purpose Symbolic Instruction Code), một ngôn ngữ lập trình đơn giản, dễ học, được viết ra cho các khoa học gia- những người không có thì giờ để học lập trình điện toán sử dụng
Visual Basic còn có hai dạng khác là Visual Basic for Application (VBA) - một ngôn ngữ nằm phía sau các chương trình Word, Excel,
VB, Project, v.v còn gọi là Macros Dùng VB trong Microsoft Office,
ta có thể làm tăng chức năng các ứng dụng bằng cách tự động hóa các chương trình Và VBScript được dùng lập trình phục vụ các tương tác trên giao diện web
Visual Basic đã có rất nhiều phiên bản, 2 phiên bản tốt nhất có thể nói đến là Visual Basic 6.0 (VB6) và Visual Basic NET (VB7 hay VB.NET) Về mặt kiến trúc, hai phiên bản này gần khác nhau hoàn toàn VB6 phát triển ứng dụng dựa trên công nghệ COM (Common Object Model)- một công nghệ rất phát triển ít nhất cho đến năm
2000 Còn VB.NET dựa trên nền tảng công nghệ NET Framework - một công nghệ hiện đại hơn và đang rất được ưa chuộng Giáo trình này chỉ đề cập đến việc sử dụng và phát triển phần mềm ứng dụng trên phiên bản VB6 (gọi tắt là VB) Bởi lẽ phiên bản này rất dễ học và phát triển Việc tìm hiểu ngôn ngữ VB.NET là rất khuyến khích cho nhưng ai đang muốn tìm cho mình một bộ công cụ phát triển chuyên nghiệp trên đa môi trường hoạt động Tuy nhiên, khi nắm chắc
những nội dung VB6 từ giáo trình này, bạn đọc đã có thể sẵn sàng tiếp cận VB.NET với tư thế rất thuận lợi
Trang 4Giao diện của VB :
II CỔNG SONG SONG :
Là một khe gắn trên máy tính (ngày nay hầu hết được tích hợp trên mainboard) thường được dùng để nối với máy in (printer) hoặc thiết bị sử dụng cổng song khác Mặc dù tốc độ truyền dữ liệu của cổng parallel chậm hơn so với các chuẩn như SCSI và IDE, nhưng do đặc điểm là rẻ tiền (được tích hợp sẵn) và dễ truy cập (có thể gắn thiết bị từ bên ngoài) nên nó thường được sủ dụng cho nhiều loại đĩa hoặc băng từ cho phép tháo lắp được (removable disk and tape drives) Ngoài ra nó còn được sử dụng rộng rãi để truyền dữ liệu giữa hai máy tính với nhau thông qua các ứng dụng truyền thông (như Direct cable connection của Windows, Laplink) và sợi cáp nối laplink Cổng song song chuẩn IEEE 1284 cung cấp khả năng truyền dữ liệu hai chiều với tốc độ cao và
hỗ trợ cáp nối với chiều dài tới 32 feet
1.Một số hình ảnh về cổng song song :
Sơ đồ chân :
Trang 5
Cổng song song ( LPT )
1 Sơ đồ cấu tạo cổng song song
+ Chức năng các chân Của cổng LPT
1 /STROBE Ra Tín hiệu thông báo có 1 byte săn sang được in
10 /ACK Vào Tín hiệu xác nhận đã nhận được 1byte của máy in với máy tính.
12 PE Vào Tín hiệu báo hết giấy của máy in
13 SLCT Vào Tín hiệu báo trạng thái sẵn sang của máy in
14 /AF Ra Tín hiệu yêu cầu nạp một dòng mớicủa máy tính đối với máy in
15 /ERROR Vào Tín hiệu thông báo lỗi của máy in với máy tính
16 INIT Ra Tín hiệu khởi động lại của máy tínhđối với máy in
17 SLCTIN Ra Tín hiệu chọn máy in của máy tính
Trang 618-25 GND Tín hiệu nối mass
- Cổng song song đựơc thiết kế đầu tiên bởi công ty Cẻntoníc nhằm mục đích ghép nối máy tính với máy in Sau nay nó được tiêu chuẩn hoá và có mặt ở hầu hết các máy tính
Cấu trúc cổng song song gồm đường dữ liệu, 4 đuờng dẫn điều khiển và 5 đường dẫn trạng thái Các đường dẫn này đều thích mức TTL ( 0;5V ) do vậy rất thuận tiện, đơn giản cho việc ghép nối vì nhiều linh kiện, mạch điện tương thích với mức logic trên
khoảng các truyền dẫn bằng công song song bi hạn chế nhiều điện dung ký sinh ( khoảng 2m ) Nếu muốn tuyền đi xa cần phải có các bộ đệm, các phương pháp làm giảm điện dung kí sinh
2 Các thanh ghi của cổng song song
Cổng song song có 3 thanh ghi chính là thanh ghi cơ sở, thanh ghi trạng thái và thanh ghi điều khiển, tuỳ theo cổng song song trang bị trên máy tính mà các thanh ghi này có địa chỉ khác nhau :
Bảng địa chỉ các cổng trên PC:
Cổng song
song thanh ghi dữ liệuĐịa chỉ thanh ghi ghi trạng tháiĐịa chỉ thanh Địa chỉ thanh ghiđiều khiển
Trang 7Định dạng các thanh ghi:
a Thanh ghi dữ liệu (hai chiều):
b Thanh ghi trạng thái máy in (chỉ đọc)
Tín hiệu
máy in BUSY /ACK PAPEREMPTY SELECT /ERROR /IRQ x x
Số chân
-c Thanh ghi điều khiển
Tín
hiệu
máy in
x x DIR IRQ
Enable /SELECTIN /INIT /AUTOFEED /STROBE Số
chân
cắm
IRQ Enable: Yêu cầu ngắt cứng; 1: cho phép, 0: không cho phép
Chân BUSY được nối với cổng đảo trước khi đưa vào thanh ghi trạng thái, các bit /SELECTIN, /AUTOFEED và /STR được đưa vào cổng đảo trước khi đưa ra các chân của cổng máy in
Thông thường tốc độ xử lý dữ liệu của các thiết bị ngoại vi như máy in chậm hơn
PC rất nhiều nên các đường /ACK, BUSY và /STR được sử dụng cho kỹ thuật bắt tay Khởi đầu, PC đặt dữ liệu lên bus sau đó kích hoạt đường /STR xuống mức thấp
để thông tin cho máy in biết dữ liệu đã ổn định trên bus Khi máy in xử lý xong dữ liệu, nó sẽ trả lại tín hiệu /ACK xuống mức thấp để ghi nhận PC đợi cho đến khi đường BUSY từ máy in xuống thấp (máy in không bận) thì sẽ đưa tiếp dữ liệu lên bus
Trang 8III VÀO RA DỮ LIỆU VỚI 8255
D0 – D7 : Bus dữ liệu
Reset : Cho phép khởi tạo trạng thái ban đầu cho vi mạch /CS (Chip Select): Tín hiệu chọn vi mạch
/RD (read) : Tín hiệu cho phép đọc
/WR (Write) : Tín hiệu cho phép ghi
A0 – A1 :Tín hiệu địa chỉ
PA7 – PA0 : Cổng A
PB7 – PB0 : Cổng B
PC7 – PB0 : Cổng C
PHẦN GHÉP NỐI VỚI VI XỬ LÝ
Trang 9Hình 3: Sơ đồ khối vi mạch 8255A
PHẦN GHÉP NỐI VỚI THIẾT BỊ NGOÀI
Đệm
dữ
liệu
Điều khiển nhóm A
Cửa A (8bit)
Cửa C nửa thấp (4 bit)
Điều khiển nhóm B
Cửa B (8bit)
Cửa C nửa cao (4 bit)
A0
RD
A1
Reset
WR
8 I/O
PA0 – PA7
4 I/O
PC0 – PC4
4 I/O
PC3 – PC0
4 I/O
PB7 – PB0
Trang 10Phần ghép nối với thiết bị ngoài bao gồm:
- Cổng A: Thanh ghi đệm dữ liệu (8bit) vào/ra tùy theo chương trình khởi phát
- Cổng B: Thanh ghi đệm số liệu (8bit) vào ra tùy theo chương trình khởi phát
- Cổng C: nửa cao (4 bit)
- Cổng C: Nửa thấp (4 bit)
Tùy theo chế độ sử dụng ghi bởi từ điều khiển cổng C có thể được dùng:
- Trao đổi dữ liệu vào hoặc ra
- Điều khiển hoặc đối thoại với thiết bị ngoài và VXL khi cổng A và B ở chế độ
1 và 2
Chân 27 đến 34 (D0 – D7): là các đường dữ liệu (data) hoạt động hai chiều, dẫn tín
hiệu điều khiển từ vi xử lý ra các thiết bị bên ngoài đồng thời nhận các dữ liệu từ các thiết bị điều khiển bên ngoài vào vi xử lý
Chân 35 (Reset input): ngõ vào xóa, chân reset phải được nối với tín hiệu reset out
của vi xử lý để không làm ảnh hướng đến mạch điều khiển Khi reset, các cổng của 8255A là các ngõ vào, đồng thời tất cả các dữ liệu trên thanh ghi bên trong 8255A đều
bị xóa, 8255A trở về trạng thái ban đầu săn sàng làm việc
Chân 6 (CS\): tín hiệu ngõ vào chip select (CS\) được điều khiển bởi vi xử lý, dùng để
lựa chọn 8255A làm việc khi vi xử lý giao tiếp với nhiều thiết bị
Chân 5 (RD\): ngõ vào đọc dữ liệu (Read Input).
Chân 36 (WR\) : ngõ vào ghi dữ liệu (Write Input).
Chân 8,9 (A1, A0): ngõ vào địa chỉ (Address Input), dùng nhận địa chỉ vào để lựa
chọn thanh ghi và các cổng
Bảng địa chỉ lựa chọn thanh ghi và các cổng:
A0 A1 Cổng và các thanh ghi
1 1 Thanh ghi điều khiển
Chân 26 (Vcc) : nguồn 5 VDC.
Chân 7 (GND) : GND 0 VDC
Tính linh hoạt của vi mạch thể hiện ở khả năng lập trình Qua một thanh ghi điều khiển, người sử dụng xác định chế độ hoạt động và cổng nào cần được sử dụng như là lối vào hoặc lối ra Các chân ra D0 D7 tạo nên bus dữ liệu hai chiều có độ rộng là 8 bit 8255 được chọn bởi tín hiệu mức thấp ở ngõ vào chọn chíp CS\ Khi 8255 không được chọn, bộ đệm bus dữ liệu nối 8255 với hệ thống được thả nổi Khi được chọn, các ngõ vào A0
Trang 11và A1 được dùng để chọn thanh ghi điều khiển hoặc một trong các cổng vào/ra để trao đổi dữ liệu Các hoạt động cơ bản của 8255 được tóm tắt trong bảng sau:
L L L H L Port A >>Bus dữ liệu
L H L H L Port B >> Bus dữ liệu
H L L H L Port C >> Bus dữ liệu
L L H L L Bus dữ liệu - Port A
L H H L L Bus dữ liệu - Port B
H L H L L Bus dữ liệu - Port C
H H H L L Bus dữ liệu - Từ điều khiển
x x x x H Bus dữ liệu ở trạng thái Hi - Z
x x H H L Bus dữ liệu ở trạng thái Hi - Z
* Các trạng thái làm việc của 8255:
Qua bảng trạng thái của 8255, ta thấy thanh ghi điều khiển đặt dưới địa chỉ bên trong
là A1 = [1], A0 = [1] Trong một chu kỳ ghi lên thanh ghi điều khiển, xác định cổng vào/ra cũng như chế độ hoạt động Khi chân RESET ở mức [H], thanh ghi điều khiển
sẽ được đặt lại và định nghĩa toàn bộ 24 đường dẫn như là các ngõ vào.Trạng thái này kéo dài tới khi chương trình ứng dụng viết từ điều khiển vào thanh ghi điều khiển để xác định chế độ làm việc của 8255
Các cổng A, B, C được phân thành hai nhóm Nhóm A gồm cổng A và nửa cao của cổng C, nhóm B gồm cổng B và nửa thấp còn lại của cổng C Có 3 chế độ hoạt động khác nhau:
- Chế độ 0: vào/ra thông thường
- Chế độ 1: chốt vào/ra
- Chế độ 2: bus hai chiều
Chế độ 0:
Từ điều khiển:
Chế độ 0 xác lập hai cổng 8 bit (A và B) và hai cổng 4 bit (nửa cao và nửa thấp của C) Bất kỳ cổng nào cũng có thể nhập hoặc xuất dữ liệu một cách độc lập tùy theo các bit D4, D3, D1 và D0 Có 24 = 16 khả năng vào/ra trong chế độ này
Cấu trúc từ điều khiển:
Trang 12Sơ đồ kết nối giữa IC 8255 với cổng máy in :
Trang 13Sơ đồ kết nối máy in
Vì 8255 được khởi tạo làm việc ở Mode 1 : Port A nhập dữ liệu Port B xuất dữ liệu nên khi máy tính gởi tín hiệu STROBE đến 8255, yêu cầu 8255 nhận dữ liệu do máy tính gởi đến và khi 8255 nhận dữ liệu thì nó tạo ra một tín hiệu ở PC5 đưa qua ACK báo cho máy tính biết là 8255 đã nhận dữ liệu do máy tính gởi đến, đồng thời lúc đó ở PC3 của 8255 tạo tín hiệu INTRA tác động đến chân ngắt INT1 (pin 13) của 8051 làm cho 8051 chạy chương trình phục vụ ngắt và dữ liệu từ máy tính qua 8255 sẽ được gởi đến CPU để xử lý
IV CODE CHƯƠNG TRÌNH
Option Explicit
Dim Toc_do As Integer
Trang 14Dim string_tran As String
Private Index_scan, i, pi As Long
Private start As Boolean
Private Quyet_ma As Boolean
Private Sub About_Click()
MsgBox " this program receve a string and send to led matrix thoulgh ic 8255" End Sub
Private Sub cmdexit_Click()
End
End Sub
Private Sub cmdStartStop_Click()
If Me.Timer1.Enabled = False Then
Me.Timer1.Enabled = True
Else: Me.Timer1.Enabled = False
End If
End Sub
Private Sub cmdtrans_Click()
Quyet_ma = True
get_code
State = Not State
start = True
pi = 0
i = 1
Me.Timer1.Enabled = True
Call add_code(0, 0, 0, 0, 0, 0, 0, 0)
End Sub
Private Sub get_code()
Dim i As Integer
string_tran = Me.Text1.Text
string_tran = UCase(string_tran)
Index_array_code = 0
i = 1
Do While (i < Len(string_tran) + 1)
Dim char_test As String
char_test = Mid(string_tran, i, 1)
Select Case (char_test)
Case ("A")
Call add_code(31, 40, 72, 136, 72, 40, 31, 0)
Trang 15Case ("B")
Call add_code(255, 145, 145, 145, 113, 18, 12, 0) Case ("C")
Call add_code(60, 66, 129, 129, 129, 2, 0, 0) Case ("D")
Call add_code(255, 129, 129, 129, 66, 60, 0, 0) Case ("E")
Call add_code(255, 145, 145, 145, 145, 129, 0, 0) Case ("F")
Call add_code(255, 144, 144, 144, 144, 128, 0, 0) Case ("G")
Call add_code(60, 66, 129, 137, 137, 15, 0, 0) Case ("H")
Call add_code(255, 16, 16, 16, 16, 255, 0, 0)
Case ("I")
Call add_code(129, 129, 129, 255, 129, 129, 129, 0) Case ("J")
Call add_code(2, 129, 129, 254, 128, 128, 0, 0) Case ("K")
Call add_code(255, 24, 36, 66, 129, 1, 0, 0)
Case ("L")
Call add_code(255, 1, 1, 1, 1, 1, 0, 0)
Case ("M")
Call add_code(255, 64, 32, 16, 32, 64, 255, 0) Case ("N")
Call add_code(255, 96, 16, 8, 6, 255, 0, 0)
Case ("R")
Call add_code(255, 152, 148, 146, 97, 0, 0, 0) Case ("O")
Call add_code(126, 129, 129, 129, 129, 126, 0, 0) Case ("P")
Call add_code(255, 144, 144, 144, 144, 96, 0, 0) Case ("S")
Call add_code(97, 145, 145, 145, 146, 12, 0, 0) Case ("Q")
Call add_code(126, 129, 129, 137, 133, 126, 1, 0) Case ("U")
Call add_code(252, 2, 1, 1, 1, 2, 252, 0)
Case ("V")
Call add_code(248, 4, 2, 1, 2, 4, 248, 0)
Case ("T")
Call add_code(128, 128, 128, 255, 128, 128, 128, 0) Case ("X")
Call add_code(195, 36, 24, 24, 36, 195, 0, 0)
Case ("W")
Call add_code(252, 3, 4, 24, 4, 3, 252, 0)
Trang 16Case ("Z")
Call add_code(131, 133, 137, 145, 161, 193, 0, 0)
Case ("Y")
Call add_code(192, 32, 16, 15, 16, 32, 192, 0)
Case (" ")
Call add_code(0, 0, 0, 0, 0, 0, 0, 0)
Case Else
End Select
i = i + 1
Loop
End Sub
Private Sub Exit_Click(Index As Integer)
End
End Sub
Private Sub Form_Load()
State = False
i = 1
pi = 0
Portaddress = &H378
Out &H378 + 2, 4
Out &H378, 128
Out &H378 + 2, 5
Out &H378 + 2, 4
End Sub
Public Sub add_code(b1 As Byte, b2 As Byte, b3 As Byte, b4 As Byte, b5 As Byte, b6
As Byte, b7 As Byte, b8 As Byte)
Arraycode(Index_array_code + 0) = b1
Arraycode(Index_array_code + 1) = b2
Arraycode(Index_array_code + 2) = b3
Arraycode(Index_array_code + 3) = b4
Arraycode(Index_array_code + 4) = b5
Arraycode(Index_array_code + 5) = b6
Arraycode(Index_array_code + 6) = b7
Arraycode(Index_array_code + 7) = b8
Index_array_code = Index_array_code + 8
End Sub
Private Sub Quyet()
If (pi < 16) Then
Out Portaddress + 2, 0
Out Portaddress, 0
Out Portaddress + 2, 1