AVR305紧凑的半双工软件串口

上传人:zh****71 文档编号:144773811 上传时间:2020-09-14 格式:PDF 页数:9 大小:177.11KB
返回 下载 相关 举报
AVR305紧凑的半双工软件串口_第1页
第1页 / 共9页
AVR305紧凑的半双工软件串口_第2页
第2页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《AVR305紧凑的半双工软件串口》由会员分享,可在线阅读,更多相关《AVR305紧凑的半双工软件串口(9页珍藏版)》请在金锄头文库上搜索。

1、AVR305: 紧凑的半双工软件串口翻译:邵子扬 第 1 页 共 9 页 精选 AVR 应用笔记 AVR305: 紧凑的半双工软件串口 翻译:邵子扬 2006 年 5 月 18 日 特点 只有 32字代码 在1MHz 时钟下波特率可以达到 38.4k 可以在任何 AVR 单片机上使用 只需要两个端口 不使用任何定时器 1 介绍 在许多应用中使用了串口通信,软件处理通信不用作为后台任务。这篇应用笔记说明了怎样轮 询软件 UART ,在 AT90S1200 上的处理速度可以高达 614,400 bps。这里的目的是为了需要更小代 码的应用,所有的位延时是软件延时,所以不需要定时器。在接收或发送数据

2、时单片机不能处 理其它任务 ,但是接收或发送完成后单片机可以执行其它的功能。 2 理论 在异步串行通信中,没有传送时钟信号。数据串行发送,一次一位。在空闲状态下,数据线保 持在逻辑“ 1” 。当数据发送时,第一位称为起始位,通常用符号 S 表示。起始位总是“ 0” ,引 起一个“ 1” 到 “ 0”变化。这可以被计数器检测出来,通知开始数据传送。后面传送的位是数据 位, LSB 在前。在就是1个或多个停止位,停止位总是逻辑“ 1” ,释放信号线成为空闲状态。至 少需要 1个停止位,这样接收器才能检测到“ 1” 到 “ 0” 的跳变,也就是起始位。图2-1 显示了 8个 数据位和 1个停止位。有

3、时,在数据位和停止位之间还包括了校验位,以及多个停止位。 图2-1.帧格式 接收器必须在每位的中间对数据进行采样,这样才能得到正确得数据。所有数据位的宽度都相 AVR305: 紧凑的半双工软件串口翻译:邵子扬 第 2 页 共 9 页 等,这样接收器才可以知道什么时候开始采样。接收器和发生器通过起始位的下降沿同步,接 收器必须通过内部的定时器进行正确的采样。 发生器和接收器的位宽度必须相等,在习惯上定义了一些标准波特率。 3 执行 3.1 位延时 - UART_delay 位之间的延时由调用延时子程序两次产生(因为子程序产生半位延时)。如果需要非常短的延时 (当以很高速度发送和接收数据时),延时

4、必须在putchar 和getchar 子程序内部执行。延时 时间可以由下面公式来计算: 这里C 是以时钟周期为单位的位宽度,fCLCL 是时钟频率。 putchar 和getchar 都使用了 9个 CPU 周期发送或接收一个位,所以在每位之间要产生c - 9 个周期的延时。rcall 和ret指令需要总共7个周期,如果子程序调用两次来产生延时,就需 要延时d 个周期: 如果产生下面的延时,总的运行时间是 3 b 周期减去 7 个周期的rcall 和ret。 rcall UART_delay UART_delay: ldi temp,b UART_delay1: dec temp brne

5、UART_delay1 ret 参数b 由下面公式计算: 调用延时程序两次后,实际产生的延时是: 从这里可以看出,最小和最大的延时是:dmin = 29 和dmax = 1,559 周期。 AVR305: 紧凑的半双工软件串口翻译:邵子扬 第 3 页 共 9 页 表3-1. “ UART_delay”子程序的性能 参数数字 代码大小4(字) 执行周期最小: 7 最大: 772(包括ret) 使用寄存器低寄存器:无 高寄存器:无 全局: 1 表3-2. “ UART_delay”使用寄存器 寄存器输入局部输出 R17 - “ temp”计数变量- 3.2 发送数据 - putchar putch

6、ar 子程序发送Txbyte寄存器的内容。数据位移位到 Carry 位。最简单的产生停止位的 方法是使 0移位到发送的字节并解释成1。如果数据字节在移位前翻转,在 Carry 中 ” 0”就成 为 “ 1” ,” 1”就成为“ 0” 。当 0移位到数据字节,它们就处理成为了1。利用这个方法,任何位数 的停止位都可以通过重复发送产生。起始位由设置 carry 位产生。 表3-3. “ putchar ”子程序性能 参数数字 代码大小14个字 执行周期与波特率有关 使用寄存器低寄存器:无 高寄存器:无 全局: 2 表3-4. “ putchar ”使用寄存器 寄存器输入局部输出 R16 - “ b

7、itcnt”位计数- R18 Txbyte 发送的数据- - 发送数据的算法如图3-1 所示。 AVR305: 紧凑的半双工软件串口翻译:邵子扬 第 4 页 共 9 页 图3-1. putchar 子程序 Putchar 位计数器 =9+sbsb是停止位个数 翻转 Txbyte 设置 Carry 延时 Carry = TxD = 1TxD = 0 延时 Txbyte 右移 递减位计数器 位计数器 = 0 返回 01 否 是 3.3 接收数据- getchar 首先,子程序等待逻辑” 0” ( 不转换 ) 。当检测到起始位,先延时1.5 位。这由调用延时子程序3 次产生,然后采样起始位1个周期。

