找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2418|回复: 5
收起左侧

大牛大虾快来,串口通信始终不能按照定义的数据发送,程序改了十几遍了

[复制链接]
ID:237942 发表于 2017-10-26 16:01 | 显示全部楼层 |阅读模式
#include <reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
u16 i,j;
u8 rec_buf[4]={0,0,0,0};
u8 code str1[]={0x23,0x01,0x04,0x00,0x00,0x00,0x01,0x23};  //¶¨òåËÄ×éμÆ1aD-òé
u8 code str2[]={0x23,0x01,0x04,0x00,0x00,0x00,0x02,0x23};
u8 code str3[]={0x23,0x01,0x04,0x00,0x00,0x00,0x03,0x23};
u8 code str4[]={0x23,0x01,0x04,0x00,0x00,0x00,0x04,0x23};

u8 code table1[4]={0x7E,0x41,0x06,0x0D};       //¶¨òåËÄ×éμã¸èÏμí3D-òé
u8 code table2[4]={0x7E,0x41,0x19,0x0D};
u8 code table3[4]={0x7E,0x41,0x09,0x0D};
u8 code table4[4]={0x7E,0x41,0x03,0x0D};

void InitUART(void)
{
    TMOD = 0x20;  //¶¨ê±Æ÷1¤×÷·½ê½2
    SCON = 0x50; // ′®¿ú1¤×÷·½ê½1£¬ÔêDí½óêÕ
    TH1 = 0xFA;
    TL1 = TH1;
    PCON = 0x80;  //2¨ìØÂ걶Ôö
    EA = 1;
    ES = 1;
    TR1 = 1;
}

void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}

void main(void)
{
  InitUART();
        if(rec_buf[3]==0x06)
                 {
                         for(i=0;str1[i]!='\0';i++)
                                        {
                                                SendOneByte(str1[i]);
                                                }
           }
          else if(rec_buf[3]==0x19)
                                         {
                                                 for(i=0;str2[i]!='\0';i++)
                                                {
                                                        SendOneByte(str2[i]);
                                                }
           }
           else if(rec_buf[3]==0x09)
                                         {
                                                 for(i=0;str3[i]!='\0';i++)
                                                {
                                                        SendOneByte(str3[i]);
                                                }
           }
                                          else
                                                {
                                                        for(i=0;str4[i]!='\0';i++)
                                                        {
                                                        SendOneByte(str4[i]);
                                                        }
            }
}

void UARTInterrupt(void) interrupt 4
{
           if(RI)
        {
                                        for(j=0;j<4;j++ )
                             rec_buf[j]=SBUF;
                                                RI = 0;
    }
    else
        TI = 0;
}

回复

使用道具 举报

ID:111634 发表于 2017-10-26 22:11 | 显示全部楼层
本帖最后由 zl2168 于 2017-10-26 22:14 编辑

先学学正确的东西吧!理解以后在查看自己错在哪儿!
实例77  双机串行通信方式1
实例77 双机通信方式1.rar (40.4 KB, 下载次数: 4)
回复

使用道具 举报

ID:242454 发表于 2017-10-27 10:11 | 显示全部楼层
你把你KEIL里的字体改一下 ,就不会出现乱码了
回复

使用道具 举报

ID:123289 发表于 2017-10-27 12:57 | 显示全部楼层
再回顾一下串行原理,再画个细节框图,估计应找到问题了。
回复

使用道具 举报

ID:237942 发表于 2017-11-1 18:05 | 显示全部楼层
无畏造英雄 发表于 2017-10-27 10:11
你把你KEIL里的字体改一下 ,就不会出现乱码了

你意思是指我程序里面注释加汉字了?
回复

使用道具 举报

ID:237942 发表于 2017-11-1 18:08 | 显示全部楼层
yzwzfyz 发表于 2017-10-27 12:57
再回顾一下串行原理,再画个细节框图,估计应找到问题了。

问题解决了,是主程序处理里面标志位一直没有清除的问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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