newboymail00 发表于 2011-8-25 16:56:36

STC11F01与12C5A60S2有区别吗?同样的代码,串口波特率竟然差很多,很疑惑…… 望高手解惑

使用 STC11F01与12C5A60S2分别下载程序,就是一个简单的串口发送程序,使用示波器观察输出的波形,发现波特率竟然差别很大,难道两者的硬件有不同吗?但是看手册说内核都是一样的啊!!!很疑惑…… 望高手解惑!!!
代码如下:




#include "reg51.h"
//#include "STC12c5a.H"
//#include "STC11F01.H"
sfrAUXR       =   0x8e;
sfrBRT      =   0x9c;
#define u8 unsigned char
#define U8 u8

u8 code hh[]={
0xff,0xff,0xff,
0xff,0xff,0xff,
0xff,0xff,0xff,
0xff,0xff,0xff,
};
u8 iii=0;


////*
void UART_Init(void)                //@24MHz
{        //PCON |= 0x80;                //使能波特率倍速位SMOD
        PCON = 0x80;       
        SCON = 0x50;                //8位数据,可变波特率   REN=1,允许接收SCON = 0x50;
        BRT = 0xFf;                //设定独立波特率发生器重装值////BRT = 0xF4;为115200 ///BRT = 0xFA;为115200*2
        AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
        AUXR |= 0x01;                //串口1选择独立波特率发生器为波特率发生器
        AUXR |= 0x10;                //启动独立波特率发生器
        //AUXR =0x3d;
        //AUXR =0x15;
       ES=1;       //使能串口接收中断,
       EA=1;       //打开所有中断
}
///*/
void sio_int() interrupt 4 using 3   //串口中断函数
{
        ES=0;

       
ES=1;
}

void UART_Send_Byte(unsigned char mydata)       
{
ES=0;
TI=0;
SBUF=mydata;
while(!TI);
TI=0;
ES=1;
}
void delay(unsigned int time)
{
while(time--);
}
voidmain(void)
{
        UART_Init();
        while(1)
        {


       UART_Send_Byte(hh);
               if(iii==31) iii=0;
       delay(20);


        }
}

lhjlhjtjtj 发表于 2011-8-25 17:00:31

STC11F01不太清楚,但stc12c5a60s2波特率是可以设置的,有关12T和1T.

lee345 发表于 2011-8-25 17:24:21

可能是下载进没有设定外晶振吧

newboymail00 发表于 2011-8-25 17:33:01

多谢 lee345的提醒,确实是你说的原因,我在下载程序的时候 切换芯片型号的时候 没有勾选那个选项,害得我找了好久都没找到,哎 无语啊!呵呵……

electron_love 发表于 2011-8-25 19:05:24

用串口监视器 监视串口数据,不要用示波器
页: [1]
查看完整版本: STC11F01与12C5A60S2有区别吗?同样的代码,串口波特率竟然差很多,很疑惑…… 望高手解惑