CHƯƠNG V: Giao Tiếp Máy Tính Với Vi Xử Lý I Truyền nhận qua cổng nối tiếp : Việc truyền nhận qua cổng nối tiếp thực UART Nguyên tắc cho chip UART hoạt động sau: Để truyền ký tự, ký tự đưa vào ghi đợi truyền ( Transmit Holding Register ), sau đưa qua ghi dòch phát ( transmit Shift Register ) Sau ký tự trước truyền xong, bit ký tự đươcï truyền dòch vào kênh liệu Khi nhận ký tự, bit nạp vào ghi dòch thu ( Transmit Shift Register), sau chúng đưa vào ghi liệu thu ( Receive Data Register ) sau loại bỏ bit start, stop, parity Để thực việc truyền liệu qua cổng nối tiếp ta phải thực bước sau: o Chọn cổng truyền Com 1, hay Com Đòa Com thường 3F8H, Com 2E8H Đối với số loại máy tính đòa cổng Com vào BIOS để set lên, nên viết chương trình truyền cần vào BIOS để xem đòa cổng Com cụ thể Nếu ta chọn COM 3F8 H, Com 2F8 H đòa ghi khác là: Thanh ghi Data register Interrupt enable register Interrupt identification register Line control register Modem control register Line status register Modem control register o Đặt tốc độ baud Đòa Com 3F8H 3F9H 3FAH 3FBH 3FCH 3FDH 3FEH Đòa Com 2F8H 2F9H 2FAH 2FBH 2FCH 2FDH 2FEH o Đặt cấu hình truyền : data bit, stop bit, parity (em chọn bit data, bit stop, parity) o Cho phép ngắt sử dụng Để thực việc truyền liệu trước hết phải khởi động cổng COM, sau thực việc truyền phát với chương trình truyền phát trình bày dược viết theo kiểu API: o Chương trình khởi động cổng COM: Chọn Com với đia 2F8H để thực việc truyền liệu Cần ý đến Bit DLAB (………………………………………………………………………….) const pathsl ='c:\my documents\delphi\'; com2=$2F8; Reg2F8=com2+0; Reg2F9=com2+1; Reg2FA=com2+2; Reg2FB=com2+3; Reg2FC=com2+4; Reg2FD=com2+5; (………………………………………………………………………….) procedure Tform2.Initcom; begin xuat(Reg2FB,$80);{DLAP=1} xuat(Reg2F8,$30);{baudrate=2400} xuat(Reg2F9,$00);{khong su dung ngat} xuat(Reg2FB,$03);{8 bit data, bit stop, no parity} end; (………………………………………………………………………….) o Nhập liệu với hàm nhập viết pascal (………………………………………………………………………….) function Tform2.nhap(addr:word):byte; var TEMP : byte; begin asm PUSH Ax PUSH DX MOV DX,addr IN AL,DX MOV TEMP,AL POP AX POP Dx end; (………………………………………………………………………….) Xuất liệu với hàm xuat: (………………………………………………………………………….) procedure Tform2.xuat(addr:word;data:byte); begin asm PUSH AX PUSH DX MOV DX,addr MOV AL,DATA OUT DX,AL POP AX POP DX end; end; (………………………………………………………………………….) o Trong việc truyền liệu sử dụng tín hiệu RTS, CTS … cần phải viết chương trình cho chúng Trong việc truyền tín hiệu cho đề tài em có sử dụng tín hiệu RTS, viết sau: (………………………………………………………………………….) o procedure Tform2.setRTS; var a: byte; begin a:=nhap(Reg2FC); a:=a or $02; xuat(Reg2FC,a); end; procedure Tform2.RESETRTS; var a : byte; begin a:=nhap(Reg2FC); a:=a and $FD; xuat(Reg2FC,a); end; (………………………………………………………………………….) Có hai phương pháp để điểu khiển việc thu phát liệu qua UART: phương pháp hỏi vòng phương pháp tạo trình điều khiển tạo ngắt Phương pháp hỏi vòng chờ liệu nhận xong phát xong, tốc độ chậm khoảng 34.8 Kbps o Phát ký tự: Với phương pháp hỏi vòng, gởi ký tự ta phải kiểm tra xem ghi đợi truyền có rỗng hay không cách xem Bit ghi LSR ( Line Status Register ) có hay không Chương trình viết cụ thể Delphi 5.0 sau: (…………………………………………………………) repeat test3:=nhap(Reg2FD); application.ProcessMessages; until (test3 and $40)=$40; xuat(Reg2F8,t); (…………………………………………………………) o Để thu ký tự : Để biết có ký tự vào hay chưa kiểm bit ghi LSR ( Line Status Register ) Nếu ‘1’ có ký tự nhận vào Với chương trình cụ thể viết sau: (………………………………………………………………………….) repeat begin test6:=nhap(Reg2FD); test6:=test6 and $01; end; until (test6=$01); (………………………………………………………………………….) Tuy nhiên ta sử dụng nhũng cách khác để thực việc truyền liệu với phương pháp đơn giản giải thuật Sau phương pháp sử dụng mà em tham khảo giáo trình Lập trình ghép nối máy tính Windows tác giả Ngô Diên Tập Để thực việc mở cổng Com ta việc gõ lệnh đơn giản OpenCom(pchar(‘còm:9600,N,8,1’)); Để truyền liệu đi: SendByte(); Để nhận liệu về: Temp:=ReadByte; Xuất trực tiếp đường dẫn DTR(); RTS(); … Dể thực nhũng lệnh Delphi phải có tệp tin tài nguyên hỗ trợ có tên port.dll tác giả cung cấp Sau ta phải soạn unit (được dẫn rõ giáo trình) để giúp Delphi nhận tài nguyên Hơi rắc rối tý mà bù lại ta gặp nhiều thuận lợi lập trình Trong luận văn này, em sử dụng phương pháp khác dùng MSComm Phương pháp lập trình đơn giản hỗ trợ mạnh nhiều người sử dụng Trong Visual Basic MSComm nhà lập trình cung cấp sẵn Còn Delphi muốn sử dụng ta phải” dùng ké” tài nguyên VB cách copy têp tin “mscom.ocs” vào system Window sau vào Component Delphi để khai báo Về phương pháp khai báo sử dụng đươc trình bày cụ thể phần phụ lục em II Các phương pháp kết nối : Kết nối máy tính với Kit vi xử lý: Khi máy tính giao tiếp với kít vi xử lý ta dùng RS-232 đủ , cho phép chuyển đổi từ +12V đến +5V phù hợp với nguồn cung cấp cho kit vi xử lý Nhưng điểm hạn chế phương pháp khoảng cách truyền ngắn , tối đa 15 m Biểu diễn giao tiếp hình : RS-232 Kit vi xử lý Kết nối máy tính với N (tối đa N=32) kít vi xử lý : Để kết nối máy tính với nhiều vi xử lý phải thực bước chuyển đổi sau : o Chuyển đổi từ chuẩn RS-232 sang RS-485 để truyền tín hiệu khoảng cách lớn khoảng 1.2km o Chuyển đổi từ RS-485 sang RS-485 sang TTL để phù hợp với áp vào vi xử lý Mức điện áp: o RS-232 truyền theo kiểu không cân ( áp lệch so với đất ) o RS-485 truyền theo kiểu cân ( điện áp sai lệch hai dây) o RS-232 : -3V -12V : mức logic +3V +12V :mức logic o RS-485 : VA –Vb = -1.5V -5V : mức logic VA –VB= +1.5V+5V : mức logic Hình vẽ minh họa : RS232/RS485 RS-485 Kít vi xử lỳ RS-485 Kít vi xử lý ... nối : Kết nối máy tính với Kit vi xử lý: Khi máy tính giao tiếp với kít vi xử lý ta dùng RS-232 đủ , cho phép chuyển đổi từ +12V đến +5V phù hợp với nguồn cung cấp cho kit vi xử lý Nhưng điểm... cách truyền ngắn , tối đa 15 m Biểu diễn giao tiếp hình : RS-232 Kit vi xử lý Kết nối máy tính với N (tối đa N=32) kít vi xử lý : Để kết nối máy tính với nhiều vi xử lý phải thực bước chuyển... RS-4 85 để truyền tín hiệu khoảng cách lớn khoảng 1.2km o Chuyển đổi từ RS-4 85 sang RS-4 85 sang TTL để phù hợp với áp vào vi xử lý Mức điện áp: o RS-232 truyền theo kiểu không cân ( áp lệch so với