![]() |
|
Tài trợ cho PIC Vietnam |
Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển... |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#23 |
Đệ tử 2 túi
Tham gia ngày: Oct 2007
Bài gửi: 42
: |
Em đang làm giao tiếp RS232 sử dụng C#. Nhưng chương trình không xử lý lệnh serialport1.close(). Mong mọi người chỉ giáo.
Đây là code C#. Code:
using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace viduRS232 { public partial class Form1 : Form { public string s; public ArrayList arr = new ArrayList(); public int id; public Form1() { InitializeComponent(); id = 0; } private void Form1_Load(object sender, EventArgs e) { serialPort1.Close(); } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { this.Invoke(new EventHandler(display)); } private void display(object sender, EventArgs e) { int flag; int c; c = serialPort1.ReadChar(); //string s1 = ""; s = ""; flag = 0; if (c == 's') { flag = 1; while (flag == 1) { c =serialPort1.ReadChar(); if (c == 'S') { //textBoxdisplay.Text = s1; flag = 0; } else s += Convert.ToChar(c); } arr.Add(s); id++; if (id == 2) { serialPort1.Write("S"); } //serialPort1.Write("s"); //this.textBoxdisplay.Text = s; } } private void buttonRead_Click(object sender, EventArgs e) { try { serialPort1.Open(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } serialPort1.DataReceived +=new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived); serialPort1.Write("s"); //id = 1; //while (id == 1) ; } private void buttonClose_Click(object sender, EventArgs e) { //this.Dispose(); //this.serialPort1.Close(); this.Close(); } private void buttondisplay_Click(object sender, EventArgs e) { this.textBoxdisplay.Text = Convert.ToString(arr[0]); this.textBox1.Text = Convert.ToString(arr[1]); this.textBox2.Text = Convert.ToString(id); //serialPort1.Write("s"); this.serialPort1.Close(); } } } Code:
#include <18f4331.h> #device *=16 ADC=8 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=20000000) #use rs232(baud = 9600,parity = n,xmit = pin_C6,rcv=pin_C7) #include <LMB162A.c> int flag; void lcd_putstr(char *buffer); #int_rda void ngat_rs232() { if(flag==0) { printf("sxyzS"); } if(flag==1) { printf("sabcS"); } if(flag==2) { printf("s123S"); } if(flag==3) { printf("s456S"); } putc('\0'); flag++; } void main() { int id; char c; char s[] = "hello"; //char s1[] ="s123456789S"; //char s2[] = "s987654321"; enable_interrupts(global); enable_interrupts(int_rda); delay_ms(50); lcd_init(); delay_ms(10); printf(lcd_putc,"hello"); flag = 0; //while(flag==0) //{ // printf("s123456S"); //} //lcd_putc('\f'); id = 1; while(id==1) { c = getc(); if(c=='S') { id = 0; //sable_interrupts(int_rda); } } //able_interrupts(int_timer1); printf(lcd_putc,"xong"); } void lcd_putstr(char *buffer) { unsigned int i = 0; while (buffer[i] != '\0') { lcd_putc(buffer[i]); /* calling another function */ /* to write each char to the lcd module */ i++; delay_us(10); } } |
![]() |
![]() |
|
|