OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3453|回复: 5

关于串口通信(运用串口1,或2,3被占用)

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-4-18
在线时间
3 小时
发表于 2016-4-30 12:57:16 | 显示全部楼层 |阅读模式
1金钱
现有51单片机端的代码,移植到战舰板,初学,改了半天也没改明白,功能很简单就是给一个语音合成模块发送数据,求各路大神指点,希望也包括引脚的连接,完成后会开源代码,谢谢各位。附模块照片,还有这个模块所有资料。

模块图

模块图

YS-XFS5152语音合成配套程序( C51 串口通信方式).rar

68.86 KB, 下载次数: 374

51端代码

YS-XFSV2语音合成配套资料(0705) (1).zip

3.34 MB, 下载次数: 82

模块全部资料

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-4-18
在线时间
3 小时
 楼主| 发表于 2016-4-30 13:45:16 | 显示全部楼层
51端程序如下
/////main.c


#include "config.h"

void MCU_init();
extern void XFS_FrameInfo(uint8_t Music,uint8_t *HZdata);
/***********************************************************
* 名    称: void  main(void)
* 功    能: 主函数        程序入口
* 入口参数:  
* 出口参数:
* 说    明:                                          
* 调用方法:
**********************************************************/
void  main(void)
{
        MCU_init();
        UartIni(); /*串口初始化*/

        XFS_FrameInfo("感谢您使用飞音云电子产品") ;
   while(1)
   {
  
                       
        }// while

}
/***********************************************************
* 名    称: void MCU_init()
* 功    能: 单片机初始化
* 入口参数:  
* 出口参数:
* 说    明:                                          
* 调用方法:
**********************************************************/
void MCU_init()
{
        P0 = 0xff;
        P1 = 0xff;
        P2 = 0xff;
        P3 = 0xff;

}

////usart.c



**/
void UartIni(void)
{
       
        SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr  
       
        TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
       
        PCON |= 0x80 ; //SMOD=1;
       
        TH1 = 0xF4 ; //Baud:9600 fosc=22.1148MHz
       
        IE |= 0x90 ; //Enable Serial Interrupt
       
        TR1 = 1 ; // timer 1 run
        ES=1;
        EA=1;
}
/************************************************************************
功能描述:         串口发送一字节数据
入口参数:        DAT:带发送的数据
返 回 值:         none
其他说明:        none
**************************************************************************/
void UARTSendByte(uint8_t DAT)
{
        ES  =  0;
        TI=0;
        SBUF = DAT;
        while(TI==0);
        TI=0;
        ES = 1;
}

/************************************************************************
功能描述: 串口发送字符串数据
入口参数:         *DAT:字符串指针
返 回 值: none
其他说明: API 供外部使用,直观!
**************************************************************************/
void PrintCom(uint8_t *DAT,uint8_t len)
{
        uint8_t i;
        for(i=0;i<len;i++)
        {
                 UARTSendByte(*DAT++);
        }       
}


////XFS5152.c




#include "config.h"



/**************芯片设置命令*********************/
uint8_t XFS_StopCom[]={0xFD,0X00,0X01,0X02};//停止合成
uint8_t XFS_SuspendCom[]={0XFD,0X00,0X01,0X03};//暂停合成
uint8_t XFS_RecoverCom[]={0XFD,0X00,0X01,0X04};//恢复合成
uint8_t XFS_ChackCom[]={0XFD,0X00,0X01,0X21};//状态查询
uint8_t XFS_PowerDownCom[]={0XFD,0X00,0X01,0X88};//进入POWER DOWN 状态命令

/***********************************************/



/***********************************************************
* 名    称:  YS-XFS5051 文本合成函数
* 功    能:  发送合成文本到XFS5051芯片进行合成播放
* 入口参数:  *HZdata:文本指针变量
* 出口参数:
* 说    明: 本函数只用于文本合成,具备背景音乐选择。默认波特率9600bps。                                         
* 调用方法:例: SYN_FrameInfo(“飞音云电子”);
**********************************************************/
void XFS_FrameInfo(uint8_t *HZdata)
{
/****************需要发送的文本**********************************/
                 unsigned  char xdata Frame_Info[50]; //定义的文本长度
         unsigned  int  HZ_Length;  

             unsigned  int i=0;
                 HZ_Length =strlen(HZdata);                         //需要发送文本的长度
                 
/*****************帧固定配置信息**************************************/           
                 Frame_Info[0] = 0xFD ;                         //构造帧头FD
                 Frame_Info[1] = 0x00 ;                         //构造数据区长度的高字节
                 Frame_Info[2] = HZ_Length+2;                 //构造数据区长度的低字节
                 Frame_Info[3] = 0x01 ;                         //构造命令字:合成播放命令                                  
                 Frame_Info[4] = 0x01;       //文本编码格式:GBK

/*******************发送帧信息***************************************/                  
         memcpy(&Frame_Info[5], HZdata, HZ_Length);
                 PrintCom(Frame_Info,5+HZ_Length); //发送帧配置
}


/***********************************************************
* 名    称: void  main(void)
* 功    能: 主函数        程序入口
* 入口参数: *Info_data:固定的配置信息变量
* 出口参数:
* 说    明:本函数用于配置,停止合成、暂停合成等设置 ,默认波特率9600bps。                                         
* 调用方法:通过调用已经定义的相关数组进行配置。
**********************************************************/
void YS_XFS_Set(uint8_t *Info_data)
{
        uint8_t Com_Len;
        Com_Len =strlen(Info_data);
        PrintCom(Info_data,Com_Len);
}

////usart.h



#ifndef __USART_H
#define __USART_H


void UartIni(void);//串口初始化
void UARTSendByte(uint8_t DAT);        //串口发送一字节数据
void PrintCom(uint8_t *DAT,uint8_t len); //打印串口字符串数据


#endif
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-4-18
在线时间
3 小时
 楼主| 发表于 2016-4-30 17:53:31 | 显示全部楼层
原子哥能给点思路么 新手
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-4-18
在线时间
3 小时
 楼主| 发表于 2016-4-30 21:17:11 | 显示全部楼层
如果利用串口1的代码改是不是可以实现呀
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-4-30 21:30:28 | 显示全部楼层
那个串口都一样,先初始化串口,用PC和串口通讯,能通讯了,再接模块上去试,移植51的程序到32还是很简单的,要注意的就是IO的初始化,延时函数
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-4-18
在线时间
3 小时
 楼主| 发表于 2016-5-9 09:45:03 | 显示全部楼层
你好,一般初始化都分为哪几步啊,只有3个串口如果我要用第四个咋办呀
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 21:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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