您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 飞思卡尔8位单片机MC9S08第08章 串行通信接口SCI与串行外设接口SPI
第八章串行通信接口SCI与串行外设接口SPI主要内容串行通信基本知识概要SCI的外围硬件电路与基本编程原理SCI模块的编程结构串行通信编程实例SPI模块的编程结构及应用实例SPI应用实例━━高位A/D扩展接口8.1串行通信基本知识概要8.1串行通信基本知识概要8.1.1基本概念(1)异步串行通信的格式SCI通常采用NRZ数据格式,即:standardnon-return-zeromark/spacedataformat,译为:“标准不归零传号/空号数据格式”。“不归零”的最初含义是:用正、负电平表示二进制值,不使用零电平。“mark/space”即“传号/空号”分别是表示两种状态的物理名称,逻辑名称记为“1/0”。下图给出了8位数据、无校验情况的传送格式。第0位第1位第2位第3位第4位第5位第6位第7位停止位开始位SCI数据格式8.1串行通信基本知识概要(2)串行通信的波特率波特率(baudrate):每秒内传送的位数。波特率单位是位/秒,记为bps。通常情况下,波特率的单位可以省略。通常使用的波特率有300、600、900、1200、1800、2400、4800、9600、19200、38400。8.1串行通信基本知识概要字符奇偶校验检查(characterparitychecking)称为垂直冗余检查(verticalredundancychecking,VRC),它是每个字符增加一个额外位使字符中“1”的个数为奇数或偶数。奇校验:如果字符数据位中“1”的数目是偶数,校验位应为“1”,如果“1”的数目是奇数,校验位应为“0”。偶校验:如果字符数据位中“1”的数目是偶数,则校验位应为“0”,如果是奇数则为“1”。(3)奇偶校验8.1串行通信基本知识概要单工(Simplex):数据传送是单向的,一端为发送端,另一端为接收端。这种传输方式中,除了地线之外,只要一根数据线就可以了。有线广播就是单工的。全双工(Full-duplex):数据传送是双向的,且可以同时接收与发送数据。这种传输方式中,除了地线之外,需要两根数据线,站在任何一端的角度看,一根为发送线,另一根为接收线。一般情况下,MCU的异步串行通信接口均是全双工的。半双工(Half-duplex):数据传送也是双向的,但是在这种传输方式中,除了地线之外,一般只有一根数据线。任何一个时刻,只能由一方发送数据,另一方接收数据,不能同时收发。在freescale的HC08系列MCU中,监控模式的通信就采用这种方式。(4)串行通信的传输方式8.1串行通信基本知识概要MCU引脚一般输入/输出使用TTL电平,而TTL电平的“1”和“0”的特征电压分别为2.4V和0.4V,适用于板内数据传输。为了使信号传输得更远,美国电子工业协会EIA(ElectronicIndustryAssociation)制订了串行物理接口标准RS-232C。RS-232C采用负逻辑,-3V~-15V为逻辑“1”,+3V~+15V为逻辑“0”。RS-232C最大的传输距离是30m,通信速率一般低于20Kbps。8.1.2RS-232C总线标准8.1串行通信基本知识概要8.1.2RS-232C总线标准RS-232接口,简称“串口”,它主要用于连接具有同样接口的室内设备。目前几乎所有计算机上的串行口都是9芯接口。右图给出了9芯串行接口的排列位置,相应引脚含义见表8-1。4123567899芯串行接口排列表8-19芯串行接口引脚含义表引脚号功能引脚号功能12345接收线信号检测(载波检测DCD)接收数据线(RXD)发送数据线(TXD)数据终端准备就绪(DTR)信号地(SG)6789数据通信设备准备就绪(DSR)请求发送(RTS)清除发送振铃指示返回8.2SCI的外围硬件电路与基本编程原理8.2SCI的外围硬件电路与基本编程原理8.2.1SCI的外围硬件电路(1)电源供给与滤波(2)晶振电路(3)复位电路(4)SCI电平转换电路8.2SCI的外围硬件电路与基本编程原理MAX232CPE161514131211109123456780.1μ+5V11121314151617181920+5V10K51ΩRST0.1μ复位电路20P10K15P32.768150K晶振电路0.47μ0.01μ10KPLL滤波302928272625242322210.1μ+5V4039383736353433323112345678910232电平OUTIN+5V+5VTTL电平OUTINTTL电平转为232电平1μ×4MC68HC908GP32具有串行通信功能的MC68HC908G932最小系统电路原理图8.2SCI的外围硬件电路与基本编程原理8.2.2SCI的基本编程原理SCI编程模型SCI数据寄存器MCU的内部总线(InternalBus)接收移位寄存器发送移位寄存器接收引脚RxD发送引脚TxDSCI控制寄存器SCI状态寄存器SCI波特率寄存器返回8.3SCI模块的编程结构8.3SCI模块的编程结构8.3.1SCI的寄存器MC68HC908GP32的SCI有7个寄存器,地址为$0013~$0019。(1)SCI波特率寄存器(SCIBaudRateRegister,SCBR)SCBR的作用是设置串行通信的波特率,其地址是$0019。D7、D6、D3:未定义;D5~D4—SCP:波特率预分频位(SCIBaudRatePrescalerBits)SCP1、SCP0=00011011PD=13413数据位D7D6D5D4D3D2D1D0定义xxSCP1SCP0xSCR2SCR1SCR0复位000000008.3SCI模块的编程结构D2~D0—SCR:波特率选择位(SCIBaudRateSelectBits),定义波特率另一分频值,记为:BD,定义如下:SCR2、1、0=000001010011100101110111BD=1248163264128设fSCI为串行通信时钟源频率,fSCI=fBUS或CGMXCLK,取决于CONFIG2的SCIBDSRC,一般设定SCIBDSRC=1,SCI用内部总线时钟,则fSCI=fBUS,则波特率的定义公式为:Bt=fBUS/(64×PD×BD)(1)SCI波特率寄存器(SCIBaudRateRegister,SCBR)8.3SCI模块的编程结构(2)SCI控制寄存器1(SCIControlRegister1,SCC1)SCC1的地址是:$0013,定义为:数据位D7D6D5D4D3D2D1D0定义LOOPSENSCITXINVMWAKEILTYPENPTY复位00000000循环模式选择位SCI允许位奇偶校验类型选择位奇偶校验允许位空闲线类型位唤醒条件位模式-字符长度选择位发送反转标志位8.3SCI模块的编程结构(3)SCI控制寄存器2(SCIControlRegister2,SCC2)SCC2的地址是:$0014,定义为:发送中断允许位发送完成中断允许位发送终止位接收器唤醒位接收器允许位发送器允许位空闲线中断允许位接收中断允许位数据位D7D6D5D4D3D2D1D0定义SCTIETCIESCRIEILIETERERWUSBK复位000000008.3SCI模块的编程结构(4)SCI控制寄存器3(SCIControlRegister3,SCC3)SCC3的地址是:$0015,定义为:接收位8发送位8接收器奇偶错误中断允许位接收器帧错误中断允许位接收器噪声错误中断允许位接收器溢出中断允许位DMA发送允许位DMA接收允许位数据位D7D6D5D4D3D2D1D0定义R8T8DMAREDMATEORIENEIEFEIEPEIE复位000000008.3SCI模块的编程结构(5)SCI状态寄存器1(SCIStatusRegister1,SCS1)SCS1的地址是:$0016,定义为:发送缓冲区空标志位发送完成标志位接收器奇偶错误标志位接收器帧错误标志位接收器噪声标志位接收器溢出标志位接收器空闲标志位接收器满标志位数据位D7D6D5D4D3D2D1D0定义(只读)SCTETCSCRFIDLEORNFFEPE复位110000008.3SCI模块的编程结构(6)SCI状态寄存器2(SCIStatusRegister2,SCS2)SCS2的地址是:$0017,定义为:未定义接收进行标志位终止码标志位数据位D7D6D5D4D3D2D1D0定义(只读)BKFRPF复位000000008.3SCI模块的编程结构(7)SCI数据寄存器(SCIDataRegister,SCDR)SCDR为SCI系统最常用的寄存器,它的地址是:$0018。写入时,为要发送的8位数据,记为:T7~T0;读出时,为接收的8位数据,记为:R7~R0。不受复位影响。8.3SCI模块的编程结构(1)SCI初始化对SCI进行初始化,最少由以下三步构成:第一步:定义波特率。LDA#%00000010STASCBR;总线频率fBUS=2.4576MHz,定义波特率Bt=9600第二步:写控制字到SCI控制寄存器1(SCC1)。LDA#%01000000STASCC1;设置允许SCI,正常码输出、8位数据、无校验第三步:写控制字到SCI控制寄存器2(SCC2)。LDA#%00001100STASCC2;设置允许发送、允许接收,查询方式收发8.3.2串行口初始化与收发编程的基本方法8.3SCI模块的编程结构(2)发送一个数据与接收一个数据发送数据是通过判断状态寄存器SCS1的第7位(SCTE)进行的,而接收数据是通过判断状态寄存器SCS1的第5位(SCRF)进行的。不论是发送还是接收,均使用SCI数据寄存器SCDR。发送时,将要发送的数据送入SCDR即可,接收时,从SCDR中取出的即是收到的数据。;串行发送A中的数BRCLR7,SCS1,*;SCS1.7=0?为0则等待STASCDR;SCS1.7=1,可以发送数据;查询方式接收一个串行数据,接收的数据放入寄存器A中BRCLR5,SCS1,*;SCS1.5=0?为0则等待LDASCDR;SCS1.5=1,可以取出数据返回8.4串行通信编程实例8.4串行通信编程实例8.4.108汇编语言串行通信子程序(1)SCI初始化汇编子程序对串行口的初始化一般在主循环之前进行,即使以中断方式接收或发送,在初始化子程序中只定义查询方式收发。允许中断的设置,在进入主循环之前进行。(2)串行发送与接收汇编通用子程序发送与接收使用同一个寄存器的不同位作为测试标志,发送与接收的数据寄存器地址相同。8.4串行通信编程实例(1)查询方式MCU方主程序MCU方的程序功能是:把通过串行口收到的数据发送回去。(2)PC机方VB程序PC机方VB程序的功能是:在“发送窗口”的文本框输入字符,单击“发送”按钮,其文本框中的字符被发送出去。任何时候,只要PC机串行口收到数据,则显示在“接收窗口”。(3)中断方式MCU方主程序8.4.208汇编语言串行通信测试实例8.4串行通信编程实例(1)SCI初始化08C语言子程序(2)串行发送与接收08C语言通用子程序(3)查询方式08C语言主程序(4)中断方式08C语言主程序(5)08C语言的串行中断方式的矢量表文件8.4.308C语言串行通信子程序与测试实例返回8.5SPI模块的编程结构及应用实例8.5SPI模块的编程结构及应用实例8.5.1SPI的基本工作原理MC68HC908GP32单片机D口的PTD0~PTD3引脚与SPI模块共用。作为SPI的引脚时,名称分别为:SS、MISO、MOSI、SPSCK。(1)从机选择引脚SS(Slaveselect)若MCU的SPI工作于主机方式,置SS为高电平;若SPI工作于从机方式,当SS=0时,表示主机选中了该从机,反之则未选中该从机。(2)主出从入引脚MOSI(Masterout/slavein)MOSI是主机输出、从机输入数据线。(3)主入从出引脚MISO(Masterin/slaveout)MISO是主机输入、从机输出数据线。(4)SPI串行
本文标题:飞思卡尔8位单片机MC9S08第08章 串行通信接口SCI与串行外设接口SPI
链接地址:https://www.777doc.com/doc-5951087 .html