51单片机11.0592M晶振,用定时器/计数器T2设置9600波特率,要自己测试过能通信的C51程序,急用!!!!
解答:
1.T1定时器的初值计算:
波特率=((2的SMOD次方)x F)/(32x12x(256-N)
其中:
SMOD是特殊功能寄存器PCON的第7位,取1或0(波特率倍增,或不倍增)。
N是置入定时器TH1的时间常数初值
F是晶振频率
当SMOD取0,波特率=F/(32x12x(256-N)),
N=256-F/(波特率x32x12)=256-1105920/(9600x32x12)=253 即0FDh
2.程序(待续),用MCS-1汇编语言可以吗?
先说波特率。波特率从300到115200都可以,甚至更高或更低。一般规范的波特率都是3的倍数,比如9600、19200、38400;但是并不是一定的,波特率也可以是10000或者10001、10002,只要你的设备能产生符合这个要求的频率,尤其是自己用时,波特率都是很随意的,没有限制。只是多数时候为了和电脑配合,波特率才规范为固定的几个值,且为了传输稳定,用9600。不过我比较喜欢用19200和38400,传的快。
用11.0592晶振的原因是51单片机的定时器导致的。用51单片机的定时器做波特率发生器时,如果用11.0592Mhz的晶振,根据公式算下来需要定时器设置的值都是整数;如果用12Mhz晶振,则波特率都是有偏差的,比如9600,用定时器取0XFD,实际波特率10000,一般波特率偏差在4%左右都是可以的,所以也还能用。
#define uchar unsigned char
#define uint unsigned int
uint a;
void chushihua();
void main(void)
{
chushihua();
P2=0xff;
while(1)
{
while(RI)
{
RI=0;
a=SBUF;
SBUF=a;
P2=a;
}
}
}
void chushihua()
{
TMOD=0x20;
SCON=0x50;
TCON=0x6f;
TH1=0xfd;
TH1=0xfd;
TI=0;
TR1=1;
}
单片机延时函数的设计
对于51单片机,两个参数决定了MAIN_Fosc的数值,1】系统板的晶振。2】有否单片机的时钟分频。如果没有设置时钟分频,而晶振是X MHz=X*1000000Hz,那么X*1000000=13000*850;X=13000*850\/1000000=11.05; 值此可以推断,这个延时函数是基于晶振11.0592MHz的。废话说了这么多,主要想提醒楼主注意,通过...
51单片机 测试18b20温度问题!
你的问题描述的貌似挺详细,但说了半天都是你知道的东西,例如:你的开发板是有什么组成的,你换用的小板子又是什么情况,大体来说对于18B20而言,如果你的代码没变而只是更换了这个传感器元件就不会有问题的,如果你的接线真的毫无更改而又属实无法正常工作,建议你在更换一个18B20试试,比如将小板在上...
为什么我写的DS18B02程序,不能测出温度呢?C语言写的,用的是51单片机
\/\/读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,\/\/之后DS18B20则会输出持续一段时间的一位数据 bit tempreadbit(void){ uint i;bit dat;ds=0;i++; \/\/i++起延迟作用 延时约8us, 符合协议要求至少保持1us ds=1;i++;i++; \/\/延时约16us, 符合协议要求的至少延时15us以...
素怡氨咖: 能起震,11.0592M Hz 的晶振 电容在15p-30p都可以
大东区17611409455: 为啥单片机的晶振都选用11.0592M ? - ?
素怡氨咖: 一般单片机与其他设备通信时,基本上选用的晶振都是11.0592M,因为它理论上产生的波特率误差为0,只是晶振频率受外界影响会有点误差.
大东区17611409455: 51单片机C程序设计如何实现微秒级的延迟,晶振为11.0592M? - ?
素怡氨咖: 方法1: #include_nop_(); //12MHz的晶振,标准的51,一个nop就是1us方法2: void delay(int us) //调用此函数24us,每循环一次16us {int s;for(s=0;s}
大东区17611409455: 51单片机为什么要用12M的晶振 - ?
素怡氨咖: 可以不用12M的晶振.用12M晶振时,时钟经过12分频产生的机器周期,正好1微秒
大东区17611409455: 用单片机做流水灯时晶振有什么作用?为什么有12M和11.0592M等? ... - ?
素怡氨咖: 晶振不是在单片机做流水灯的时候用而是在单片机做任何试验的时候都得用晶振的作用是给单片机提供时钟简单一点说就是单片机运行你的程序的时候,是按照晶振提供的时钟来运行的12MHZ的晶振,你可以算下一个周期是多少至于为什么有11.0592的,这个等你对单片机学习更深入的时候你就会明白的因为11.0592的晶振对那个波特率好算一些现在一般的单片机晶振的频率范围很光的所以你选12M的或者110592的或者24M的都可以一般来说,晶振频率越高,单片机运行速度相对来说越快 查看原帖>>
大东区17611409455: 为啥51单片机的晶振一般使用11.0592 - ?
素怡氨咖: 这个是由内部定时器决定的,为了更精确计算,减少偏差 以下是摘别人的,省的我重新打了: 11.0592晶振的原因是51单片机的定时器导致的.用51单片机的定时器做波特率发生器时,如果用11.0592Mhz的晶振,根据公式算下来需要定时器设...
大东区17611409455: 51单片机用多大频率的晶振好呢,11.0592m和12m有什么区别?立创商城的晶振怎么样? - ?
素怡氨咖: 晶振的振荡频率,要根据单片机的具体应用场合来决定,并不是越高越好. 11.0592MHz和12MHz的振荡频率相差不大,但如果你的单片机需要用异步串行通信功能的话,建议你选用11.0592MHz的振荡频率.因为你在进行波特率发生器的编程中,采用这个振荡频率的话,波特率计数器的计数初值可以是整数;而采用12MHz振荡频率,则计数初值只能是一个大约值(接近于某个小数的整数),长时间通信会产生误差积累而导致通信失败.
大东区17611409455: 51单片机到底使用哪种晶振好 - ?
素怡氨咖: 标准的51单片机晶振是1.2M-12M,一般由于一个机器周期是12个时钟周期,所以先12M时,一个机器周期是1US,好计算,而且速度相对是最高的(当然现在也有更高频率的单片机). 11.0592M是因为在进行通信时,12M频率进行串行通信不容易实现标准的波特率,比如9600,4800,而11.0592M计算时正好可以得到,因此在有通信接口的单片机中,一般选11.0592M
大东区17611409455: 单片机在做定时计数器时能用11.0592m的晶振吗? - ?
素怡氨咖: 关键看你需要定时的精度需要到什么 以51单片机为例,如果用12MHz的晶振 一计数的周期是12个时钟周期,所以计数频率是1MHz,一个记数的周期是1us 刚好整数,是比较好计算,如果需要10ms的定时 那么计数就要10000个周期 如果换成11....
大东区17611409455: 51单片机为什么要用11.0592MHZ的晶振?
素怡氨咖: 11.0592MHZ的晶振可产生标准的波特率.如果没有串口通信的要求,用其他晶振频率(单片机最高频率内)也没有问题.