Ví dụ như em tạo ra 3 Button trên GUI(BT1,BT2,BT3)Thì nó tương đượng vậy đó ;)).. Gửi 1 ký tự hay 1 dãy ký tự lên máy tính rồi GUI sẽ nhận biết mà thực hiện lệnh tương ứng ^^, tương vự cho việc ngược lại
Anh có thể cho em một code ví dụ không anhVí dụ như sự kiện click chuột của button 1 là đưa vô cổng Com ký tự "A" thì MCU đọc về giá trị "A" thì nó thực hiện chức năng được mình gán là "A" như là bật tắt led chẳng hạn
Theo mình thì nên cho cái code lúc nhận nút bấm bên reiceiver để mọi người ai biết thì giúp đỡ ....Anh có thể cho em một code ví dụ không anhVí dụ như sự kiện click chuột của button 1 là đưa vô cổng Com ký tự "A" thì MCU đọc về giá trị "A" thì nó thực hiện chức năng được mình gán là "A" như là bật tắt led chẳng hạn
Em lấy cái code UART 96000 Echo lại ký tự mình nhập trong sample code đó anh, GUI thì em làm lại y channg như TUT này:
Không hiểu sao khi em nhấn Send lần đầu tiên thì bên Receive echo lại , nhấn lần nữa thì nó không echo lại nữa, phải rút cáp cắm lại nó mới echo mà cũng echo 1 lần thôi là sao anh???
code em viết lại giống cái TUT ở trên đó anh !! Không hiểu sao nó lại bị như vậy nữa??mọi ngươi xem giúp em thử nó lỗi chỗ nào ạ?Theo mình thì nên cho cái code lúc nhận nút bấm bên reiceiver để mọi người ai biết thì giúp đỡ ....
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 WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int intlen = 0;// So cong COM ket noi vao may tinh
private void timer1_Tick(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();//Lay All COM noi vao PC
if (intlen != ports.Length)
{
intlen = ports.Length;
cbb_Select_Com.Items.Clear();
for (int i = 0; i < intlen; i++)
{
cbb_Select_Com.Items.Add(ports[i]);
}
}
}
private void bt_Connect_Click(object sender, EventArgs e)
{
if (lb_Status.Text == "Disconnected")
{
Com.PortName = cbb_Select_Com.Text;
Com.Open();
lb_Status.Text = "Connected";
bt_Connect.Text = "Disconnected";
}
else
{
Com.Close();
lb_Status.Text = "Disconnected";
bt_Connect.Text = "Connected";
}
}
private void bt_Send_Data_Click(object sender, EventArgs e)
{
string s;
if (lb_Status.Text == "Connected") //Neu Co Ket Noi COM
{
s = txt_Send_Data.Text; //Gan Du Lieu vao Bien S
Com.WriteLine(s);
}
}
private void OnCom(object sender, SerialDataReceivedEventArgs e)
{
//Doc 1 byte se ngat COM
string s;
s = Com.ReadExisting(); //Doc tat ca du lieu trong Buff cua cong COM
//txt_Receive_Data.Text = s;
Display(s);
}
private delegate void DLDisplay(string s);
private void Display(string s)
{
if (txt_Receive_Data.InvokeRequired)
{
DLDisplay sd = new DLDisplay(Display);
txt_Receive_Data.Invoke(sd, new object[] { s });
}
else
{
txt_Receive_Data.Text = s;
}
}
private void button1_Click(object sender, EventArgs e)
{
}
private void button1_Click_1(object sender, EventArgs e)
{
Close();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void txt_Receive_Data_TextChanged(object sender, EventArgs e)
{
}
}
}
Code em nạp xuống MCU nè anh !! Code mẫu của TI màÝ mình nói là bên MCU =.=.. hiz..chứ nếu viết giống trong TUT thì không sao au
#include <msp430g2553.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
if (CALBC1_1MHZ==0xFF)// If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register( GIE); // Enter LPM0, interrupts enabled
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
}
Em thử dung cấu trúc trong ngắt nhận như sau:Anh có thể cho em một code ví dụ không anhVí dụ như sự kiện click chuột của button 1 là đưa vô cổng Com ký tự "A" thì MCU đọc về giá trị "A" thì nó thực hiện chức năng được mình gán là "A" như là bật tắt led chẳng hạn
Em lấy cái code UART 96000 Echo lại ký tự mình nhập trong sample code đó anh, GUI thì em làm lại y channg như TUT này:
Không hiểu sao khi em nhấn Send lần đầu tiên thì bên Receive echo lại , nhấn lần nữa thì nó không echo lại nữa, phải rút cáp cắm lại nó mới echo mà cũng echo 1 lần thôi là sao anh???
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
switch(UCA0RXBUF)
{
case 'A': // 'A' mở thiết bị
{
// công việc
break;
}
case 'B': // đóng thiết bị
{
// công việc
break;
}
default: break;
}
}
Cái A, B là mình gửi từ GUI hả anh??? Vậy code trên GUI có thay đổi gì không anh hay giữ nguyên như TUT ạ/?Em thử dung cấu trúc trong ngắt nhận như sau:
Code:#pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) { while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready? switch(UCA0RXBUF) { case 'A': // 'A' mở thiết bị { // công việc break; } case 'B': // đóng thiết bị { // công việc break; } default: break; } }