1.波特率未知,下回再说,先洗澡
2.位移运算
3.P0和P0^0
/*******************************************************************************
延时函数
i=1,延时10微秒
i=50000,延时450ms
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
为什么是50000的时候延时450毫秒?
通过调试单步执行,我们可以看到两次之间间隔差不多就是450毫秒。
延时时间是多少,仅仅靠这条语句是无法确定的,与很多因素有关,比如晶振的大小,指令周期时间等等,比如同样是12M晶振,8051是指令周期是1us,而STC89C51是0.5us;STC12C5A60S2是1/12us。
《51系列单片机晶振12MHz与11.0592MHz应用区别》
设定T1工作于方式2,8位计数寄存器,自动重装计数初值,
N是初始化时写入THI及TH2的计数初值,
SMOD取0(不倍增)波特率 =Fosc/[(32x12x(256-N)]
若晶振为12MHz , N=243 ,
波特率=(12x10^6)/[32x12x(256-243)]=2403.846b/s
有3.846b/s的误差
若晶振为11.0592MHz,计数初值N=244 ,
产生的波特率=11059200/[32x12x(256-244)=2400b/s,精确。
[小结]
若单片机用于串行通信,为提高数据可靠性,应选用11.0592MHz晶振;
若单片机用于其它用途,可选用12MHz晶振。
板凳的说法很典型,看上去很有道理。
想想,11.0592,一定工作于11.0592吗?测过没有?
12M,一定工作于12M吗,波特率真的达不到9600?
如果变成了9606又会如何呢?
事实上,市场上的晶振多数不准。1、2毛钱一个的晶振常常偏差0.1%以上。在这个基础再讨论两者的区别意义就不大了。
但好的晶振,确如板凳所言。
对于串口通讯,是允许波特率有差异的,所以在要在9600附近即可。从这个意义上讲,11.0592与12.00可以随用。(当然参数还是不同的,并不是直接代换)。
如果两台机都用12M,或两台机都用11.0592,会比一台用12,一台用11.0952好一些。但也不是不能用。
楼主有此一问,是由于对串口通讯理解的不深,理解透了,就无所谓12或11.0592了。
只有一些特殊的场合才会出现只能11.0592而不能用12.00。主要是在硬件分频时,或是在有相位要求的场合,