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

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
    关注

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

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

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大