AKI-H8串口通信

      串口通信是一种通信接口简写SCI,它可是实现异步和同步两种传输模式。可以思考一下同步和异步的区别。

      所谓同步就是接收方和发送方使用的是同一个时钟,步调一致的处理数据。典型的就是CPU和内存,通过总线存取数据。特点就是快,发送方和接收方不需要什么数据格式,数据线上的数据就是当前想读的数据,因为步调一致嘛。但是问题就是双方的速度要一致,且总线要提供时钟信号,否则就无法实现时钟的统一。这样的通信一般都在速度要求高,距离比较近的地方。

      异步就是发送数据的一方和接收数据的一方并不是拥有一个统一的时钟,发送方按照一个固定的数据格式发送,接收方也是按照同一个数据格式接受,但是即使时钟不是同一个,但是发送方和接收方所用的时钟的频率必须是一致的(否则在接受数据的时候如果频率不一致不能够辨别预先设置的数据格式,比如如果接收方的时钟太快,那么会把本来是一个周期的低电平认为是两个低电平信号)。目前异步通信使用的是RS232,单片机为了满足这样的协议都自带UART模块,将CPU的同步数据转换为异步数据。

     串口通信最基本的来说有一个数据发送端,一个数据接收端,在连接的时候只要发送端连接到接收端那么数据就可以开始工作。H8的串口模块的发送和接受模块都有缓冲寄存器,也就说把数据先写到缓冲里,然后芯片自行将数据拷贝到发送寄存器里发送,接受的时候也是一样。怎样确认发送寄存器或者接受寄存器是不是为空,即可以工作呢?由相应的状态寄存器的标志位来决定。这样一来的话,串口通信的方式就有讲究了,如果状态寄存器的标志位显示当前不能发送,发送寄存器里的数据还没有清空,那么是等待还是立即返回呢?同样,接受的时候,数据还没来标志位还没置位,是等待还是返回呢?一般来说,两种方式都提供,在后面会提到。

   串口通信的另一个问题就是波特率,以什么样的速度发送?

    最后就是串口通信的数据格式,前面提到串行异步通信要使用特殊的数据格式:2009122813272910.jpg

起始位:一个周期的低电平。在串口通信的无数据阶段是全高电平的,所以一个低电平就标志一个数据包开始传送了。

数据位:7位或者8位的数据位,D0-D7。

检验位:奇\偶校验位。

停止位:两个高电平。

 

所以,对H8芯片的串口编程主要做以下的工作:

1:选择是否添加奇偶校验位

2:选择传输速度

3:选择是同步还是异步:SMR(CPU启动时默认是异步所以不需要特别设置)。

4:选择是否是CPU间通信:SMR(默认为不是)。

5:选择在送信,收信时候是否发生中断:SCR(默认不产生中断)

6:开启异步通信:SCR(默认关闭)

7:清除错误FLAG

1 int i;
2 SCI1.SCR = 0;
3 SCI1.SMR = 0; /* パリティ無し STOP1 */
4 SCI1.BRR = 80; /* 9600bps 3052 */
5 for(i=0;i<280;i++); /* wait */
6 SCI1.SCR = 0x30; /* TE = 1 , RE = 1 */
7 i = SCI1.SSR;
8 SCI1.SSR = 0x80; /* Clear Error Flag (TDRE=1) */

 

 

在发送和接受的时候,因为存在缓冲区不空闲的情况,必须先判断状态寄存器再向缓冲寄存器放读取数据。

 

1 void PutSCI(char c)
2 {
3 unsigned char i;
4 while( 1 )
5 {
6 i = SCI1.SSR;
7 if( i & 0x80 ) break;
8 }
9 SCI1.TDR = c;
10 SCI1.SSR = i&0x7f;
11 }
12
13  /*==========================================================================
14 SCI入力
15 ----------------------------------------------------------------------------
16 データを受信するまで待ちつづけます。
17 ==========================================================================*/
18  char GetSCI()
19 {
20 unsigned char i;
21 char c;
22 while( 1 )
23 {
24 i = SCI1.SSR;
25 if( i & 0x40 ) break;
26 }
27 c = SCI1.RDR;
28 SCI1.SSR = i&0xbf;
29 return(c);
30 }
31
32  /*==========================================================================
33 SCI入力データチェック
34 ----------------------------------------------------------------------------
35 SCIにデータがあるかチェックします。
36 戻り値 1 = データあり、0 = データなし
37 ==========================================================================*/
38  int ScanSCI()
39 {
40 if( SCI1.SSR & 0x40 ) return(1);
41 return(0);
42 }

