36M晶振在STC单片机上串口发送错误求救

2019-07-16 06:46发布

最近在STC89C54上跑36M晶振,但发送串口时一直接收错误的数据 串口程序部分如下
/***条件编译区********************/
#define SEND_AD_DATA
/*********#define量********************/
#define FOSC 36000000L
#define BAUD 600
#ifdef SEND_AD_DATA
sfr T2MOD = 0xc9;

void Init_T2(void)
{
SCON |= 0X50;
T2CON |= 0X30
T2MOD = 0X00; //默认设置就可以
TL2 = RCAP2L = (65536 - (FOSC / 32 / BAUD));
TH2 = RCAP2H = (65536 - (FOSC / 32 / BAUD)) >> 8;
TR2 =    1;        //可位寻址 在寄存器T2CON中
ES=     1;
}

void send_byte(unsigned int send_value)
{
EA=0;
SBUF = send_value>>8; //先发送高位
while(!ti);
TI=0;
DELAY_Ms(1000);
SBUF = send_value;
while(!TI);
TI = 0;
EA=1;

}
#endif
请问我这样设置有问题么?有谁用过36M的给些调试建议,在此谢过。。。
另外 硬件方面 晶振两旁没有加电容 并了个4.7K的电阻
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
xiaohaizi
1楼-- · 2019-07-16 08:43
51 单片机 做串口传输的时候 晶振用的应该是 11.0592M这种的!  数整了 串口数据是有误差的!
抽什么风
2楼-- · 2019-07-16 11:20
xiaohaizi 发表于 2011-9-28 14:13
51 单片机 做串口传输的时候 晶振用的应该是 11.0592M这种的!  数整了 串口数据是有误差的! ...

还是要看什么整数,什么速率吧
以前用12M的一直没有问题 最近用36M才通信错误


assingle
3楼-- · 2019-07-16 11:48
STC89C54  是 6T 片子。     LZ  要高速 何不用 1T 的 片子  如 STC11FXX  系列?
STC89C54  36M  相当于  1T 的 片子 6M。
抽什么风
4楼-- · 2019-07-16 13:40
 精彩回答 2  元偷偷看……
kevinvind
5楼-- · 2019-07-16 19:02
抽什么风 发表于 2011-9-28 14:14
还是要看什么整数,什么速率吧
以前用12M的一直没有问题 最近用36M才通信错误

你看一下 计算波特率的公式 就知道了  12M 也是有误差率的  肯能你用的速率低  传的数据少的问题!
抽什么风
6楼-- · 2019-07-16 19:03
kevinvind 发表于 2011-9-28 14:16
你看一下 计算波特率的公式 就知道了  12M 也是有误差率的  肯能你用的速率低  传的数据少的问题! ...

TL2 = RCAP2L = (65536 - (FOSC / 32 / BAUD));  
TH2 = RCAP2H = (65536 - (FOSC / 32 / BAUD)) >> 8;
这个计算公式应该没错 用过很多次了,波特率从600一直试到15200

一周热门 更多>