Một bài tập môn Kỹ thuật giao tiếp máy tính của mình.
Giao tiếp RS232 sử dụng vi điều khiển PIC16f877A, viết giao diện bằng C Sharp, nhập chuỗi vào giao diện và truyền hiển thị lên LCD.
https://www.youtube.com/watch?v=O0NerHvCF28
Code cho PIC16F877A CCS- C: file main.c
#include <16F877A.h>
#device PIC16F877*=16 ADC=10 // Su dung con tro 16bit (cho MCU 14bit)
// Su dung ADC 10bit
#fuses hs, nowdt, noprotect, nolvp, put, brownout
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6, rcv=PIN_C7,bits=8)
#define use_portb_lcd true
#include
char ch;
int i;
#int_rda
void serial_isr()
{
ch=getc(); // lay ky tu truyen xuong
putc(ch); // gui ky tu len may tinh
i=1; // co bao interrupt
}
void main()
{
lcd_init();
enable_interrupts(global);
enable_interrupts(int_rda);
while(TRUE)
{
if(i==1) // if interrupt occured
{
i=0;
printf(lcd_putc,"%c",ch);// Hien ky tu nhan duoc
}
}
}
Code C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace RS232_tester
{
public partial class fclsRS232Tester: Form
{
delegate void SetTextCallback(string text);
public fclsRS232Tester()
{
InitializeComponent();
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
cmbComSelect.Items.Add(port);
}
}
private void cmbComSelect_SelectionChangeCommitted(object sender, EventArgs e)
{
if (port.IsOpen) port.Close();
port.PortName = cmbComSelect.SelectedItem.ToString();
stsStatus.Text = port.PortName + ":9600,8N1";
try
{
port.Open();
}
catch
{
MessageBox.Show("Serial port" + port.PortName + "cannot be opened!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Warning);
cmbComSelect.SelectedText = "";
stsStatus.Text = "Select serial port!";
}
}
private void btnOut_Click(object sender, EventArgs e)
{
if (port.IsOpen) port.WriteLine(txtOut.Text);
else
MessageBox.Show("Serial port is closed!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtOut.Clear();
}
private void btnClear_Click(object sender, EventArgs e)
{
txtIn.Clear();
}
private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
String InputData = port.ReadExisting();
if (InputData != String.Empty)
{
//txtIn.Text=InputData;
SetText(InputData);
}
}
private void SetText(String text)
{
if (this.txtIn.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
this.txtIn.Text += text;
}
}
}
[product id=”1898″]
Bình luận mới