intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Ghi chép sơ lược về giao tiếp với máy tính qua cổng COM với VĐK PIC

Chia sẻ: Le Van Dat | Ngày: | Loại File: PDF | Số trang:7

141
lượt xem
14
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nhằm giúp các bạn chuyên ngành Công nghệ thông tin có thêm tài liệu phục vụ nhu cầu học tập và nghiên cứu, mời các bạn cùng tham khảo tài liệu "Ghi chép sơ lược về giao tiếp với máy tính qua cổng COM với VĐK PIC" dưới đây. Nội dung tài liệu trình bày về phần cứng, phần mềm, phần mềm trên PIC firmware.

Chủ đề:
Lưu

Nội dung Text: Ghi chép sơ lược về giao tiếp với máy tính qua cổng COM với VĐK PIC

  1. Ghi chép Sơ lược về giao tiếp với máy tính qua cổng COM với VĐK PIC Duy Thái wonbinbk@gmail.com
  2. Duy Thái – giao tiếp PC với PIC I. Phần cứng: Phần cứng đơn giản là mạch vi điều khiển PIC hỗ trợ UART (ví dụ PIC 16F877A), có đầy đủ bộ dao động, nguồn, mạch reset,…, cổng COM cắm board và IC chuyên dụng hỗ trợ RS232 (MAX232A). Ghi chép này chỉ bàn về giao tiếp đồng bộ (Synchronous – không có bắt tay) nên cổng COM chỉ cần sử dụng 3 chân Rx,Tx và GND là đủ. II. Phần mềm: Trên máy tính, chúng ta dùng Visual Basic (VB) để viết giao tiếp. VB hỗ trợ Component (module add-in) Mscomm. Component này không enabled mặc định. Để sử dụng, trong VB, nhấn Ctrl + T (Project -> Components), kéo chuột xuống, và tick vào Microsoft Comm Control 6.0. Trang 2 / 7
  3. Duy Thái – giao tiếp PC với PIC Nhấn OK, ngoài thanh công cụ xuất hiện thêm một icon . Tiếp theo, add 1 Mscomm vào Form. Nó tự động có tên, chẳng hạn Mscomm1. Mscomm1 có những properties sau đây: • CommPort: 1 = Sử dụng COM 1. • Handshaking: 0- comNone = Không dùng bắt tay. • InBufferSize: 1024 = Bộ đệm nhận (để càng lớn thì càng tốt). • InputLen: =chiều dài (tính bằng Byte) của giá trị gán cho Input Property. (ví dụ: =1 , data=mscomm1.input (data là số Int hoặc Str). Nếu InputLen =0: Input sẽ có chiều dài bằng số byte hiện có trong Buffer. Thường do VĐK chỉ có thể send 1 Byte mỗi đợt nên thường set thuộc tính này bằng 1. • InputMode: 0 = Text mode, byte nhận được chuyển sang ASCII tương ứng trước khi gán. 1 = Binary mode. • OutBufferCount: số Byte đang nằm chờ gửi đi trong Buffer. • OutBufferLen: chiều dài Buffer tính theo Byte. Trang 3 / 7
  4. Duy Thái – giao tiếp PC với PIC • Rthreshold: số Byte phải nhận trước khi Mscomm1 tạo ra 1 event (là event OnComm, khi đó CommEvent = comEvRcv). Có thể hiểu là “số Byte phải nhận trước khi Mscomm1 tạo ra 1 ngắt, ngay khi có ngắt, VB nhảy vào làm việc ở event OnComm. • Sthreshold: tương tự Rthreshold nhưng là dành cho Xmit module. Nó là số Byte nhỏ nhất có thể truyền đi trong bộ đệm truyền trước khi Mscomm1 tạo ra event OnComm, CommEvent=ComEvSend. Thường cái này ít khi sử dụng, không cần quan tâm đến nó cũng có thể send data to PIC. • Settings: set Frame truyền. Có dạng sau: Settings=”BBBB,P,D,S” với BBBB là BaudRate(110,300,600,1200,2400,4800,9600(default),14400,19200,2880 0,38400,56000,115200, 128000,256000) ; P là Parity bits (Even,Mark,None,Odd,Space); D là số data bits (4,5,6,7,8 (default)); S là Stopbits (1,1.5,2). Để sử dụng Component Mscomm này đọc data từ VĐK, ta thực hiện theo trình tự sau: Trong Form_load(): Dim Sinput as String ‘ Ki tu nhan vao Mscomm1.settings=9600,N,8,1 Mscomm1.commPort=1 Mscomm1.PortOpen = 1 Mscomm1.rthreshold=1 Mscomm1.inbuffersize=1024 Vừa rồi là đoạn khởi tạo Port. Sau đó, bất cứ khi nào có Event OnComm, chương trình sau đây được thực hiện: Trong mscomm1_OnComm(): If mscomm1.commEvent = ComEvReceive then sInput = mscomm1.Input Trang 4 / 7
  5. Duy Thái – giao tiếp PC với PIC label1.caption = label1.caption + sInput ‘hiên thị những gì nhận được lên Form. End If Nếu muốn gửi data cho VĐK, thí dụ đang ở trong Command1_click(): Mscomm1.output = data_to_be_send ‘lưu y’ : ví dụ data_to_be_send=’A’ kiểu String, thì PIC nhận được mã ASCII của ‘A’ (chẳng hạn 0d123). Ở chỗ này hay bị nhầm lẫn. Trang 5 / 7
  6. Duy Thái – giao tiếp PC với PIC III. Phần mềm trên PIC (firmware): Sử dụng Compiler CCS C với những lệnh hỗ trợ sẵn, ta không cần quan tâm nhiều đến phần cứng của PIC (Registers, Protocol,…) mặc dù như vậy có vẻ không chuyên nghiệp. CCS C không hỗ trợ tác động đến thanh ghi một cách rõ ràng như HT-PICC, mặc dù vẫn có thể làm được. Để tác động đến thanh ghi, ta khai báo #locate tên_thanh_ghi địa chỉ thanh ghi. Tên thanh ghi không cần giống trong datasheet cũng được, địa chỉ thanh ghi thì bắt buộc phải giống. Ví dụ: khai báo PORTA: #locate PORTA=0x80, sau khi khai báo rồi, thay vì gõ lệnh dài dòng output_a(0xFF);, ta chỉ cần PORTA=0xFF; Như vậy rõ ràng là tiện và quen thuộc với người từng dùng ASM. Nếu cần, có thể #locate nhiều thanh ghi của con PIC nào đó, lưu lại với tên 16F877A_regs.h, từ lần sau trở đi, chỉ cần #include là thoải mái tác động đến thanh ghi. Sau đây là code ví dụ đơn giản. #include #fuses HS, NOWDT,PUT,NOLVP,NODEBUG,NOBROWNOUT #use delay(clock=20000000) //bắt buộc phải có Directive này trước… #use rs232(baud=115200,xmit=PIN_C6,rcv=PIN_C7) //…rồi mới viết Directive này. Directive này thiết lập PIC trong chế độ baud bao nhiêu, chân xmit va rcv, có thể có databits, stopbit,…nhưng ít khi cần. /* Khai báo biến*/ Int Input; Int num; Void main (void) { Num=123; Set_tris_c(0x80); Printf(“/n/r Hello World, this is Wonbinbk from VIETNAM”); Printf(“/n/r This is the number %d”,num); Printf(“/n/r Type in a key, just one key a time, man!”); While(1) { Input=Getc(); //waiting for a key input from PC, then assign it to Input. Printf(“/n/r You typed %c, didn’t you?”,input); } } Nếu dùng ngắt nhận, ta không cần chờ trong loop, mà có thể làm việc khác. #include #fuses HS, NOWDT,PUT,NOLVP,NODEBUG,NOBROWNOUT Trang 6 / 7
  7. Duy Thái – giao tiếp PC với PIC #use delay(clock=20000000) #use rs232(baud=115200,xmit=PIN_C6,rcv=PIN_C7) Int input; #INT_RDA Void ngat_232(void) { Input=getc(); Printf(“/n/rYou typed %c,didn’t you?”,input); } Void main(void) { Set_tris_c(0x80); Enable_interrupts(INT_RDA); Enable_interrupts(GLOBAL); While(1) { Do_Something_else(); // blah,blah,blah… } } Thông tin thêm về các hàm, các lệnh hỗ trợ, đặc biệt lệnh printf() có thể đọc kỹ trong Help của CCSC 3.249 (newest version). Trang 7 / 7
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0