作者aces12344 (day)
站内C_Sharp
标题[问题] c# RS232 控制8051上的灯
时间Mon Sep 22 18:08:42 2014
我是想用C# serialPort 去控制8051上的LED,但传出去都没反应
求解!
C#程式
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 4800;
serialPort1.Open();
byte[] xx = new byte[]{0x30} ;
serialPort1.Write(xx, 0, 1);
}
}
8051端程式
#include <reg51.h> // 包含reg51.h档
#define LED P1 // 定义LED位置
#define DIPSW P0 // 定义指拨开关位置
//============ 函数 ==========
void delay1ms(int); // 宣告延迟函数
unsigned char inst=0; // 宣告变数
//======= 主程式 ========
main() // 主程式开始
{ LED=DIPSW=0xFF; // 关闭LED,设定DIPSW为输入埠
EA=ES=1; // 启用串列埠中断
SCON=0x50; // 设定为mode 1
TMOD |= 0x20; // 设定采mode 2
PCON |= 0x80; // 将SMOD设定为1
TH1=TL1=0xF3; // 4800bps (12MHz)
TR1=1; // 启动Timer 1
SBUF=DIPSW; // 传出指拨开关状态
while(1)
{ switch (inst)
{ case 0:
{ LED=0xFF;
break; }
case 0x30:
{ LED=0;
break; }
}
}
}
//============ 传送字元函数 ==========
void Serial_INT(void) interrupt 4
{ if (TI)
{ TI=0; // 清除TI旗标
SBUF = DIPSW; // 再传出指拨开关状态
}
if(RI)
{ RI=0; // 清除RI旗标
inst = SBUF; // 接收命令
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.124.44.65
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1411380524.A.E0D.html
1F:推 howard1236: 第一 先上网载comport通讯程式,先别自己写 09/22 19:09
2F:→ howard1236: 第二 确定rs232三只接脚是否接对? 09/22 19:10
3F:→ howard1236: 51RX 接comport TX, 51TX 接 comport RX ,51地 接 com 09/22 19:12
4F:→ howard1236: 第三 看看是不是传出资料跟接收资料的格式不一样? 09/22 19:15
5F:→ howard1236: 例如要 Encoding ASCII...之类的 09/22 19:16
6F:→ howard1236: 第四 确认韧体是否正确? 先用外部硬体中断看看可不可 09/22 19:17
7F:→ howard1236: 以动? 09/22 19:18
8F:推 howard1236: 更正第二项 51地 接 comport 地 09/22 19:30