590 likes | 866 Views
第七单元 认识和使用单片机串口. 项目一 认识 8051 的串口通信. 项目二 利用串口扩展并行输入口. 项目三 利用串口扩展并行输出口. 项目四 现实串口双机通信. 项目一 认识 8051 的串口通信. 【 学习目标 】. 1 、了解串行通信的概念。 2 、认识串行口控制寄存器 SCON 的设置。 3 、认识波特率控制寄存器 PCON 的设置。 4 、认识串行通信方式。 5 、能根据已知条件,设置程序初始化。.
E N D
第七单元 认识和使用单片机串口 项目一 认识8051的串口通信 项目二 利用串口扩展并行输入口 项目三 利用串口扩展并行输出口 项目四 现实串口双机通信
项目一 认识8051的串口通信 【学习目标】 1、了解串行通信的概念。 2、认识串行口控制寄存器SCON的设置。 3、认识波特率控制寄存器PCON的设置。 4、认识串行通信方式。 5、能根据已知条件,设置程序初始化。
一、串行通信的概念 单片机通信的方式有两种,分别为并行通信和串行通信。 图7-1-1 并行通信 图7-1-2 串行通信
二、串行口的控制寄存器 8051单片机串行口控制寄存器有SCON和PCON两个 1.串行口控制寄存器SCON 控制寄存器SCON是一个8位可进行位寻址的寄存器。串行口通信的方式选择、接收和发送控制以及串行口的状态标志等均由特殊功能寄存器SCON控制和指示。SCON 字节地址为98H。
SCON寄存器格式如下表7-1-1所示: 表 7-1-1 SCON寄存器
(1)SM0、SM1:串行口工作方式选择位,用于选定串行口的4种工作方式,其定义如下表7-1-2所示:(1)SM0、SM1:串行口工作方式选择位,用于选定串行口的4种工作方式,其定义如下表7-1-2所示: 注:表中的fosc为晶振频率。波特率是指每秒传送数据的位数,1波特=1bit/s。波特率越大,通信速度越快
(2)SM2:多机通信控制位。当多机通信时SM2=1,否则SM2=0。(2)SM2:多机通信控制位。当多机通信时SM2=1,否则SM2=0。 (3)REN:允许接收控制位。当REN=1时,允许接收数据。当REN=0 禁止接收数据。靠软件置位或清零。 (4)TB8:发送数据的第9位。在串行口工作方式2或方式3中,TB8是发送数据的第9位。在带奇偶校验的串行通信中,把TB8作为奇偶校验位。可由软件置位或清零。 (5)RB8:接收数据的第9 位。在串行口工作方式2或方式3中,RB8是接收数据的第9位。在串行口工作方式1时,当SM2=0,RB8为停止位。在串行口工作方式0中,RB8不使用。
(6)TI:发送中断标志位。用于确定一帧数据是否发送完毕,当发送完一帧数据时TI被置位,意味着发送缓冲器SUBF已空,靠软件清零后,可以发送下一帧数据。可由软件查询(如:JB TI,$)TI被置位。 (7)RI:接收中断标志位。用于确定一帧数据是否接收完毕,当接收完一帧数据时RI被置位。然后用查询的方法或者中断的方法将接收数据缓冲器SBUF中的数据传送到累加器A中。RI不会自动复位,必须由软件清0。
2. 波特率控制寄存器PCON PCON是一个不可进行位寻址的8位特殊功能寄存器,PCON字节地址为87H。PCON中,只有一位SMOD与串行口工作有关。 PCON格式如下表7-1-3所示: SMOD:串行通信波特率系数控制位。当SMOD=1时,串行通信的波特率加倍。只能按字节寻址,可由指令(MOV PCON,#80H)实现设置。否则SMOD=0,串行通信的波特率不加倍,可由指令(MOV PCON,#00H)实现设置。
三、串行口通信工作方式 根据串行通信的数据格式和波特率的不同,8051单片机的串行行口可分为4种工作方式,由SOCN寄存器的SM0、SM1两个位选择。 1.方式0 方式0主要用于外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。串行口在方式0下有两种用途:一种是把串行口设置成并入串出的输出口,另一种是设置成串入并出的输入口。 设置SCON中的M1M0=00时,串行口通信被设置为工作方式0,波特率是固定fosc/12,不需要使用定时器T1产生波特率。
2.方式1 当SM0=0、SM1=1时,串行口通信被设置为工作方式1,波特率为可变的10位异步串行通信方式。8051单片机引脚RXD(P3.0)作为串行数据接收输入端,引脚TXD(P3.1)作为串行数据发送输出端。发送或接收一个数据字符帧共10位,包括1个起始位“0”,8个数据位和1个停止位“1”,如图7-1-3所示。 图 7-1-3 方式1通信数据格式
波特率 方式1的波特率由定时器T1溢出率和波特率控制寄存器PCON中SMOD决定的。串行通信波特率的计算公式如下: 其中,fosc为晶振频率;初值为定时器T1设置的初值;K由定时器T1工作方式决定,定时方式0,K为13;定时方式1,K为16;定时方式2、3,K为8。由于在定时方式2时,具有自动重装入功能,可以减少程序干预,所以串行通信一般使用工作方式2,即K为8。
3.方式2 当SM0=1、SM1=0时,串行口通信被设置为工作方式2,波特率固定为fosc/32或fosc/64的11位异步通信方式。发送或接收一个数据一个行字符帧共11位,包括1个起始位“0”,8个数据位、1个奇偶校验位和1个停止位“1”,如图7-1-4所示 图 7-1-4 方式2通信数据格式
(1)发送、接收过程 发送和接收过程与方式1相同,这里不再讲述。 (2)波特率 方式2有两种波特率,可以选择其中的那一种,由PCON 中的选择位SMOD 来决定,波特率下式表示: 波特率 由上式可知,当SMOD=1 时,波特率为fosc/32,当SMOD=0 时,波特率为fosc/64。 4.方式3 当SM0=1、SM1=1时串行口通信被设置为工作方式3,为波特率可调的11位异步串行通信方式。其波特率计算公式与方式1相同,工作方式与方式2相同。
五、串行口初始化 串行口初始化程序步骤如下: (1)设置控制寄存器SCON: 注意:SCON中的低4位不用设置,全部给“0”。通过传送指令MOV SCON,#DATA来设置控制寄存器SCON。
(2)设置寄存器PCON: 注意:PCON其余的7个位不用设置,全部给“0”。 波特率加倍,通过传送指令MOV PCON,#80H来设置PCON;否则,通过指令MOV PCON,#00H来设置PCON。
(3)计算初值: 选择串行口方式0和方式2不用计算初值。若选择方式1和方式3,就要计算初值了。由波特率的公式: 得出: 通常会选择在表7-1-4中得到初值。确定初值后,装载计数器/定时器的初值。假设初值为F4H,可由下列两条指令完成装载: MOV TH1,#0F4H MOV TL1,#0F4H
(4)波特率的产生: 波特率是由计数器/定时器T1来产生的,一般设定计数器/定时器T1为定时器功能及方式2,即TMOD=20H;在装载了计数器/定时器初值后,启动计数器/定时器T1,即使TR1=1,产生波特率。 (5)若选择中断方式判断接收或发送结束,则要开串行中断,即设置EA=1,ES=1。
任务7-1-1请写出晶振频率为11.0592MHZ,波特率为2400,串行口通信工作方式1,双机通信,不允许接收数据,使用查询方式的初始化。任务7-1-1请写出晶振频率为11.0592MHZ,波特率为2400,串行口通信工作方式1,双机通信,不允许接收数据,使用查询方式的初始化。 分析: 1、设置SCON,根据任务要求得出SCON设置如下表所示: 由表得出,SCON=40H 2、设置寄存器PCON,不采用波特率加倍,即SMOD=0。所以PCON=00H
3、设定串行口的波特率,通过查表7-1-4可知晶振频率为11.0592MHZ,波特率为2400时,计数器/定时器初值为F4H,采用定时器方式2。所以TMOD=20H,TH1=TL1=F4H。3、设定串行口的波特率,通过查表7-1-4可知晶振频率为11.0592MHZ,波特率为2400时,计数器/定时器初值为F4H,采用定时器方式2。所以TMOD=20H,TH1=TL1=F4H。 由以上3点分析得出初始化程序: MOV SCON,#40H MOV PCON,#00H MOV TMOD,#20H MOV TH1,#0F4H MOV TL1,#0F4H SETB TR1
项目二、利用串口扩展并行输入口 8051单片机I/O口引脚(32个)数量有限,在实际应用中会遇到单片机外接电路模块比较多,造成I/O口脚不够用。怎么办呢?可以扩展I/O口。扩展I/O的方法有很多,比如用8255、8155芯片和串行口扩展并行口。其中,串行口扩展并行口根据传送方向又可以分为串行口扩展并行输入口和串行口扩展并行输出口。本项目主要学习串行口扩展并行输入口。一般采用单片机外接一个并入串出的移位寄存器,常用同步移位寄存器74LS165或CD4014。
一、74LS165芯片引脚介绍 芯片74LS165是一个并行输入,串行输出的同步移位寄存器,逻辑及封装图如下图7-2-2所示。 图7-2-2 74LD165双列直插封装
二、74LS165芯片工作原理介绍 当移位/置入控制端为低电平时,并行数据(D0—D7)被并行输入74LS165的寄存器中,而与时钟(CLK,INH)及串行数据输入SI均无关。当为高电平,并行数据输入功能被禁止,这时就可以进行串行输出操作,即输入到74LS165寄存器中的数据被一位一位排队经过SO输出端输出数据。
怎么做? 一、绘制电路图 使用PROTEUS软件进行绘图和仿真,画出图7-2-1所示的串行口扩展并行输入口应用电路图。 二、电路实现功能 同步移位寄存器74LS165从并行输入端(D0、D1…D7)输入8位开关状态数据后,通过串行数据输出端SO一位一位输出开关状态数据,依次顺序是D7→D6→…→D0。同时,单片机RXD一位一位接收8位开关状态数据,将接收到的数据传送缓冲器SBUF,由指令MOV A,SBUF把数据传送给累加器A,最后累加器再送给P0口外接的8个发光二极管去显示8个开关的状态
四、程序编写 串行口扩展并行输入口应用程序如下: ORG 0000H AJMP MAIN ORG 0030H MAIN: CLR P2.7 ;置入并行数据到74LS165的寄存器 NOP NOP SETB P2.7 ;开始串行移位输出 MOV SCON,#10H ;工作方式0,接收数据,清除RI R_WAIT: JNB RI, R_WAIT ;等待RI=1,串行输入结束 MOV P0,SBUF ;读取数据,送P0显示开关状态 AJMP MAIN END
五、生成程序代码 输入完毕,对程序进行编译。在伟福仿真器集成调试软件的编辑界面中按编译图标对程序进行编译,生成与源文件同名的.bin和.hex文件,文件路径与源程序文件相同。如果出现编译失败,请根据提示进行修改源程序直到编译成功后生成文件。最后生成:165.hex文件。 六、软件仿真 运行proteus软件,打开之前所画电路图“165.dsn”文件。双击51单片机芯片,将生成的“165.hex”文件打开,按确定后返回proteus软件界面。
深入与提高 一、按键通过74LS165控制流水灯开启和停止。 1.绘制电路图 使用PROTEUS软件进行绘图和仿真,画出图7-2-6所示电路图。 2.电路实现功能 任何时候按下按键K1,8个发光二极管从上至下第一个LED亮,延时后第二个LED亮第一个灭,又延时后第三个LED亮第二个灭,。。。,最后延时第八个LED亮第七个灭,如此反复循环。任何时候按下按键K2,8个发光二极管灭。 3.绘制程序流程图 4.参考程序
二、使用CD4014芯片扩展输入口 1.绘制电路图 使用PROTEUS软件进行绘图和仿真,画出图7-2-8所示电路图。注意,选取元件CD4014芯片的关键字为“4014”。 2.电路实现功能 按从上至下第一个按键,从下至上第一个LED灯亮; 按从上至下第二个按键,从下至上第二个LED灯亮; 。 。 按从上至下第八个按键,从下至上第八个LED灯亮。 3.绘制程序流程图 4.参考程序
项目3 利用串口扩展并行输出口 上一项目我们学习了串行口扩展并行输入口,本项目主要学习串行口扩展并行输出口。一般采用单片机外接一个串入并出的移位寄存器,常用同步移位寄存器74LS164或CD4094。
一、74LS164芯片引脚介绍 芯片74LS164是一个串行输入,并行输出的同步移位寄存器,逻辑及封装图如下图7-3-2所示。 图7-3-2 74LD164双列直插封装
二、74LS164芯片工作原理介绍 数据通过两个输入端(A或B)之一串行输入;任一输入端可以用作高电平(有效)使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。时钟 (Cl/_>) 每次由低变高时,数据移入一位,输入到 QA, QA 是两个数据输入端(A和 B)的逻辑与。同步清除输入端(R)上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
怎么做? 一、绘制电路图 使用PROTEUS软件进行绘图和仿真,画出图7-3-1所示的串行口扩展并行输入口应用电路图。 二、电路实现功能 从8051单片机串行口P3.0(RXD)引脚输出串行数据,输出的串行数据经过同步移位寄存器74LS164的输入端(A和B)串行输入到同步移位寄存器中,然后把同步移位寄存器的数据从Q0-Q7引脚并行输出,由8个LED灯显示74LS164并行输出的数据状态。
四、程序编写 (1)打开V系列仿真器集成调试软件,新建一个文件命名为:164.asm。 串行口扩展并行输出口应用程序如下: ORG 0000H AJMP MAIN ORG 0050H MAIN: ; 主程序 MOV SP,#60H MOV SCON,#00H ;设置串行口工作方式0,发送 CLR P3.5 ;清164 ACALL DELAY1MS SETB P3.5 MAIN1: MOV R0,#80H ;赋显示初值 MOV R2,#08H ;循环次数为8次 MAIN2: ACALL WR_Byte
ACALL DELAY ;延时300ms ACALL DELAY ;延时300ms MOV A,R0 ;准备下一个显示数据 RR A ;右移一位 MOV R0,A ;保存新数据 DJNZ R2,MAIN2 CLR P3.5 ;清164 ACALL DELAY1MS SETB P3.5 ACALL DELAY ;延时300ms AJMP MAIN1 WR_Byte: ; 发送数据子程序 MOV A,R0 ;取数据 MOV SBUF,A ;开始串行输出 W_WAIT: JNB TI,W_WAIT ;判断数据输出是否完毕 CLR TI ;发送完毕,清中断 RET
DELAY: ;延时子程序 (300ms) MOV R5,#03 DEL1: MOV R6,#200 DEL2: MOV R7,#230 DEL3: DJNZ R7,DEL3 DJNZ R6,DEL2 DJNZ R5,DEL1 RET DELAY1MS: ;延时子程序 (1ms) MOV R6,#2 DEL4: MOV R7,#230 DEL5: DJNZ R7,DEL5 DJNZ R6,DEL4 RET END ;结束
五、生成程序代码 输入完毕,对程序进行编译。在伟福仿真器集成调试软件的编辑界面中按编译图标对程序进行编译,生成与源文件同名的.bin和.hex文件,文件路径与源程序文件相同。如果出现编译失败,请根据提示进行修改源程序直到编译成功后生成文件。最后生成:164.hex文件。 六、软件仿真 运行proteus软件,打开之前所画电路图“164.dsn”文件。双击51单片机芯片,将生成的“164.hex”文件打开,按确定后返回proteus软件界面。
深入与提高 使用CD4094芯片扩展输出口 1.绘制电路图 使用PROTEUS软件进行绘图和仿真,画出图7-3-5所示电路图。注意,选取元件CD4094芯片的关键字为“4094”。 2.电路实现功能 从上至下的第一个LED灯亮,延时500ms后,从上至下的第二个LED灯亮第一个LED灯灭,又延时500ms后,。。。。。。从上至下第八个个LED灯亮第七个LED灯灭,如此反复循环。 3.绘制程序流程图 4.参考程序
项目四 实现串口双机通信 一块单片机的作用是有限的,在一些实际应用系统中,把几个或更多的单片机有规律地连接在一起,实现一个功能更强大的应用系统。本项目主要学习两块单片机之间的串行通信。 学什么? 双机通信的初始化设置,假设波特率为9600,波特率不加倍,工作于方式1。晶振频率为11.0592MHZ。
1、单片机U1的初始化设置 (1)SCON初始化设置如下表所示: (2)波特率不加倍,寄存器PCON中的SMOD=0,故PCON=00H。 (3)波特率为9600,单片机晶振频率为11.0592MHZ,查表7-1-4得出定时器T1工作于方式2,初值为FDH。故TMOD=20H,TH1=TL1=FDH。
单片机U2的初始化设置 (1)SCON初始化设置如下表所示: (2)波特率不加倍,寄存器PCON中的SMOD=0,故PCON=00H。 (3)波特率为9600,单片机晶振频率为11.0592MHZ,查表7-1-4得出定时器T1工作于方式2,初值为FDH。故TMOD=20H,TH1=TL1=FDH。
怎么做? 一、绘制电路图 使用PROTEUS软件进行绘图和仿真,画出串行口双机通信应用电路图。 二、电路实现功能 实现两块单片机之间的串行通信,按下单片机U1连接的按键K1,单片机U2连接的LED灯D1以1秒亮1秒灭的频率闪烁;按下按键K2,LED灯D1的熄灭。