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条回答
cmod
1楼-- · 2019-07-17 00:01
波特率用300试试
我前段时间调32M频率下的1T单片机串口通讯,一开始也是怎么都不行,后来设置波特率300后才通了,然后慢慢提高的。
最后稳定在方式2下,波特率正好是500K。
对了,我用的晶振是有源的
抽什么风
2楼-- · 2019-07-17 02:29
cmod 发表于 2011-9-28 14:18
波特率用300试试
我前段时间调32M频率下的1T单片机串口通讯,一开始也是怎么都不行,后来设置波特率300后 ...

你说的慢慢提高是怎么个提高法?我现在调到600了都不行
抽什么风
3楼-- · 2019-07-17 03:40
 精彩回答 2  元偷偷看……
咆哮的橘子
4楼-- · 2019-07-17 08:36
为啥并个k级的电阻?我记得是兆级的吧?不放心就用波形发生器生成个36m的输进去。另外这个u的最高输入频率是多少?
抽什么风
5楼-- · 2019-07-17 11:40
4.7K是我在宏晶官网上看的,按照他那个手册接的电路  除了串口不行外 其余的函数模块现在都没问题
cmod
6楼-- · 2019-07-17 12:16
抽什么风 发表于 2011-9-28 14:18
你说的慢慢提高是怎么个提高法?我现在调到600了都不行

你用什么接收的?
我的设计是若干片C51通讯,一主N从的那种。一开始直接测试,发现不能建立连接。于是用主芯片发数据给PC,最终把波特率降低到300才使波特率误差降低到允许范围成功通讯。
然后我就用这个波特率去修改通讯协议,成功后,提高波特率测试(因为担心波特率高了有干扰误码的问题),最终稳定在方式2,波特率是固定的主时钟/64,也就是500K。
你说你在晶振上并4.7K电阻我很奇怪,怎么会并这么小的电阻,应该是兆欧级别的吧?另外如此高频率的晶振,你不加谐振电容?示波器观察晶振波形稳定么?

一周热门 更多>