最后一个函数提供了扫描功能,仅仅是对状态寄存器的读取。

 

(以上)

 

 

 

转载于:https://www.cnblogs.com/cbs-soft/archive/2009/12/28/1634056.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节取消大小周,部分员工:心疼,每个月少拿 1W 块

如图&#xff0c;是脉脉最近的一个热帖&#xff0c;头条昨天全员发邮件取消了大小周&#xff0c;原本是一件好事&#xff0c;减轻大家的工作压力&#xff0c;努力向 workbalance 靠拢&#xff0c;可是看着风向好像不太对&#xff0c;我们继续看下 TOP 的几个回复。下面是反对头…

高通LCD的pwm背光驱动

发生异常的现象&#xff1a; msm8953 lcd在快速亮灭的情况下背光概率性休眠不灭&#xff1b;测量高通pwm&#xff0c;发现正常的时候pwm的管脚LCM_BL_PWM为低电平&#xff0c;失败的时候为高电平&#xff1b; 根据原理图&#xff1a; mpp是什么&#xff1f; mpp是基于电源pmic的…

为什么一个字节定义成8位?

今天给大家分享一个小小知识点&#xff0c;为什么一个字节定义成8位呢&#xff1f;一些人没有回答到点子上。这件事得追溯计算机历史&#xff0c;源于IBM360操作系统和图灵奖得主&#xff08;Fred&#xff09;Brooks Jr。布鲁克斯被问到“您认为自己最大的技术成就是什么&#…

硬件基础 —— 光耦

光耦1、工作原理以光为媒介传递电信号。对输入和输出信号有良好的隔离作用&#xff08;光耦隔离&#xff09;。光耦一般由三个部分组成&#xff1a;光的发射、光的接收和信号放大。输入的电信号驱动发光二极管&#xff0c;被光探测器接收而产生光电流&#xff0c;再经过进一步放…

红外感应自动出水水龙头的电路原理

红外感应自动出水的水龙头&#xff0c;生活中很常见&#xff1a;可以用以下的电路方案实现&#xff0c;供电采用USB的5V&#xff1a;只要手靠近“红外线靠近检测模块”&#xff0c;直流水泵就会开启供水&#xff1a;其中这种直流水泵长这样&#xff1a;当“红外线靠近检测模块”…

Linux面试最高频的5个基本问题

CPU利用率和CPU负载的区别是什么提到CPU利用率&#xff0c;就必须理解时间片。什么是CPU时间片&#xff1f;我们现在所使用的Windows、Linux、Mac OS都是“多任务操作系统”&#xff0c;就是说他们可以“同时”运行多个程序&#xff0c;比如一边打开Chrome浏览器浏览网页还能一…

用iptables实现G1手机cmwap代理上http网站[转]

2019独角兽企业重金招聘Python工程师标准>>> 折腾了几天&#xff0c;总算有点阶段性成果&#xff1a; 证实可以用iptables实现通过cmwap的代理上HTTP协议的网站。 首先&#xff0c;android系统的实现是有缺陷的。在接入apn中指定的proxy并不会被系统所用。好似只有浏…

初识Buildroot

转自CSDN &#xff0c;记录是为了作者小编学习需要作者&#xff1a;xixihaha331什么是buildrootBuildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样&#xff0c;通过buildroot配置&#…

Python3安装(Windows)

Windows下Python3环境搭建 目录 Windows下Python3环境搭建 安装Python 启动终端会话 IDE —— Geany 安装Python 访问https://www.python.org/downloads 点击上图红色区域按钮&#xff0c;下载Python。下载完成后开始安装&#xff1a; 勾选“Add Python 3.7 to PATH”&…

Runtime消息动态解析与转发流程

