freescalemc9s08单片机原理与应用第09章(编辑修改稿)内容摘要:

KBI1SC=0x06。 /* Keybord Interrupt Enable and event on falling edges */ /* sensitive */ EnableInterrupts。 /* enable interrupts */ for(。 ){ __RESET_WATCHDOG()。 /* feeds the dog */ 9 } /* loop forever */ } interrupt Keybord(){ char result。 unsigned int i。 /* Cross scan to acquire Key in code */ result=PTAD。 KBI1PE=0x00。 PTADD=0xF0。 PTAPE=0x0f。 PTAD=0x00。 result |=PTAD。 /* Change LED state judge by key in code */ switch(result){ case 0xEE: PTBD=0xEF。 break。 case 0xED: PTBD=0xDF。 break。 case 0xEB: PTBD=0xBF。 break。 case 0xE7: PTBD=0x7F。 break。 case 0xDE: PTBD=0xFE。 break。 case 0xDD: PTBD=0xFD。 break。 case 0xDB: PTBD=0xFB。 break。 case 0xD7: PTBD=0xF7。 break。 case 0xBE: 10 PTBD=0xEF。 break。 case 0xBD: PTBD=0xDF。 break。 case 0xBB: PTBD=0xBF。 break。 case 0xB7: PTBD=0x7F。 break。 case 0x7E: PTBD=0xFE。 break。 case 0x7D: PTBD=0xFD。 break。 case 0x7B: PTBD=0xFB。 break。 case 0x77: PTBD=0xF7。 break。 } for(i=0。 i=20200。 i++) __RESET_WATCHDOG()。 /* Resume to initial state */ KBI1PE=0xF0。 PTADD=0x0F。 PTAPE=0xF0。 PTAD=0x00。 KBI1SC_KBACK=1。 /* Keybord interrupt acknowledge */ } 把 Keybord中断添加到中断向量表(在 prm文件中)中: VECTOR ADDRESS 0xFFD2 Keybord 11 串行通信 SCI 基本概念 “位”( Bit)是二进制数字的简称,是可以拥有两种状态的最小的二进制值,分别用 0和 1 表示。 在计算机中,通常一个信息单位用 8 位二进制表示,称为一个“字节”( Byte)。 串行通信的特点是:数据以字节为单位,按位的顺序从一条传输线上发送出去。 这里至少涉及到以下几个问题:第一,每个字节之间是如何区分的。 第二。 发送一位的持续时间是多少。 第三,怎样知道传输是正确的。 第四,可以传输多远。 等等。 这些问题属于串行通信的基本概念。 串行通信分为异步通信和同步通信两种方式。 本节主要 给出异步串行通信的一些常用概念。 正确理解这些概念,对串行通信编程是有益的。 1. 异步串行通信的格式 在单片机的英文芯片手册上,通常说 SCI( Serial Communication Interface) 采用的是 NRZ数据格式 ,英文全称是 Standard NonZero Mark/Space Data Format,可以译为“标准不归零传号 /空号数据格式”。 这是一个通信术语。 “不归零”的最初含义是:用负电平表示一种二进制值,而正电平表示另一种二进制值,不使用零电平。 Mark/Space 即“传号 /空号数 据格式”,分别表示两种状态的物理名称,逻辑名称记为“ 1/0”。 对学习嵌入式应用的读者而言,只要理解这种格式只有 0两种逻辑值就可以了。 图 95给出了 8位数据、无校验情况的传输格式。 第 0 位 第 4 位第 1 位 第 3 位 第 6 位第 2 位 第 7 位第 5 位开 始 位停 止 位 图 95 SCI数据格式 这种格式的空闲状态为 1,发送器通过发送一个 0 表示一字节传输的开始,随后是数据位(在单片机中一般是 8位或 9位,可以包含校验位)。 最后,发送器发送 1~2位的停止位,表示一字节传送结束。 若继续发送下一字节,则重新发送开始位,开始一个新字节的传送。 若不发送新字节,则维持 1的状态,使发送数据线处于空闲。 从开始位到停止位结束的时间间隔称为一帧( Frame)。 因此,也称这种格式为帧格式。 通过这段内容可以知道,在异步串行通信中,是 通过开始位和停止位来区分每个传送字节的。 因此,每发送一字节,都要发送开始位与停止位,这是影响异步串行通信传输速度的因素之一。 同时因为每发送一字节,必须首先发送开始位,所以称之为“异步”( Asynchronous)通信。 12 2. 串行通信的波特率 “位长”( Bit Length),也称为位的持续时间( Bit Dutation)。 其倒数就是单位时间内传送的位数。 人们把每秒内传送的位数叫做波特率( Baud Rate)。 通常情况下,波特率的单位可以省略。 通常使用的波特率有 300、 600、 900、 1200、 1800、 2400、 4800、 9600、 19200和 38400。 在包含开始位和停止位的情况下,发送一字节是 10位,所以很容易计算出在各种波特率下发送 1 KB 所需的时间。 显然,这个速度相对于目前的许多通信方式是慢的,那么异步串行通信的速度能否提得很高呢。 答 案是否定的。 因为随着波特率的提高,位长变小,以致很容易受到电磁源的干扰,通信就不可靠了。 当然,还有通信距离问题,距离小,可以适当提高波特率。 3. 奇偶校验 在异步串行通信中,如何知道传输是正确的。 最常见的方法是增加一个位(奇偶校验位),供检测错误使用。 字符奇偶校验检查( Character Parity Checking)称为垂直冗余检查( Vertical Redundancy checking,VRC),它的每个字符增加一个额外位使字符中 1的个数为奇数或偶数。 奇数或偶数依据使用的是“奇校验检查”还是“ 偶校验检查”而定。 当使用“奇校验检查” 时,如果字符数据位中 1的数目是偶数,则校验位应为 1;如果 1的数目是奇数,则校验位应为 “偶校验检查”时,如果字符数据位中 1的数目是偶数,则校验位应为 0;如果是奇数,则校验位应为 1。 这里列举奇偶校验检查的一个实例,例如 ACSCII字符 R,其位构成应是 1010010。 由于字符 R中有 3 个 1 位,如果使用奇校验检查,则校验位为 0;如果是使用偶校验检查,则校验位为。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。