小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 6744|回复: 8

上位机与51通信调试程序

[复制链接]
发表于 2013-3-3 22:51:43 | 显示全部楼层 |阅读模式
功能:在版主提供的51单片机程序基础上,修改串口部分程序,实现51通过p3口接收上位机指令,然后通过p0口在pc端显示,两个串口波特率都是9600,主要是为了方便上位机程序与51通信的调试。连接方法:703ttl与51p3串口连接,51p0串口与max232转接板连接。(请注意rx连接tx    tx连接rx)
////////////////////////////////////
//程序功能 :
//测试双串口功能 串口在P3口接收数据,在P0口发送数据
//测试P3串口与703N数据通信状态
////////////////////////////////////
#include <math.h>
#include <intrins.h>
#include <REG52.H>

#define uchar unsigned char
#define uint unsigned int

uchar Buffer =0;      //从串口接收的数据
uint i=0,j,URTAReceivedCount=0,n=1;
uchar data Tempdatatable[4],CommandDatatable[4];//数据包

sfr AUXR1 = 0xA2;
#define serial_P3 0x00;
#define serial_P0 0x80;
/***************************
Com_init()
串口初始化,晶振11.0592Mhz,波特率选择工作方式1,定时器1工作方式2,产生波特率9600
*****************************/
void Com_init()
{
   AUXR1 = serial_P3;  //P3 接收数据
   TMOD = 0x21;   //定时器1工作方式2
   PCON = 0x00;   //SMOD = 0
   SCON = 0x50;   //
   TH1 = 0xFd;    //设置波特率 9600
   TL1 = 0xFd;
   TR1 = 1;  //启动定时器1
   ES = 1;  //开串口中断
   EA = 1;  //开总中断
}

void Delay_1ms(uint i)//1ms延时
{
        uint x,j;
        for(j=0;j<i;j++)
        {
                for(x=0;x<=148;x++)
                        {
                        }
        }
}

void Send_Data(uchar data type,uchar data cmd)
{
       
    uchar data Buffer[4];
        uchar *p;
        uint Send_Count=0;
        AUXR1 = serial_P0;  //P0 发送数据
        p = Buffer;
        Buffer[0]=0XFF;
        Buffer[1]=type;
        Buffer[2]=cmd;
        Buffer[3]=0XFF;

        while(1)
        {
                if(*p == 0xFF)
                {
                  Send_Count++;  //0XFF标志统计位
                }
                SBUF = *p;  //发送
                while(!TI)  //判断是否发送完毕,若完毕,硬件置位TI
                {       
                        _nop_();
                }
                p++;
                TI = 0;
                if(Send_Count == 2)  //当统计到两次出现0XFF,则认为一个数据包发送完毕,跳出循环
                {
                    TI = 0;
                    break;
                    
                }
        }
}

void Com_Int(void) interrupt 4
{       
        uchar temp;
        ES = 0; //关串口中断
        RI = 0; //软件清除接收中断
        temp = SBUF;  //temp中存放接收的数据
        if(temp == 0xFF && URTAReceivedCount < 2)
        {
                Tempdatatable[0]==0xFF;  //包头
                URTAReceivedCount++;
        }
        else
        {
                Tempdatatable[n]=temp;
                n++;
        }
        if(URTAReceivedCount == 2)  //包尾
        {
                Tempdatatable[0]=0XFF;
                Tempdatatable[3]=0XFF;
                n = 1;
                URTAReceivedCount=0;  //组包完毕
                Send_Data(Tempdatatable[1],Tempdatatable[2]); //P0口发送数据给PC
        }
        AUXR1 = serial_P3;  //P3 接收数据
        ES = 1;  //开串口中断
}

void main(void)
{
        Delay_1ms(200);
        Com_init();
        while(1);
}



回复

使用道具 举报

发表于 2013-9-14 23:02:28 | 显示全部楼层
wr703 接 P3.0 P3.1 GND  
P0口接哪里呢 哪脚RX 哪脚TX呢
回复 支持 1 反对 0

使用道具 举报

发表于 2013-3-5 00:35:34 | 显示全部楼层
这么牛叉,竟然没有人回帖,我来毙掉无贴
回复 支持 反对

使用道具 举报

发表于 2013-3-8 00:28:16 来自手机 | 显示全部楼层
正需要此程序,试试看,谢谢楼主,为此郁闷好几天了,小车视频正常,就是控制不了,需要检查通信部分
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-8 21:51:20 | 显示全部楼层
程序有问题可以回帖 我试着解决
回复 支持 反对

使用道具 举报

发表于 2013-4-5 14:39:24 | 显示全部楼层
{:2_31:}{:2_31:}
回复 支持 反对

使用道具 举报

发表于 2013-4-6 12:48:20 | 显示全部楼层
准备着手调试,先收着!
回复 支持 反对

使用道具 举报

发表于 2013-4-8 15:37:09 | 显示全部楼层
MARK~~~~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2013-7-3 00:52:55 | 显示全部楼层
有个疑问,就是void Send_Data(uchar data type,uchar data cmd) 这个函数的功能是干嘛的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-5-29 08:18 , Processed in 1.096983 second(s), 20 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表