第四部分 串口中断培训(09.18)
MCS-51单片机的串行口具有两条独立的数据线——发送端TXD和接收端RXD,它允许数据同时往两个相反的方向传输。一般通信时发送数据由TXD端输出,接收数据由RXD端输入。MCS-51单片机的串行口既可以用于网络通信,亦可实现串行异步通信,还可以用作同步移位寄存器。如果在串行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232接口。MCS-51单片机的串行接口是一个全双工通信接口,它有两个物理上独立的接收、发送缓冲器SBUF,可以同时发送和接收数据。但是发送缓冲器只能写入,不能读出;接收缓冲器只能读出,不能写入。两个缓冲器共用一个地址(99H)。
数据通信的基本概念
常用于数据通信的传输方式有单工、半双工、全双工和多工方式。
- 单工方式:数据仅按一个固定方向传送。因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集。
- 半双工方式:数据可实现双向传送,但不能同时进行,实际的应用采用某种协议实现收/发开关转换。
- 全双工方式:允许双方同时进行数据双向传送,但一般全双工传输方式的线路和设备较复杂。
- 多工方式:以上三种传输方式都是用同一线路传输一种频率信号,为了充分地利用线路资源,可通过使用多路复用器或多路集线器,采用频分、时分或码分复用技术,即可实现在同一线路上资源共享功能。
根据同步方式,串行数据通信有两种形式,如图5-5所示。
- 异步通信。在这种通信方式中,接收器和发送器有各自的时钟,它们的工作是非同步的。异步通信用一帧来表示一个字符,其内容是一个起始位,紧接着是若干个数据位。
- 同步通信。同步通信格式中,发送器和接收器由同一个时钟源控制,在异步通信中,每传输一帧字符都必须加上起始位和停止位,占用了传输时间,若要求传送数据 量较大,速度就会慢得多。同步传输方式去掉了这些起始位和停止位,只在传输数据块时先送出一个同步头(字符)标志即可。
- 同步传输方式比异步传输方式速度快,这是它的优势。但同步传输方式也有其缺点,即它必须要用一个时钟来协调收发器的工作,所以它的设备也较复杂。
MCS-51的串行口控制寄存器
在完成串行口初始化后,发送数据时,采用MOV SBUF,A指令,将要发送的数据写入SBUF,则CPU自动启动和完成串行数据的输出;接收数据时,采用MOV A,SBUF指令,CPU就自动将接收到的数据从SBUF中读出。
控制MCS-51单片机串行接口的控制寄存器有两个——特殊功能寄存器SCON和PCON,用以设置串行端口的工作方式、接收/发送的运行状态、接收/发送数据的特征、数据传输率的大小,以及作为运行的中断标志等,其格式如下:
① 串行口控制寄存器SCON。SCON的字节地址是98H,位地址(由低位到高位)分别是98H一9FH。SCON的格式如下:
SM0、SMl:串行口工作方式控制位。
00——方式0;01——方式1;
10——方式2;11——方式3。
SM2:仅用于方式2和方式3的多机通信控制位。
发送机SM2=1(要求程控设置)。
当为方式2或方式3时:
接收机 SM2=1时,若RB8=1,可引起串行接收中断;若RB8=0,不引起串行接收中断。SM2=0时,若RB8=1,可引起串行接收中断;若RB8=0,亦可引起串行接收中断。
- REN串行接收允许位:0——禁止接收;1——允许接收。
- TB8:在方式2、3中,TB8是发送机要发送的第9位数据。
- RB8:在方式2、3中,RB8是接收机接收到的第9位数据,该数据正好来自发送机的TB8。
- TI:发送中断标志位。发送前必须用软件清零,发送过程中TI保持零电平,发送完一帧数据后,由硬件自动置1。如要再发送,必须用软件再清零。
- RI:接收中断标志位。接收前,必须用软件清零,接收过程中RI保持零电平,接收完一帧数据后,由片内硬件自动置1。如要再接收,必须用软件再清零。
② 电源控制寄存器PCON。PCON的字节地址为87H,无位地址,其格式如下:
PCON是为在CMOS结构的MCS-51单片机上实现电源控制而附加的,对于HMOS结构的MCS-51系列单片机,除了第7位外,其余都是虚设的。与串行通信有关的也就是第7位,称作SMOD,它的用处是使数据传输率加倍。
SMOD:数据传输率加倍位。在计算串行方式1,2,3的数据传输率时;0表示不加倍;1表示加倍。
其余有效位说明如下。
GF1、GF2:通用标志位。
PD:掉电控制位,0表示正常方式,1表示掉电方式。
IDL:空闲控制位,0表示正常方式,1表示空闲方式。
除了以上两个控制寄存器外,中断允许寄存器IE中的ES位也用来作为串行I/O中断允许位。当ES=1,允许串行I/O中断;当ES=0,禁止串行I/O中断。中断优先级寄存器IP的PS位则用作串行I/O中断优先级控制位。当PS=1,设定为高优先级;当PS =0,设定为低优先级。
工作方式
MCS-51 单片机可以通过软件设置串行口控制寄存器SCON中SM0(SCON.7)和SMl(SCON.6)来指定串行口的4种工作方式。串行口操作模式选择如表5-2所示。
表5-2 串行口操作模式选择表
SM0 SM1
| 模 式
| 功 能
| 波 特 率
| 0 0
| 0
| 同步移位寄存器
| fOSC/12
| 0 1
| 1
| 8位UART
| 可变(T1溢出率)
| 1 0
| 0
| 9位UART
| fOSC/64或fOSC/32
| 1 1
| 1
| 9位UART
| 可变(T1溢出率)
|
其中,fosc是振荡器的频率,UART为通用异步接收和发送器的英文缩写。下面对这4种工作模式作进一步介绍。
1.方式0
当设定SM1、SM0为00时,串行口工作于方式0,它又叫同步移位寄存器输出方式。在方式0下,数据从 RXD(P3.0)端串行输出或输入,同步信号从TXD(P3.1)端输出,发送或接收的数据为8位,低位在前,高位在后,没有起始位和停止位。数据传输 率固定为振荡器的频率1/12,也就是每一机器周期传送一位数据。方式0可以外接移位寄存器,将串行口扩展为并行口,也可以外接同步输入/输出设备。
执行任何一条以SBUF为目的的寄存器指令,就开始发送。
2.方式1
当设定SM1、SM0为01时,串行口工作于方式1。方式1为数据传输率可变的8位异步通信方式,由TXD发送,RXD接收,一帧数据为10位,1位起始位(低电平),8位数据位(低位在前)和1位停止位(高电平)。数据传输率取决于定时器1或2的溢出速率 (1/溢出周期)和数据传输率是否加倍的选择位SMOD。
对于有定时器/计数器2的单片机,当T2CON寄存器中RCLK和TCLK置位时,用定时器2作为接收和发送的数据传输率发生器,而RCLK=TCLK=0时,用定时器1作为接收和发送的数据传输率发生器。两者还可以交叉使用,即发送和接收采用不同的数据传输率。
类似于模式0,发送过程是由执行任何一条以SBUF为目的的寄存器指令引起的。
3.方式2
当设定SM0、SM1二位为10时,串行口工作于方式2,此时串行口被定义为9位异步通信接口。采用这种方式可接收或发送 11 位数据,以 11 位为一帧,比方式 1 增加了一个数据位,其余相同。第 9 个数据即 D8 位用作奇偶校验或地址/数据选择,可以通过软件来控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 单片机串行口适用于多机通信。发送时,第9位数据为TB8,接收时,第9位数据送入RB8。方式 2 的数据传输率固定,只有两种选择,为振荡率的 1/64 或 1/32 ,可由 PCON 的最高位选择。
4.方式3
当设定SM0、SM1二位为11时,串行口工作于方式3。方式3与方式2类似,唯一的区别是方式3的数据传输率是可变的。而帧格式与方式2一样为11位一帧。所以方式3也适合于多机通信。
数据传输率的确定
串行口每秒钟发送(或接收)的位数就是数据传输率。
对方式0来说,数据传输率已固定成fosc/12,随着外部晶振的频率不同,数据传输率亦不相同。常用的fosc有12MHz和6MHz,所以数据传输率相应为1000×103和500×103bit/s。在此方式下,数据将自动地按固定的数据传输率发送/接收,完全不用设置。
对方式2而言,数据传输率的计算式为2SMOD·fosc/64。当SMOD=0时,数据传输率为fm/64;当SMOD=1时,数据传输率为fosc/32。在此方式下,程控设置SMOD位的状态后,数据传输率就确定了,不需要再作其他设置。
对方式1和方式3来说,数据传输率和定时器1的溢出率有关,定时器1的溢出率为:
定时器1的溢出率=定时器1的溢出次数/秒
方式1和方式3的数据传输率计算式为:
2SMOD/32×T1溢出率
根据SMOD状态位的不同,数据传输率有Tl/32溢出率和T1/16溢出率两种。由于T1溢出率的设置是方便的,因而数据传输率的选择将十分灵活。
前已叙及,定时器Tl有4种工作方式,为了得到其溢出率,而又不必进入中断服务程序,往往使T1设置在工作方式2的运行状态,也就是8位自动加入时间常数的方式。
表5-3所示常用数据传输率的设置方法。
表5-3 常用数据传输率设置方法
数据传输率/Hz
| fOSC/MHz
| SMOD
| 定时器1
| C/T
| 方 式
| 重新装入值
| 方式0最大:1M
方式2最大:375k
方式1、3:62.5k
19.2k
9.6k
4.8k
2.4k
1.2k
110
| 12
12
12
11.0592
11.0592
11.0592
11.0592
11.0592
12
| X
1
1
1
0
0
0
0
0
| X
X
0
0
0
0
0
0
0
| X
X
2
2
2
2
2
2
1
| X
X
FFH
FDH
FDH
FAH
F4H
E8H
0FEEH
|
串行通信实例
我们先看看实例图形,我们先设计一个串口通讯的电路,一端和单片机连接,另一端和电脑连接。如下的protel所示:
此图中,使用的晶振是11.0592mhz的晶振,和电脑进行通讯,电脑上面
下面是汇编程序
LED BIT P1.0
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP TRX
ORG 0100H
MAIN: MOV SP, $50H
MOV TMOD, #21H
MOV SCON, #80H
MOV TH1, #0fdh ;9600bit
MOV TL1, #0fdh
SETB ES
SETB REN
SETB EA
MOV SBUF, #30H ;发送数据第一位
JNB TI, $
CLR TI
MOV SBUF, #31H ;发送数据第一位
JNB TI, $
CLR TI
MOV SBUF, #32H ;发送数据第一位
JNB TI, $
CLR TI
JMP $
TRX: PUSH PSW ;串行中断
PUSH ACC
PUSH DPL
PUSH DPH
JNB RI,ENDRX
clr tb8
CLR RI
MOV A,SBUF
CJNE A,#30H,ENDRX
SETB LED0
ENDRX: POP DPH
POP DPL
POP ACC
POP PSW
RETI
END
这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收和查询发送。
#include
#include
main()
{
init_serial(); //串行口初始化
while (1)
{
send_char(0X30); //向串口发送字符串
send_char(0X31); //向串口发送字符串
send_char(0X32); //向串口发送字符串
while(1)
{;}
}
}
/* 串行口初始化 */
void init_serial( void )
{
SCON = 0x50; //串行工作方式1, 8位异步通信方式
TMOD |= 0x20; //定时器1, 方式 2, 8位自动重装
PCON |= 0x80; //SMOD=1,表示数据传输率加倍
TH1 = 0xFD; //数据传输率:9600 fosc=11.0592MHz
IE |= 0x90; //允许串行中断
TR1 = 1; //启动定时器1
}
/* 向串口发送一个字符 */
void send_char( unsigned char x)
{
SBUF=x;
while (TI== 0 );
TI= 0;
}
/* 串口接收中断函数 */
void serial () interrupt 4 using 3
{
if (RI)
{
unsigned char x;
RI = 0;
x=SBUF; //接收字符
if ( x= 0X30 )
{
LED0=0;
}
}
}
第五部分 单片机抗干扰(09.19)
本章很多是收集整理的,我也经常参考这些,虽然不是经典名言,但是至少给了我们一个依据。
一、下面的一些系统要特别注意抗电磁干扰:
1、微控制器时钟频率特别高,总线周期特别快的系统。
2、系统含有大功率,大电流驱动电路,如产生火花的继电器,大电流开关等。
3、含微弱模拟信号电路以及高精度A/D变换电路的系统。
二、为增加系统的抗电磁干扰能力采取如下措施:
1、选用频率低的微控制器:
选用外时钟频率低的微控制器可以有效降低噪声和提高系统的抗干扰能力。同样频率的方波和正弦波,方波中的高频成份比正弦波多得多。虽然方波的高频成份的波的幅度,比基波小,但频率越高越容易发射出成为噪声源,微控制器产生的最有影响的高频噪声大约是时钟频率的3倍。
2、减小信号传输中的畸变
微控制器主要采用高速CMOS技术制造。信号输入端静态输入电流在1mA左右,输入电容10PF左右,输入阻抗相当高,高速CMOS电路的输出端都有相当的带载能力,即相当大的输出值,将一个门的输出端通过一段很长线引到输入阻抗相当高的输入端,反射问题就很严重,它会引起信号畸变,增加系统噪声。当Tpd>Tr时,就成了一个传输线问题,必须考虑信号反射,阻抗匹配等问题。
信号在印制板上的延迟时间与引线的特性阻抗有关,即与印制线路板材料的介电常数有关。
可以粗略地认为,信号在印制板引线的传输速度,约为光速的1/3到1/2之间。微控制器构成的系统中常用逻辑电话元件的Tr(标准延迟时间)为3到18ns之间。
在印制线路板上,信号通过一个7W的电阻和一段25cm长的引线,线上延迟时间大致在4~20ns之间。也就是说,信号在印刷线路上的引线越短越好,最长不宜超过25cm。而且过孔数目也应尽量少,最好不多于2个。
当信号的上升时间快于信号延迟时间,就要按照快电子学处理。此时要考虑传输线的阻抗匹配,对于一块印刷线路板上的集成块之间的信号传输,要避免出现Td>Trd的情况,印刷线路板越大系统的速度就越不能太快。
用以下结论归纳印刷线路板设计的一个规则:
信号在印刷板上传输,其延迟时间不应大于所用器件的标称延迟时间。
3、减小信号线间的交叉干扰:
A点一个上升时间为Tr的阶跃信号通过引线AB传向B端。信号在AB线上的延迟时间是Td。在D点,由于A点信号的向前传输,到达B点后的信号反射和AB线的延迟,Td时间以后会感应出一个宽度为Tr的页脉冲信号。在C点,由于AB上信号的传输与反射,会感应出一个宽度为信号在AB线上的延迟时间的两倍,即2Td的正脉冲信号。这就是信号间的交叉干扰。干扰信号的强度与C点信号的di/at有关,与线间距离有关。当两信号线不是很长时,AB上看到的实际是两个脉冲的迭加。
CMOS工艺制造的微控制由输入阻抗高,噪声高,噪声容限也很高,数字电路是迭加100~200mv噪声并不影响其工作。若图中AB线是一模拟信号,这种干扰就变为不能容忍。如印刷线路板为四层板,其中有一层是大面积的地,或双面板,信号线的反面是大面积的地时,这种信号间的交叉干扰就会变小。原因是,大面积的地减小了信号线的特性阻抗,信号
在D端的反射大为减小。特性阻抗与信号线到地间的介质的介电常数的平方成反比,与介质厚度的自然对数成正比。若AB线为一模拟信号,要避免数字电路信号线CD对AB的干扰,AB线下方要有大面积的地,AB线到CD线的距离要大于AB线与地距离的2~3倍。可用局部屏蔽地,在有引结的一面引线左右两侧布以地线。
4、减小来自电源的噪声
电源在向系统提供能源的同时,也将其噪声加到所供电的电源上。电路中微控制器的复位线,中断线,以及其它一些控制线最容易受外界噪声的干扰。电网上的强干扰通过电源进入电路,即使电池供电的系统,电池本身也有高频噪声。模拟电路中的模拟信号更经受不住来自电源的干扰。
5、注意印刷线板与元器件的高频特性
在高频情况下,印刷线路板上的引线,过孔,电阻、电容、接插件的分布电感与电容等不可忽略。电容的分布电感不可忽略,电感的分布电容不可忽略。电阻产生对高频信号的反射,引线的分布电容会起作用,当长度大于噪声频率相应波长的1/20时,就产生天线效应,噪声通过引线向外发射。
印刷线路板的过孔大约引起0.6pf的电容。
一个集成电路本身的封装材料引入2~6pf电容。
一个线路板上的接插件,有520nH的分布电感。一个双列直扦的24引脚集成电路扦座,引入4~18nH的分布电感。
这些小的分布参数对于这行较低频率下的微控制器系统中是可以忽略不计的;而对于高速系统必须予以特别注意。
6、元件布置要合理分区
元件在印刷线路板上排列的位置要充分考虑抗电磁干扰问题,原则之一是各部件之间的引线要尽量短。在布局上,要把模拟信号部分,高速数字电路部分,噪声源部分(如继电器,大电流开关等)这三部分合理地分开,使相互间的信号耦合为最小。
7、处理好接地线
印刷电路板上,电源线和地线最重要。克服电磁干扰,最主要的手段就是接地。
对于双面板,地线布置特别讲究,通过采用单点接地法,电源和地是从电源的两端接到印刷线路板上来的,电源一个接点,地一个接点。印刷线路板上,要有多个返回地线,这些都会聚到回电源的那个接点上,就是所谓单点接地。所谓模拟地、数字地、大功率器件地开分,是指布线分开,而最后都汇集到这个接地点上来。与印刷线路板以外的信号相连时,通常采用屏蔽电缆。对于高频和数字信号,屏蔽电缆两端都接地。低频模拟信号用的屏蔽电缆,一端接地为好。
对噪声和干扰非常敏感的电路或高频噪声特别严重的电路应该用金属罩屏蔽起来。
8、用好去耦电容。
好的高频去耦电容可以去除高到1GHZ的高频成份。陶瓷片电容或多层陶瓷电容的高频特性较好。设计印刷线路板时,每个集成电路的电源,地之间都要加一个去耦电容。去耦电容有两个作用:一方面是本集成电路的蓄能电容,提供和吸收该集成电路开门关门瞬间的充放电能;另一方面旁路掉该器件的高频噪声。数字电路中典型的去耦电容为0.1uf的去耦电容有5nH分布电感,它的并行共振频率大约在7MHz左右,也就是说对于10MHz 以下的噪声有较好的去耦作用,对40MHz以上的噪声几乎不起作用。
1uf,10uf电容,并行共振频率在20MHz以上,去除高频率噪声的效果要好一些。在电源进入印刷板的地方和一个1uf或10uf的去高频电容往往是有利的,即使是用电池供电的系统也需要这种电容。
每10片左右的集成电路要加一片充放电电容,或称为蓄放电容,电容大小可选10uf。最好不用电解电容,电解电容是两层溥膜卷起来的,这种卷起来的结构在高频时表现为电感,最好使用胆电容或聚碳酸酝电容。
去耦电容值的选取并不严格,可按C=1/f计算;即10MHz取0.1uf,对微控制器构成的系统,取0.1~0.01uf之间都可以。
三、降低噪声与电磁干扰的一些经验。
1. 能用低速芯片就不用高速的,高速芯片用在关键地方。
2. 可用串一个电阻的办法,降低控制电路上下沿跳变速率。
3. 尽量为继电器等提供某种形式的阻尼。
4. 使用满足系统要求的最低频率时钟。
5. 时钟产生器尽量靠近到用该时钟的器件。石英晶体振荡器外壳要接地。
6. 用地线将时钟区圈起来,时钟线尽量短。
7. I/O驱动电路尽量靠近印刷板边,让其尽快离开印刷板。对进入印制板的信号要加滤波。
8. 高噪声区来的信号也要加滤波,同时用串终端电阻的办法,减小信号反射。
9. MCD无用端要接高,或接地,或定义成输出端,集成电路上该接电源地的端都要接,不要悬空。
10. 闲置不用的门电路输入端不要悬空,闲置不用的运放正输入端接地,负输入端接输出端。
11. 印制板尽量使用45折线而不用90折线布线以减小高频信号对外的发射与耦合。
12. 印制板按频率和电流开关特性分区,噪声元件与非噪声元件要距离再远一些。
13. 单面板和双面板用单点接电源和单点接地、电源线、地线尽量粗,经济是能承受的话用多层板以减小电源,地的容生电感。
14. 时钟、总线、片选信号要远离I/O线和接插件。
15. 模拟电压输入线、参考电压端要尽量远离数字电路信号线,特别是时钟。
16. 对A/D类器件,数字部分与模拟部分宁可统一下也不要交叉。
17. 时钟线垂直于I/O线比平行I/O线干扰小,时钟元件引脚远离I/O电缆。
18. 元件引脚尽量短,去耦电容引脚尽量短。
19. 关键的线要尽量粗,并在两边加上保护地。高速线要短要直。
20. 对噪声敏感的线不要与大电流,高速开关线平行。
21. 石英晶体下面以及对噪声敏感的器件下面不要走线。
22. 弱信号电路,低频电路周围不要形成电流环路。
23. 任何信号都不要形成环路,如不可避免,让环路区尽量小。
24. 每个集成电路一个去耦电容。每个电解电容边上都要加一个小的高频旁路电容
25. 用大容量的钽电容或聚酷电容而不用电解电容作电路充放电储能电容。使用管状电容时,外壳要接地 |