智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3912|回复: 10
打印 上一主题 下一主题

[信息] MC9S12 SCI总线接口 学习

[复制链接]

65

主题

514

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2110

论坛骨干奖章活跃会员奖章优秀会员奖章

威望
945
贡献
561
兑换币
564
注册时间
2012-10-15
在线时间
302 小时
跳转到指定楼层
1#
发表于 2013-1-17 19:29:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MC9S12DG128为例,该单片机包含了两个SCI模块。
从硬件的角度上或者从封装上看,SCI模块仅仅复用了PS口的4个引脚(0~3位)作为RXD0TXD0RXD1TXD1。当SCI接收/发送器被允许时,SCI将控制TXDRXD进入相应的操作。
一、寄存器的描述
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”字符串。
PCCOM1/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 ( ; ; )  {}
}

18

主题

346

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2515

优秀会员奖章活跃会员奖章

威望
1198
贡献
703
兑换币
752
注册时间
2012-12-24
在线时间
307 小时
2#
发表于 2013-1-17 19:33:41 | 只看该作者
crg.h  这个头文件要自己写吗
回复 支持 反对

使用道具 举报

6

主题

782

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4804
威望
2424
贡献
1324
兑换币
1685
注册时间
2011-11-2
在线时间
528 小时
3#
发表于 2013-1-17 19:38:35 | 只看该作者
回复 支持 反对

使用道具 举报

1

主题

746

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3319
QQ
威望
1414
贡献
501
兑换币
277
注册时间
2012-9-25
在线时间
702 小时
4#
发表于 2013-1-17 20:41:59 | 只看该作者
回复 支持 反对

使用道具 举报

65

主题

514

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2110

论坛骨干奖章活跃会员奖章优秀会员奖章

威望
945
贡献
561
兑换币
564
注册时间
2012-10-15
在线时间
302 小时
5#
 楼主| 发表于 2013-1-17 20:53:44 | 只看该作者
老学童先生 发表于 2013-1-17 19:33
crg.h  这个头文件要自己写吗

不好意思,我也是刚开始学这个芯片
不过,我觉得应该是自己写的,因为我看到在其他的程序中是不包括这个头文件的

回复 支持 反对

使用道具 举报

8

主题

206

帖子

0

精华

高级会员

Rank: 4

积分
808

活跃会员奖章优秀会员奖章

QQ
威望
418
贡献
300
兑换币
174
注册时间
2011-12-23
在线时间
45 小时
6#
发表于 2013-1-18 19:31:38 | 只看该作者
我想咨询您一下,如果要发送高于8位的字节,比如是12位,应该如何发送?
回复 支持 反对

使用道具 举报

65

主题

514

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2110

论坛骨干奖章活跃会员奖章优秀会员奖章

威望
945
贡献
561
兑换币
564
注册时间
2012-10-15
在线时间
302 小时
7#
 楼主| 发表于 2013-1-18 20:07:13 | 只看该作者
王谦623 发表于 2013-1-18 19:31
我想咨询您一下,如果要发送高于8位的字节,比如是12位,应该如何发送?

不好意思,我也是刚开始学习,不敢误导,请另请高明
回复 支持 反对

使用道具 举报

0

主题

355

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1405
威望
706
贡献
435
兑换币
418
注册时间
2012-11-1
在线时间
179 小时
8#
发表于 2013-1-19 09:01:57 | 只看该作者
回复 支持 反对

使用道具 举报

6

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
564
威望
301
贡献
145
兑换币
185
注册时间
2013-2-18
在线时间
59 小时
9#
发表于 2013-3-3 14:20:50 | 只看该作者
程序中没有定义SET_PLL()这个函数
回复 支持 反对

使用道具 举报

65

主题

514

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2110

论坛骨干奖章活跃会员奖章优秀会员奖章

威望
945
贡献
561
兑换币
564
注册时间
2012-10-15
在线时间
302 小时
10#
 楼主| 发表于 2013-3-3 15:33:20 | 只看该作者
846375642 发表于 2013-3-3 14:20
程序中没有定义SET_PLL()这个函数

这里主要介绍的是SCI的通信,设置锁相环实际上在crg.h中,并没有直接显示在函数中
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-26 04:26 , Processed in 0.067308 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表