找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2423|回复: 3
打印 上一主题 下一主题
收起左侧

stc89c52单片机串口问题,快被折腾疯了,求大神赐教

[复制链接]
跳转到指定楼层
楼主
程序目的是串口不断地发送abcde-字符串,使用定时器2做波特率发生器,源代码如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sfr T2MOD = 0xC9;

bit aaaaaaaaa=1,bbbbbbbbb=1,cccccccc=1,dddddddddd=1,eeeeeeeeeeee=1,ffffffff=1,gggggggg=1,hhhhhhhh=1,iiiiiii=1,jjjjjjjjjj=1,kkkkkkkkkkk=1;
//bit a=1,b=1,c=1,d=1,e=1,f=1,g=1,h=1,i=1,j=1,k=1;

void send_words(uchar *str){
        while(*str!='\0'){
                SBUF=*str;
                str++;
                while(!TI);
                TI=0;
        }
}
void main()
{         
        SCON = 0x50;
        PCON = 0x00;
        T2MOD=0x01;
        T2CON=0x30;
        TH2=RCAP2H=0xff;          //9600波特率,11.0592Mhz晶振
        TL2=RCAP2L=0xdc;
        TR2=ES=1;
        EA=1;                        
        while(1){
                send_words("abcd-");
        }
}

现在有两个问题:
源码中定义的bit变量没有用到,但是不知为什么会影响到程序运行,第一行和第二行bit变量都是11个,
1,如果注释掉第1行位变量定义留下第2行位变量定义,程序运行结果如下:串口会先收到一个a字符,经过约3秒再输出一堆abcd-,第一个a和abcd-连在一起,也就是说第一次输出只有一个a,bcd-没有了。


2,如果注释掉第2行位变量定义留下第1行位变量定义,程序运行结果如下:串口只收到一个a字符就再没有任何反应了。
所以很奇怪,难道定义变量的英文字母长短也和程序有关系?


把两行bit变量都注释掉之后,看起来好像就正常了。很不明白,这变量怎么会影响到串口呢

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:275826 发表于 2020-3-29 14:26 | 只看该作者
改成while(1){
                send_words("abcd-");
               delayms(1);
        }
试试
回复

使用道具 举报

板凳
ID:191511 发表于 2020-3-29 18:19 | 只看该作者
为什么要把变量如此简单粗暴的定义这么长呢?
回复

使用道具 举报

地板
ID:191511 发表于 2020-3-29 18:21 | 只看该作者
另外就是send words() 函数调用周期太频繁,会导致“死机”的,需要在两次发送中间加必要的延时。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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