版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章UART原理和应用主要内容RS-232串口通信标准串口模块功能和引脚串口寄存器及工作模式串口波特率的计算方法设计实例一:串口重定位的设计与实现设计实例二:红外遥控器解码的实现RS-232串口通信标准RS-232是美国电子工业协会(ElectronicIndustriesAssociation,EIA)制定的串行数据通信的接口标准,原始编号全称是EIA-RS-232(简称232,RS-232)。它被广泛用于计算机串行接口外设连接在RS-232C标准中,232是标识号,C代表RS-232的第三次修改(1969年),在这之前,还有RS-232B、RS-232ARS-232串口通信标准
--修订历史(来源于:维基百科)EIARS-232(1960.05)"InterfaceBetweenDataTerminalEquipment&Data"EIARS-232-A(1963.10)EIARS-232-B(1965.10)EIARS-232-C(1969.08)InterfaceBetweenDataTerminalEquipmentandDataCommunicationEquipmentEmployingSerialBinaryDataInterchange“EIAEIA-232-D(1986)TIATIA/EIA-232-E(1991)"InterfaceBetweenDataTerminalEquipmentandDataCommunicationsEquipmentEmployingSerialBinaryDataInterchange"RS-232串口通信标准
--修订历史(来源于:维基百科)TIATIA/EIA-232-F(October1997)ANSI/TIA-232-F-1997(R2002)TIATIA-232-F(R2012)RS-232串口通信标准RS-232标准规定了传输数据所使用的连接电缆、机械和电气特性、信号功能及传送过程基于这个标准,衍生出其他电气标准,包括EIA-RS-422-A、EIA-RS-423A、EIA-RS-485目前,在PC/笔记本电脑上提供的COM1和COM2接口,就是通常所说的RS-232C接口注:在最新的计算机和笔记本电脑中,均不再提供这种接口,用户只能通过USB转串口芯片,在计算机/笔记本电脑上虚拟出一个RS-232串行接口RS-232串口通信标准
--RS-232传输特点在RS-232标准中,有下面显著的特点:字符是按一个比特接着另一个比特的方式,使用一根信号线进行传输这就是通常所说的串行方式传输数据,这种传输方式的优点是传输线少,连线简单,传送距离可以较远对于信源(发送方)来说,需要封装并行的原始数据,然后再转换成一位一位的串行比特流数据发送对于信宿(目的方)来说,当接收到串行比特流数据后,对接收到的数据进行“拆包”即从所接收到的串行比特流数据中找出原始的比特流数据,将原始的比特流数据转换成并行数据
并行转串行原始字节数据
打包后的数据检测到比特流数据得到并行有效数据
本地时钟
信源
本地时钟
信宿
串行电缆提取有效的位数据
串行转并行
RS-232串口通信标准
--RS-232传输特点RS-232串口通信标准
--RS-232传输特点在从信源(发送方)发送数据给信宿(目的方)的时候,并不需要传输时钟信号。当信宿接收到串行数据的时候,会使用信宿本地的时钟对接收到的数据进行采样和解码,然后将数据恢复出来此外,通过RS-232在传送数据时,并不需要额外使用一个信号来传送同步信息通过在数据头部(header)和尾部(end)加上识别标志,就能正确的将数据从“信源”顺利传送到“信宿”RS-232串口通信标准
--RS-232传输特点在计算机中,将实现RS-232通信功能的专用芯片,典型的8251和16550芯片,称为通用异步接收发送器(UniversalAsynchronousReceiverTransmitter,UART)RS-232串口通信标准
--RS-232数据传输格式在RS-232中,使用的编码格式是异步起停数据格式RS-232串口通信标准
--RS-232数据传输格式首先有一个逻辑“0”(低电平)标识的起始位,该位标识新的一帧数据的开始在起始位后面紧跟以串行格式存在的5~8个数据位数据比特的起始位对应于原始字节数据的最低有效位(LSB),数据比特的结束位对应于原始字节数据的最高有效位(MSB)最后一个数据位后面跟着奇偶校验位(可选)是否需要奇偶校验位,可以在发送数据的时候设置,且发送方和接收方使用相同的奇偶校验设置RS-232串口通信标准
--RS-232数据传输格式在可选的奇偶校验位后面跟着以逻辑“1”标识的1~2个停止比特位发送方在发送数据之前设置停止位的个数,且发送方和接收方使用相同的停止位设置在RS-232的数据格式中,发送一个有效字符数据字节(8位表示)至少需要10个比特位(即至少需要一个数据位和一个停止位)RS-232串口通信标准
--RS-232数据传输格式在该数据格式中,每一位持续的时间与发送数据的时钟频率有关,即发送方以多快的速度发送一个比特位通常,将发送数据的时钟称为波特率时钟,用波特率表示,即每秒发送比特位的个数在基于RS-232的异步串行通信中,要求发送方和接收方使用相同的波特率时钟RS-232串口通信标准
--RS-232电气标准在RS-232标准中,分别定义了逻辑“1”和逻辑“0”的电压范围,即:逻辑“1”的电压范围为-15~-3V;逻辑“0”的电压范围为+3~+15V在RS-232中,接近零的电平是无效的RS-232串口通信标准
--RS-232电气标准RS-232中对逻辑“1”和逻辑“0”的定义与数字逻辑对逻辑“1和逻辑“0”的定义是不同的为了让遵守RS-232电气标准的电平信号与标准数字逻辑电平信号进行连接,就需要执行电气标准转换,即把满足数字逻辑标准的TTL/CMOS电平转换为RS-232电平,以及将RS-232电平转换为TTL/CMOS电平美信公司的MAX232芯片可以实现TTL/CMOS电平与RS-232电平之间的双向转换RS-232串口通信标准
--RS-232电气标准+5V到+10V电压倍增器+10V到-10V电压反相器TTL/CMOS输入TTL/CMOS输出RS-232输出RS-232输入+5V输入
RS-232串口通信标准
--RS-232参数设置在STC-ISP软件的“串口助手”标签界面下,可以看到串口参数设置界面在该界面中,需要设置下面参数,包括波特率、校验位和停止位RS-232串口通信标准
--RS-232参数设置波特率它是指将数据从一个设备发到另一个设备的速率,即用每秒钟发送比特位的个数来度量,单位为波特率(bitspersecond,bit/s)典型的,可选择的波特率有300、1200、2400、9600、19200、115200等RS-232串口通信标准
--RS-232参数设置校验位校验位是通过奇偶校验生成的,用于验证接收数据的正确性。一般不使用奇偶校验,如果使用,那么既可以选择设置为奇校验也可以选择设置为偶校验在偶校验中,要求所有发送数据的位(包括校验位在内)中“1”的个数是偶数。根据这个校验标准,在奇偶校验位置“1”或“0”在奇校验中,要求所有发送数据的位(包括校验位载内)“1”的个数是奇数。根据这个校验标准,在奇偶校验位置“1”或“0”RS-232串口通信标准
--RS-232参数设置停止位停止位是在发送完数据的最后一位或奇偶校验位之后发送的,它用来帮助串口通信的接收信号方实现硬件的重新同步例如,在传输原始8位数据“11001010”时,在数据的前后就需加入起始位(逻辑低电平表示)以及停止位(逻辑高电平表示)起始位固定为一位,而停止位则可以是1位、1.5位或2位。停止位由发送方确定,并且发送方和接收方需要设置相同的停止位RS-232串口通信标准
--RS-232参数设置流量控制(一般不需要设置)当需要发送握手信号或对数据完整性进行检测时就需要额外的信号进行协助这些额外的信号包括RTS/CTS和DTR/DSR,通常这些信号用于帮助RS-232实现硬件流量控制,即在需要时就要在使用RS-232的发送方和接收方连接这些信号线,以保证通信过程的可靠性一般情况下为了简化硬件信号的连接和降低控制的复杂度,不使用用于硬件流量控制的信号线RS-232串口通信标准
--RS-232连接器RS-232设计之初是用来连接调制解调器做传输之用,因此它的引脚定义通常也和调制解调器传输有关RS-232的设备可以分为数据终端设备(dataTerminalEquipment,DTE,如PC)和数据通信设备(dataCommunicationEquipment,DCE)两类,这种分类定义了不同的线路用来发送和接受信号一般来说,计算机和终端设备有DTE连接器,调制解调器和打印机有DCE连接器RS-232串口通信标准
--RS-232连接器计算机公头DB25母头DB25电话线数据终端设备数据通信设备接口电缆调制解调器RS-232串口通信标准
--RS-232连接器RS-232指定了20个不同的信号连接,由25个D-sub(微型D类)引脚构成的DB-25连接器很多设备只使用了其中的部分引脚,出于节省资金和空间的考虑不少机器采用较小的连接器,特别是9引脚的D-sub或者是DB-9型连接器广泛使用在绝大多数自IBM的AT机之后的PC机和其他许多设备上DB-25和DB-9型的连接器在大
部分设备上是母头(即插孔),
但并不一定都是这样,有些设备
上就是公头(即插针)RS-232串口通信标准
--RS-232连接器DB-9连接器公头和母头连接器的信号定义顺序引脚名字序号功能公共接地(SG)5地线发送数据(TD/TXD)3发送数据接受数据(RD/RXD)2接收数据数据终端准备(DataTerminalReady,DTR)4终端设备通知调制解调器可以进行数据传输数据准备好(DataSetReady,DSR)6调制解调器通知终端设备准备就绪请求发送(RequestToSend,RTS)7终端设备要求调制解调器将数据提交清除发送(ClearToSend,CTS)8调制解调器通知终端设备可以传数据过来数据载波检测(CarrierDetect,CD)1调制解调器通知终端设备侦听到载波信号振铃指示(RingIndicator,RI)9调制解调器通知终端设备有电话进来串口模块功能和引脚STC32G系列单片机具有两个全双工同步/异步串行通信接口USART1和USART2,以及两个全双工的异步串行通信接口UART3和UART4STC32G系列单片机的串口1和串口2均有4种工作方式其中两种方式的波特率是可变的,另外两种是固定的,以满足不同的应用场景需求串口3和串口4均有两种工作方式这两种工作方式的波特率都是可变的用户可以用软件设置不同的波特率和选择不同的工作方式,并且主设备可以通过查询或中断方式对接收/发送过程进行处理串口模块功能和引脚串口1、串口2、串口3和串口4的通讯口均可以通过功能引脚的切换功能切换到STC32G系列单片机的不同引脚上从而可以将一个通信口分时复用为多个通信口注:本章仅对串口1进行介绍,对于串口2、串口3和串口4的说明,请读者参考STC32G系列单片机技术参考手册串口模块功能和引脚
--串口模块结构所有的串口模块(包含串口1、串口2、串口3和串口4)均包含下面单元:两个数据缓冲区每个串行接口的数据缓冲区由两个独立的接收缓冲区和发送缓冲区构成这两个缓冲区可以同时收发数据。用户只能向发送缓冲区写入数据;而从接收缓冲区读取数据两个缓冲区共用一个地址,如串口1的两个缓冲区SBUF地址均为0x99一个移位寄存器一个串行控制寄存器一个波特率发生器串口模块功能和引脚
--串口引脚STC32G系列单片机串口1对应的引脚是TxD和RxD串口1可以在4组引脚之间进行切换通过设置P_SW1寄存器中的S1_S[1:0]比特位,可以将串口1从[RxD/P3.0,TxD/P3.1]切换到[RxD_2/P3.6,TxD_2/P3.7],还可以切换到[RxD_3/P1.6,TxD_3/P1.7]或者[RxD_4/P4.3,TxD_4/P4.4]第十一章UART原理和应用串口寄存器及收发器本节介绍串口1寄存器及收发器的原理串口寄存器组串口的发送和接收过程串口寄存器组本节介绍与串口1异步工作模式有关的寄存器串口控制寄存器数据寄存器电源控制寄存器辅助寄存器从机地址控制寄存器串口寄存器组
--串口控制寄存器(SCON)该寄存器位于SFR地址为0x98的位置。当复位后,该寄存器的值为“00000000”SM0/FE当PCON寄存器中的SMOD0位为“1”时,该位用于检测帧错误。当检测到一个无效的停止位时,通过UART接收器将该位置“1”。该位由软件清零当PCON寄存器中的SMOD0位为“0”时,该位和SM1位一起指定串口1的通信方式位索引76543210名字SM0/FESM1SM2RENTB8RB8TIRI串口寄存器组
--串口控制寄存器(SCON)SM0SM1工作模式功能说明00模式0同步移位串行方式:移位寄存器01模式18位UART,波特率可变10模式29位UART11模式39位UART,波特率可变SM2允许模式2或者模式3多机通信控制位。在模式2或者模式3时,如果SM2位为“1”且REN位为“1”时,则接收机处于地址帧筛选状态。此时可以利用接收到的第9位(即RB8)来筛选地址帧当RB8为“1”时,说明该帧为地址帧,地址信息可以进入SBUF,并将RI为设置为“1”,进而在中断服务程序中再比较地址号当RB8为“0”时,说明该帧不是地址帧,应丢掉并保持RI为“0”串口寄存器组
--串口控制寄存器(SCON)在模式2或者模式3中,如果SM2位为“0”且REN位为“1”,接收机处于禁止筛选地址帧状态。不论收到的RB8是否为“1”,均可使接收到的信息进入SBUF,并使得RI为“1”,此时RB8通常为校验位注:模式0和模式1为非多机通信方式。当处于这两种工作模式时,将SM2设置为“0”REN允许/禁止串行接收控制位。当REN位为“1”时,允许串行接收状态,可以启动串行接收器RxD,开始接收信息;当REN位为“0”时,禁止串行接收状态,禁止串行接收器RxD串口寄存器组
--串口控制寄存器(SCON)TB8当选择模式2或者模式3时,该位为要发送的第9位数据,按需要由软件设置为“1”或“0”例如:可用作数据的校验位或者多机通信中表示地址帧/数据帧的标志位注:在模式0和模式1时,不使用该位RB8当选择模式2或者模式3时,该位为接收到的第9位数据,作为奇偶校验位或者地址帧/数据帧的标志位注:在模式0和模式1时,不使用该位串口寄存器组
--串口控制寄存器(SCON)TI发送中断请求标志位。在模式0时,当发送串行数据第8位完成时,由硬件自动将该位设置为“1”,并向CPU发出中断请求。当CPU响应中断后,必须由软件将该位设置为”0“(清零)。在其他模式中,则在开始发送停止位时由硬件设置为”1”,并向CPU发出中断请求。同样的,在CPU响应中断后,必须由软件将该位设置为”0“(清零)RI接收中断请求标志位。在模式0时,当接收串行数据第8位完成时,由硬件自动将该位设置为“1”,向CPU发出中断请求。当CPU响应中断后,必须由软件将该位设置为“0”(清零)。在其他模式中,则在接收到停止位的中间时刻由内部硬件将该为置“1”,并向CPU发出中断请求。同样的,在CPU响应中断后,必须由软件将该位设置为“0”(清零)串口寄存器组
--串口控制寄存器(SCON)注:当发送完一帧数据后,向CPU发出中断请求;类似的,当接收到一帧数据后,也会向CPU发出中断请求。由于TI和RI以逻辑“或”关系向CPU发出中断请求,所以CPU响应中断时,不能确定是发送还是接收发出的中断请求。因此,必须在中断服务程序中通过查询TI和RI确定中断源。RI和TI必须由软件设置为“0”(清零)串口寄存器组
--数据寄存器(SBUF)该寄存器SFR地址为0x99的位置。当复位后,该寄存器的值为“00000000”DATA[7:0]当写该寄存器时,将数据写到发送缓冲区。当读该寄存器时,将读取接收缓冲区中的数据注:物理上该寄存器是两个独立的缓冲区,但是这两个缓冲区使用相同的地址位索引76543210名字DATA[7:0]串口寄存器组
--电源控制寄存器(PCON)该寄存器位于SFR地址为0x87的位置。当复位后,该寄存器的值为“00110000”(仅介绍与串口1有关的位)SMOD波特率选择位。当该位为“1”时,则使串行通信模式1、模式2和模式3的波特率加倍;当该位为“0”时,则各工作模式的波特率不加倍SMOD0帧错误检测有效控制位。当该位为“1”时,SCON寄存器中的SM0/FE比特位用于FE(帧错误检测)功能;当该位为“0”时,SCON寄存器中的SM0/FE位用于SM0功能,该位和SM1位一起确定串口的工作方式。位索引76543210名字SMODSMOD0LVDFPOFGF1GF0PDIDL串口寄存器组
--辅助寄存器(AUXR)该寄存器位于SFR地址为0x8E的位置。当复位后,该寄存器的值为“00000001”(仅介绍与串口1有关的位)UART_M0x6串口1模式0的通信速率控制位。当该位为“0”时,串口1模式0的速度是传统8051单片机串口的速度(即12分频);当该位为“1”时,串口1模式0的速度是传统8051单片机速度的6倍(即2分频)S1BRT串口1选择某个定时器作为波特率发生器的控制位。当该位为“0”时,选择定时器1作为串口1的波特率发生器;当该位为“1”时,选择定时器2作为串口1的波特率发生器位索引76543210名字T0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMS1BRT串口寄存器组
--从机地址控制寄存器在STC32G系列单片机的串口模块中设置了从机地址控制寄存器典型的,自动地址识别功能应用于多机通信方式,其主要原理是从机系统通过硬件比较功能识别来自主机串口数据流的地址信息,通过寄存器SADDR和SADEN设置的本机从机地址,硬件自动对从机地址进行过滤串口寄存器组
--从机地址控制寄存器从机地址屏蔽寄存器SADEN位于SFR地址为0xB9的位置。当复位后,该寄存器的值为“00000000”从机地址寄存器SADDR位于SFR地址为0xA9的位置。当复位后,该寄存器的值为“00000000”位索引76543210名字SADEN[7:0]位索引76543210名字SADDR[7:0]串口寄存器组
--从机地址控制寄存器要使用串口的自动地址识别功能,首先需要将参与通信的单片机的串口通信模式设置为模式2或模式3(通常选择波特率可变的模式3,这是因为模式2的波特率是固定的,不便于调节),并开启从机的SCON的SM2对于串行模式2或模式3的9位数据位中,第9位数据(存放在RB8中)为地址/数据的标志位。当数据的第9位为“1”时,表示前面的8位数据(存放在SBUF中)为地址信息。当把SM2为设置为“1”时,从机单片机会自动过滤掉非地址数据(第9位为0的数据),而对SBUF中的地址数据(第9位为”1“的数据)自动与SADDR和SADEN所设置的本机地址进行比较,若地址匹配,则会将RI设置为”1“,并产生中断;否则,不处理该次接收的串口数据串口寄存器组
--从机地址控制寄存器比如,当SADDR寄存器的内容为”11001010“,SADEN寄存器的内容为“10000001”时,匹配的地址为“1xxxxxx0”。即,只要主机送出的地址数据中的第0位为“0”且第7位为“1”时,就可以和本地地址相匹配串口寄存器及收发器
--串口的发送和接收过程前面已经提到串口1有四种工作模式,可以通过对SCON寄存器的SM0和SM1的设置进行选择其中模式1、模式2和模式3为异步通信方式,每个发送和接收的字符都带有1个起始位、1个停止位在模式0中,串口1作为1个简单的移位寄存器使用注:在本节中,只对最常用的模式1进行详细介绍。对于其余工作模式,读者可以参考STC数据手册相关部分的介绍串口寄存器及收发器
--串口的发送和接收过程串口的发送和接收过程
--串口1的发送过程当串口1发送数据时,数据从单片机的串行发送引脚TxD发送出去当主机执行一条写SBUF的指令时,就启动串口1的数据发送过程,写SBUF信号将逻辑“1“加载到发送移位寄存器的第9位,并通知Tx控制单元开始发送通过16分频计数器,同步发送串行比特流串口的发送和接收过程
--串口1的发送过程移位寄存器将数据不断地右移,送到TxD引脚。同时,在左边不断的用逻辑“0“填充。当数据的最高位移动到移位寄存器的输出位置,紧跟其后的是第9位”1“,在它的左侧各位全部都是”0“,这个条件状态,使得TX控制单元进行最后一次移位输出,然后使得发送允许信号SEND失效,结束一帧数据的发送过程,并将中断请求位TI设置为”1“,向CPU发出中断请求信号串口的发送和接收过程
--串口1的接收过程当软件将接收允许标志位REN设置为“1”后,接收器就用选定波特率的16分频速率采样串行接收引脚RxD当检测到RxD端口从逻辑“1”(高电平)到逻辑“0”(低电平)的下降沿跳变后,就启动接收器准备接收数据。同时,复位16分频计数器,将值0x1FF(以十六进制数表示)加载到移位寄存器中。复位16分频计数器使得它与输入位时间同步串口的发送和接收过程
--串口1的接收过程16分频计数器的16个状态是将每位接收的时间平均为16等份。在每位时间的第7个状态、第8个状态和第9个状态由检测器对RxD端口进行采样,所接收的值是这次采样值经过“三中取二”的值(即三次采样中,至少有两次相同的值)。采用“三中取二”的方法用于抵销干扰信号,提高接收数据的可靠性,如图11.8所示。在起始位,如果接收到的值不为逻辑”0“(低电平),则起始位无效,复位接收电路,并重新检测逻辑”1”(高电平)到逻辑“0”(低电平)的跳变。如果接收到的起始位有效,则将它输入移位寄存器,并接收本帧的其余信息串口的发送和接收过程
--串口1的接收过程接收的数据从接收移位寄存器的右边移入,将已装入的0x1FF向左边移出。当起始位“0”移动到移位寄存器的最左边时,使RX控制器做最后一次移位,完成一帧的接收。若同时满足以下两个条件时,RI=“0”;SM2=“0”或接收到的停止位为“1”时,则接收到的数据有效,实现加载到SBUF,停止位进入RB8,将RI设置为“1”,向CPU发出中断请求信号。如果这两个条件不能同时满足,则将接收到的数据丢弃,无论条件是否满足,接收机又重新检测RxD端口上逻辑”1“(高电平)到逻辑”0”(低电平)的跳变,继续接收下一帧数据。如果接收有效,则在响应中断后,必须由软件将标志RI置为“0”(清零)串口的发送和接收过程串口波特率的计算方法串口1模式1的波特率计算公式串口波特率的计算方法在STC32G系列单片机中,下载程序时指定的IRC频率和指定的波特率与重加载值的对应关系第十一章UART原理和应用设计实例一:串口重定位的设计与实现串口重定位技术是嵌入式系统应用中经典的设计案例,本节将详细介绍串口重定位的实现方法串口重定位的目标是将C语言中的输入函数scanf()和输出函数printf()重新定位到到串口上,即把串口作为scanf()函数的输入设备,以及将串口作为printf()函数的输出设备设计实例一:串口重定位的设计与实现
--串口重定位的背景很多读者在学习单片机课程之前就已经学习过C语言程序设计课程在学习C语言程序设计时,大家知道C语言提供了输入和输出函数语句,比如scanf()和printf()在PC/笔记本电脑上,调用输入和输出语句时,键盘作为scanf()函数的输入设备,屏幕作为printf()函数的输出设备设计实例一:串口重定位的设计与实现
--串口重定位的背景但是在嵌入式系统中,尤其是在由单片机构成的嵌入式系统中,并没有像PC/笔记本电脑上的键盘和屏幕,那如何使用scanf()函数和printf()函数呢?这就成为一个非常棘手的问题但是,在由单片机构成的嵌入式硬件系统中,串口是最基本的外设,那么能不能让串口充当输入/输出语句的输入/输出设备呢?答案是肯定的要想实现这个目标,就需要对scanf()函数和printf()函数的底层输入和输出进行修改,使得通过串口接收到的数据可以作为scanf()函数的底层输入,通过串口发送的数据可以作为printf()函数的底层输出设计实例一:串口重定位的设计与实现
--串口重定位的背景在这里需要指出,当嵌入式系统使用的处理器的指令集架构和编译环境不同时,串口的输入和输出所使用的代码是不通用的此时,读者可以重新阅读教材第8章8.11.1一节的内容,其中在表8.12中对PUTCHAR.C有这样的描述即程序开发人员可以根据自己的硬件(例如LCD或LED显示器)修改这个程序默认是通过串口输出字符对GETKEY.C有这样的描述即程序开发人员可以根据自己的硬件(例如矩阵键盘)修改该程序。默认是通过串口读取字符设计实例一:串口重定位的设计与实现
--添加type.h文件#ifndef__TYPE_H_//如果没有定义__TYPE_H_#define__TYPE_H_//定义__TYPE_H_
#include"stdio.h"//包含头文件stdio.h#include"stc32g.h"//包含头文件stc32g.htypedef unsignedcharu8;//自定义无符号字符类型u8typedef unsignedint u16;//自定义无符号整数类型u16typedef unsignedlongu32;//自定义无符号长整数类型u32#defineMAIN_Fosc22118400L//定义IRC主时钟频率22118400Hz
#endif//结束设计实例一:串口重定位的设计与实现
--添加uart.h文件#ifndef__UART1_H_//如果没有定义__UART1_H_#define__UART1_H_//定义__UART1_H_#include"type.h"//包含头文件type.h
#defineBaudrate2115200L//定义波特率常数115200
voidUART1_init();//定义函数UART1_INIT()charputchar(charc);//重定位函数putchar()char_getkey();//重定位函数_getkey()voidMCU_init();//定义函数MCU_init()#endif//结束设计实例一:串口重定位的设计与实现
--添加uart.c文件#include"uart.h"//包含头文件uart.h
voidUART1_init()//UART1_INIT()初始化函数{u16dat;//定义u16类型的变量dat/**********计算定时器的重加载值************/ dat=(u16)(65536UL-(MAIN_Fosc/4)/Baudrate2);T2R=0; //禁止定时器运行T2_CT=0; //定时器/计数器2作为定时器T2x12=1; //定时器/计数器2在IT模式T2H=(u8)(dat/256);//重加载值高8位保存到寄存器T2H
设计实例一:串口重定位的设计与实现
--添加uart.c文件T2L=(u8)(dat%256);//重加载值低8位保存到寄存器T2LET2=0;//禁止timer2中断T2R=1; //使能定时器运行 SCON=(SCON&0x3f)|0x40;//8位数据,可变波特率REN=1;//允许接收P_SW1&=0x3f;//端口选择}设计实例一:串口重定位的设计与实现
--添加uart.c文件charputchar(charc)//底层putchar()函数重定位{SBUF=c;//字符c写到寄存器SBUFwhile(TI!=1);//等待发送完成
TI=0;//发送完成,TI清零 returnc;//返回字符c}设计实例一:串口重定位的设计与实现
--添加uart.c文件char_getkey()//底层_getkey()重定位{ charvalue;//定义字符型变量valuewhile(RI!=1);//等待串口完成接收 RI=0;//完成接收清零RI value=SBUF;//从寄存器SBUF读取接收的数据value returnvalue;//返回读取的数据value}设计实例一:串口重定位的设计与实现
--添加uart.c文件voidMCU_init()//定义MCU_init()函数{ WTST=0;//将CPU执行指令的速度设置为最快EAXFR=1;//使能访问扩展寄存器(XSFR)CKCON=0;//提高访问XRAM速度P0M1=0x00;P0M0=0x00;//端口P0设置为准双向口P1M1=0x00;P1M0=0x00;//端口P1设置为准双向口P2M1=0x00;P2M0=0x00;//端口P2设置为准双向口P3M1=0x00;P3M0=0x00;//端口P3设置为准双向口P4M1=0x00;P4M0=0x00;//端口P4设置为准双向口
设计实例一:串口重定位的设计与实现
--添加uart.c文件P5M1=0x00;P5M0=0x00;//端口P5设置为准双向口P6M1=0x00;P6M0=0x00;//端口P6设置为准双向口P7M1=0x00;P7M0=0x00;//端口P7设置为准双向口}设计实例一:串口重定位的设计与实现
--添加main.c文件#include"stc32g.h"//头文件stc32g.h包含寄存器定义#include"uart.h"//包含头文件uart.h
voidmain()//定义main主函数{ inta,b;//定义两个整型变量a和b intsum;//定义一个整型变量sum MCU_init();//调用函数MCU_init() UART1_init();//调用函数UART1_init();设计实例一:串口重定位的设计与实现
--添加main.c文件while(1)//while()循环 { printf("pleaseinputtwonumber\r\n");//调用printf函数,打印信息 scanf("%d%d",&a,&b);//调用scanf函数,输入a和b的值 sum=a+b;//a+b的结果赋值给sum printf("\r\n");//调用printf函数,回车换行 printf("%d+%d=%d\r\n",a,b,sum);//调用printf函数,打印信息 }}设计实例一:串口重定位的设计与实现
--串口工具的使用当把程序下载到STC32G12K128单片机内的程序存储器后,读者就可以使用STC-ISP软件中提供的串口调试助手对该程序进行调试和验证,主要步骤包括:去掉用于连接STC32G系列单片机硬件开发平台和PC笔记本电脑的USB电缆按下图所示,通过STC提供的SWD白色电缆,将STC公司提供的STCUSBLink1D硬件工具与STC32G系列单片机硬件开发平台上的LNK1接口连接在一起。并且,通过带有TYPE-C接口的USB电缆,将STCUSBLink1D硬件工具连接到PC/笔记本电脑的USB接口设计实例一:串口重定位的设计与实现
--串口工具的使用设计实例一:串口重定位的设计与实现
--串口工具的使用在STC-ISP软件左侧窗口的“扫描串
口”标题右侧的下拉框中自动弹出STC-USBLink1(LNK1)条项。
此时,展开下拉框,可以看到下拉框
中出现STC-USBLinkID(CDC1)
(COM4)的条项,也就是虚拟出串
口号COM4,要记住该串口号!!!设计实例一:串口重定位的设计与实现
--串口工具的使用在STC-ISP软件的右侧窗口中,单击”USB-CDC/串口助手“标签”,在该标签界面下,按如下设置参数:设计实例一:串口重定位的设计与实现
--串口工具的使用接收缓冲区子窗口中显示“pleaseinputtwonumbe”信息。在发送缓冲区的右侧窗口中,通过PC/笔记本电脑上的按键输入两个整数,比如35和66,两个整数之间需要有空格,并通过按下/释放Enter按键输入回车换行符设计实例二:红外遥控器解码的实现基于红外线的无线通信也是串行通信的一种,但是比前面所介绍的RS-232通信更复杂,这是因为基于红外线的无线通信使用了调制和解调技术本节将通过STC32G系列单片机硬件开发平台上的红外接收器,接收遥控器发出的红外遥控信号,并通过STC32G12K128单片机对接收到的红外遥控信号进行解码,并通过串口1将解码后的信息显示在STC-ISP软件提供的“串口调试助手”标签界面中设计实例二:红外遥控器解码的实现
--红外接收器电路在STC提供的硬件开发平台上集成了一个红外发生器和红外接收器红外发射器和我们所见过的发光二极管外形很像,但是红外发射器发出的光是不可见的红外光红外接收器和红外发射器的电路原理,本节仅对红外接收电路进行介绍设计实例二:红外遥控器解码的实现
--红外接收器电路(a)红外接收电路(b)红外发射电路设计实例二:红外遥控器解码的实现
--红外接收器电路在上图给出的红外接收电路中,使用了HS0038BD红外接收器模块,外观如下所示;基于该模块构成的电路实物,如下所示在该设计中选择R1=100Ω,C1=10μF红外接收模块外观(b)红外接收电路结构IR接收器电路设计实例二:红外遥控器解码的实现
--红外接收器电路HS0038BD的内部结构HS0038BD是用于红外遥控系统的小型接收器。PIN二极管和前置放大器组装在引线框架上,环氧树脂封装用作IR滤镜解调后的输出信号可以由STC32G12K128MCU直接解码设计实例二:红外遥控器解码的实现
--红外接收器电路HS0038BD与所有常见的IR遥控数据格式兼容,并且可以抑制来自节能荧光灯的几乎所有杂散脉冲PIN型二极管这是在P区和N区之间夹一层本征半导体(或低浓度杂质的半导体)构造的晶体二极管设计实例二:红外遥控器解码的实现
--红外接收器电路红外接收模块的输入和输出特性设计实例二:红外遥控器解码的实现
--红外信号的捕获为了方便读者学习下面一节红外通信协议,本节通过测试仪器捕获并分析红外通信信号的波形通过USB电缆,将STC32G系列单片机硬件开发平台的USB接口连接到PC/笔记本电脑的USB接口打开泰克的MDO3104混合域示波器(并安装逻辑分析模块)。将示波器通道1探头正端连接到开发板扩展I/O的P3.5引脚,负端连接到开发板扩展I/O的GND引脚找一个用于控制家里电视用的遥控器。将遥控器对准红外接收器,并按下红外遥控器的按键。同时,让示波器捕获波形设计实例二:红外遥控器解码的实现
--红外接收器电路为了使读者能更清楚地看到波形,将波形前部进行放大设计实例二:红外遥控器解码的实现
--红外信号的捕获将示波器切换到逻辑分析状态,将该示波器提供的逻辑分析插头的D0连接到开发板扩展I/O的P3.5引脚,地线连接到开发板扩展I/O的GND引脚设计实例二:红外遥控器解码的实现
--红外信号的捕获当重复按下遥控器的某个按键时设计实例二:红外遥控器解码的实现
--红外通信协议本节将介绍红外通信协议,包括:在红外发射器一侧,为了使红外线在无线传输的过程中避免受到其他红外信号的干扰,通常是将逻辑“0”(低电平)和逻辑“1”(高电平)调制在某一特定频率的载波上,然后经过红外发光二极管发射出去在红外接收器一侧,接收到这个被调制后的信号。在本设计中,将通过单片机中对接收到的红外信号进行分析,恢复出原始的二进制脉冲码设计实例二:红外遥控器解码的实现
--红外通信协议常用的有脉冲宽度调制(PulseWidthModulation,PWM)和通脉冲位置调制(PulsePositionModulation,PPM)两种方法红外遥控中使用的基带通信协议的类型很多,大概有几十种,常用的就有ITT协议、NEC协议、Sharp协议、Philips协议等注:本节只介绍NEC红外协议。对于其他红外通信协议,读者可以参考相关的协议手册红外通信协议
--红外发射数据载波波形可以使用455KHz晶体,经内部分频电路的12分频,将信号调制在37.91kHz,占空比为1/3红外通信协议
--红外发射数据数据格式数据格式包括了引导码、用户码、数据码和数据码反码。数据反码是数据码取反后的编码,编码时可用于对数据的纠错数据格式包括了引导码、地址码、地址反码、命令码和命令反码。地址反码是地址码按位取反后的编码,编码时可用于对数据的纠错。类似的,命令反码是命令码按位取反后的编码在该数据格式中,编码(包括8位地址码、8位地址反码、8位命令码和8位命令反码)长度总共32位。引导码的前半部分为高电平,时长大约为9ms;后半部分为空闲低电平,时长大约为4.5ms红外通信协议
--红外发射数据位定义用户码或数据码中的每一个二进制位可以是“1”,也可以是“0”,通过脉冲的时间间隔来区分它们。因此,这种编码方式称为PPM调制方式对于逻辑“0”(低电平)来说,前面的高电平周期为0.56ms,后面的低电平周期大约为0.56ms的空闲时刻对于逻辑“1“(高电平)来说,前面的高电平周期为0.56ms,后面的低电平周期大约为1.68ms的空闲时刻红外通信协议
--红外发射数据根据上面逻辑“0“和逻辑”1’’的表示方法,可知:8位地址码和8位命令反码的总时间恒定为(1.125ms+2.25ms)×8=27ms8位命令码和8位命令反码的总时间恒定为(1.125ms+2.25ms)×8=27ms
所有32位码的持续时间为27+27=54ms当加上引导码时,总的持续时间为54+9+4.5=67.5ms红外通信协议
--红外发射数据按键输出波形重复码单一按键波形红外通信协议
--红外发射数据连续按键波形红外通信协议
--红外接收数据红外接收模块将38K载波信号过滤,接收到的波形刚好与发射波形相反,波形与图11.20输出的波形一致前导码以低电平开始,持续9ms;然后维持4.5ms的高电平解码的关键是识别逻辑“0”(低电平)和逻辑“1”(高电平)在红外接收模块输出信号时,逻辑“0”和逻辑“1”均以0.56ms的低电平开始,不同的是两者高电平的脉冲宽度不同对于逻辑“0”(低电平)来说,只持续0.56ms的高电平对于逻辑“1”(高电平)来说,持续1.68ms的高电平设计实例二:红外遥控器解码的实现
--红外检测原理红外检测的目的就是从红外接收模块输出的逻辑“0”和逻辑“1”(低电平和高电平)信号中提取四个字节(32位)的数据,包括:一个字节(8位)的地址码一个字节(8位)的地址反码一个字节(8位)的命令码一个字节(8位)的命令反码红外检测原理
--I/O引脚的中断触发功能从前面给出的红外接收电路硬件可知,红外接收模块的输出端接到了STC32G12K128单片机的P3.5引脚在STC32G12K128单片机中,每个I/O引脚都具有中断触发功能,但是P3.5引脚的中断触发编号已经超过了KeilμVision允许的中断编号当在KeilμVision集成开发环境中使用C语言编写中断服务程序/中断句柄时,当中断号大于31时,编译程序就会报错红外检测原理
--I/O引脚的中断触发功能当使用C语言编写中断服务程序/中断句柄时,中断号13为保留的中断号,因此可以借用该中断号。主要步骤包括:在使用C语言编写中断服务程序/中断句柄时,用interrupt13指定该中断服务程序/中断句柄新建一个汇编语言文件(如isr.asm),并将该文件添加到当前的工程中。在该文件中添加汇编语言代码,如下面的代码所示红外检测原理
--I/O引脚的中断触发功能;定位到程序存储器地址为0x143的位置,这是端口P3的中断向量 CSEG AT0143H JMP P3INT_ISR;在0x143的位置保存一条跳转指令,跳转到P3INT_ISRP3INT_ISR:;跳转标号 JMP 006BH;在P3INT_ISR的位置保存着一条跳转指令,跳转到0x6B END;0x6B是保存中断号13的中断入口红外检测原理
--与P3端口中断有关的寄存器在STC32G系列单片机中,为端口P0到端口P7分别提供了端口中断使能寄存器、端口中断标志寄存器和端口中断模式配置寄存器,这些寄存器位于XSFR的区域本节仅介绍与P3端口中断有关的寄存器,关于其他端口与中断有关的寄存器请参考STC32G系列单片机技术参考手册第12.4一节内容与P3端口中断有关的寄存器
--P3端口中断使能寄存器(P3INTE)该寄存器位于XSFR地址为0x7EFD03的位置。当复位后,该寄存器的值为“00000000”当P3xINTE(x为位索引号)为“0”时,禁止P3.x引脚的中断功能;当P3xINTE(x为位索引号)为“1”时,使能P3.x引脚的中断功能位索引76543210名字P37INTEP36INTEP35INTEP34INTEP33INTEP32INTEP31INTEP30INTE与P3端口中断有关的寄存器
--P3端口中断标志寄存器(P3INTF)该寄存器位于XSFR地址为0x7EFD13的位置。当复位后,该寄存器的值为“00000000”当P3xINTF(x为位索引号)为“0”时,P3.x引脚上无中断请求;当P3xINTF(x为位索引号)为“1”时,P3.x引脚上有中断请求如果使能中断,则会进入中断服务程序/中断句柄。该位需要软件清零位索引76543210名字P37INTFP36INTFP35INTFP34INTFP33INTFP32INTFP31INTFP30INTF与P3端口中断有关的寄存器
--P3端口中断模式配置寄存器P3端口中断模式配置寄存器由一对寄存器P3IM0和P3IM1构成P3端口中断模式配置寄存器P3IM0该寄存器位于XSFR地址为0x7EFD23的位置。当复位后,该寄存器的值为“00000000”P3端口中断模式配置寄存器P3IM1寄存器该寄存器位于XSFR地址为0x7EFD33的位置。当复位后,该寄存器的值为“00000000”位索引76543210名字P37IM0P36IM0P35IM0P34IM0P33IM0P32IM0P31IM0P30IM0位索引76543210名字P37IM1P36IM1P35IM1P34IM1P33IM1P32IM1P31IM1P30IM1与P3端口中断有关的寄存器
--P3端口中断模式配置寄存器P3xM1和P3xM0(x为位索引号)组合的含义P3xM1P3xM0中断触发方式00下降沿中断01上升沿中断10低电平中断11高电平中断红外检测原理
--获取32位数据信息的方法该设计中,码型特征很明显对于单个按键来说,只要区分引导码,逻辑“0”(低电平)和逻辑“1”(高电平)它们的持续时间显著不同。因此,可以考虑使用定时器通过判断时间的边界来区分它们在该设计中,使用定时器/计数器0的模式1(自动16位重加载模式)红外传输信息的检测在P3.5引脚中断服务程序/中断句柄中实现红外检测原理
--获取32位数据信息的方法在该流程图中,给出了在P3.5
引脚中断服务程序/中断句柄中
处理红外传输信息的过程当通过STC-ISP软件将程序下载
到STC32G12K128单片机内的
程序存储器时,将IRC的频率设
置为6.000MHz。红外检测原理
--获取32位数据信息的方法在使用C语言编写代码的过程中,一个关键点就是设置判决条件/门槛在该设计中,使用的定时器/计数器0作为判决计数条件当引脚P3.5输入为逻辑“0”(低电平)时,重新使能定时器/计数器0开始计数,以得到低电平的持续时间当引脚P3.5输入为逻辑“1”(高电平)时,重新使能定时器/计数器0开始计数,以得到高电平的持续时间红外检测原理
--获取32位数据信息的方法在该设计中,设置定时器/计数器0的时钟源为SYSclk/12,在每个时钟沿定时器/计数器0加1。按下面公式计算高电平/低电平的持续时间,即:
时间长度=(12×SYSclk)/计数值[TH0*256+TL0]在设计中,考虑时钟的偏移和抖动,将时间长度设置在一个合理的范围内综上所述,最终门限是通过确定时间长度范围后,通过上面公式得到计数值的范围来作为实际的判断条件设计实例二:红外遥控器解码的实现
--修改type.h文件修改type.h文件中的代码#defineFOSC6000000L//定义单片机IRC频率6000000设计实例二:红外遥控器解码的实现
--添加ISR.asm文件CSEG AT0143H;定位到程序存储器的地址0x143 JMP P3INT_ISR;跳转到标号P3INT_ISR的位置P3INT_ISR:;标号P3INT_ISR JMP 006BH;跳转到0x6B的位置 END;结束设计实例二:红外遥控器解码的实现
--修改main.c文件#include"serial.h"//包含自定义的头文件register.h
/*****声明数组irdata,保存红外解码的4字节数据*********/unsignedcharirdata[4]={0,0,0,0}; bitflag=0; //声明flag变量为bitu16high_level_time()//声明检测红外发送数据的高电平持续时间函数{ TL0=0;//置定时器/计数器0初值低8位寄存器TL0为0 TH0=0;//置定时器/计数器0初值高8位寄存器TH0为0 TR0=1;//使能定时器/计数器0开始计数设计实例二:红外遥控器解码的实现
--修改main.c文件while(P35==1)//如果P3.5输入为“1”,一直继续,否则退出 { if(TH0>=0xEE)//如果计数时间太长,系统可能有问题,退出循环 break; } TR0=0;//如果P3.5输入为“0”,则停止定时器/计数器0计数 return(TH0*256+TL0);//返回定时器/计数器0的计数值}设计实例二:红外遥控器解码的实现
--修改main.c文件u16low_level_time()//声明检测红外发送数据的低电平持续时间函数{ TL0=0;//置定时器/计数器0初值低8位寄存器TL0为0 TH0=0;//置定时器/计数器0初值高8位寄存器TH0为0 TR0=1;//启动定时器/计数器0开始计数
while(P35==0)//如果P3.5输入为“0”,一直继续,否则退出 { if(TH0>=0xEE)//如果计数时间太长,系统可能有问题,退出循环 break; } TR0=0;//如果P3.5输入为“1”,则停止定时器/计数器0计数 return(TH0*256+TL0);//返回定时器/计数器0的计数值}设计实例二:红外遥控器解码的实现
--修改main.c文件/******定义端口P3的中断服务程序,利用保留中断号13*******/voidint13()interrupt13{u8i,j;//定义无符号字符变量i,ju16count=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南红河发展集团有限公司第二次社会集中招聘15人笔试历年参考题库附带答案详解
- 2025中铁五局社会人才引进招聘笔试历年参考题库附带答案详解
- 2025中国航材招聘集团公司财务管理部筹融资及司库管理岗1人笔试历年参考题库附带答案详解
- 河南开封市兰考县2024-2025学年七年级下学期期末历史试题(含答案)
- 2025-2026学年山东省济南市莱芜区七年级(上)期末英语试卷(A卷)(含答案)
- 2026九年级道德与法治上册 志愿服务发展
- 2025工程(冰箱安装)合同
- 汽车机械基础课件 复合轮系传动分析
- 2026年上海语文一模试题及答案
- 临床头痛用药及偏头痛、紧张性头痛、丛集性头痛等治疗选择
- 2025初级护理员题库及答案解析
- GCr15轴承钢的磨损机理与残余奥氏体状态的关联性分析
- 2026年高考数学复习策略讲座
- 采购评审专家培训课件
- GJB3206B-2022技术状态管理
- 诺视年产3000万颗Micro-LED微显示芯片一期项目环评报告表
- 检验科实验室生物安全风险评估报告
- 污水管网改造工程施工组织计划
- 《电气主系统》课件-第六章 电气设备选择
- 桂电计〔2025〕91号附件-电网工程建设预算编制与计算标准实施细则
- 休克急救的试题及答案
评论
0/150
提交评论