智能车制作
标题: MC9S12 SCI总线接口 学习 [打印本页]
作者: 蛋求无悔 时间: 2013-1-17 19:29
标题: MC9S12 SCI总线接口 学习
以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 ( ; ; ) {}
}
作者: 老学童先生 时间: 2013-1-17 19:33
crg.h 这个头文件要自己写吗
作者: qurrer 时间: 2013-1-17 19:38
作者: liuyuliuyu1216 时间: 2013-1-17 20:41
作者: 蛋求无悔 时间: 2013-1-17 20:53
老学童先生 发表于 2013-1-17 19:33
crg.h 这个头文件要自己写吗
不好意思,我也是刚开始学这个芯片
不过,我觉得应该是自己写的,因为我看到在其他的程序中是不包括这个头文件的
作者: 王谦623 时间: 2013-1-18 19:31
我想咨询您一下,如果要发送高于8位的字节,比如是12位,应该如何发送?
作者: 蛋求无悔 时间: 2013-1-18 20:07
王谦623 发表于 2013-1-18 19:31
我想咨询您一下,如果要发送高于8位的字节,比如是12位,应该如何发送?
不好意思,我也是刚开始学习,不敢误导,请另请高明
作者: hbqyzpy 时间: 2013-1-19 09:01
作者: 846375642 时间: 2013-3-3 14:20
程序中没有定义SET_PLL()这个函数
作者: 蛋求无悔 时间: 2013-3-3 15:33
846375642 发表于 2013-3-3 14:20
程序中没有定义SET_PLL()这个函数
这里主要介绍的是SCI的通信,设置锁相环实际上在crg.h中,并没有直接显示在函数中
作者: D_catcher 时间: 2014-2-20 14:05
欢迎光临 智能车制作 (http://111.231.132.190/) |
Powered by Discuz! X3.2 |