为什么单片机的晶振为11.0592M?
这是因为单片机在进行串口通信的时候,比如以9600B/s的速率通信,那么发送数据的频率为9600HZ
那么如果我用12M的晶振来分频,N = 12M/9600 =1250
用11.0592M来分频,N = 11.0592M/9600 = 1152
这么看似乎没有问题,但查找资料发现有一个叫12T单片机的概念,就是说12个晶振周期(12M的晶振,一个晶振周期为1/12M),机器做一个指令周期,刚好就是1/12M*12=1us,12T的晶振为12M单片机的时钟频率的最小单位是12M/12=1M,不是晶振12M。
故串口发送的周期发送要求为9600,这个分频系数需要用1M(12M的晶振的12T单片机)去分,即1M/9600 =104.167,这不为整数倍啊,不行的,会导致数据传输的两端因为时钟的误差,导致数据传输错误。用11.0592M即可解决这个问题,11.0592M/(12*9600)=96可以得到整数。
故11.0592M的晶振是为了匹配12T单片机可以得到精准的串口数据传输时钟。
那为什么波特率不设置为1000的整倍数呢?
查了资料发现:
1.为了保证有效通讯,根据电、传输介质等的物理特性结合串口设备使用的要求,确定RS232最大传输速率只能是115200,然后逐级二分得到57600,28800,19200……为适应这些速率,设计相应的晶振频率。
2.电话线路的带通是300--3KHz,当时HAYES先搞的modem,所以用的2400HZ信号,对应波特率是2400。由于基本频率确定了,以后采用的提高通讯速率的方法都是在2400基础上倍频的,所以形成了9600,19200。。。。