Em đang cần tìm hiểu gấp phần giao tiếp giữa máy tính và 89c52 qua max232 để hoàn thành bài tập, ai rảnh chỉ giúp em với.
Hiện tại em đang mắc chỗ giao tiếp khi lập trình code nạp bằng keil C, cụ thể như sau :
Chương trình máy tính gửi 1 chữ cái ra cổng COM, thông qua max232 dữ liệu được truyền đến 89c52, và ở đây nhận dữ liệu, so sánh dữ liệu đó với 1 giá trị có sẵn, nếu giống thì làm việc 1, không giống thì làm việc 2. Em bị mắc là không biết được kiểu dữ liệu được gửi xuống như thế nào để có thể viết biểu thức logic trong lệnh điều kiện
VD: máy gửi chữ 'a', 89c52 nhận được và so sánh điều kiện, nếu đúng là chữ a thì cho chân P1 = 0xfd;
chương trình của em như sau :
CODE nạp cho 89c52:
CODE chương trình điều khiển (viết = C#):
Mạch như sau :
Tất cả ở file đính kèm (mạch vẽ = proteus)
Ai chỉ giúp em với, em xin cảm ơn nhiều nhiều !!!
Hiện tại em đang mắc chỗ giao tiếp khi lập trình code nạp bằng keil C, cụ thể như sau :
Chương trình máy tính gửi 1 chữ cái ra cổng COM, thông qua max232 dữ liệu được truyền đến 89c52, và ở đây nhận dữ liệu, so sánh dữ liệu đó với 1 giá trị có sẵn, nếu giống thì làm việc 1, không giống thì làm việc 2. Em bị mắc là không biết được kiểu dữ liệu được gửi xuống như thế nào để có thể viết biểu thức logic trong lệnh điều kiện
VD: máy gửi chữ 'a', 89c52 nhận được và so sánh điều kiện, nếu đúng là chữ a thì cho chân P1 = 0xfd;
chương trình của em như sau :
CODE nạp cho 89c52:
Code:
#include <regx52.h> unsigned char uart_data_receive; //***************Thie^'t la^.p cho UART**************** void uart_init()//dung trong truyen thong noi tiep { SCON=0x50;//che do 8 bit du lieu,1 bit sart,1 bit stop TMOD&=0x0F;// TMOD|=0x20;//timer1 in mode2 TH1=0xFD;//set baut rate at 9600(11.0592Mhz) TL1=0xFD; ES=1;//cho phep ngat noi tiep EA=1;//cho fep tat ca cac ngat TR1=1;//chay timer1 } //***************Gu+?i 1 ký tu+. ********************* void send_data(char uart_data)//gui du lieu qua cong COM { TI=0; SBUF=0x00; SBUF=uart_data; while(TI==0){}//cho trong khi dang gui du lieu TI=0; } //*************Nha^.n 1 ký tu+.********************* void receive_data() interrupt 4//nhan du lieu { if(RI==1) { RI=0; uart_data_receive=SBUF; } } main(void) { uart_init(); P2=uart_data_receive; }
CODE chương trình điều khiển (viết = C#):
Code:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.IO; using System.Threading; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { if (serialPort1.IsOpen) serialPort1.Close(); serialPort1.Open(); serialPort1.DataReceived += new SerialDataReceivedEventHandler(dulieuden); } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { if (serialPort1.IsOpen) serialPort1.Close(); } private void button1_Click(object sender, EventArgs e) { serialPort1 .Write("a");//Đúng ra là serialPort1 .Write(textbox1.text); nhưng mình đặt luôn thữ a để thử } string data; private void dulieuden(object sender, SerialDataReceivedEventArgs e) { data = ""; data = serialPort1.ReadExisting(); } private void button2_Click(object sender, EventArgs e) { textBox2.Text = data; } } }
Tất cả ở file đính kèm (mạch vẽ = proteus)
Ai chỉ giúp em với, em xin cảm ơn nhiều nhiều !!!
Comment