打印
[STC单片机]

stc8a串口通信求助

[复制链接]
1499|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
2003070203|  楼主 | 2019-6-1 20:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在用stc8a跟设备通信,通信格式如下
1、通信规则
通信方式:异步串行通讯
波特率:600BPS
数据位:8BIT
奇偶校验:偶校验
结束位:2BIT(高电平)
起始位:1BIT(低电平)
2.通信数据结构
通信数据由以下18 字节构成:
第0 字节......通信开始识别码aah(固定为10101010B)
第1 字节......源地址
第2 字节......目标地址
第3 字节......命令
第4 字节......参数内容1
第5 字节......参数内容2
......
第16 字节......校验和
第17 字节......通信结束识别码055h(固定为01010101B)

串口助手监测设备本身串口通信数据为
AA 01 00 00 05 01 00 00 00 00 17 01 8D AF 0A 00 9B 55

直接用电脑串口发送数据设备没反应,用STC8A发送也没反应,程序如下,有没大虾帮忙看看?本人半路出家现学现用太深奥的还不懂
#include "STC8.H"
#include "intrins.h"


#define MAIN_Fosc                11059200L        //定义主时钟
#define  uint32   unsigned long
#define  uint16   unsigned int  
#define  uint8    unsigned char  



/*************        本地变量声明        **************/


uint8 xdata Rec_Buf[Buf_Max];
uint8 i = 0;                         
uint8 uart1temp;
uint8 k;
uint8 code uart_17[16]={0xAA,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x17,0x01,0x8D,0xAF,0x0A,0x00};
uint8 jyh;



/**************************************
功能描述:延时函数
入口参数:uint16 x ,该值为1时,延时1ms
返回值:无
***************************************/
void delay_ms(uint16 x)
{  
        uint16 j,i;   
        for(j=0;j<x;j++)   
        {   
                for(i=0;i<1100;i++);   
        }  
}

/***************************************************************************
* 描  述 : 串口1初始化函数
* 入  参 : 无
* 返回值 : 无
备注:波特率600bps   晶振11.0592MHz
**************************************************************************/
void Uart1_Init(void)
{               
        PCON &= 0x3f;                //波特率不倍速,串行口工作方式由SM0、SM1决定
        SCON = 0xd0;                //9位数据,可变波特率,启动串行接收器
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xfe;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0f;                //清除定时器1模式位

        TL1 = 0x00;                  //设定定时初值
        TH1 = 0xee;                  //设定定时器重装值
        ET1 = 0;                    //禁止定时器1中断
        TR1 = 1;                    //启动定时器1
        ES = 1;                                       // 串口1中断打开
        EA = 1;                                       // 总中断打开
}

/***************************************************************************
* 描  述 : 串口1发送数据函数
* 入  参 : uint8 数据
* 返回值 : 无
**************************************************************************/
void SendDataByUart1(uint8 dat)
{
            ACC=dat;          //增加偶校验,是否正确?
        TB8=P;                 //        增加偶校验,是否正确?
        SBUF = dat;                 //写数据到UART数据寄存器
        _nop_();                    //模拟2位停止位?       
        while(TI == 0);             //在停止位没有发送时,TI为0即一直等待
        TI = 0;                     //清除TI位(该位必须软件清零)
        _nop_();                   //模拟2位停止位?       
}




void USART1_Tx_Puts2(k)
{
                 
                ES = 0;                                             //串口1中断关闭                  
                    SendDataByUart1(k);       //发送字符
                                       
                ES = 1;                                  //串口1中断打开                       

         
}

/***********************
功能描述:主函数
入口参数:无
返回值:无
************************/
int main()
{
          P3M1 &= 0xFE;        P3M0 &= 0xFE;                          //设置P3.0为准双向口
        P3M1 &= 0xFD;        P3M0 |= 0x02;                          //设置P3.1为推挽输出
          
        Uart1_Init();

        while(1)
        {
                uint8 i;
                        for(i=0;i<16;i++)
                {
                        USART1_Tx_Puts2(uart_17[i]);
                }
                for(i=1;i<16;i++)
                {
                        jyh+=uart_17[i];    //计算校验和
                }
                jyh=(jyh^0xff)+1;    //计算校验和
                USART1_Tx_Puts2(jyh);      //发送校验和
                jyh=0;                      //校验和清0
                USART1_Tx_Puts2(0x55);   //发送结束码
        }

使用特权

评论回复

相关帖子

沙发
airwill| | 2019-6-7 19:15 | 只看该作者
直接用电脑串口发送数据设备没反应,用STC8A发送也没反应

我觉得先检查一下硬件, 信号传输有没有接收到呢?

使用特权

评论回复
板凳
xuyaqi| | 2019-6-14 11:31 | 只看该作者
“直接用电脑串口发送数据设备没反应” 说明你和设备通信问题还没解决,先不急于用stc单片机,先用电脑串口和设备调试正常,有问题可与设备厂商联系。

使用特权

评论回复
地板
2003070203|  楼主 | 2019-6-16 22:31 | 只看该作者
airwill 发表于 2019-6-7 19:15
直接用电脑串口发送数据设备没反应,用STC8A发送也没反应

我觉得先检查一下硬件, 信号传输有没有接收到呢? ...

但是用厂家原配的板就能正常通讯,现在在重新准备板看下

使用特权

评论回复
5
airwill| | 2019-6-17 23:11 | 只看该作者
2003070203 发表于 2019-6-16 22:31
但是用厂家原配的板就能正常通讯,现在在重新准备板看下

这更说明问题不在软件上, 硬件问题的可能性更大咯

使用特权

评论回复
6
ningling_21| | 2019-6-20 16:05 | 只看该作者
STC8A发送数据电脑能收到不?

使用特权

评论回复
7
2003070203|  楼主 | 2019-6-23 19:54 | 只看该作者
ningling_21 发表于 2019-6-20 16:05
STC8A发送数据电脑能收到不?

电脑能收到的,但是跟原来的格式有点不一样,原来的是自动换行了,STC8A的发送后电脑接收没自动换行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

16

帖子

0

粉丝