找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2679|回复: 6
打印 上一主题 下一主题
收起左侧

新作的项目,基于51单片机做的协议转换,大家帮忙看下有没有问题,程序只完成了一部分。

[复制链接]
跳转到指定楼层
楼主
程序写了一点不知道该怎么处理了,不清楚对于接收到的程序怎么处理可以发送新协议内容,求教大神指教

#include<reg52.h>
#include<intrins.h>
#define buffer

typedef unsigned char u8;
typedef unsigned int u16;
u8 code str1[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};     //测试帧,定义点歌系统协议
u16 code str2[]={0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18};  //测试帧,定义灯光系统协议
u8 count;   //定义指针寻找地址数

********************************************************
void Uart_init()                //初始化串行口和波特率发生器
{
        SCON=0X50;                //设置为工作方式1,打开接收允许
        TMOD=0X20;                //设置计数器工作方式2
        PCON=0X80;                //波特率加倍    ( PCON &= 0xef;波特率不倍增)  
        TH1=0XF3;                //计数器初始值设置,波特率4800
        TL1=0XF3;
        ES=1;                        //打开接收中断
        EA=1;                        //打开总中断
        TR1=1;                        //打开计数器1
}
******************************************************
void delay(u16  xms)        //延时函数
{

}

*******************************************************
void Com_send()            //串口发送函数  
{
unsigned char point=0;
for(point=0;str2[point]!='\0';point++)   //缓存的数据发送到串口
{
  SBUF=str2[point];
  while(!T1)    //T1==0
{
str2[point]='\0';
}
}
}
*********************************************************
void Com_interrupt() interrupt 4   //串口接收中断
{
u16 j;
unsigned char Receive_buffer;
bit flag=1;
if(RI)
{
RI=0; //软件清除中断标志位
RECEIVE_buffer=SBUF;  //接收串口数据
if(RECEIVE_buffer=='$')
{
ES=0;
str[j]='\0';
SCON=0x40;  //接收不允许
Com_send(); //发送数据
ES=1;
j=0;
flag=0;
SCON=0x50; //接收允许
}
if(flag)
j++;
}
}

@}}0I0__MPD5AYNELGA9@{O.png (97.24 KB, 下载次数: 36)

原理图

原理图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2017-10-17 19:49 | 只看该作者
画出框图或流程图就知道了。
回复

使用道具 举报

板凳
ID:237942 发表于 2017-10-21 11:11 | 只看该作者
yzwzfyz 发表于 2017-10-17 19:49
画出框图或流程图就知道了。

程序框图么?  程序的大致流程我感觉没问题,但是程序烧录进去以后,借助串口调试助手发送数据,但是上位机一直回馈数据, 求解答
回复

使用道具 举报

地板
ID:241556 发表于 2017-10-21 14:06 | 只看该作者
感觉好厉害
回复

使用道具 举报

5#
ID:111634 发表于 2017-10-21 19:57 | 只看该作者
本帖最后由 zl2168 于 2017-10-21 19:58 编辑

实例80  带RS 232接口的双机通信
Proteus仿真一下,确认有效。
实例80 带RS232接口的双机通信.rar (45.52 KB, 下载次数: 8)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

6#
ID:237942 发表于 2017-10-23 09:43 | 只看该作者

动手去做,你也会有收获
回复

使用道具 举报

7#
ID:237942 发表于 2017-10-23 09:53 | 只看该作者
zl2168 发表于 2017-10-21 19:57
实例80  带RS 232接口的双机通信
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设 ...

你这是实际做出来了么,难道没有问题?   我看到你仿真的MAX管脚接法就有问题,DB9上的2脚是接收端,应该连MAX上面的TOUT端口进去,TIN脚接TXD,3脚接RIN,ROUT接RXD。 你可以查一下经典电路的管脚接法,如果说你这样接没问题,我觉得有问题。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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