打印

STC12C5204ad单片机重新上电后不能发数

[复制链接]
3842|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
farrtone|  楼主 | 2012-2-17 17:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是STC12C5204ad第一次下载程序能正常发数,但单片机重新上电后就不能发数实在不明白为什么。请大家帮忙分析一下:
而且用示波器看单片机TXD口,还有数据发送,但就是串口助手接收不到,串口助手也换了,还是不行,电路也看了,而且也是之前用过的电路。
发现,第一次刚下载完程序,示波器看TXD电压变化,高电平为5V,低电平为0V
        而在给单片机重新上电时,TXD口发送数据测试电平变化,高电平要小于5V,在4电几伏。

请帮忙分析一下
#include "STC12C52.h"

typedef unsigned int uint;
typedef unsigned char uchar;


uint  sec=0,cnt,cnt1;
uchar dis_buff2[7];

void tx_com(void);
void dl_ms(unsigned int count);//延时毫秒程序


main(void)
{

  P1=0XFF;
  P3=0Xff;
  TMOD=0x21;  //设置定时器1为工作方式2,定时器0工作为方式1
  SCON=0X40;//10位异步通信,串行口工作方式一,不允许中断接收REN=0
  PCON=0X00;//SMOD=0
  AUXR=0X00;
  TH1=0XFD;//波特率9600
  TL1=0XFD;
  TR1=1;
  //ES=1;//串口中断打开
  ET0=1;
  TH0=(65536-50000)/256; //对TH0 TL0赋值
  TL0=(65536-50000)%256; //使定时器50ms中断一次
  TR0=1;           //开始计时
  EA=1;



while(1)

{


         cnt1++;
         dl_ms(30);
         if(cnt1>=300)
          {
          tx_com();
          cnt1=0;
          }
  }
}
void tx_com(void)
{

uchar i;
        long j;



j=123456;

dis_buff2[0]=(uchar)(j/10000);

dis_buff2[1]=(uchar)((j%10000)/100);

dis_buff2[2]=(uchar)(j%100);

        dis_buff2[3]=0xdd;

dis_buff2[4]=0xee;

dis_buff2[5]=0xff;

dis_buff2[6]=0xab;


for(i=0;i<7;i++)
         {
         SBUF =dis_buff2;
         while(TI==0);
         TI=0;
        dl_ms(1);
         }

}

/*******************延时毫秒****************************/
void dl_ms(unsigned int count)//延时毫秒程序
{   uchar i;
    while(count--)
      { for(i=0;i<125;i++)

{

;

}
      }
}




相关帖子

沙发
hyhmh| | 2012-2-17 17:09 | 只看该作者
估计是 MCU 特殊功能寄存器 配置的问题。(可以不是 UART部分的,如系统时钟等)

使用特权

评论回复
板凳
farrtone|  楼主 | 2012-2-20 12:23 | 只看该作者
以上问题已解决,供大家参考,我自制的下载线,线长大约20cm,断电后,再上电时将电平拉低,我单独给电源线供电问题解决。

使用特权

评论回复
地板
ningling_21| | 2012-3-27 16:09 | 只看该作者
换一种单片机试试,不用STC的...

使用特权

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

本版积分规则

2

主题

191

帖子

1

粉丝