先上图&#xff1a; 下面根据具体代码看这张图。 一、创建一个Person类&#xff0c; Person.h #import <Foundation/Foundation.h>interface Person : NSObject-(void)sendMessage:(NSString *)message;end Person.m #import "Person.h" #import <objc/runt…

编写优美的GTest测试案例

使用gtest也有很长一段时间了&#xff0c;这期间也积累了一些经验&#xff0c;所以分享一下。GTest为我们提供了便捷的测试框架&#xff0c;让我们只需要关注案例本身。如何在GTest框架下写出优美的测试案例&#xff0c;我觉得必须要做到&#xff1a; 案例的层次结构一定要清晰…

评分9.3,你想要的那本书,来了!

还记得那天晚上我发的朋友圈吗&#xff1f;经过不完全统计&#xff0c;更多的人喜欢C语言这本书&#xff0c;所以这次先安排抽奖这本书籍&#xff0c;属于出版社赞助&#xff0c;也是给大家一个获奖的机会。不吹牛啊&#xff0c;我们办公室一个大神&#xff0c;写算法的&#x…

Python3安装(Linux)

Linux下Python3环境搭建 目录 Linux下Python3环境搭建 检查Python版本&#xff08;ubuntu16.04&#xff09; Helloworld IDE —— Geany 检查Python版本&#xff08;ubuntu16.04&#xff09; Linux默认已经安装了Python。CtrlAltT调出终端&#xff0c;输入python&#xff…

create-react-app 创建react项目 多页面应用

1:npm install -g create-react-app 2:创建一个应用 create-react-app my-app cd my-app 3:提取配置文件 npm run eject 4:允许文件 npm start create-react-app 默认是创建单页面应用&#xff0c;但是也可以创建多页面应用&#xff0c;需要手动配置一下webpack 第一步&…

c语言指针用法详解,通俗易懂超详细!

文章转自&#xff1a;无际单片机大家好&#xff0c;我是无际。今天给大家来讲解一下指针。我会由浅到深&#xff0c;最后结合实际应用讲解&#xff0c;让大家学会指针的同时&#xff0c;知道大佬们都用指针来干嘛&#xff01;长文预警&#xff01;全文大约5200多字&#xff0c;…

Python3 —— 变量和简单数据类型

Python3 —— 变量和简单数据类型 目录 python3 —— 变量和简单数据类型 一、变量 1、变量&#xff08;每个变量都存储了一个值——与变量相关联的信息&#xff09; 2、变量命名 二、简单数据类型&#xff08;整型&#xff0c;浮点型&#xff0c;字符串等&#xff09; 1…

Linux C Socket编程,这篇文章让我耳目一新

目录1. 什么是TCP/IP、UDP&#xff1f;2. Socket在哪里呢&#xff1f;3. Socket是什么呢&#xff1f;4. 有很多的框架&#xff0c;为什么还在从Socket开始&#xff1f;5. Linux C Socket简单示例1.什么是TCP/IP、UDP&#xff1f;TCP/IP&#xff08;Transmission Cont…

视频下载比想象中容易

两周前搞定了56.com的视频独立播放和视频下载后&#xff0c;很得意是吹嘘了一把&#xff0c;有一些朋友也就试着用了&#xff08;有朋友笑称我在为56.com做广告&#xff0c;因为他以前是不知道56.com的&#xff0c;我这么一搞&#xff0c;他竟也喜欢上56.com看视频了&#xff0…

微处理器:50岁了!

编排 | strongerHuang微信公众号 | 嵌入式专栏50年前&#xff08;1971年&#xff09;&#xff0c;英特尔推出了第一款商用的通用型微处理器 4004&#xff0c;4004拥有2300多个晶体管&#xff0c;与当今芯片中的几十上百亿个晶体管相比&#xff0c;这个数字相形见绌&#xff0c;…

Python3 —— 列表

Python3 —— 列表 目录 Python3 —— 列表 1.访问列表元素&#xff08;索引&#xff09; 2.修改列表元素 3.添加列表元素 4.删除列表元素 5.组织列表 6.遍历整个列表&#xff08;for循环&#xff0c;缩进部分都在for范围之内&#xff09; 7.创建数值列表 8.列表简单…