8、 Carry 按照 RxD 的逻辑值设置或清除,如果接收到的数据位 不到 8个, Carry 右移后继续接收,否则就返回Rxbyte。 子程序在最后一位数据和停止位中间延时1位时间,这是为了防止在刚接收完上一次数据后立即 再次调用接收时检测起始位失败。 AVR305: 紧凑的半双工软件串口翻译:邵子扬 第 5 页 共 9 页 表3-5. “ getchar ”子程序性能 参数数字 代码大小14个字 执行周期等待直到完成数据接收 使用寄存器低寄存器:无 高寄存器:无 全局: 2 表3-6. “ getchar ”使用寄存器 寄存器输入局部输出 R16 - “ bitcnt” 接收位计数- R18

9、 - - “ Rxbyte ” 接收的数据 接收算法如图 3-2 。 AVR305: 紧凑的半双工软件串口翻译:邵子扬 第 6 页 共 9 页 图3-2. getchar 子程序 Getchar 位计数器 = 8+sb 0.5 位延时 0.5 位延时 位计数器递减 设置Carry 标志 右移 Rxbyte 0.5 位延时 清除 Carry 标志 sb=停止位 =1 如果 Rxd=0 如果 RxD=1 位计数 器=0 返回 是 否 是 否 是 否 AVR305: 紧凑的半双工软件串口翻译:邵子扬 第 7 页 共 9 页 4 例子 这个例子程序用getchar 接收一个字符并用putchar将它返

10、回。 表4-1. 总性能 参数数字 代码大小32个字 只 UART 接收 40个字 完整程序 使用寄存器低寄存器:无 高寄存器: 4 全局:无 使用中断无 使用外设端口 D0和D1(可以使用任意的IO口) AVR305: 紧凑的半双工软件串口翻译:邵子扬 第 8 页 共 9 页 表4-2. 波特率表 1 MHz 1.8432 MHz 2 MHz 波特率周期b值误差 2400 417 66 0.6 4800 208 31 0.3 9600 104 14 2.7 14400 69 8 2.2 19200 52 5 1.8 28800 35 2 0.8 57600 - - - 115200 - -

11、- 2.4576 MHz 3.276 MHz 3.6864 MHz 波特率周期b值误差 2400 1024 167 0.1 4800 512 82 0.6 9600 256 39 0.4 14400 171 25 1.4 19200 128 18 2.3 28800 85 10 2.7 57600 43 3 3.9 115200 - - - 4 MHz 4.608 MHz 7.3728 MHz 波特率周期b值误差 2400 1667 274 0 4800 833 135 0 9600 417 66 0.6 14400 278 42 1.0 19200 208 31 0.3 28800 139

12、19 1.4 57600 69 8 2.2 115200 35 2 0.8 8 MHz 9.216 MHz 11.059 MHz 波特率周期b值误差 2400 3333 552 0 4800 1667 274 0 9600 833 135 0 14400 556 89 0.3 19200 417 66 0.6 28800 278 42 1.0 57600 139 19 1.4 115200 69 8 2.2 波特率周期b值误差 2400 768 124 0.1 4800 384 60 0.3 9600 192 28 0.5 14400 128 18 2.3 19200 96 12 1.0 28

13、800 64 7 1.6 57600 32 2 9.4 115200 - - - 波特率周期b值误差 2400 833 135 0.0 4800 417 66 0.6 9600 208 31 0.3 14400 139 19 1.4 19200 104 14 2.7 28800 69 8 2.2 57600 35 2 0.8 115200 - - - 波特率周期b值误差 2400 1365 224 0.1 4800 683 110 0.0 9600 341 53 0.1 14400 228 34 0.2 19200 171 25 1.4 28800 114 15 0.7 57600 57 6

14、3.7 115200 28 1 2.0 波特率周期b值误差 2400 1536 252 0.1 4800 768 124 0.1 9600 384 60 0.3 14400 256 39 0.4 19200 192 28 0.5 28800 128 18 2.3 57600 64 7 1.6 115200 32 2 9.4 波特率周期b值误差 2400 3072 508 0 4800 1536 252 0.1 9600 768 124 0.1 14400 512 82 0.6 19200 384 60 0.3 28800 256 39 0.4 57600 128 18 2.3 115200 6

15、4 7 1.6 波特率周期b值误差 2400 1920 316 0.1 4800 960 156 0.1 9600 480 76 0.2 14400 320 50 0.9 19200 240 36 0.4 28800 160 23 0.6 57600 80 10 3.8 115200 40 3 2.5 波特率周期b值误差 2400 4608 764 0 4800 2304 380 0 9600 1152 188 0.1 14400 768 124 0.1 19200 576 92 0.2 28800 384 60 0.3 57600 192 28 0.5 115200 96 12 1.0 波特

16、率周期b值误差 2400 3840 636 0 4800 1920 316 0.1 9600 960 156 0.1 14400 640 103 0.2 19200 480 76 0.2 28800 320 50 0.9 57600 160 23 0.6 115200 80 10 3.8 AVR305: 紧凑的半双工软件串口翻译:邵子扬 第 9 页 共 9 页 14.746 MHz 16 MHz 波特率周期b值误差 2400 6144 1020 0 4800 3072 508 0 9600 1536 252 0.1 14400 1024 167 0.1 19200 768 124 0.1 2880

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号