datasheet

STC12C5A60S2单片机串口1无法连续发送字符的问题

2019-05-21来源: eefocus关键字:STC12C5A60S2  单片机  串口1  连续发送

开发环境

1,开发板:STC12C5A60S2,串口1。


在使用STC12C5A60S2串口1发送数据的时候,接收端无法收到完整的字符串,我的发送方式如下:


                        UART_Send_Str("00");

UART_Send_Byte(':');

UART_Put_Num(dat[0]);

UART_Send_Byte('.');

            UART_Put_Num(dat[1]);

UART_Send_Byte(':');

          UART_Put_Num(dat[2]);

UART_Send_Byte('.');

          UART_Put_Num(dat[3]);

UART_Send_Byte(':');

          UART_Put_Num(status_move);

UART_Send_Byte(':');

        UART_Put_Num(status_fire);

void UART_Send_Str(uchar *s)

{

uint len = sizeof(s) / sizeof(s[0]);

uint i;

for(i = 0; i < len; i++)

//UART_Send_Byte(s[i]);

{

if(s[i] == 'n')

{

UART_Send_Enter();

}

else

{

UART_Send_Byte(s[i]);

}

}

}

发现接收端只能收到'00',串口无法完整接收字符,甚是诡异,把串口助手的十六进制显示勾上之后,终于发现了猫腻


“00”字符串之后竟然是空字符,而遇到空字符,一般就当作字符串结束,自然,后面的字符就无法显示了。


于是把UART_Send_Str函数改为如下即可正常运行


uint len = sizeof(s) / sizeof(s[0]);

uint i;

for(i = 0; i < len; i++)

//UART_Send_Byte(s[i]);

{

if(s[i] == 'n')

{

UART_Send_Enter();

}

else if(s[i]!='')//空字符ASCII为0x00,不发,不然接收端会认为字符串已经结束

{

UART_Send_Byte(s[i]);

}

//if(i==len-1)UART_Send_Byte('');//字符串最后再发结束符号

}

或者改为如下:


uint len = sizeof(s) / sizeof(s[0]);

uint i;

for(i = 0; i < len; i++)

//UART_Send_Byte(s[i]);

{

if(s[i] == 'n')

{

UART_Send_Enter();

}

else if(s[i])//空字符ASCII为0x00,不发,不然接收端会认为字符串已经结束

{

UART_Send_Byte(s[i]);

}

//if(i==len-1)UART_Send_Byte('');//字符串最后再发结束符号

}


关键字:STC12C5A60S2  单片机  串口1  连续发送

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/ic462395.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STC12C5A60S2 串口中断接收程序
下一篇:用 STC12C5A60S2 产生PWM波

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STC12C5A60S2_PWM

#include <reg52.h>#include <intrin.h>#define uint unsigned int #define uchar unsigned charsfr CCON = 0XD8;sbit CCFO = CCON^0;sbit CCF1 = CCON^1;sbit CR = CCON^6;sbit CF = CCON^7;sfr CMOD = 0XD9;sfr CL = 0XE9;sfr CH = 0XF9;sfr CCAPM0 = 0XDA;sfr CCAP0L = 0XEA;sfr CCAP0H = 0XFA;sfr CCAMP1 = 0XDB;sfr CCAP1
发表于 2019-06-01

单片机PWM输出控制直流电机(89c51系列、stc12c5a60s2系列)

= 0; if(time < PWM) pwm = 1; else if(time >= PWM) pwm = 0; }}proteus仿真结果由仿真结果来看,所得波形还是不算很精准,实际应用过程中还会有很多误差,但是这样已经比延时函数产生pwm的结果可靠的多。【STC12C5A60S2系列单片机输出PWM】我在做循迹小车时使用的是stc12c5a60s2单片机。stc12c5a60s2单片机集成了两路可编程计数器阵列(PCA)模块,可用于软件定时器、外部脉冲的捕捉、高速输出以及脉宽调制(PWM)输出。使用stc12c5a60s2单片机的PCA模块可通过程序设定,使其工作于8位PWM模式,通过P13和P14输出
发表于 2019-05-22
单片机PWM输出控制直流电机(89c51系列、stc12c5a60s2系列)

STC12C5A60S2的PCA模块输出PWM波

,就会去改变PWM的占空比,这也就是所说的脉宽调制。要改变PWM的周期,只能改变CL的取值范围,但是CL的取值范围是不可改变的,因为CL是一个8位寄存器。所以只能是改变CL每次加1的速度(原来CL加1用0.1s,现在要改为0.05s)也就是说我们要时钟源的频率。这种方法并没有被PCA模块所用,PCA模块所改变PWM频率的方法为,时钟源选择T0的溢出率,或者是选择外部时钟晶振源。上述为个人理解,下图为手册中的流程
发表于 2019-05-22
STC12C5A60S2的PCA模块输出PWM波

增强型单片机STC12C5A60S2输出各种频率方波信号

【例7-3】 设时钟频率Fosc=18.432MHz,设计程序,从P1.0/CLKOUT2引脚输出频率为124.540KHz的时钟;从T0(P3.4)引脚输出频率为125KHz的时钟;从T1(P3.5)引脚输出频率为38.4KHz的时钟。解:使用STC12C5A60S2的可编程时钟输出功能完成所需要求。在下面的程序设计中(在此只给出C语言程序),T0、T1和独立波特率发生器BRT均工作在1T模式。程序编制如下:#include "stc12c5a.h"        //包含STC12C5A60S2的寄存器定义头文件void main(void){   
发表于 2019-05-22

STC12C5A60S2 ADC中断方式

/*------------------------------------------------------------------*//* --- STC MCU Limited ---------------------------------------------*//* --- STC12C5Axx Series MCU A/D Conversion Demo -------------------*//* --- Web: www.STCMCU.com -----------------------------------------*//* If you want to use the program or
发表于 2019-05-22

STC12C5A60S2 ADC查询方式

/*------------------------------------------------------------------*//* --- STC MCU Limited ---------------------------------------------*//* --- STC12C5Axx Series MCU A/D Conversion Demo -------------------*//* --- Web: www.STCMCU.com -----------------------------------------*//* If you want to use the program or
发表于 2019-05-22

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved