串行通信口SCI__HCS12学习笔记(2)
SCI采用NRZ数据格式,用负电平表示一种二进制值,正电平表示另一种二进制值,不使用零电平。空闲状态为1,发送器通过发送一个0表示一字节传输开始随后是数据位,最后发送1~2位的停止位,表示一字节的传送结束。一个开始位到一个停止位,为1帧Frame。
本文引用地址:https://www.eepw.com.cn/article/201611/321072.htm寄存器:
对于编程者来说,直接面对的就是寄存器,因此对于寄存器的介绍是非常重要的。
这里只列举,详细各个位的介绍参照数据手册:
波特率寄存器 SCIBDH SCIBDL H的高3位无效,因此一种13位1~8191
控制寄存器
状态寄存器
数据寄存器
初始化、收、发子函数:
//串行通信需要用到的头文件
#include "mc9s12dg128.h"
#include "Type.h"
//串行通信寄存器及标志位定义
#define ReSendStatusR SCI0SR1
#define ReTestBit
#define SendTestBit
#define ReSendDataR
//串行通信相关函数声明
void SCIInit(void);
void SCISend1(INT8U o);
void SCISendN(INT8U n,INT8U ch[]);
INT8U SCIRe1(INT8U *p);
INT8U SCIReN(INT8U n,INT8U ch[]);
//特别声明,这里的INT8U表示8位无符号数
//[SCI.c]串行通信----------------------------------------------------------*
//本文件包含:
//
//
//
//
//
//硬件连接:
//
//-------------------------------------------------------------------------*
//头文件
#include "SCI.h"
//SCIInit:DG128串行口0初始化函数-------------------------------------------*
//功
//
//
//
//参
//返
//说
//
//
//-------------------------------------------------------------------------*
void SCIInit(void)
{
}
//SCISend1:串行发送1个字节-------------------------------------------------*
//功
//参
//返
//-------------------------------------------------------------------------*
void SCISend1(INT8U o)
{
}
//SCISendN:串行发送N个字节-------------------------------------------------*
//功
//参
//返
//内部调用函数:SCISend1
//-------------------------------------------------------------------------*
void SCISendN(INT8U n,INT8U ch[])
{
}
//SCIRe1:串行收一个字节数据------------------------------------------------*
//功
//参
//返
//说
//-------------------------------------------------------------------------*
INT8U SCIRe1(INT8U *p)
{
}
//SCIReN:HC08串行接收N个字节-----------------------------------------------*
//功
//参
//返
//内部调用函数:SCIRe1
//-------------------------------------------------------------------------*
INT8U SCIReN(INT8U n,INT8U ch[])
{
}
这段程序是嵌入式系统--使用HCS12微控制器的设计与应用中附带的。格式很规范。
在计算机上使用软件收发给单片机时也容易出错,一般是波特率不匹配,这样出现的就是乱码,一定要注意。
Bt=fBUS/(16*BR)
评论