我是靠谱客的博主 现实咖啡,最近开发中收集的这篇文章主要介绍stc单片机485发送多出一字节_STC8G单片机串口通讯疑问,每次只能发送一个字节正确数据问题...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

STC8G单片机使用printf()函数发送数据,出现错乱现象:

void UartIsr() interrupt 4

{

int d=0,e=1,f=2,g=3;

if (RI)

{

ES=0;

RI = 0;

printf("%d%d%d",e,f,g); //接收中断后 回传1 2 3

ES=1;

}

}

111.png (12.95 KB, 下载次数: 1)

2020-7-16 09:49 上传

只能收到e=1,后面的字节收不到;切换到HEX模式,则还是有错误:

22.png (13 KB, 下载次数: 3)

2020-7-16 09:51 上传

31的asc码是1,A6和FE明显是错误显示;

现在把发送分成3次,程序如下,但发现还是有错误:

void UartIsr() interrupt 4

{

int d=0,e=1,f=2,g=3;

if (RI)

{

ES=0;

RI = 0;

printf("%d",e);

printf("%d",f);

printf("%d",g);

ES=1;

}

}

33.png (13.21 KB, 下载次数: 2)

2020-7-16 09:57 上传

非常奇怪,只能发送一个字节出去;

单片机选用型号是STC8G2K64S4,属于1T单片机,晶振设置的是22.1184MHZ,波特率是19200,完整程序如下,跪求各路大神解惑,谢谢!

#include "reg51.h"

#include"stdio.h"

#include "intrins.h"

#define  CKSEL  (*(unsigned char volatile xdata *)0xfe00)           //时钟相关寄存器地址

#define  CLKDIV  (*(unsigned char volatile xdata *)0xfe01)

#define  HIRCCR  (*(unsigned char volatile xdata *)0xfe02)

#define  XOSCCR  (*(unsigned char volatile xdata *)0xfe03)

#define  IRC32KCR  (*(unsigned char volatile xdata *)0xfe04)

sfr  P_SW2  =  0xba;   //特殊寄存器

sfr  AUXR  =  0x8e;

sfr  P0M1  =  0x93;//管脚配置寄存器地址 与通讯无关

sfr  P0M0  =  0x94;

sfr  P1M1  =  0x91;

sfr  P1M0  =  0x92;

sfr  P2M1  =  0x95;

sfr  P2M0  =  0x96;

sfr  P3M1  =  0xb1;

sfr  P3M0  =  0xb2;

sfr  P4M1  =  0xb3;

sfr  P4M0  =  0xb4;

sfr  P5M1  =  0xc9;

sfr  P5M0  =  0xca;

int K=0;

void UartInit()//串口初始化函数

{

PCON=0x00;                   //PCON=0X00 波特率不加倍         SMOD=0

SCON = 0x50;        //SM0=0 SM1=1 串口1模式1可变波特率  8位数据模式

TMOD = 0x20;          //定时器1模式2  8位自动重装载模式

TL1 =0xDC;          //1T模式  22.1184MHZ晶振下  19200波特率

TH1 =0xDC;

IE=0x90;// 等同于EA=1;ES=1;

TCON=0x40;//等同于  TR1=1;

TI=1;

AUXR = 0x40;   //串口1模式0的波特率不加倍        选择定时器1作为波特率发射器

}

void main()

{

P_SW2 = 0x80;//首先选择内部时钟

CKSEL = 0x00;  // 选择内部 IRC (  默认 )   22.1184MHZ

//CLKDIV = 0x02;  // 时钟 2 分频

P_SW2 = 0x00;

UartInit();

while (1)

{

if(K==1)

;

if(K==2)

;

}

}

void UartIsr() interrupt 4

{

int d=0,e=1,f=2,g=3;

if (RI)

{

ES=0;

RI = 0;

printf("%d",e);

printf("%d",f);

printf("%d",g);

ES=1;

}

}

33.png (60.17 KB, 下载次数: 3)

2020-7-16 10:02 上传

最后

以上就是现实咖啡为你收集整理的stc单片机485发送多出一字节_STC8G单片机串口通讯疑问,每次只能发送一个字节正确数据问题...的全部内容,希望文章能够帮你解决stc单片机485发送多出一字节_STC8G单片机串口通讯疑问,每次只能发送一个字节正确数据问题...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部