




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章STC12C5A60S2的串行口及SPI接口第12章STC12C5A60S2的串行口及SPI接口第12章STC12C5A60S2的串行口及SPI接口8.1通信的有关概念实际应用中,计算机的CPU与外部设备之间常常要进行信息的交换,计算机之间也需要交换信息,所有这些信息的交换均称为“通信”。第12章STC12C5A60S2的串行口及SPI接口第12章18.1通信的有关概念
实际应用中,计算机的CPU与外部设备之间常常要进行信息的交换,计算机之间也需要交换信息,所有这些信息的交换均称为“通信”。8.1通信的有关概念实际应用中,计算机的CPU与外2并行通信与串行通信
通信的基本方式可分为并行通信和串行通信两种。并行通信,是指数据的各位同时进行传送的方式。其特点是传输速度快,但当距离较远,位数又多时导致了通信线路复杂且成本高。串行通信,是指数据一位一位的顺序传送的通信方式。其特点是通信线路简单,只要一对传输线就可以实现通信,从而大大的降低了成本,特别适用于远距离通信,但传送速度慢。并行通信与串行通信通信的基本方式可分为并行通信和串31.按照串行数据的同步方式分类
按照串行数据的同步方式,串行通信本身又分为异步传送和同步传送两种基本方式。(1)异步传送在异步传送中,每一个字符要用起始位和停止位作为字符开始和结束的标志,它是以字符为单位一个个的发送和接收的。异步传送时,每个字符的组成格式如下:首先是一个起始位表示字符的开始;后面紧跟着的是字符的数据字,数据字可以是5,6,7或8位数据,在数据字中可根据需要加入奇偶校验位;最后是停止位,其长度可以是一位,一位半或两位。所以,串行传送的数据字节加上成帧信号起始位和停止位就形成一个字符串行传送的帧。起始位用逻辑“0”低电平表示,停止位用逻辑“1”高电平表示。图(a)所示为数据字为7位的ASCII码,第8位是奇偶校验位。加上起始位、停止位,一个字符由10位组成。这样形成帧信号后,字符便可以一个接一个的传送了。在异步传送中,字符间隔不固定,在停止位后可以加空闲位,空闲位用高电平表示,用于等待发送。这样,接收和发送可以随时的或间断的进行,而不受时间的限制。图(b)为有空闲位的情况。8.1.1串行通信的分类1.按照串行数据的同步方式分类按照串行数据的同步方式,串4第12章STC12C5A60S2的串行口及SPI接口课件5(2)同步传送所谓同步传送就是去掉异步传送时每个字符的起始位和停止位的成帧标志信号,仅在数据块开始处用同步字符来指示。如下图所示。同步传送的有效数据位传送速率高于异步传送,可达50千波特。其缺点是硬件设备较为复杂,因为它要求要有时钟来实现发送端和接收端之间的严格同步,而且对时钟脉冲信号的相位一致性还要求非常严格,为此通常还要采用“锁相器”等措施来保证。在异步数据传送中,CPU与外设之间事先必须约好两项事宜:第一、字符格式。双方要约好字符的编码形式、奇偶校验形式、以及起始位和停止位的规定。第二、波特率(Baudrate)。波特率是衡量数据传送速率的指标,它要求发送站和接收站都要以相同的数据传送速率工作。(2)同步传送在异步数据传送中,CPU与外设之间事先62.按照数据的传送方向分类
1)点对点传输
一般情况下,串行数据传送是在两个通信端之间进行的。其数据传送的方式有如图所示的几种情况。图(a)为单工通信方式。A端为发送站,B端为接收站,数据仅能从A站发至B站。图(b)为半双工通信方式。数据可以从A发送到B,也可以由B发送到A。不过同一时间只能作一个方向的传送,其传送方式由收发控制开关K来控制。图(c)为全双工通信方式。每个站(A、B)既可同时发送,又可同时接收。2.按照数据的传送方向分类7
2)主从多终端通信方式
A站可以向多个终端(B、C、D…)发出信息。在A站允许的条件下,可以控制管理B、C、D…等站在不同的时间向A站发出信息。根据数据传送的方向又可分为多终端半双工通信和多终端全双工通信。这种多终端通信方式常用于主――从计算机系统通信中。2)主从多终端通信方式88.1.2通用的异步接收器/发送器UART
在串行传送中,数据是一位一位按顺序进行的,而计算机内部的数据是并行的。因此当计算机向外发送数据时,必须将并行的数据转换为串行的数据再行传送。反之,又必须将串行数据转换为并行数据输入计算机中。上述并→串或串→并的转换既可以用通用的异步接收器/发送器实现。通用的异步接收器/发送器,简称UART(UniversalAsynchronousReceiver/Transmitter),是串行接口的核心部件,其结构如图所示,它既能发送,由并行→串行输出;又能接收,由串行→并行输入。对每一方来说都是一个双缓冲器结构。当UART接收数据时,串行数据先经RXD端(ReceiverData)进入移位寄存器,再经移位寄存器输出并行数据到缓冲器,最后通过数据总线送到CPU;当UART发送信息时,先由CPU经数据总线将并行数据送给缓冲器,再由并行缓冲器送给一位寄存器,最后逐位由TXD(TransmitterData)端输出。所有这些工作都是在时钟信号和其他控制信号作用下完成的。8.1.2通用的异步接收器/发送器UART9第12章STC12C5A60S2的串行口及SPI接口课件108.2STC12C5A60S2单片机的串行口
STC12C5A60S2单片机具有2个采用UART工作方式的全双工串行通信接口(串口1和串口2)。每个串口由2个数据缓冲器、1个移位寄存器、1个串行控制寄存器和一个波特率发生器等组成。每个串口的数据缓冲器由串行接收缓冲器和发送缓冲器构成,它们在物理上是独立的,既可以接收数据也可以发送数据,还可以同时发送和接收数据。接收缓冲器只能读出,不能写入,而发送缓冲器则只能写入,不能读出。它们共用一个地址号。STC12C5A60S2的串行口既可以用于串行异步通信,也可以构成同步移位寄存器。如果在串行口的输入/输出引脚上加上电平转换器,可以方便地构成标准的RS-232接口。串口1与传统8051单片机的串口完全兼容。串口2的结构、工作原理与串口1类似。8.2STC12C5A60S2单片机的串行口118.2.1串行接口的寄存器
与串行接口1相关的寄存器有SCON、PCON、AUXR、SBUF、TMOD、TL1、TH1、TCON、IE、IP、IPH、SADEN和SADDR。与串行接口2相关的寄存器有:S2CON、S2BUF、BRT、AUXR、IE2、IP2、IPH2和AUXR1。
D7D6D5D4D3D2D1D0SM0/FESM1SM2RENTB8RB8TIRISM0/FE:PCON寄存器中的SMOD0位为1时,该位用于帧错误检测,当检测到一个无效停止位时,通过UART接收器设置该位。它必须由软件清零。PCON寄存器中的SMOD0为0时,该位和SM1一起指定串行通信的工作方式1.串口1控制寄存器SCONSCON(地址为98H,复位值为00H)用于确定串行通道的操作方式和控制串行通道的某些功能。也可用于发送和接收第九个数据位(TB8、RB8),并设有接收和发送中断标志(RI及TI)位。SCON各位的意义如下:8.2.1串行接口的寄存器与串行接口1相12SM0/FESM1方式说明波特率000移位寄存器工作方式fOSC/120118位数据位的UART工作方式可变1029位数据位的UART工作方式fOSC/64,fOSC/321139位数据位的UART工作方式可变
SM2:在方式2和方式3时,如SM2=1,只有在接收数据第9位为1时才能激发中断标志(RI=1)。在方式1时,如SM2=1,则只有在接收到有效停止位时才能激发中断标志(RI=1)。在方式0时,SM2应为0。
REN:允许串行I/O口接收控制位。用软件置REN=1时为允许接收状态,可启动串行口的接收器RXD,开始接收数据。用软件复位(REN=0)时,为禁止接收状态。
TB8:在方式2和方式3时,它是要发生的第九个数据位,按需要由软件进行置位或清零。例如可用作数据的奇偶校验位,或在多机通信中表示是地址帧/数据帧标志位(TB8=1/0)。
RB8:在方式2和方式3时,它是接收到的第九位数据,作为奇偶位或地址帧/数据帧标志位。在方式1时,若SM2=0,则RB8是接收到的停止位,在方式0时,不使用RB8。
SM0/FESM1方式说明波特率000移位寄存器工作方式fO13TI:发生中断标志位。在方式0时,当串行发送数据字第八位结束时,由内部硬件置位(TI=1),向CPU申请发生中断。CPU响应中断后,必须用软件清零,取消此中断标志。在其他方式时,它在停止位开始发送时由硬件置位。同样,必须用软件使其复位。
RI:接收中断标志位。在方式0时,串行接收到第八位结束时由内部硬件置位。在其他方式中,它在接收到停止位的中间时刻由硬件置位,也必须用软件来复位。当一帧数据发送完成时,发送中断标志TI被置位,接着发生串口中断,进入串口中断服务程序。但CPU事先并不能分辨是TI还是RI的中断请求,因此,必须在中断服务程序中用位测试指令加以判别。两个中断标志位TI及RI均不能自动复位,必须在中断服务程序中使用清中断标志位指令,撤销中断请求状态,否则原先的中断标志位状态又将表示有中断请求。TI:发生中断标志位。在方式0时,当串行发送数据字第142.串口2控制寄存器S2CON寄存器S2CON(地址为9AH,复位值为00H)用于确定串口2的操作方式和控制串口2的某些功能,也可用于发送和接收第9个数据位(S2TB8、S2RB8),并设有接收和发送中断标志(S2RI及S2TI)位。S2CON各位的意义如下:位号D7D6D5D4D3D2D1D0位名称S2SM0S2SM1S2SM2S2RENS2TB8S2RB8S2TIS2RI寄存器S2CON的各个位与寄存器SCON的各个位含义和功能都类似,读者可以进行对比学习,在此,不再赘述。2.串口2控制寄存器S2CON153.掉电控制寄存器PCON
PCON(地址为87H,复位值为30H)中的SMOD用于设置方式1、方式2和方式3的波特率是否加倍。各位的定义如下:位号D7D6D5D4D3D2D1D0位名称SMODSMOD0LVDFPOFGF1GF0PDIDL其中,与串行通信相关的位是SMOD和SMOD0。SMOD:串行口波特率系数控制位。复位时,SMOD=0。1:使方式1、方式2和方式3的波特率加倍。0:各工作方式的波特率不加倍。SMOD0:帧错误检测有效控制。复位时,SMOD0=0。1:SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能。0:SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行通信的工作方式。3.掉电控制寄存器PCON位号D7D6D5D4D3D2D1164.辅助寄存器AUXR
辅助寄存器AUXR(地址为8EH,复位值为00H)各位的定义如下:T0x12和T1x12用于设置定时器0和定时器1的速度。详见“第8章定时/计数器与可编程计数器阵列”一章。EXTRAM用于设置是否允许使用内部扩展的1024字节扩展RAM。1)UART_M0x6:串行口模式0的通信速度设置位。0:UART串口模式0的速度是传统12T的8051速度,12分频。1:UART串口模式0的速度是传统12T的8051的6倍,2分频。2)BRTR:独立波特率发生器运行控制位。0:不允许独立波特率发生器运行。1:允许独立波特率发生器运行。3)S2SMOD:UART2的波特率加倍控制位。0:UART2的波特率不加倍。1:UART2的波特率加倍。位号D7D6D5D4D3D2D1D0位名称T0x12T1x12UART_M0x6BRTRS2SMODBRTx12EXTRAMS1BRS4.辅助寄存器AUXRT0x12174)BRTx12:独立波特率发生器计数控制位。0:独立波特率发生器每12个时钟计数一次。1:独立波特率发生器每1个时钟计数一次。5)S1BRS:串口1波特率发生器选择位。0:选择定时器1作为串口1波特率发生器。1:选择独立波特率发生器作为串口1的波特率发生器,此时定时器1得到释放,可以作为独立定时器使用。
★
注意:对于具有串口2的STC12C5A60S2单片机,串口2只能使用独立波特率发生器作为波特率发生器,不能够选择定时器1作为波特率发生器;串口1可以选择定时器1作为波特率发生器,也可以选择独立波特率发生器作为波特率发生器。4)BRTx12:独立波特率发生器计数控制位。185.独立波特率发生器寄存器BRT
独立波特率发生器寄存器BRT(地址为9CH,复位值为00H)用于保存重装时间常数。6.从机地址控制寄存器为了方便多机通信,STC12C5A60S2单片机设置了从机地址控制寄存器SADEN和SADDR。其中,SADEN是从机地址掩模寄存器(地址为B9H,复位值为00H),SADDR是从机地址寄存器(地址为A9H,复位值为00H)。7.数据缓冲器数据缓冲器用于保存要发送的数据或者从串口接收到的数据。串口1的数据缓冲器是SBUF,串口2的数据缓冲器是S2BUF。对于串口1,当一个字符接收完毕,移位寄存器中的数据字节装入串行接收数据缓冲器SBUF中,其第9位则装入SCON寄存器的RB8位。如果SM2使得已接收的数据无效,则RB8位和SBUF缓冲器中的内容不变。对于串口2,当一个字符接收完毕,移位寄存器中的数据字节装入串行接收数据缓冲器S2BUF中,其第9位则装入S2CON寄存器的S2RB8位。如果S2SM2使得已接收的数据无效,则S2RB8位和S2BUF缓冲器中的内容不变。无论对于串口1还是串口2,发送缓冲器只能写入,不能读出;接收缓冲器只能读出,不能写入。因此,串口1的两个缓冲器共用一个地址号(99H),串口2的两个缓冲器共用一个地址号(9BH)。5.独立波特率发生器寄存器BRT19
(4)串行收发寄存器SBUF(字节地址99H,没有位寻址)在所有的串行方式中,在写SBUF信号的控制下,将其数据装入移位寄存器,前面8位为数据字节,其最低位就是移位寄存器的移位输出位。根据不同的工作方式会将“1”或TB8的值装入移位寄存器的第九位,并进行发送。当一个字符接收完毕,移位寄存器中的数据字节装入串行接收数据缓冲器SBUF中,其第九位则装入SCON寄存器的RB8位。如果SM2使得已接收的数据无效,则RB8位和SBUF缓冲器中的内容不变。发送缓冲器只能写入不能读出,而接收缓冲器只能读出,不能写入。因而两个缓冲器可共有一个地址号(99H)。(4)串行收发寄存器SBUF(字节地址99H,没208.2.2串行接口的四种工作方式
1.方式0-移位寄存器方式。(1)串口1的工作方式0
串行口输出端可直接与移位寄存器相连,也可用作扩展I/O口或外接同步输入输出设备。
发送过程:当CPU将数据写入到发送缓冲区SBUF时,串行口即把8位数据以Fosc/12的波特率由RXD引脚输出,同时由TXD引脚输出同步脉冲。字符发送完毕,置中断标志TI为1。
接收过程:控制字除方式0外,还应置允许接收控制位REN=1。清除RI中断标志。接收器启动后RXD为数据输入端,TXD为同步信号输出端。接收器以Fosc/12波特率采样RXD引脚输入的数据信息。当接收完8位数据时又重新置RI=1。方式0工作时,必须使SCON控制字的SM2位(多机通信控制位)为0。由于波特率固定,无须用定时器提供。但以中断方式传送数据时,CPU响应中断并不会自动清除TI、RI标志,所以在中断服务程序中必须由指令清0。例如CLRTI及CLRRI指令。(2)串口2的工作方式0串行数据通过RXD2/P1.2(RXD2/P4.2)接收和发送,TXD2/P1.3(TXD2/P4.3)输出同步移位时钟,发送接收的是8位数据,低位在先,波特率固定在Fosc/12。8.2.2串行接口的四种工作方式1.方式0-移位寄存器方21方式0工作方式波形图方式0工作222.其他方式-UART方式(1)串口1的UART方式
发送过程:CPU执行数据写入发送缓冲区SBUF的指令即可启动发送(如MOVSBUF,A)。串行口内自动将发送缓冲区中内容送入发送移位寄存器。发送移位寄存器先发一个起始位,接着按程序设定每个字符的代码,先低位后高位。数据字加上奇偶校验位或可控位(方式2,3中即为程序设定的TB8位的值),再发停止位,从而完成一帧的发送。串行数据均由TXD端输出,发送完毕将中断标志位置1,以供查询及向CPU申请中断之用。
接收过程:接收数据均由RXD输入,串行口以所选定的波特率的16倍速率采样RXD端状态。当采样的RXD端电平由1到0的跳变时,就启动接收器。串行口按程序审定的格式接收一帧代码,并把此码的数据位拼成并行码送入接收缓冲寄存器中(在方式1时,把停止位:方式2、3时把程控的第九位数据都送入RB8),等待CPU取走。为保证可靠无误,对每一数据位要进行连续3次采样,接收的值取3次采样中至少相同的二次的值。接收完毕,置接收中断标志RI=1。CPU的响应中断后必须在中断服务程序中使RI清零。2.其他方式-UART方式23方式1工作方式波形图方式1工作方式波形图24方式2、3工作方式波形图方式2、3工作方式波形图25方式1与方式2、3的区别之一是:方式1其数据字是8位异步通信接口,串行口发送/接收收共10位信息,第0位为起始位“0”,1—8位是数据位,最后是停止位“1”;方式2、3其数据字为9位的异步通信接口。1位起始位“0”,8位数据位,第9位是可程控位“1”或“0”,最后是停止位“1”,共有11位信息。方式1与方式2、3的区别之二是:方式1、3的波特率是可变的,其波特率取决于定时器1的溢出率和特殊功能寄存器PCON中的SMOD位的值,即工作方式1、3的波特率=2SMOD×(定时器1的溢出率)/32而工作方式2的波特率=2SMOD×(振荡器频率)/64显然,方式2的波特率变化范围比方式1、3小,这也是方式2和方式3的唯一区别。
TB8可用于多机通信或作为奇偶校验位使用。若以TB8位作为奇偶校验位,处理方法为数据写入SBUF之前,先将数据的奇偶位写入TB8(设工作寄存器区2的R0作为发送数据区地址指针)。方式1与方式2、3的区别之一是:方式1其数据字是8位26
RIPTI:PUSH PSW;保护现场PUSH ACCSETB PSW.4CLR PSW.3CLR TI;发送中断标志TI清零MOV A,@R0;取数据MOV C,PMOV TB8,CMOV SBUF,A;数据写入到发送缓冲器,启动发送器INC R0;数据指针加1POP ACCPOP PSW;恢复现场RETIRIPTI:PUSH PSW27对输入方式而言,除选不同的方式控制外,均应使REN=1,允许串行接收。只有在最后的移位脉冲产生并同时满足下列二个条件时,才会产生接收数据装入SBUF和RB8及置位RI的信号:对方式1 对方式2、31)RI=0 1)RI=02)SM2=0或接收到的停止位=1 2)SM2=0或接收到的第九个数据=1如果不满足上述条件,接收到的信号将不可避免的丢失。由此可见,中断标志必须由用户在中断服务程序中设置清“0”指令。否则,将有可能产生另一次中断而造成混乱并影响后序数据的接收。对输入方式而言,除选不同的方式控制外,均应使REN=28(2)串口2的UART方式1)模式1:10位数据通过TXD2/P1.3(TXD2/P4.3)发送,通过RXD2/P1.2(RXD2/P4.2)接收。一帧数据包含一个起始位(0),8个数据位和一个停止位(1)。接收时,停止位进入特殊功能寄存器S2CON的S2RB8位。波特率由独立波特率发生器BRT的溢出率决定。2)模式2:11位数据通过TXD2/P1.3(TXD2/P4.3)发送,通过RXD2/P1.2(RXD2/P4.2)接收。一帧数据包含一个起始位(0),8个数据位,一个可编程的第9位和一个停止位(1)。发送时,第9位数据由特殊功能寄存器S2CON的S2TB8位确定;接收时,第9位数据进入特殊功能寄存器S2CON的S2RB8位。波特率为:Fosc/32或者Fosc/64。3)模式3:波特率的确定方法与模式1相同,数据的传输模式和模式2相同。(2)串口2的UART方式298.2.3多处理机通信
下面以使用串口1为例说明多机通信的过程。串行口控制寄存器SCON中的SM2位为方式2和方式3工作时进行多机通信的控制位。这种多机通信方式一般为一台主机:多台从机系统;主机发送信息可被各从机接收,而从机只能对主机发送信息。而从机间互相不能直接通信。8.2.3多处理机通信下面以使用串口1为30多机系统中使用两类信息,一类是地址信息,用于选择从机;另一类是要传送的数据信息。在通信中使用第9位区分两类信息。地址帧:第9位为1数据帧:第9位为0从机系统由初始化程序(或相关处理程序)将串行口置成工作方式2或3,SM2=1,REN=1,处于接收状态。当主机和某一从机通信时,主机应先发出地址帧确定某从机的地址,接着才能送数据或命令。当各从机接收到主机发出的地址帧信息后,由于第9数据位为“1”,可激发中断标志RI=1,分别中断CPU。各CPU响应中断后均进入中断服务程序,在服务程序中把主机送来的地址号与本从机的地址号相比较,若地址相等,则使本机之SM2置“0”,为接收主机接着送来的数据帧作准备。而地址号不符的其他从机仍然维持SM2=1状态,对主机以后发出的数据帧信息不予理睬,不激发中断标志RI=0,直到与主机发出的地址信息相符后,才可接收以后的数据信息。从而实现了主从一对一通信(点――点通信)。在多机通信时,SM2控制位起着极为重要的作用。多机系统中使用两类信息,一类是地址信息,用于选择从机31方式0:串口1:波特率为振荡频率的1/12或1/2(由UART_M0x6决定)。
串口2:波特率为振荡频率的1/12,忽略波特率发生器。方式2:波特率是可编程设定的,有两种波特率可选择,它取决于电源控制寄存器PCON中SMOD位的值,当SMOD=0时,为振荡频率的1/64;当SMOD=1时,为振荡频率的1/32。工作于方式1和3时:波特率是可变的。对于串口1,可以通过编程改变定时器1的溢出率或者独立波特率发生器的溢出率来确定波特率。对于串口2,只能通过编程改变独立波特率发生器的溢出率来确定波特率。
波特率=×(定时器1的溢出率或独立波特率发生器的溢出率
)定时器1作为波特率发生器应用时,最典型的用法是定时器1工作在自动再装入时间常数的定时方式2(即定时器的方式控制寄存器TMOD的高四位为0010B状态。定时器的控制寄存器TCON的TCON.6(TR1)=1启动定时器1,禁止定时器中断)。这时溢出率取决于TH1中的自动重新再装入值。定时器1的溢出率可由下式算出:溢出率=其中,12T模式时,n=1;1T模式时,n=0。将此值代入求波特率的算式,可求得串行口的波特率=8.2.4波特率的设定
方式0:8.2.4波特率的设定32当使用独立波特率发生器BRT时,独立波特率发生器的溢出率为:独立波特率发生器的溢出率=Fosc/[12n×(256–BRT)]其中,BRT为BRT寄存器的值。对于独立波特率发生器BRT,1T模式是指BRTx12=1,12T模式是指BRTx12=0。12T模式时,n=1;1T模式时,n=0。此时,串行口的波特率计算公式为:串行口的波特率=
由于串口2只能使用独立波特率发生器,因此,在使用串口2时,应特别注意波特率的设置方法。
当使用独立波特率发生器BRT时,独立波特率发33SMOD=0时,自动重装时间常数RELOAD的计算方法:(1)计算RELOAD1)12T模式的计算公式:RELOAD=256-INT(fosc/Baud0/32/12+0.5)2)1T模式的计算公式:RELOAD=256-INT(fosc/Baud0/32+0.5)式中,INT()表示取整运算即舍去小数,在式中加0.5可以达到四舍五入的目的。fosc为晶振频率;Baud0为标准波特率。(2)计算用RELOAD产生的波特率1)12T模式:Baud=fosc/(256-RELOAD)/32/122)1T模式:Baud=fosc/(256-RELOAD)/32(3)计算误差率error=(Baud-Baud0)/Baud0*100%(4)如果误差率>4.5%,则需要更换波特率或者更换晶体频率,重复步骤1)-4)。例如:设fosc=22.1184MHz,Baud0=57600,则12T模式时,RELOAD=256-INT(22118400/57600/32/12+0.5)=255=0FFHBaud=22118400/(256-255)/32/12=57600误差等于零。又如,设fosc=18.432MHz,Baud0=57600,则12T模式时,RELOAD=256-INT(18432000/57600/32/12+0.5)=0FFHBaud=18432000/(256-255)/32/12=48000误差:error=(48000-57600)/57600*100%=-16.66%误差很大,需要更换波特率或者更换晶体频率。在实际设计时,为了保证通信的可靠性,应尽量保证设计后的误差为0。常用波特率与系统时钟及定时器1的重装时间常数等设置关系请参考表8-4。SMOD=0时,自动重装时间常数RELOAD的计算方法:348.2.5串行接口通信应用举例
1、串口1的编程要点(1)设置串口的工作模式设置SCON寄存器的内容。若要串口接收,需将其中的REN位置1。(2)设置正确的波特率1)使用定时器1作为波特率发生器时,需要设置定时器1的工作方式和时间常数(设定TMOD和TH1、TL1寄存器的内容);启动定时器1(置位TR1)。2)使用独立波特率发生器时,需要设置独立波特率发生器寄存器和相应的位,包括:独立波特率发生器寄存器BRT,BRTx12位,SMOD位。启动BRT(置位BRTR),BRT开始计数。(3)设置串口的中断优先级(设置PS和PSH,也可以不设置,取默认值),设置相应的中断控制位(ES和EA)。(4)如要串口1发送,将数据送入SBUF。(5)编制串行中断服务程序,在中断服务程序中要有清除中断标志指令(将TI和RI清零)。
8.2.5串行接口通信应用举例1、串口1的编程要点352、串口2的编程要点(1)设置串口2的工作模式设置S2CON寄存器中的S2SM0和S2SM1两位。如要串口2接收,将S2REN置1。(2)设置串口2的波特率相应的寄存器和位,包括:独立波特率发生器寄存器BRT、BRTx12和S2SMOD位。启动BRT(置位BRTR),BRT开始计数。(3)设置串口2的中断优先级(设置PS2和PS2H,也可以不设置,取默认值),设置打开相应的中断控制位(ES2和EA)。(4)如要串口2发送,将数据送入S2BUF。(5)编制串行中断服务程序,在中断服务程序中要设置清除中断标志指令(分别是接收完成标志S2RI和发送完成标志S2TI)。2、串口2的编程要点36例8-1
设有甲、乙两台单片机,编出两台单片机间实现如下串行通信功能的程序。甲机发送:将首址为ADDRT的128个字节的数据块顺序向乙机发送;乙机接收:将接收的128个字节的数据,顺序存放在以首址为ADDRR的数据缓冲区中。编制该类程序的要点是,选定正确的控制字,以保证接口功能的初始化;选择合适的波特率,这主要是选择定时器1的方式和时间常数的确定;最后还应注意是在串行中断服务程序中要设置清除中断标志指令,否则将产生另一个中断。例8-1设有甲、乙两台单片机,编出两台单片机间实现如下串行37甲机发送程序流程图甲机发送程序流程图38汇编语言发送程序如下:$include(STC12C5A.INC);包含STC12C5A60S2单片机寄存器定义文件 ORG 0000H LJMP MAINT ;跳至主程序入口 ORG 0023H LJMP INTSE1 ;转至串行中断服务程序 ORG 0100HMAINT: MOV SP,#60H ;设置堆栈指针 MOV SCON,#01000000B ;置串行口工作方式1 MOV TMOD,#20H ;定时器1为工作方式2 MOV TH1,#0FDH ;产生9600bps的时间常数 MOV TL1,#0FDH SETB TR1 ;启动定时器1 SETB ES ;串行口开中断 SETB EA ;开中断 MOV DPTR,#ADDRT ;ADDRT是首址,可以使用EQU定义 MOV R0,#00H ;传送字节数初值 MOVX A,@DPTR ;取第一个发送字节 MOV SBUF,A ;启动串行口发送 SJMP$ ;等待中断;中断服务程序INTSE1: CLR TI ;将中断标志清零 CJNER0,#7FH,LOOPT;判断128B是否发送完,若没完,则转LOOPT CLR ES ;全部发送完毕,禁止串行口中断 LJMP ENDT ;转中断返回LOOPT: INC R0 ;修改字节数指针
INC DPTR ;修改地址指针
MOVX A,@DPTR ;取发送数据
MOV SBUF,A ;启动串行口ENDT: RETI ;中断返回
END
汇编语言发送程序如下:39对应的C语言程序如下:#include“stc12c5a.h”//包含STC12C5A60S2单片机寄存器定义文件unsignedcharxdataADDRT[128]; //在外部RAM区定义128个单元unsignedcharnum=0;
//声明计数变量unsignedchar*psend; //指向发送数据区的指针voidmain(void) //主程序{ SCON=0x40; //置串行口工作方式1 TMOD=0x20; //定时器1为工作方式2 TH1=0xFD; //产生9600bps的时间常数 TL1=0xFD; TR1=1; //启动定时器1 ES=1; //串行口开中断 EA=1; //开中断 psend=ADDRT; //设置发送数据缓冲区指针 SBUF=*psend; //发送第一个数据 while(1); //等待中断}voidUART_ISR(void)interrupt4 //中断号4是串行中断{ TI=0; //清发送中断标志 num++; //修改计数变量值 if(num==0x7F)ES=0; //判断是否发送完,若已完,则关中断 else //否则,修改指针,发送下一个数据 { psend++; SBUF=*psend; }}对应的C语言程序如下:40乙机接收数据流程图乙机接收数据流程图41接收程序如下(汇编语言):对应的C语言程序请思考$include(STC12C5A.INC);包含STC12C5A60S2单片机寄存器定义文件 ORG 0000H LJMP MAINR ;转主程序 ORG 0023H LJMP INTSE2 ;转串行口中断服务程序 ORG 0100HMAINR: MOV SP,#60H ;设置堆栈指针 MOV SCON,#01010000B ;置串行口工作方式1,允许接收
MOV TMOD,#20H ;定时器1为工作方式2 MOV TH1,#0FDH ;产生9600bps的时间常数
MOV TL1,#0FDH SETB TR1 ;启动定时器1 SETB ES ;串行口开中断 SETB EA ;开中断
MOV DPTR,#ADDRR ;数据缓冲区首址送DPTR MOV R0,#00H ;置传送字节数初值
SJMP $ ;等待中断;中断服务程序INTSE2: CLR RI ;清接收中断标志
MOV A,SBUF ;取接收的数据
MOVX @DPTR,A ;接收的数据送缓冲区
CJNE R0,#7FH,LOOPR;判别接收完没有。若没有,转LOOPR继续接收
CLR ES ;若接收完,则关串行口中断
LJMP ENDRLOOPR: INC R0 ;修改计数指针
INC DPTR ;修改地址指针ENDR: RETI ;中断返回
END接收程序如下(汇编语言):对应的C语言程序请思考42例8-2设有甲、乙两台单片机,编写程序,使用调用子程序的方法进行串行通信。甲机(发送机);从内部RAM单元20H~25H中取出6个ASCII码数据,在最高位加上奇偶校验位后由串行口发送。采用8位异步通信,波特率为1200bps,(假设系统时钟为11.0592MHz)。乙机(接收机):把接收到的ASCII码数据,先进行奇偶校验,若校验正确,将数据依次存放在内部RAM区20H~25H单元中。若校验出错,则将出错信息“0FFH”存入相应的单元。例8-2设有甲、乙两台单片机,编写程序,使用调43调用子程序的查询方式串行通信流程图调用子程序的查询方式串行通信流程图44甲机的汇编语言程序如下:$include(STC12C5A.INC);包含STC12C5A60S2单片机寄存器定义文件 ORG 0000H ;主程序入口
LJMP MAINT ORG 0030HMAINT: MOV SP,#60H MOV TMOD,#20H ;置定时器1为工作方式2 MOV TH1,#0E8H ;置波特率时间常数
MOV TL1,#0E8H MOV SCON,#40H ;置串行口为工作方式1 SETB TR1 ;启动定时器1工作
MOV R0,#20H ;数据首地址送R0 MOV R7,#06H ;传送字节数送R7LOOPT: MOV A,@R0 ;取一个待传送的数据字节
LCALL DATAOUT ;调用串行可发送子程序
INC R0 ;修改地址指针
DJNZ R7,LOOPT ;若没有全部发送完毕,则转LOOPT继续发送
SJMP $DATAOUT:;串行口发送子程序
MOV C,P ;设置奇偶校验位(补奇)
CPL C MOV ACC.7,C MOV SBUF,A ;启动串行口发送数据
JNB TI,$ ;等待数据字节发送完毕
CLR TI ;清发送标志TI,为下一数据字节串行发送作准备
RET END甲机的汇编语言程序如下:45对应的C语言程序如下:#include“stc12c5a.h”//包含STC12C5A60S2单片机寄存器定义文件unsignedchardataADDRT[6]_at_0x20; //在内部RAM区定义6个单元voidmain(void) //主程序{ unsignedchari; TMOD=0x20;//置定时器1为工作方式2 TH1=0xe8;//置波特率时间常数
TL1=0xe8; SCON=0x40;//置串行口为工作方式1 TR1=1;//启动定时器1工作
for(i=0;i<6;i++) UART_SEND(ADDRT[i]);//发送一个数据
while(1); //发送完毕,循环等待}voidUART_SEND(unsignedcharsenddata)//串行口发送子程序{ bittmpbit; ACC=senddata; tmpbit=P;//设置奇偶校验位(补奇)
tmpbit=!tmpbit; if(tmpbit)senddata=senddata|0x80; elsesenddata=senddata&0x7f; SBUF=senddata;//启动串行口发送数据
while(TI==0);//等待数据字节发送完毕
TI=0;//清发送标志TI,为下一数据字节串行发送作准备}对应的C语言程序如下:46$include(STC12C5A.INC);包含STC12C5A60S2单片机寄存器定义文件
ORG 0000H ;主程序入口地址
LJMP MAINR ORG 0030HMAINR: MOV SP,#60H MOV TMOD,#20H ;置定时器1为工作方式2 MOV TH1,#0E8H ;置波特率时间常数
MOV TL1,#0E8H MOV SCON,#52H ;置串行口为工作方式1,并使REN=1 SETB TR1 ;启动定时器1 MOV R0,#20H ;存放数据首地址送R0 MOV R7,#06H ;存放数据字节数送R7LOOP: LCALL DATAIN ;调用接收子程序
JC ERROR ;若C=1,则出错,转出错处理程序
MOV @R0,A ;将接收的数据送指定RAM单元中
LJMP LOOPCERROR: MOV @R0,#0FFH ;将出错字符”0FFH”送指定RAM单元LOOPC: INC R0 ;修改地址指针
DJNZ R7,LOOP ;若没全部接收完毕,则继续接收数据;否则顺序进行
SJMP $;串行口接收子程序DATAIN: JNB RI,$ ;等待一个数据字节接收完毕
CLR RI ;接收完毕,清标志RI,为接收下一个数据字节作准备
MOV A,SBUF ;接收到的数据字节送A MOV C,P ;检查奇偶校验位
CPL C ANL A,#7FH ;消去奇校验位
RET ;子程序返回
END
乙机汇编语言程序$include(STC12C5A.INC)47【例8-3】多机通信编程举例
现用简单实例说明多机串行通信中从机的基本工作过程。而实际应用中还需要考虑通信的规范协议。有些协议很复杂,在此不加以考虑。假设系统晶振频率为11.0592MHz。编程实现如下功能:主机:先向从机发送一帧地址信息,然后再向从机发送10个数据信息。从机:接收主机发来的地址帧信息,并与本机的地址号相比较,若不符合,仍保持SM2=1不变;若相等,则使SM2清零,准备接收后续的数据信息,直至接收完10个数据信息。
【例8-3】多机通信编程举例现用简单实例说明多机48a)主机程序流程图b)从机程序流程图
a)主机程序流程图b)从机程序流程图49主机程序:$include(STC12C5A.INC);包含STC12C5A60S2单片机寄存器定义文件ADDRT EQU 0000HSLAVE EQU 5 ;从机地址号 ORG 0000H LJMP MAINT ;主程序入口地址
ORG 0023H LJMP INTST ;串行口中断入口地址
ORG 0100HMAINT: MOV SP,#60H MOV SCON,#0C0H ;串行口方式3 MOV TMOD,#20H ;置T1工作方式2 MOV TH1,#0FAH ;置4800波特率
MOV TL1,#0FAH ;相应的时间常数
MOV DPTR,#ADDRT ;置数据地址指针
MOV R0,#00H ;发送数据字节计数清零
MOV R2,#SLAVE ;从机地址号→R2 SETB TR1 ;启动T1 SETB ES ;串行口开中断
SETB EA ;CPU开中断
SETB TB8 ;置位TB8,作为地址帧信息特征
MOV A,R2 ;发送地址帧信息
MOV SBUF,A SJMP $ ;等待中断主机程序:50;串行口中断服务程序:INTST: CLR TI ;清发送中断标志
CLR TB8 ;清TB8位,为发送数据帧信息作准备
MOVX A,@DPTR ;发送一个数据字节
MOV SBUF,A INC DPTR ;修改指针
INC R0 CJNE R0,#0AH,LOOPT ;判数据字节是否发送完
CLR ESLOOPT: RETI END
;串行口中断服务程序:51对应的C语言版程序如下:#include“stc12c5a.h”//包含STC12C5A60S2单片机寄存器定义文件unsignedcharxdataADDRT[10]; //保存数据的外部RAM单元unsignedcharSLAVE; //保存从机地址号的变量unsignedcharnum=0,*mypdata;voidmain(void){ SCON=0xC0; TMOD=0x20; TH1=0xFA; TL1=0xFA; mypdata=ADDRT; SLAVE=5; //定义从机地址,在此假设从机地址为5 TR1=1; ES=1; EA=1; TB8=1; SBUF=SLAVE; //发送从机地址
while(1); //等待中断}
对应的C语言版程序如下:52voidSerial_ISR(void)interrupt4{ TI=0; TB8=0; SBUF=*mypdata; //发送数据
mypdata++; //修改指针
num++; if(num==0x0a)ES=0;}voidSerial_ISR(void)interrup53从机程序如下:$include(STC12C5A.INC);包含STC12C5A60S2单片机寄存器定义文件ADDRR EQU 0000HSLAVE EQU 5 ;从机地址号 ORG 0000H LJMP MAINR ;从机主程序入口地址
ORG 0023H LJMP INTSR ;串行口中断入口地址
ORG 0100HMAINR: MOV SP,#60H MOV SCON,#0F0H ;串行口方式3,SM2=1,REN=1,接收状态
MOV TMOD,#20H ;置T1为工作方式2 MOV TH1,#0FAH ;置4800波特率
MOV TL1,#0FAH ;相应的时间常数
MOV DPTR,#ADDRR ;置数据地址指针
MOV R0,#0AH ;置接收数据字节数指针
SETB TR1 ;启动T1 SETB ES ;串行口开中断
SETB EA ;CPU开中断
SJMP $ ;等待中断从机程序如下:54INTSR: CLR RI ;清接收中断标志
MOV A,SBUF ;取接收信息
MOV C,RB8 ;取RB8(信息特征位)→C JNC LOOPR1 ;RB8=0为数据帧信息,转LOOPR1 XRL A,#SLAVE ;RB8=1为地址帧信息,与本机地址号SLAVE相比较
JZ LOOPR2 ;地址相等,则转LOOPR2 LJMP ENDR ;地址不相等,则转中断返回ENDRLOOPR2:CLR SM2 ;清SM2,为后面接收数据帧信息作准备
LJMP ENDR ;中断返回LOOPR1:MOVX @DPTR,A ;接收的数据→数据缓冲区
INC DPTR ;修改地址指针
DJNZ R0,ENDR ;数据字节没全部接收完,则转LOOPR2 SETB SM2 ;全部接收完,置SM2=1ENDR: RETI ;中断返回
END
INTSR: CLR RI ;清接收中断标志55对应的C语言版程序如下:#include“stc12c5a.h”//包含STC12C5A60S2单片机寄存器定义文件unsignedcharxdataADDRR[10];unsignedcharSLAVE,num=0x0a,rdata,*mypdata;voidmain(void){ SCON=0xF0; TMOD=0x20; TH1=0xFA; TL1=0xFA; mypdata=ADDRR; SLAVE=5; //设定从机地址
TR1=1; ES=1; EA=1; while(1); //等待中断}
对应的C语言版程序如下:56voidSerial_ISR(void)interrupt4{ RI=0; rdata=SBUF; //将接收缓冲区的数据保存到rdata变量中
if(RB8) //RB8=1说明收到的信息是地址 { if(rdata==SLAVE) //如果地址相等,则SM2=0 SM2=0; } else //接收到的信息是数据 { *mypdata=rdata; mypdata++; num--; if(num==0x00)//所有数据接收完毕,令SM2=1
//为下一次接收地址信息作准备
SM2=1; }}第12章STC12C5A60S2的串行口及SPI接口课件57【例8-4】串口1使用独立波特率发生器作串行通信的实例。#include“stc12c5a.h”//包含STC12C5A60S2寄存器定义文件#include“intrins.h”#defineRELOAD_COUNT0xfb//Fosc=18.432MHz,12T,SMOD=0,9600bpssbitMCU_Start_Led=P1^4;unsignedchararray[9]={0,2,4,6,8,10,12,14,16};voidUART_send(unsignedchari);voiddelay(void);voiddisplay_MCU_Start_Led(void);voidmain(void){ unsignedchari; //串口初始化
SCON=0x50;//0101,00008位可变波特率,无奇偶校验位
BRT=RELOAD_COUNT; AUXR=0x11;//BRTR=1,启动独立波特率发生器
//S1BRS=1,串口1选择独立波特率发生器作为波特率发生器
【例8-4】串口1使用独立波特率发生器作串行通信的实例。58
ES=1; //允许串口中断
EA=1; //开总中断
display_MCU_Start_Led();//点亮发光二极管表示单片机开始工作
UART_send(0x34);//串口发送数据表示单片机串口正常工作
UART_send(0xa7);//串口发送数据表示单片机串口正常工作
for(i=0;i<9;i++) UART_send(array[i]); while(1);}voidUART_send(unsignedchari){ ES=0;//关串口中断
TI=0;//清零串口发送完成中断请求标志
SBUF=i; while(TI==0);//等待发送完成
TI=0;//清零串口发送完成中断请求标志
ES=1;//允许串口中断} ES=1; //允许串口中断59voiddelay(void){ unsignedintg,j; for(j=0;j<5;j++) { for(g=0;g<50000;g++) {_nop_();_nop_();_nop_(); } }}voiddelay(void)60voiddisplay_MCU_Start_Led(void){unsignedchari;for(i=0;i<5;i++){MCU_Start_Led=0;//点亮MCU开始工作指示灯
delay();MCU_Start_Led=1;//熄灭MCU开始工作指示灯
delay();}}voiddisplay_MCU_Start_Led(voi61voidUART_Receive(void)interrupt4{ unsignedchark; if(RI==1){ RI=0; k=SBUF; UART_send(k+1);}elseTI=0;}
voidUART_Receive(void)interr628.2.6计算机与单片机之间的串行通信
在以计算机为控制中心的数据采集与自动控制系统中,通常需要用单片机采集数据,然后用异步串行通信方式传给计算机;要完成的控制命令由计算机通过串行通信方式传给单片机,由单片机进行控制。计算机和单片机之间的串行通信一般采用RS-232、RS-422或RS-485总线标准接口,也有采用非标准的20mA电流环的。这里介绍最常用的RS-232接口串行通信的设计方法。RS-232是早期为公用电话网络数据通信而制定的标准,其逻辑电平与TTL/CMOS电平完全不同。逻辑“0”规定为+5~+15V之间,逻辑“1”规定为-5~-15V之间。由于RS-232发送和接收之间有公共地,传输采用非平衡模式,因此共模噪声会耦合到信号系统中,标准中建议的最大通信距离为15m。下面通过一个简单实例,介绍计算机与单片机进行RS232通信的硬件接口设计和软件设计。8.2.6计算机与单片机之间的串行通信在以63【例8-5】计算机向单片机发送一个数据,单片机接收到数据后,将接收到的数据回发给计算机。假设单片机的系统时钟为11.0592MHz,通信参数为“9600,n,8,1”(这是常见的通信参数表示方法,即波特率为9600bps,8个数据位,1个停止位,没有奇偶校验)。在计算机上显示从单片机发送过来的数据。可以使用该方法测试硬件电路的连接情况。【例8-5】计算机向单片机发送一个数据,单片机接收到数据后,64
1.硬件接口设计从硬件上讲,计算机的串行口是RS-232电平的,而单片机的串口是TTL电平的。因此,要实现单片机与计算机之间的串行通信,必须通过电路实现TTL电平和RS-232电平的转换。常用的电平转换集成电路是MAX232或者与它兼容转换芯片,它包含两路驱动器和接收器。单片机与计算机进行串行通信的硬件连接,最简单的方法是采用三线制连接方式,也就是说,计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。电路如教材图1-7。1.硬件接口设计652.软件设计
软件设计往往因应用系统要求的不同而不同。根据题目的要求,进行如下的计算机程序设计和单片机程序设计。(1)上位计算机程序设计
软件设计往往因应用系统要求的不同而不同。软件设计分为上位机程序设计和单片机程序设计两部分。如果仅仅为了测试串口的电路连接以及单片机通信程序设计正确与否,上位机程序可以直接使用现成的串口调试助手软件。当然,也可以使用VisualC++等可视化程序开发环境自行设计。串口调试助手软件可以从中下载。
2.软件设计66利用STC2C5A60S2单片机的串口2和上位计算机通信。汇编语言程序(系统晶振为11.0592MHz,波特率为9600bit/s):$INCLUDE(STC12C5A.INC);包含STC12C5A60S2单片机寄存器定义文件BITTEST DATA 20HS2TIbit BIT 01HS2RIbit BIT 00H ORG 0000H LJMP MAIN ORG 0043H LJMP UART2_ISR ORG 0100HMAIN: MOV SP,#60H ;设置堆栈
MOV S2CON,#50H;010100008位可变波特率,无奇偶校验位,允许接收
MOV BRT,#0FDH MOV AUXR,#11H;BRTR=1(启动BRT),S1BRS=1 MOVIE2,#01H;允许串口2中断,ES2=1 SETB EA SJMP $利用STC2C5A60S2单片机的串口2和上位计算机通信。67UART2_ISR: MOV BITTEST,S2CON ;将S2CON保存到20H单元以便位寻址
JBC S2RIbit,RDATA ;若是接收中断,则将S2RI清零
CLR S2TIbit ;否则就是发送中断,将S2TI清零
LJMP RETURNRDATA: MOV A,S2BUF ;读取收到的数据
CPL A MOV S2BUF,A ;将收到的数据发送回去RETURN: MOV S2CON,BITTEST;该语句可以起到中断标志清零的作用
RETI ENDUART2_ISR:68对应的C语言程序如下:#include“stc12c5a.h”//包含STC12C5A60S2单片机寄存器定义文件charbdatabittest;//为了保存中断标志sbitTIbit=bittest^1;//第1位sbitRIbit=bittest^0;//第0位voidmain(void){ S2CON=0x50; BRT=0xFD; AUXR=0x11; IE2=0x01; EA=1; while(1);}对应的C语言程序如下:69voidUART2_ISR(void)interrupt8{ unsignedchartmpdata; bittest=S2CON; if(RIbit) { RIbit=0; tmpdata=S2BUF; S2BUF=~tmpdata; } else TIbit=0; S2CON=bittest; //清零中断标志}voidUART2_ISR(void)interrupt708.3.1串行外设接口(SPI)的结构1.SPI简介串行外设接口(SerialPeripheralInterface,简称SPI)实际上是一种串行总线接口标准,SPI方式可允许同时同步接收和传送8位数据,是一种全双工串行总线。其速度比UART串行接口要快。SPI支持在同一总线上将多个从机连接到一个主机。同一总线上也可以有多个主机,当两个或多个主机试图同时进行数据传输时,需要进行碰撞检测。STC12C5A60S2单片机集成了SP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一年级上册美术教学设计-1 美丽的天空 人美版
- 2024年一年级道德与法治上册 第6课 做学习的主人教学设计 未来版
- 12 低碳生活每一天(教学设计)-2024-2025学年统编版道德与法治四年级上册
- Starter Unit 1 Good morning!Period 3教学设计2023-2024学年人教版七年级英语上册
- 6 j q x 第一课时(教学设计)-2024-2025学年统编版语文一年级上册
- 膀胱造瘘护理查房
- 2024-2025学年高中语文 第4单元 心连广宇(问题探讨)单元序列写作(四)教学设计 苏教版必修5
- 起重吊装操作培训
- Module5Unit2教学设计2023-2024学年外研版英语八年级下册
- 《认识平面图形》单元整体设计(教学设计)-2024-2025学年一年级下册数学西师大版
- 云计算服务应用理解试题及答案
- 2025年江苏省南通市海安市十三校中考一模数学试题(原卷版+解析版)
- 浙江2025年桐乡市事业单位招考高频重点模拟试卷提升(共500题附带答案详解)
- 2025至2031年中国管道直饮水系统行业投资前景及策略咨询研究报告
- 2025年开封大学单招职业倾向性测试题库及答案1套
- 环境监测课件50张
- 高考复习专题练习专题20函数的基本性质小题(单调性、奇偶性、周期性、对称性)(学生版+解析)
- 2025年江苏省高职单招《职测》高频必练考试题(附答案)
- 广东省2025年高三高考模拟地理试卷试题(含答案详解)
- 专题04 文化自信-中国古代的传统文化及文化交流(课件)
- 【指导规则】央企控股上市公司ESG专项报告参考指标体系
评论
0/150
提交评论