40个单片机晶振问题及解决方法小结
遇到单片机晶振不起振是常见现象,那么引起晶振不起振的原因有哪些呢?
(1) PCB板布线错误;
(2) 单片机质量有问题;
(3) 晶振质量有问题;
(4) 负载电容或匹配电容与晶振不匹配或者电容质量有问题;
(5) PCB板受潮,导致阻抗失配而不能起振;
(6) 晶振电路的走线过长;
(7) 晶振两脚之间有走线;
(8) 外围电路的影响。
解决方案,建议按如下方法逐个排除故障:
(1) 排除电路错误的可能性,因此你可以用相应型号单片机的推荐电路进行比较。
(2) 排除外围元件不良的可能性,因为外围零件无非为电阻,电容,你很容易鉴别是否为良品。
(3) 排除晶振为停振品的可能性,因为你不会只试了一二个晶振。
(4) 试着改换晶体两端的电容,也许晶振就能起振了,电容的大小请参考晶振的使用说明。
(5) 在PCB布线时晶振电路的走线应尽量短且尽可能靠近IC,杜绝在晶振两脚间走线。
2、单片机晶振电路中两个微调电容不对称会怎样?相差多少会使频率怎样变化?我在检测无线鼠标的接受模块时,发现其频率总是慢慢变化(就是一直不松探头的手,发现频率慢慢变小)晶振是新的!
答:电容不对称也不会引起频率的漂移,你说的频率漂移可能是因为晶振的电容的容量很不稳定引起的,你可以换了试,换两电容不难,要不就是你的晶振的稳定性太差了,或者你测量的方法有问题.
3、51单片机时钟电路用12MHZ的晶振时那电容的值是怎样得出来的?拿内部时钟电路来说明吧!
答:其实这两个电容没人能够解释清楚到底怎么选值,因为22pF实在是太小了。
这个要说只能说和内部的振荡电路自身特性有关系,搭配使用,用来校正波形,没有人去深究它到底为什么就是这么大的值。
4、晶振为何被要求紧挨着IC,单片机晶振不起振?
答:原因如下:
晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈 后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。当电路中的激励电信号和晶振的标称频率相同时,电 路就能输出信号强大,频率稳定的正弦波。整形电路再将正弦波变成方波送到数字电路中供其使用。
问题在于晶振的输出能力有限,它仅仅输出以毫瓦为单位的电能量。在 IC(集成电路) 内部,通过放大器将这个信号放大几百倍甚至上千倍才能正常使用。
晶振和 IC 间一般是通过铜走线相连的,这根走线可以看成一段导线或数段导线,导线在切割磁力线的时候会产生电流,导线越长,产生的电流越强。
现实中,磁力线不常见,电磁波却到处都是,例如:无线广播发射、电视塔发射、手机通讯等等。晶振和IC之间的连线就变成了接收天线,它越长,接收的信号就 越强,产生的电能量就越强,直到接收到的电信号强度超过或接近晶振产生的信号强度时,IC内的放大电路输出的将不再是固定频率的方波了,而是乱七八糟的信 号,导致数字电路无法同步工作而出错。
所以,画PCB(电路板)的时候,晶振离它的放大电路(IC管脚)越近越好。
5、单片机晶振与速度的疑问,执行一条指令的周期不是由晶振决定的吗。那么比如51单片机和MSP430,给51接高速晶振,430接低速的,是不是51跑的要快?是不是速度单片机速度仅仅与晶振有关,关键是单片机能不能支持那么大的晶振?我的理解对吗?
答:每个单片机的速度是受到内部逻辑门电平跳变速度的**的。
你说的没错,对于一个51,给他用更高的晶振,速度会快些。
但是对于高级的单片机就不一样了。高级单片机内部,一般都是有频率控制寄存器的,所以,简单的增加晶振,可能达到单片机的极限,导致跑飞。
6、单片机的运行速度和晶振大小的关系,若单片机的最高工作频率是40M,晶振是否可以选择24M或更高,但不超过40M,这样单片机的运行速度是否大增?长期在此工作频率下对单片机是否有不良影响?单片机对晶振的选择的原则是怎样的?谢谢!
答:当然是有影响的,单片机的工作速度越快,功耗也越大,受干扰也会越厉害,总之最高能跑40M的,跑不超过40M的是没有问题的,只是对相关的技术(如PCB的设计元件的选取等)会高去很多.
7、请问:有什么方法可以确定某一款单片机在某一大小的晶振下是否能正常工作?
答:晶振好比单片机的心脏
晶振选择太高不太合适,具体晶振上限是多少,恐怕测不出来,只能按照人家单片机的要求,一般STC系列单片机上限是35M或40M,stc单凭上写的有,如STC11F16XE 35I-LQFP44G其中35I就是晶振最高35M的工业级芯片。
超过上限会出现什么样的问题,没有测试过,一般晶振选择12M的比较多,如果选择STC 1T指令的,就相当于12*12=144M的晶振。如果用于串口通信,建议选用11.0592M的或22.184M,选择晶振最主要还是参照人家的说明书。
8、4个AT89C51单片机能否用一个12M的晶振使其都正常工作?一个采用内部时钟方式,其余三个用外部方式...那我四个都用内部方式可以不(将4个单片机都并联在一个晶振上)?
答:可以,其中一个正常接晶振,他的XTAL2输出接到另外三个的XTAL1输入上。
9、AT89C51单片机4兆的晶振能不能启动?
答:当然可以,看看datasheet吧,我估计1M的都可以
还有的单片机如2051可能还可以低
台系日系有的可以到32.768kHz
10、89c51单片机的复位电路中常采用12MHZ的晶振,实际上市场上稍小于12MHZ,为什么呢?急求
答:需要串口通讯时一般是用11.0582MHZ的,这样波特率才好算。
用12MHZ的工作周期就容易计算。
21、单片机晶振上电不起振,但是手碰一下晶振就起振了,为什么?
答 :看看晶振配的电容焊了没有,值有没有错误?
22、怎么判断单片机晶振是否起振呀?急急!!
答:最简单是用示波器,另外你可以看一下电源是否正常
23、怎样判断单片机外部晶振有没有起振?我的STC89C52单片机本来是好好的后来不行了,我换了个晶振就好了。但是过了几个小时后又不行了,是怎么回事。还有就是怎样判断晶振是否起振?
答: 第一点:先换一块单片机试试,问题还在则排除单片机;
第二点:可能是虚焊造成的,这点要注意;
第三点:我用STC89C52也碰到过类似的问题,换了块晶振就OK了,好像STC起振不橡AT89S52那么顺。
其实对于STC89C52可以直接看30脚(ALE),接个灯,起振一下子就能看出来了。24、我用msp430的单片机,可是外部的两个晶振总是无法起振,没用。请问是什么原因?线路连接是对的,32768HZ没有接外接电容。8M的晶振接56PF的电容。
答:32.768K的晶振接两个30P的电容试试,还有8M的晶振的电容也换成30P的。
25、MSP430单片机8MHz的晶振,计数器TAR增加一次 需要多少时间?
答:MSP430单片机的晶振频率可以自己设置的,是使用外部晶振还是内部振荡器做始终源,还有MCLK,SMCLK,ACLK的选择,分不分频等都有影响 我现在有点忘了,不过你可以看看文档,计数器是使用mclk,smclk,ACLK的哪一个,在判断是否分频设置,一般在1Mhz TAR加一次是1us,那么8M是1/8us自己算吧。
26、如果MSP430单片机不初始化晶振,那么单片机用什么作为时钟?DCO的频率大概是多少呢?
答:内部DCO,不同系列的DCO默认频率不同,要参看手册。4系列的好像是1M。
27、没有程序的空白单片机,外部晶振能起振么?
答:没有内部晶振的单片机,外部晶振可以起振,如传统类MS51系列单片机有内部晶振的单片机,外部晶振不会起振,需要对外部晶振进行配置后才会起振,如果不对外部晶振进行配置仍使用内部晶振,如silicon lab系列c8051f**单片机
28、dspic30f6014单片机能够烧写程序,却不能运行。晶振没有起振(换过了也没用),复位电压测量为5v,电源正常,(是成熟产品,只是偶尔会出现这种情况)
答:01、重新检讨振荡电路所用零件(晶振与电容)及晶振附近的pcb布局
02、检查配置位是否正确
03、还可找 FAE 谘询
29、为什么at89c52 P1.0输出2.5v电压,单片机好像未工作,晶振波形是不规则的正弦波可不可以?线路板没有达到预想效果,发光二极管一直亮,感觉还是单片机的问题,P1.0输出2.5v电压,看门狗用的X5045,不知何原因找了好几天了。
答:将看门狗拿掉,暂时做成最小系统,既只有电源、8952、晶振和两只30P左右的电容。
1. 将P1.0口置1,测试该口的电压是否在2.5V以上;
2. 将P1.0口置0,测试改口电压是否约为0V。
是的话就是OK的,否则就要看看电源电压、晶振、8952了。电源电压是5+、-0.25V,且纹波一定要小
30、单片机测试晶振电压时会对工作状态有影响吗?
我的51单片机从P2口连了两个发光二极管,正常时是只有一个亮。我插上电源后,结果两个都亮了。于是我就测量晶振电压,但是我黑表笔接地,红表笔一碰晶振引脚时,两个发光二极管中,就有一个会熄灭,一放开就两个都亮。
每次刚插电源的时候,两个晶振引脚分别时1.9V,1.5v,但是稍微过了一会儿,两个引脚就分别成了5.4V和0.02V了。
答:会有一点影响,对频率会有影响,严重的会导致晶振停振。因为你万用表一加上去相当于在振荡电路上又并上或串上了分部电容电阻电感等,就影响到了原来电路的状态。
31、制作max232下载单片机,工作电压都正常,要外加晶振嘛?c
答:当然要加,如果没有外加晶振,那么单片机的时钟电路就没有了,导致单片机串口就不能进行数据传输了,最终你这个下载器具就不能下载程序了。
32、静态工作点对晶振振荡有什么影响?
答: 具有高Q值的晶振对放大器的选择并不敏感,但在过驱动时很容易产生频率漂移(甚至可能损坏)。影响振荡器工作的环境因素有:电磁干扰(EMI)、机械震动与冲击
33、我用的是外置4M晶振加两个30pf瓷片电容,用示波器测频率正常,但峰峰值有的板子是6V左右,有的是3V左右,板子功能正常但我怕电压低的不稳定,不知道 晶振测试有没有依据可查或相关资料,多谢大家啦!!!
答: 没关系的.峰峰值不同是电容和晶振的参数离散导致的.只要正常工作,就可以.单片机里面都有放大处理的,它们都是放大展成方波来使用的.峰峰值多高都没用.
你那电压高的倒应该看看,pic一般工作电压是5V,怎么振荡器会进来这么高电压? 我一般都是在CPU晶振输入端串联一个电阻使用的.
34、我用的是外置4M晶振加两个30pf瓷片电容,用示波器测频率正常,但峰峰值有的板子是6V左右,有的是3V左右,板子功能正常但我怕电压低的不稳定,不知道 晶振测试有没有依据可查或相关资料,多谢大家啦!!!
答: 没关系的.峰峰值不同是电容和晶振的参数离散导致的.只要正常工作,就可以.单片机里面都有放大处理的,它们都是放大展成方波来使用的.峰峰值多高都没用.
你那电压高的倒应该看看,pic一般工作电压是5V,怎么振荡器会进来这么高电压?
我一般都是在CPU晶振输入端串联一个电阻使用的.
35、pic单片机 AD采样程序 有源晶振应该如何选择?
如果使用片内振荡器,是不是必须要外接谐振器?
我如果外接有源晶振,选用那种频率较好?我听说4MHz的并不理想。外接20MHz的可以吗?这个是怎样选择的啊。
答:用片内振荡器不需要外接谐振器。
如果你的单片机只做AD采集转换,那就不需要太高的频率,内部4Mhz振荡器即可。
但如果还要做其他对时序要求较严的工作比如说总线通信,那就要考虑使用外部振荡器,因为内部振荡器的误差太大(即使校准了还有1%的误差) ,而用多大的晶振要看工作要求,频率越高单片机功耗越大。但只做AD的话,4M够了。
36、大家好。我想问个pic单片机的问题:晶振频率不一样。编译器自己带的库延时函数延时一样吗?比如晶振20MHZ delayus(1)和5MHZ delayus(1)是同是1us吗?
答: 应该一样.
因为频率不一样,编译时候你的设置不一样,编译时候自然计算需要的倍数,参数就不一样了.
但可能因为频率除不尽的缘故,有一点点差异
37、单片机外接24M的晶振,1ms的基准延时函数用C语言怎么写?
答:定时器T0 工作方式1 晶振频率24MHz
定时器最大定时时间(us):32768
定时器最小定时时间(us):0.5
【1ms精确定时C51代码】
void T0_init(void) //定时器初始化
{
TMOD |= 0x01;
TH0 = 0xf8; //设置定时器计数初值,定时1000us
TL0 = 0x33;
IE |= 0x82; //打开总中断
TR0 = 1; //启动定时器
}
void T0_intservice(void) interrupt 1 //定时器中断服务
{
TH0 = 0xf8; //重装载定时器计数初值
TL0 = 0x33;
//这里可以插入其他处理程序,不会影响定时器工作
}
38、单片机24M晶振可以测量20MHZ的信号吗
答 :要看用什么单片机了。有些单片机执行一条指令需要两个机器周期以上的。那肯定测量不到20MHZ的信号。
39、用单片机的晶振电路产生信号和555计时器产生信号哪个更好?
答:一般来说,晶振的稳定性好于RC震荡器。
40、用什么电路能让32768的晶振产生32768的方波信号?
答 :用或非门,也可以完成 振荡和方波整形 的任务。电路如插图所示。
图中的晶振,原为38000Hz,如改为32768Hz,也完全正常可以工作。
41、晶振的原理,如何产生正弦信号的,详细一点,从电路方面分析?
答:晶体可以等效为一个电感,与里面的电容形成振荡回路,能量从电感慢慢到电容,再从电容慢慢到电感,周而复始形成振荡。正半周是电容的充放电过程,负半周是电感的充放电过程。
42、11.0952的晶振和单片机哪些引脚连接能起作用?电源和18B20应该和单片机的哪些引脚相连呢?RT,要把单片机从实验板上引出来,应该怎么连接?1602LCD的液晶该怎么和单片机相连呢?每次从仿真上连出来都是只有背光和黑点,但是不显示已经烧录的程序。
答:晶振接单片机x1(或者叫XTAL1)和x2(或者叫XTAL2)引脚。
电源接单片机的VCC和GND。
18b20电源脚接电源上,中间的数据线可以单片机的任意io口。具体控制是靠程序完成的。
1602的数据线接单片机io(比如51单片机的P1口),其它的控制线rw,reset,cs等可以接单片机的任意io口。
烧录了程序不能运行,而程序是正确的话,你得看程序怎么定义这些引脚,根据程序定义连接单片机的位置。
43、我现在要用52单片机做一个交通灯电路。要求是红灯,绿灯30s,黄灯3s。循环变化。那么外界晶振怎样选择?单指令周期多少比较合适?图中外接的两个电容的作用是什么?大小多少合适?
答: 如果选择晶振的话,那两个电容值可以选择:30加减10PF左右的(频率在0~33MHZ之间);
如果选择陶瓷晶振的话,电容值可以选择:40加减10PF左右的(频率在1.2~12MHZ)振荡器应尽量靠近电容。指令周期是可以算的,这个是有公式的!
44、89c52单片机如果不接晶振会有什么后果?
答:单片机不工作了 程序无法烧入。。。。等等
45、若89c52单片机使用外接晶振,应如何设置?
答:晶振的两个管脚各接一个20~30pf的电容后分别接入单片机的XTAL1和XTAL2,两个电容的另一端并接后接地即可,不再需要任何设置
46、89c52单片机 晶振频率才12兆,太小了,怎样能改大晶振频率?
答:外接18.432或者24MHz的晶振啊。或者换4T的W77E58单片机,这样相当于把工作频率提高3倍。或者换1T的DS89C4XX单片机,这相当于把工作频率提高8倍!足够了吧?用1T的STC12C5A**单片机也有这样的效果。
47、单片机工作频率的问题,晶振到底怎么选择?
答:
1、最基本的单片机,其机器工作频率为:晶振频率÷12
2、有的单片机(高级一些的)机器工作频率为:晶振频率÷2(或者6等等)
3、以汇编语言为例,单片机执行一条指令需要的时间为1~2个机器周期(机器周期 = 1÷机器工作频率)
4、举例:
一普通单片机晶振12MHz,其机器工作频率为 12MHz÷12 = 1MHz
其机器周期 = 1÷1MHz = 0.000001秒(也就是10的负6次方)
“MOV”指令需要一个机器周期来完成,也就是说执行这条指令需要耗费10的负6次方秒,这么长的时间。
48、51单片机晶振上接的电容大小该如何选择?是晶振越大,电容值也要大一些吗,一般常用多大的。有人说常用的从15-33pf,具体如何选择效果最好?比如我分别用一个6M和12M的晶振,用多大电容更合适?
答:15-33pf都可以 我们一般用的是15P和30P 晶振大小影响不大 我们常用的4M 和12M 以及11.0592M和20M 24M 我们都用的 30P 单片机内部有相应的整形电路 我们不比担心
49、我给51单片机12M晶振接2200pF电容会怎么样?电路图里貌似是22pF的,但是我没有22pF的...接2200pF会不会不正常工作?
答:不可以,晶体会不工作的。15-33p是合理范围。你可以试试看,对单片机不会有损坏。
50、单片机不能正常工作,晶振问题?如何去检查晶振正常还是不正常?另外我看到说晶振跟两个小电容要离得很近,我几乎都没剪引脚(就是买回来多长就多长)就插上去了,这个也有关系吗?
答: 用万用表测量单片机连接晶振的两个引脚 正常起振的状态下电压大概比供电电压的1/2略低一些 如果其中一个或全部引脚为电源电压或零就表明没起振。那个引脚长些一般不会有什么影响 相比之下接地更关键些 两个谐振电容接地端到单片机的电源地要尽量近些。
详解单片机中的串行口
(此处已添加圈子卡片,请到今日头条客户端查看)单片机内部有一个功能强大的全双工串行口,该串行口有四种工作方式,以供不同场合使用。波特率可由软件设置,由片内的定时器/计数器产生。串行口接收、发送均可工作在查询方式或中断方式,使用十分灵活。
单片机的串行口除了用于数据通信之外,还可以用来驱动单片机应用系统中的键盘和显示器,这是其他微机系统所不能比拟的。
串行口的结构与控制
为了进行串行数据通信,单片机同样也需要相应的串行接口电路。不过这个接口电路不是单独的芯片,而是集成在单片机芯片的内部,成为单片机芯片的一个组成部分。
80C51单片机内部的串行口,由发送缓冲寄存器 SBUF、接收缓冲寄存器 SBUF、发送控制寄存器、接收控制寄存器、输入移位寄存器和输出控制门组成。控制单片机串行口的控制寄存器共有两个:特殊功能寄存器 SCON 和 PCON,可以用软件改变两者的内容来控制串行口的工作方式和波特率。
缓冲寄存器SBUF
80C51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器SBUF,这两个在物理上是独立的接收发送器,既可以接收数据,也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,两个缓冲器共用同一个地址(99H)。
这个通信口既可用于网络通信,也可实现串行异步通信,还可以当成同步移位寄存器使用。如果在通信口的输入输出引脚上加上电平转换器,还可方便地构成标准的RS-232和RS-485接口。
在逻辑上,SBUF只有一个,既表示发送寄存器,又表示接收寄存器,具有同一个地址(99H)。在物理上,SBUF有两个,一个是发送寄存器,另一个是接收寄存器。
串行口控制寄存器SCON
该寄存器的字节地址为98H,有位寻址功能。
SCON格式如下:
SM0(SCON.7)、SM1(SCON.6):控制串行口的工作方式。
SM2(SCON.5):允许方式2和方式3进行多机通信控制位。在方式2或方式3中,如SM2=1,则接收到的第9位数据(RB8)为0时不激活RI。在方式1时,如SM2=1,则只有收到有效停止位时才会激活RI。若没有接收到有效停止位,则RI清0。在方式0中,SM2必须置为0。
REN(SCON.4):允许串行接收控制位。REN=1允许串行接收,REN=0则禁止串行接收。该标志由软件来置1或清0。
TB8(SCON.3):是工作在方式2和方式3时,该位是要发送的第9位数据。在一些通信协议中该第9位用于奇偶校验(补奇或补偶);而在MCS-51多处理机通信中,这一位是区别地址帧还是数据帧的标志,需要时由软件置位或复位。
RB8(SCON.2):是工作在方式2和方式3时,该位是已接收到的第9位数据,它是奇偶校验位。在MCS-51多处理机通信中是区别地址帧/数据帧的标志。在模式1中,若SM2=0,RB8存放的是已接收数据的停止位。在模式0中,RB8未用,需要时由软件来置1或清0。
TI(SCON.1):发送中断标志位。在模式0中,发送完第8位数据时由硬件置位;在其他模式中发送停止位开始时刻由硬件置位。置位时TI=1,申请中断,CPU响应中断后,由软件来清除TI再发送下一帧数据。
RI(SCON.0):接收中断标志位。在模式0中,接收完第8位数据时由硬件自动置位;在模式 1 中,SM2=1,只有接收到有效的停止位,才能对 RI 置位。在其他模式中,在接收停止位的半中间由硬件对RI置位。置位时申请中断,CPU响应中断后取走数据,清除RI标志,必须由软件清零。
SCON的所有位复位时被清零。
特殊功能寄存器PCON
其字节地址为87H,没有位寻址功能。PCON的格式如下:
其中与串行接口有关的只有D7位。
SMOD:波特率选择位。
串行口的工作方式
串行口有四种工作方式,它们是由串行口控制寄存器 SCON 的 SM0、SM1的状态来定义的,编码及功能如表2-3所示。在这四种工作方式中,串行通信只使用方式1、2、3。方式0主要用于扩展并行输入/输出口。
表2-3 串行口工作方式
表中:fosc为晶振频率,UART为通用异步接收和发生器。
方式0
在方式 0 状态下,串行口为同步移位寄存器输入/输出方式,其波特率是固定不变的,数据由RxD(P3.0)端输入,同步移位脉冲由TxD(P3.1)端输出。方式0主要用于扩展并行输入输出口(如串行LED数码管显示系统等)。
(1)方式0发送
当一个数据写入串行口发送缓冲器SBUF时,串行口即将8位数据以fosc/12的波特率从RxD引脚输出(从低位到高位),发送完8位数据时,将发送中断标志TI置1。TxD引脚输出同步脉冲,波形如图2-22所示。
(2)方式0接收
在满足REN=1和RI=0的条件下,就会启动一次接收过程,此时RxD为串行输入端,TxD为同步脉冲输出端。串行接收的波特率为fosc/12,其时序如图2-23所示。当接收完一帧数据(8位)后,控制信号复位,中断标志 RI 被置 1,呈中断申请状态。当再次接收时,必须通过软件将RI清零。
▲图2-22 串行口“方式0”发送时序
▲图2-23 串行口“方式0”接收时序
在方式0中,SCON中的TB8、RB8位没用,多机通信控制位SM2位必须为0。在方式0下发送或接收完8位数据时,由硬件置1并发送中断标志TI或RI,向CPU申请中断,CPU响应TI或RI中断后,标志TI或RI必须由用户程序清0。
方式1
串行口以方式1工作时,SCON中的SM0、SM1两位分别为0、1,则串行口被控制为波特率可变的8位异步通信接口。发送的每帧信息为10位:1位起始位,8位数据位(先低位后高位)和1位停止位。
(1)方式1发送
串行口以方式1发送时,数据由TxD端输出,CPU执行一条数据写入发送数据缓冲器SBUF的指令,数据字节写入SBUF后,就启动串行口发送器发送。发送完一帧信息的数据位后,发送中断标志置1,其时序如图2-24所示。
▲图2-24 串行口“方式1”发送时序
(2)方式1接收
当REN=1时,允许接收器接收,数据从RxD端输入。接收器以所选波特率的16倍速率采样RxD端的电平,当检测到RxD端从1到0的跳变时,启动接收器接收,并复位内部的16分频计数器,以便实现同步。
在起始位,如果接收到的值不为0,则起始位无效,复位接收电路,当再次接收到一个由1到0的跳变时,重新启动接收器。如果接收值为0,则起始位有效,接收器开始接收本帧的其余信息(一帧信息为10位)。在方式1接收中,若同时满足以下两个条件:RI=0、SM2=0和接收到的停止位=1时,则接收数据有效,实现装载SBUF、停止位进入PB8、接收中断标志RI置1。接收控制器再次采样RxD的负跳变,以便接收下一帧数据。
若这两个条件不能同时满足,信息将丢失。中断标志RI必须由用户的软件清零,通常情况下,串行口以方式1工作时,SM2置为0。方式1的接收时序如图2-25所示。
▲图2-25 串行口“方式1”接收时序
方式2
当SM0、SMl两位分别为1、0时,串行口工作在方式2,此时串行口被定义为9位异步通信接口。发送时可编程位(TB8)根据需要设置为0或1,接收时,可编程位被送入SCON中的RB8。
(1)方式2发送
在方式2发送时,数据由TxD端输出,发送一帧信息由11位组成:1位起始位、8位数据位(低位在先、高位在后)、1位可编程位(第9位数据位)和1位停止位,附加的第9位数据为 SCON中的 TB8。TB8由软件置 1 或清 0,可作为多机通信中的数据标志位,也可作为数据的奇偶校验位。
CPU在执行一条写SBUF的指令后,便立即启动发送器发送,送完一帧信息后,TI被置1,其时序如图2-26所示。在发送下一帧信息之前,TI必须由中断服务程序(或查询程序)清0。
▲图2-26 串行口“方式2”发送时序
(2)方式2接收
当 SM0、SMl两位分别为1、0,且 REN=1 时,允许串行口以方式 2 接收数据。数据由 RxD端输入,接收11位信息:1位起始位、8位数据位、1位可编程位(第9位数据)和1位停止位。当接收器采样到RxD端从1到0的跳变,并判断起始位有效后,便开始接收一帧信息。当接收器接收到第9位数据后,如果RI=0且SM2=0或接收到的第9位数据为1时,接收到的数据送入SBUF,第9位数据送入RB8,并置RI=1,其时序如图2-27所示。若不能同时满足这两个条件,接收的信息将丢失。
▲图2-27 串行口“方式2”接收时序
方式3
当SM0、SM1两位为11时,串行口工作在方式3,方式3为波特率可变的9位异步通信方式,除了波特率外,方式3和方式2的发送时序和接收时序相同。
波特率的计算与串行口初始化
波特率的计算
在串行通信中,收发双方的波特率必须保持一致。通过软件可设定串行口的4种工作方式,并确定每种方式的波特率。
(1)方式0的波特率是固定的,为单片机晶振频率fosc的1/12,即BR=fosc/12。
如fosc=6MHz,则波特率500kbit/s;如fosc=12MHz,则波特率为1Mbit/s。
(2)方式 2 的波特率也是固定的,且有两种。一种是晶振频率的 1/32,另一种是晶振频率的1/64,即fosc/32和fosc/64。如用公式表示为:
式中,SMOD为特殊功能寄存器PCON串行口波特率系数的控制位,SMOD=1表示波特率加倍。注意,PCON不能使用位寻址,只能对其进行字节操作。
如12M晶振系统中,若SMOD=0,则波特率=187.5kbit/s;SMOD=1,则波特率375kbit/s。
(3)方式1和方式3的波特率是可变的,其波特率由定时器1的计数溢出(对80C52来说,也可使用定时器2的计数溢出)决定,公式为:
式中定时器1溢出率计算公式为:
各种方式波特率的计算如表2-4所示。
表2-4 波特率的计算公式
表中,若SMOD=0,则K=1;若SMOD=1,则K=2。
通常使用单片机的串行口时,选用的晶振频率 fosc比较固定(一般为 6MHz , 12MHz 或11.0592MHz)。单片机和微机通信时,选用的波特率也相对固定。
实际使用中,经常根据已知波特率和时钟频率来计算定时器T1的初值。为方便使用,将常用的波特率和初值X间的关系列成表2-5。
表2-5 常用通信方式及其波特率
其中有以下三点需要注意。
(1)表2-5中仅为一些特定系统串口通信时的典型数据,对于其他一些未列出的波特率,应通过前述公式进行计算获取。并可进行相关参数调整,以获得需求的波特率。
(2)在使用的时钟振荡频率为12MHz或6MHz时,表中初值X和相应的波特率之间有一定误差。例如,FDH的对应的理论值是10416波特(时钟振荡频率为6MHz时),与9600波特相差816波特,消除误差可以通过调整时钟振荡频率 fosc来实现。例如,如果采用的时钟振荡频率为11.0592MHz,在要求串行通信的系统中,为保证串行通信准确,一般使用11.0592Hz的晶振。
(3)如果串行通信选用很低的波特率,可将定时器T1设置为方式1定时。但T1溢出时,需要在中断服务程序中重新装入初值。中断响应时间和执行指令时间也会使波特率产生一定的误差,可用改变初值的方法进行适当调整。
串行通信的校验
异步通信时可能会出现帧格式错、超时错等传输错误。在具有串行口的单片机的开发中,应考虑在通信过程中对数据差错进行校验,因为差错校验是保证准确无误通信的关键。常用差错校验方法有奇偶校验(80C51系列单片机编程采用此法)、和校验及循环冗余码校验等。
(1)奇偶校验
在发送数据时,数据位尾随的一位数据为奇偶校验位(1或0)。当设置为奇校验时,数据中1的个数与校验位1的个数之和应为奇数;当设置为偶校验时,数据中1的个数与校验位中1的个数之和应为偶数。接收时,接收方应具有与发送方一致的差错检验设置,当接收一个字符时,对 1的个数进行校验,若二者不一致,则说明数据传送出现了差错。
奇偶校验是按字符校验,数据传输速度将受到影响。这种特点使得它一般只用于异步串行通信中。
(2)和校验
所谓和校验,是指发送方将所发送的数据块求和(字节数求和),并产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据时也是先对数据块求和,将所得结果与发送方的校验和进行比较,相符则无差错,否则即出现了差错。这种和校验的缺点是无法检验出字节位序的错误。
(3)循环冗余码校验
这种校验是对一个数据块校验一次。例如对磁盘信息的访问、ROM或RAM存储区的完整性等的检验。这种方法广泛应用于串行通信方式。
串行口初始化
在使用单片机串行口之前,应对其进行编程初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制,具体步骤如下。
(1)确定定时器l的工作方式——编程TMOD寄存器。
(2)计算定时器l的初值——装载THl、TLl。
(3)启动定时器1——编程TCON中的TRl位。
(4)确定串行口的控制——编程SCON。
(此处已添加圈子卡片,请到今日头条客户端查看)相关问答
单片机 基础与应用题求解 已知 晶振频率为12mhz,在P1.7引脚上输...[最佳回答]1)确定定时器/计数器的工作方式.用定时方式2,能够自动重装初始值的2)计算定时常数没有必要,现在都是由编译软件自己算3)写出完整程序如下:;------...
单片机 问题 已知 (A)=192,编程求A与立即数88H相加,并将结果...[最佳回答]2入AADDA,#88H;A+88H=148HMOV30H,A;低位入30HCLRA;A清0RLCA;;左环移,进位标志入AMOV31H,A;高位入31H结果:31H=...
ram中知道位地址怎么求字节地址?要求解RAM中的字节地址,需要考虑RAM的存储结构和位宽。假设RAM的位宽是N(以比特为单位),字节地址为B,位地址为A(从0开始计数)。首先,需要计算字节地址...另...
时间与初值的公式?初值=最大定时时间-定时时间实例1已知单片机的晶振是6Mhz,定时0.5ms,计算T0在方式1和方式2的初值。(2)计算初值:计数值=定时时间/机器周期=500us/2...
50us的计数初值?1、已知单片机系统机器周期为时钟周期的12倍,故每个机器周期为12/12M=1us2、50ms=50*1000us3、16位定时器的定时时间最长为65536us,定时50us的初值为65536-5...
单片机 原理及接口技术1、指出下列指令是否正确.对√错×(1)M...[最佳回答]把片外地址为2000H单元的数选入片内20H单元MOVDPTR,#2000HMOVXA,@DPTRMOV20H,AEND
51 单片机 如何采集电阻?要使用51单片机采集电阻,首先需要将电阻与单片机的引脚连接。可以使用一个电阻分压电路,将电阻与一个已知电阻串联,然后将串联电阻连接到单片机的模拟输入引脚...
【 单片机 测试题二,填空题(共5题,每空1分)1.复位时SP的值为__...[最佳回答]分开答吧,我答前几题.后面的朋友继续.二,填空题(共5题,每空1分)1.复位时SP的值为_07H____,P1口的值为__0FFH_____.2.MCS-51单片机存储器物理上分...
已知 dph和dpl怎么求dptr前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组成。这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存...
单片机 ,当定时器/计数器工作方式于1下,晶振频率为6M,请计算最短定时时间和最长定时时间。各是多少?定时器是通过计数溢出来计时的,工作方式1是16位计数方式。晶振频率为6M,那么计数器加1需要一个机器周期2us。机器周期=12/fosc,fosc为晶振频率。计数初值为1...