自然而然~ 2017-08-30 23:25 采纳率: 100%
浏览 1152
已采纳

C# serport 与 stc80c51 单片机通信

用c#的serpoet类与51单片机通信 为什么收到的数据是错误的。
下位机代码#include
#include

#define uchar unsigned char

#define uint unsigned int

uint flag;
uchar a;

char receve[5],i=0;
uint num;
float angle;
char table[10]="0123456789";

sbit led=P2^0;

void chuankouinit()
{
TMOD=0x20;
TH1=0xfd;
TL1=0Xfd;
TR1=1;
REN=1;
SM0=1;
SM1=1;
EA=1;
ES=1;
}

/*---------------------------------------------------------------
主函数
----------------------------------------------------------------*/
void display(uint a,float b)
{
uint c;

   uchar d;
   d=' '    ;
  c=(int)b;

        LcdWriteData(table[a/10]);       //lcd1602显示收到的第一个数  2位
        delayms(5);
        LcdWriteData(table[a%10]);
        delayms(5); 

     LcdWriteData(d);


    LcdWriteData(table[c/100]);          //lcd1602显示收到的第2个数   3位
        delayms(5);
        c%=100;
     LcdWriteData(table[c/10]);
     delayms(5);
      LcdWriteData(table[c%10]);
     delayms(5);

}
void datareceive()
{
int j;
if(flag==1)
{
led=0;

         flag=0;
        angle=receve[0];     //第一个数
        num=receve[1];       //第二个数

        LcdWriteCom(0x80); 
        display(num,angle);   //LCD显示
        for(j=0;j<5;j++)
        {
            receve[j]=0;
        }

}

}

void main()
{
chuankouinit();
LcdInit();

I2Cinit();
begin();

            setPWMFreq();  
            setPWM(0,0, 0) ;


            while(1) 
            {   
                datareceive();   

            }                

}
void ser() interrupt 4
{
RI=0;
receve[i]=SBUF;
i++;
if(i==2)
{
i=0;
flag=1;

    }

}
上位机代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Threading;

namespace 串口App1
{
public class PortChat
{

    static SerialPort _serialPort;


    public static void Main()
    {



        byte[] b = new byte[2];


        b[0] = 100;
        b[1] = 200;


        Console.Write("b[1]  {0}", b[1]);
         // Create a new SerialPort object with default settings.
          _serialPort = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);



          // Set the read/write timeouts
          _serialPort.ReadTimeout = 500;
          _serialPort.WriteTimeout = 500;


          _serialPort.Open();


          _serialPort.Write(b,0,2);
          Console.Write(" message已发送 ");
          _serialPort.Close();
          Console.ReadKey();



    }


}

}

  • 写回答

1条回答 默认 最新

  • threenewbee 2017-08-31 00:40
    关注

    这个很难说是驴子不转还是磨不转,建议你先用串口调试工具调试,看是不是下位机的问题,如果不是,再检查你的上位机的程序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 java大作业爬取网页
  • ¥15 怎么获取欧易的btc永续合约和交割合约的5m级的历史数据用来回测套利策略?
  • ¥15 有没有办法利用libusb读取usb设备数据
  • ¥15 为什么openeluer里面按不了python3呢?
  • ¥15 关于#matlab#的问题:训练序列与输入层维度不一样
  • ¥15 关于Ubuntu20.04.3LTS遇到的问题:在安装完CUDA驱动后,电脑会进入卡死的情况,但可以通过键盘按键进入安全重启,但重启完又会进入该情况!
  • ¥15 关于#嵌入式硬件#的问题:树莓派第一天重装配置python和opencv后第二天打开就成这样,瞎捣鼓搞出来文件夹还是没把原来的界面调回来
  • ¥20 Arduino 循迹小车程序电路出错故障求解
  • ¥20 Arduino 循迹小车程序电路出错故障求解
  • ¥15 C++数组中找第二小的数字程序纠错