以MC9S12DG128为例,该单片机包含了两个SCI模块。 从硬件的角度上或者从封装上看,SCI模块仅仅复用了PS口的4个引脚(0~3位)作为RXD0、TXD0、RXD1、TXD1。当SCI接收/发送器被允许时,SCI将控制TXD和RXD进入相应的操作。 一、寄存器的描述 1、SCI波特率寄存器: 作用:用来设置SCI通信的速率(注意:不是频率) 公式(计算波特率):SCI波特率=SCI模块时钟/(16 * BR) BR是SCI波特率寄存器中的内容,该寄存器中的内容可以从1~8191. 2、SCI控制寄存器1: 3、SCI控制寄存器2: 4、SCI状态寄存器1 5、SCI状态寄存器2 6、SCI数据寄存器 二、SCI应用举例 可采用简单易懂且便于实现的查询方式,也可以采用高效但较复杂的中断方式。 无论是查询方式,还是中断方式,实现串行通信的编程首先均需进行SCI的初始化,主要是完成波特率、收发数据格式、通信方式的设置。 下面程序的功能是向PC发送“HELLO”字符串。 PC的COM1/COM2 RS - 232标准端口可以与单片机的SCI模块相连,实现点对点的通信。由于单品阿基的SCI接口并非RS - 232标准,因而在单片机一侧必须接入电平转换器。具体程序如下: #include <hidef.h> #include<mc9s12dg128.h> #include “crg.h” void uart_init ( void ) //SCI的初始化 { SCI0CR2 = 0X08; //发送使能 SCI0BDH=0X00; SCI0BDL=0X9C; //设置波特率为9600 } void uart_putchar ( unsigned char ch ) //SCI发送子程序 { While( ! ( SCI0SR1 & 0x40 ) ) {} SCI0DRL = ch; } void main ( void ) { uchar str[]={ ‘ H ’,’ E ’,’ L ’,’ L ’,’ O ’ } ; uchar i = 0; SET_PLL ( ) ; //设置锁相环 EnableInterrupts ; //使能中断 uart_init () ; //SCI初始化 for ( ; i<5 ; i ++ ) { uart_putchar ( str [ i ] ) ; // 发送16进制数 } for ( ; ; ) {} }
|