打印

STC串口通信问题

[复制链接]
7065|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yourenzou 于 2010-10-8 15:45 编辑

我采用的是12C5A16S2单片机 晶振32MHz  波特率设置为1200
调整助手的波特率后还是没有接收到数据,
发送数据出去通过串口助手接收数据
接受到的数据有时候是乱码,有时候又有错误
请教各位帮助了
着急啊
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
sfr  S2CON    = 0x9A;
//sfr  SCON    = 0x98;
sfr  IE2    = 0xAF;
sfr  S2BUF    = 0x9B;
sfr  AUXR    = 0x8e;
sfr  BRT = 0x9c;
sfr  IAP_CONTR =  0xC7;
sfr  CCON    = 0xD8;
sfr  CMOD    = 0xD9;
sfr  CL      = 0xE9;
sfr  CH      = 0xF9;
sfr  CCAP0L  = 0xEA;
sfr  CCAP0H  = 0xFA;
sfr  CCAPM0  = 0xDA;
sfr  CCAPM1  = 0xDB;
sbit CR      = 0xDE;
sfr ADC_CONTR   =   0xBC;           
sfr ADC_RES     =   0xBD;           
sfr ADC_RESL    =   0xBE;           
sfr P1ASF       =   0x9D;
//sfr SBUF        =   0x99;
//sfr TL0        =   0x8A;
//sfr TL1        =   0x8B;
//sfr TH0        =   0x8C;
//sfr TH1        =   0x8D;
//sfr PCON       =   0x87;
//sfr TCON= 0x88;
//sfr TMOD= 0x89;
//sbit TI=SCON^1;
//sbit RI=SCON^0;
//sbit TR1=TCON^6;

//    晶振 32.MHz
char t=0;
char temp[20];
char temp1[20];
void delay(char k)
{
    int i,j;
    for (i=0;i<k;i++)
    {

        for (j=0;j<1;j++)
        {
            ;
        }
    }
}

void sendchar(char k) //串口发送单字符
{

SBUF=k;
while(!TI)
{
  ;
}
TI=0;



}
void sendstr() //串口发送字符串
{char i=0;
while(1)
{
  sendchar(temp);
  i++;
  if(temp=='\0')
  {
   break;
  }
}
}
void AD_init()
{
      P1ASF=0x01;
    ADC_RES = 0;
    ADC_CONTR=0xe0;
    delay(20);
   }

void getADresult( )
{
    ADC_CONTR = 0xe8;  //开启ad转换 设置最高速度,P1.0口为转换口
    _nop_();                        //Must wait before inquiry
    _nop_();
    _nop_();
    _nop_();
    while (ADC_CONTR==0xF8);//当转换完成
    ADC_CONTR =0x08;         //关闭AD
   //return ADC_RES;                 //返回结果
}
void main()
{double Vin,result,ADresult;
char j,i,h;
  char shiwei,gewei,xiaoshu1,xiaoshu2,xiaoshu3;
//  char i,j;
//  temp[2]='.';
//temp[6]=' ';

  TMOD=0x22;      // 定时器T1工作在方式2 ,8位自动重装
  TL1=0XB9;      // 装载值  波特率设置为1200
  TH1=0XB9;
  TR1=1;
  SCON=0X50;     //  8位数据位,无奇偶校验位
  PCON=0X00;     //  SMOD=0.波特率不加倍
AD_init();
while(1)
{

/*    getADresult();                     从P1.0口取电压值
    ADresult=ADC_RES*4+ADC_RESL;
     Vin=5.0*ADresult/256;                                          
    result=2.5*Vin;   
   
      i=result;                         数据处理,按位显示
  shiwei=i/10;
  gewei=i%10;
      result=(result-i)*1000;
  j=result;
  xiaoshu1=j/100;
  xiaoshu3=j%10;
  xiaoshu2=(j%100-xiaoshu3)/10;
   
      temp1[0]=shiwei;
    temp1[1]=gewei;
    temp1[3]=xiaoshu1;
    temp1[4]=xiaoshu2;
    temp1[5]=xiaoshu3;

    for(h=0;h<6;h++)
  {
    temp[h]=temp1[h]+32;
    }
*/
/*****************测试串口情况,试图发送数012345**************/
    temp[0]=48;
  temp[1]=49;
  temp[2]=50;
  temp[3]=51;
  temp[4]=52;
  temp[5]=55;
    sendstr();


}

}
串口助手如下所示

万分感谢

未命名.jpg (73.12 KB )

未命名.jpg

未命名.jpg (73.12 KB )

未命名.jpg

相关帖子

沙发
apan| | 2010-9-30 11:31 | 只看该作者
串口初始化不对。

使用特权

评论回复
板凳
autopccopy| | 2010-9-30 12:21 | 只看该作者
你程序中设定的波特率是多少,串口助手的设置是否匹配?

使用特权

评论回复
地板
ayb_ice| | 2010-9-30 14:19 | 只看该作者
不要使用printf函数
重要检查串口初始化部分

使用特权

评论回复
5
yourenzou|  楼主 | 2010-10-6 18:34 | 只看该作者
波特率为1200。设置不对吗??????

使用特权

评论回复
6
dong_abc| | 2010-10-6 19:42 | 只看该作者
32M晶振,1200波特率,设置高点不行吗,STC的文档还有个例子,看看吧

使用特权

评论回复
7
jt4117| | 2010-10-7 01:39 | 只看该作者
你串口中断函数处理都写错了!!
应该是 if(RI){...}

使用特权

评论回复
8
yourenzou|  楼主 | 2010-10-8 15:46 | 只看该作者
程序修改后接受到的是乱码。查了很久也不知道什么问题。继续求助各位了

使用特权

评论回复
9
zilaifun| | 2010-10-8 16:49 | 只看该作者
从网上下载个51的例程,很多的!

使用特权

评论回复
10
zjswuyunbo| | 2010-10-8 17:18 | 只看该作者
void sendstr() //串口发送字符串
{char i=0;
while(1)
{
  sendchar(temp);
  i++;
  if(temp=='\0')
  {
   break;
  }
}
}

这里哪里是发送字符串啊???!!

另外,晶振32M貌似有点太高了吧?

使用特权

评论回复
11
zhufdf| | 2010-10-8 18:15 | 只看该作者
呵呵,程序我没看,但我觉得你的32M晶振时间不那么容易对得上,换个33.1776MHz的晶振吧!或者22.1184MHz,11.0592MHz,18.432MHz等等.
这样标准波特率都能用(在你程序没有问题的情况下)。有时候晶振也重要哦,个人看法,如有错误 还请纠正!

使用特权

评论回复
12
sysdriver| | 2010-10-8 21:05 | 只看该作者
我写过这个芯片的串口,给出几点建议。

到官网下载个头文件,然后include进去,开头那些特殊功能寄存器就不用写了。

我记得当初设置波特率有点复杂的,有定时器波特率,也有自动产生波特率的。
建议你看看pdf,因为上面有例子可以看,而且pdf说的很清楚了。

使用特权

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

本版积分规则

0

主题

4

帖子

2

粉丝