I2C编程器设计报告.doc_第1页
I2C编程器设计报告.doc_第2页
I2C编程器设计报告.doc_第3页
I2C编程器设计报告.doc_第4页
I2C编程器设计报告.doc_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录目录 一 关于 I2C 编程器的简单介绍 1 1 1 关于 I2C 1 1 2 关于编程器 2 1 3 关于单片机 2 二 设计总体思路和系统框图 4 2 1 设计总体思路 4 2 2 系统框图 5 三 单元电路设计 5 3 1 单片机及其外围电路单元 5 3 1 1 STC89C52 单片机介绍 6 3 1 2 STC89C52 单片机的复位电路与晶振电路 9 3 2 存储模块电路单元 11 3 3 显示模块电路单元 13 3 4 串行通信模块电路单元 14 四 软件部分的设计 15 4 1 C 语言设计基础 15 4 2 系统整体软件设计 16 4 3 软件部分单元模块的设计 16 4 3 1 存储程序模块 16 4 3 2 串行通信程序模块 21 4 4 主程序设计 25 五 系统调试 28 六 心得及体会 29 七参考文献 30 附录附录 3131 1 一 关于 I2C 编程器的简单介绍 1 1 关于 I2C I2C Inter Integrated Circuit 总线是一种由 PHILIPS 公司开发 的两线式串行总线 用于连接微控制器及其外围设备 I2C 总线 产生于在 80 年代 最初为音频和视频设备开发 如今主要在服 务器管理中使用 其中包括单个组件状态的通信 I2C 总线最主要的优点是其简单性和有效性 由于接口直接 在组件之上 因此 I2C 总线占用的空间非常小 减少了电路板的 空间和芯片管脚的数量 降低了互联成本 I2C 总线是由数据线 SDA 和时钟 SCL 构成的串行总线 可发送和接收数据 在 CPU 与被控 IC 之间 IC 与 IC 之间进 行双向传送 最高传送速率 100kbps 各种被控制电路均并联 在这条总线上 但就像电话机一样只有拨通各自的号码才能工 作 所以每个电路和模块都有唯一的地址 在信息的传输过程 中 I2C 总线上并接的每一模块电路既是主控器 或被控器 又是发送器 或接收器 这取决于它所要完成的功能 CPU 发出的控制信号分为地址码和控制量两部分 地址码用来选址 即接通需要控制的电路 确定控制的种类 控制量决定该调整 的类别 如对比度 亮度等 及需要调整的量 这样 各控制 电路虽然挂在同一条总线上 却彼此独立 互不相关 2 1 2 关于编程器 编程器在台湾是叫烧录器 因为台湾的半导体产业发展的早 到大陆后 客户之所以叫它为 编程器 是因为现在英文名为 PROGRAMMER 这个英文名与一般编写软件程式设计师是同名 所 以就叫 编程器 编程器实际上是一个把可编程的集成电路写 上数据的工具 编程器主要用于单片机 含嵌入式 存储器 含 BIOS 之类的芯片的编程 或称刷写 编程器在功能上可 分通用编程器和专用编程器 专用型编程器价格最低 适用芯片 种类较少 适合以某一种或者某一类专用芯片编程的需要 例如 仅仅需要对 PIC 系列编程 全功能通用型一般能够涵盖几乎 不 是全部 所有当前需要编程的芯片 由于设计麻烦 成本较高 限制了销量 最终售价极高 适合需要对很多种芯片进行编程的 情况 像比如 ISD1700 编程器 他针对的是 ISD1700 全系 统语音芯片 ISD1700 编程器又可以分为多片编程器和 单片 拷贝机 还有如 PM50 编程器 PM60 编程器 ISD3340 编程器 1 3 关于单片机 在通用微机中央处理器基础上 将输入 输出 I O 接口电 路 时钟电路以及一定容量的存储器等部件集成在同一芯片上 再加上必要的外围器件 如晶体振荡器 就构成了一个较为完整 的计算机硬件系统 由于这类计算机系统的基本部件均集成在同 一芯片内 因此被称为单片微控制器 Single Chip Micro Controller 简称单片机 或微控制单元 MicroController Unit 简称 MCU 对于通用微处理器来说 其主要任务是数值计算和信息处理 3 对运算速度和存储容量方面的要求是速度越快越好 容量越大越 好 因此它沿着高速 大容量方向发展 字长由 8 位 如 8085 处理器 16 位 如 8086 80286 速度向 32 位 如 80486 64 位 如 Pentium 系列 CPU Pentium 系列 CPU 内部数据总线为 32 位 对外数据总线为 64 位 因而 Pentium 还不是真正意义上 的 64 位微处理器 过渡 时钟信号的频率由最初的 4 77MHz 到 33MHz 66MHz 100 MHz 200 MHz 400 MHz 600 MHz 1 GHz 2 GHz 甚至更高频率过渡 而单片机主要面向工业控制 8 位字长以足够 在工业控制中 一般仅需要控制线路的通 断 触点的吸合与释放 有时 4 位单片机也能胜任 尽管也有 16 位 32 位的单片机芯片 但这些高档单片机芯片主要用于语音 图像 处理系统 绝对数量不多 时钟信号频率也不高 一般在数十兆 以内 单片机主要发展方向是不断强化控制功能 即将更多的外 围电路单元集成到 CPU 内 低功耗 以便电池供电 低成本 例如在 CPU 芯片内 按用途分别集成不同的外围电路 形成系 列化产品 这样既能满足不同应用领域的需要 又降低了成本 1 单片机的种类 1 单片机可按应用领域 通用性 总线结构分类 2 按应用领域可分为 家用类 工控类 通信类 个人信 息终端等 3 按通用性可分为 通用型和专用型 如计费率电表 电 子记事本 4 按总线结构可分为 总线型和非总线型 2 单片机的供应状态按提供的存储器类型可分为以下五种状 态 4 1 MASKROM 类 程序在芯片封装过程中掩膜工艺制作到 ROM 区中 如 80C51 适合大批生产 2 EPROM 类 紫外线可擦写存储器如 87C51 价格较贵 3 ROMless 类 无 ROM 存储器 如 80C31 电路扩展复杂 较少用 4 OTPROM 类 可一次性写入程序 5 FlashROM MTPROM 类 可多次编程写入的存储器 如 89C51 89C52 其成本低 开发调试方便 在恶劣环境下可靠性 不及 OTPROM 8 3 单片机的应用开发过程 单片机的应用开发分为以下五个过程 1 硬件系统设计调试 如电路设计 PCB 印制版绘制等 2 应用程序设计 如使用 KEIL 等汇编工具软件进行源程序 编写 编译调试 3 应用程序的仿真调试 指用仿真器对硬件进行在线调试 或软件仿真调试 在调试中不断修改 完善硬件及软件 4 单片机应用程序的烧写 将编译过的二进制源程序文件 写入单片机芯片 5 系统脱机运行检查 进行全面检查 针对出现的问题修 正硬件 软件或总体设计方案 二 设计总体思路和系统框图 2 1 设计总体思路 该设计由电脑发送数据给单片机 经由单片模拟 I2C 协议时 5 序 写入 I2C 总线形式的 E2PROM 芯片 AT24C02 再从芯片中读出 数据 通过数码管显示所读数据 本 I2C 编程器主要由 STC89C52 单片机 MAX232 电平转换芯 片 储存芯片 AT24C02 七段数码管 及一些外围电路组成 硬 件电路由控制模块 串行通信模块 存储器模块和显示模块组成 软件设计包括主程序设计以及各功能模块程序设计 通过编程实 现 I2C 编程器的各项功能 是整个设计的核心所在 2 2 系统框图 根据单片机的工作特点 具体实现时其硬件电路可以划为四 个模块 单片机控制模块 存储模块 串行通信模块和显示模块 各模块的功能独立 可扩充性强 具有再次开发的潜力 本方 案既满足系统功能要求 又减少了系统实现的复杂度 各模块之 间的关系如图 1 所示 单 片 机 控 制 模 块 串行通信模 块 存储模块 显 示 模 块 图 1 系统模块图 三 单元电路设计 3 1 单片机及其外围电路单元 6 控制模块可以采用 MCS 51 单片机 FPGA AVR 单片机等 几 种控制芯片相比较而言 MCS 51 单片机具有体积小 可靠性高 功能强 灵活方便 位处理能力 强调控制和事务处理功能等优 点 I2C 编程器外围电路比较简单 各模块与单片机接口简单程 序控制也很方便 因此本设计中采用广泛使用的 STC89C52 单片 机 3 1 1 STC89C52 单片机介绍 STC89C52 是宏晶公司生产一个低功耗 高性能 CMOS 8 位单 片机 片内含 8K 字节 ISP 的可反复擦写 1000 次的 Flash 程序存 储器 器件采用宏晶公司的高密度 非易失性存储技术制造 兼 容标准 MCS 51 指令系统及 80C51 引脚结构 芯片内集成了通用 8 位中央处理器和 ISP Flash 存储单元 为许多嵌入式控制应用 系统提供高性价比的解决方案 STC89C52 具有如下特点 40 个引脚 8K 字节 Flash 256 字 节 RAM 32 位 I O 口线 看门狗定时器 2 个数据指针 三个 16 位定时器 计数器 一个 6 向量 2 级中断结构 全双工串行口 片内晶振及时钟电路 另外 STC89C52 可降至 0HZ 静态逻辑操作 可选择节电模式 空闲模式下 CPU 停止工作 允许 RAM 定时 器 计数器 串口 中断继续工作 掉电保护方式下 RAM 内容被 保存 振荡器被冻结 单片机一切工作停止 直到下一个中断或 硬件复位为止 STC89C52 单片机采用 40 引脚双列直插式封装 DIP 形式 引脚排列及逻辑符号如图 2 所示 下面分别说明这些引脚的意义 和功能 7 图 2 STC89C52 单片机引脚图 VCC 和 GND 电源引脚 VCC 为 5V RST 复位输入 晶振工作时 RST 脚持续 2 个机器周期高电 平将使单片机复位 看门狗计时完成后 RST 脚输 96 个晶振周期 的高电平 特殊寄存器 AUXR 地址 8EH 上的 DISRTO 位可以使此 功能无效 DISRTO 默认状态下 复位高电平有效 ALE PROG 地址锁存控制信号 ALE 在访问外部程序存储器时 锁存低 8 位地址的输出脉冲 PSEN 外部程序存储器选通信号 当 STC89C52 从外部程序存 储器执行外部代码时 PSEN 在每个机器周期被激活两次 而访问 外部数据存储器时 PSEN 将不被激活 EA PP 访问外部程序存储器控制信号 从 0000H 到 FFFFH 的 外部程序存储器读取指令 EA 必须接 GND 执行内部程序指令 EA 接 VCC flash 编程期间 EA 接 12 伏 VPP XTAL1 振荡器反相放大器和内部时钟发生电路的输入端 XTAL2 振荡器反相放大器的输出端 8 P0 口 是一个 8 位漏极开路的双向 I O 口 作为输出口 每 位能驱动 8 个 TTL 逻辑电平 对 P0 端口写 1 时 引脚用作高 阻抗输入 当访问外部数据存储器和数据存储器时 P0 口也被作 为地址 数据复用 在这种模式下 P0 口具有内部上拉电阻 在 flash 编程时 P0 口也用来接收指令字节 在程序校验时 输出指 令字节 程序校验时 需要外部上拉电阻 P1 口 是一个具有内部上拉电阻的 8 位双向 I O 口 P1 输出 缓冲器驱动 4 个 TTL 逻辑电平 对 P1 端口写 1 时 内部上拉 电阻把端口拉高 此时可以作为输入口用 此外 P1 0 和 P1 2 分别作为定时器 计数器 2 的外部计数输入 P1 0 T2 和定时器 计数器 2 的触发输入 P1 1 T2EX 在 flash 编程和校验时 P1 口结束低 8 位地址字节具体见下表 1 说明 引脚号第二功能 P1 0T2 定时器 计数器 T2 的外部计数输入 时钟输出 P1 1T2EX 定时器 计数器 T2 的捕捉 重载触发信号和方向控制 P1 5MOSI 在系统编程用 P1 6MISO 在系统编程用 P1 7SCK 在系统编程用 表 1 P1 口第二功能 P2 口 是一个具有内部上拉电阻的 8 为双向 I O 口 P2 输出缓 冲器能驱动 4 个 TTL 逻辑电平 对 P2 端口写 1 时 内部上拉 电阻吧端口拉高 此时可以作为出入口使用 被外部拉低的引脚 9 由于内部电阻的原因 将输出电流 TTL 在访问外部程序存储 器或用 16 位地址读取外部数据存储器时 P2 口送出高八位地址 在这种应用中 P2 口使用很强的内部上拉发送 在使用 8 位地址 访问外部数据存储器时 P2 口输出 P2 锁存器的内容 在 flash 编程和检验时 P2 口也接受高 8 位地址字节和一些控制信号 P3 口 P3 口是一个具有内部上拉电阻的 8 位双向 I O 口 对 P3 端口写 1 时 内部上拉电阻把端口拉高 此时可以作为 输入口用 被外部拉低的引脚由于内部电阻的原因 将输出电流 TTL 在 flash 编程和校验时 P3 口也接收一些控制信号 P3 口也作为 STC89C52 特殊功能使用 如表 2 所示 引脚号第二功能 P3 0RXD 串行输入 P3 1TXD 串行输出 P3 2INT0 外部中断 0 P3 3INT1 外部中断 1 P3 4T0 定时器 0 外部输入 P3 5T1 定时器 1 外部输入 P3 6WR 外部数据存储器写选通 P3 7RD 外部数据存储器写选通 表 2 P3 口第二功能表 3 1 2 STC89C52 单片机的复位电路与晶振电路 单片机的外围电路包括时钟电路和复位电路 MCS 51 内部有 一个高增益反相放大器 用于构成时钟震荡电路 XTAL1 为该放 大器的输入端 XTAL2 为该放大器的输出端 但要形成时钟还需 附加其他电路 利用 MCS 51 内部的高增益反相放大器 在 XTAL1 和 XTAL2 引脚上外接定时元件 内部振荡电路便产生自激 定时 10 元件一般采用石英晶体和电容组成的并联谐振回路 晶体可以在 1 2 12MHz 之间任选 电容可以在 5 30pF 之间选择 电容 C 和 C 的大小可起频率微调的作用 电容大小要和晶体的容性负 12 载阻抗相匹配 否则不以起振 4 本设计采用如图 3 所示内部方 式的时钟电路 C1 和 C2 都为 30pF 任何微机都是通过可靠复位之后才可有序执行应用程序 在 单片机应用系统的设计中 单片机复位电路的设计是相当重要的 一步 因为在单片机的应用系统中 会经常要求进入到复位状态 因 此要求系统的复位电路必须能够准确 可靠地工作 同时 复位 电路也是容易受噪声干扰的敏感部位之一 因此 复位电路设计 要求 其一要保证整个系统可靠复位 其二是要有一定抗干扰能 力 单片机的复位都是靠外部电路来实现的 在时钟电路工作后 只 要在单片机的复位 RST 脚上出现 24 个时钟振荡脉冲 也就是 2 个机器周期 以上的高电平 单片机便实现初始化状态复位 5 因此 要想保证单片机能够可靠的复位 在应用系统的电路设计 中 就要使 RST 引脚保持 10ns 以上的高电平 使 MCS 51 单片机 能循环到复位状态 当单片机复位后 也就是 RST 从高电平变成 低电平后 MCS 51 单片机就从 0000H 地址开始执行程序 复位电路是复位引脚 RST VPD 通过一个斯密特触发器与内 部复位电路相连 斯密特触发器用来抑制噪声 它的输出在每个 机器周期中的第二个震荡周期 即 S5P2 由内部复位电路采样一 次 RST 端的复位电路有两种简单复位操作形式 上电自动复位 和按键手动复位 图 1 左边即是按键复位电路 也是本设计中用 到的复位单路 复位电路的核心就是如前所述的必须保证 RST 引 脚上出现 10ns 以上的稳定的高电平 11 图 1 复位电路及晶振电路原理图 3 2 存储模块电路单元 存储模块电路首先考虑的是要能够实现密码的掉电存储 51 单片机本身 ROM 存储数据不固定 不能用于掉电存储 因此设计 中采用 ATMEL 公司生产的 AT24C02 芯片 12 AT24C02 是的低功耗 CMOS 串行 IIC 总线 EEPROM 它是内含 256 8 位存储空间 具有工作电压宽 2 5 5 5V 擦写次数多 大于 10000 次 写入速度快 小于 10ms 等特点 AT24C02 中带有片内寻址寄存器 每写入或读出一个数据字节后 该地址 寄存器自动加 1 以实现对下一个存储单元的操作 所有字节都 以单一操作方式读取 为降低总的写入时间 一次操作可写入多 达 8 字节的数据 图 2 为 AT24C02 系列芯片的封装图 各引脚功 能如下 12 图 2 AT24C02 芯片引脚图 SCL 串行时钟 在该引脚的上升沿时 系统将数据输入到每 个 EEPROM 器件 在下降沿时输出 SDA 串行数据 该引脚为开漏极驱动 可双向传送数据 A0 A1 A2 器件 页面寻址 为器件地址输入端 WP 硬件写保护 当该引脚为高电平时禁止写入 当为低电 平时可正常读写数据 VCC 电源 一般输入 5V 电压 VSS 接地 本设计中 AT24C02 与单片机链接电路图如图 3 所示 13 图 3 AT24C02 与单片机连接电路原理图 3 3 显示模块电路单元 显示模块的选择关系到整个系统设计的功能多少 由于本次 设计功能较少 要求显示的内容较为简单 采用七段数码管显示 由于显示的数据在 0 255 之间 所以只要三位数码管就能实 现 我们选择集成的四位共阴数码管 共阴极数码管是把所有 LED 的阴极连接到共同接点 com 而每个 LED 的阳极分别为 a b c d e f g 及 dp 小数点 其分别对应接到 P0 口 而四个阳极分别接由 P2 口各 I O 口控制 由于电路简单 我们 采用动态扫描显示 省去了电路的复杂 动态扫描显示是单片机中应用最为广泛的一种显示方式之一 其接口电路是把所有显示器的 8 个笔划段 a h 同名端连在一起 而每一个显示器的公共极 COM 是各自独立地受 I O 线控制 14 CPU 向字段输出口送出字形码时 所有显示器接收到相同的字形 码 但究竟是那个显示器亮 则取决于 COM 端 而这一端是由 I O 控制的 所以我们就可以自行决定何时显示哪一位了 而所 谓动态扫描就是指我们采用分时的方法 轮流控制各个显示器的 COM 端 使各个显示器轮流点亮 在轮流点亮扫描过程中 每位显示器的点亮时间是极为短暂 的 约 1ms 但由于人的视觉暂留现象及发光二极管的余辉效应 尽管实际上各位显示器并非同时点亮 但只要扫描的速度足够快 给人的印象就是一组稳定的显示数据 不会有闪烁感 图 4 数码管显示电路原理图 3 4 串行通信模块电路单元 由于电脑串口 RS232 电平是 10V 10V 面一般的单片机应 用系统的信号电压是 0 5V 两者不能直接进行通信 必须通过 MAX232 进行电平转换 把电脑串口的信号电压转换为单片机的信 号电压 MAX232 为单 5V 电源工作 两个驱动器及两个接收器 30V 输 入电平 符合 TLA EIA 232 F 标准 每一个接收器将 TIA EIA 15 232 F 电平转换为 5VTTL CMOS 电平 串行通信电路如图 5 所示 1 2 3 4 5 6 7 89 10 11 12 13 14 15 16 C1 V C1 C2 C2 V T2out R2in Vcc GN D T1out R1in R1out T1in T2in R2out RS232 MA X232CPE 104 104 104 104 VCC 104 P3 0 P3 1 51 RXD 51 TX D 1 6 2 7 3 8 4 9 5 PC DB9 PC R XD PC TXD PC TXDPC R XD 1 2 3 TTL RS232 EA VP 31 X1 19 X2 18 RE SE T 9 RD 17 WR 16 INT 0 12 INT 1 13 T0 14 T1 15 P10 1 P11 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8 P00 39 P01 38 P02 37 P03 36 P04 35 P05 34 P06 33 P07 32 P20 21 P21 22 P22 23 P23 24 P24 25 P25 26 P26 27 P27 28 PSEN 29 AL E P 30 TX D 11 RX D 10 ST C89C52RC 8051 PC 图 5 串行通信电路原理图 四 软件部分的设计 4 1 C 语言设计基础 由于单片机 C 语言具有可移植性好 易懂易用的特点 以单片机 C 语言为主流的高级语言不断被更多的单片机爱好者和工程师喜 爱 使用 C51 肯定要使用编译器 以便把写好的 C 程序编译为机 器码 这样单片机才能执行编写好的程序 KEIL uVISION 是众 多单片机应用开发仿真等于一体 同时还支持 PLM 汇编和 C 语言的程序 它的界面和常用的微软 VC 的界面相似 界面友好 易学易用 在调试程序 软件仿真方面也有很强大的功能 本设 计就是利用 KEIL 软件编写的 16 4 2 系统整体软件设计 系统整体软件设计即系统的主程序 在主程序中 并不包含 系统功能模块程序 而是通过调用功能模块子程序实现 主程序 是设计系统的整理功能 按照一定的系统流程与时序控制关系调 用子程序 以实现某时刻 某状态下的功能 即主程序主要是设 计系统的流程控制 4 3 软件部分单元模块的设计 4 3 1 存储程序模块 AT24C02 是串行 E2 PROM AT24C02 与单片机 STC89C52 的 连接采用的是 I2C 总线 Inter IC Bus I2C 总线是由串行数 据线 SDA 与时钟线 SCL 构成的 所有的控制命令和数据均通过 这两条线传输 单片机 STC89C52 作为主器件 它在 I2C 总线上 产生时钟脉冲 寻址信号 起停信号 24C02 作为从器件 它通 过串行数据线 SDA 与时钟线 SCL 与单片机 STC89C52 的引脚 P3 6 P3 7 相连 24C02 提供 2k 位串行 E2 PROM 内部组态为 256 8 位 A0 A1 A2 为芯片的地址线 在使用中把这三条线 接地 WP 为低电平时 允许写操作 STC89C52 是一种低功耗 高 性能 CMOS8 位微控制器 具有 8K 在系统可编程 Flash 存储器 与工业 80C51 产品指令各引脚完全兼容 17 总线的操作时序如图 6 所示 SCL 和 SDA 两总线平时通过 上拉电阻为高电平 SDA 为数据线 SCL 为时钟线 图 16 AT24C02 总线的操作时序 图 6 总线操作时序图 SCL 低电平时间周期内可能改变 SCL 高电平周期期间数据 改变表示 开始 或 停止 两种状态 当 SCL 处于高电平时 DSA 由高电平转向低电平表示 开始 由低电平转向高电平表 示 停止 状态 其中 开始 状态必须在其它操作之前执行 而 停止 状态则终止所有操作 除以上两个状态 24C02 与外 界的通讯还需另一个状态 即确认状态 ACK 该确认是在每个字 节之后第九个时钟周期发生 在后面的读 写过程将予以介绍 AT24C02 数据写操作时序如图 7 所示 在写操作中 主器件 发送完写控制字节 10100000 等接收到 24C02 通过 SDA 发出确 认信号 ACK 后 主器件接着随时钟输入 8 位地址码 00 0FFH 收到 24C02 再次发出确认信号 ACK 后 才发送待写入的数据 最 后 主设备必须用停止状态来终止写操作 在写控制字节中高四 位被指定为 1010 芯片地址为 A2 A1 A0 为 000 R W 0 18 图 7 AT24C02 写操作时序 AT24C02 数据读操作读操作时序如图 8 所示 若是读当前地 址内容 主器件发送完读控制字节 10100001 并收到 ACK 信号后 即可一位位地读出该单元内容 若要读随意地址内容 由主器件 先发送写控制字节 10100000 然后发送待读的 E2 PROM 单元地 址 00 0FFH 收到 ACK 信号后由主器件再次产生起始条件 接着发送读控制字节 收到 ACK 信号后 即可读出该单元内容 最后 数据的读取不通过确认应答 而是通过产生一个停止状态来 应答 图 8 读操作时序 24C02 的操作程序如下所示 24c02 c include include include 24c02 h void nop 延时函数至少 4 7us nop nop nop nop nop 19 void I2C Init I2C 初始化 SCL 1 SDA 1 void Start 开始信号 SDA 1 nop SCL 1 nop SDA 0 nop void Stop 停止信号 SDA 0 nop SCL 1 nop SDA 1 nop void Acknowledge 应答信号 uchar i 250 SCL 1 nop while SDA 1 SCL 0 nop void WriteByte uchar DATA 写一个字节数据 20 uchar temp uchar i temp DATA SCL 0 nop for i 0 i 8 i temp 1 SDA CY nop SCL 1 nop SCL 0 nop SDA 1 nop uchar ReadByte 读一个字节 uchar DATA uchar b uchar i SCL 0 nop SDA 1 nop for i 0 i 8 i SCL 1 nop b SDA DATA DATA 1 b SCL 0 nop 21 return DATA void WriteDATA uchar add uchar DATA 随机地址写一字节数据 Start WriteByte 0 xa0 Acknowledge WriteByte add Acknowledge WriteByte DATA Acknowledge Stop uchar ReadDATA uchar add 随机地址读一字节数据 uchar DATA Start WriteByte 0 xa0 Acknowledge WriteByte add Acknowledge Start WriteByte 0 xa1 Acknowledge DATA ReadByte Stop return DATA 4 3 2 串行通信程序模块 串行通信程序设计在整个程序中至关重要 为了使单片机 22 能够正确无误的接收从电脑发来每一个有效数据 必须正确设 置单片机串口参数 串口通信的概念非常简单 串口按位 bit 发送和接收 字节 尽管比按字节 byte 的并行通信慢 但是串口可以在 使用一根线发送数据的同时用另一根线接收数据 它很简单并 且能够实现远距离通信 典型地 串口用于ASCII 码字符的 传输 通信使用 3 根线完成 1 地线 2 发送 3 接收 由于串口通信是异步的 端口能够在一根线上发送数据 同时在另一根线上接收数据 其他线用于握手 但是不是必须 的 串口通信最重要的参数 波特率 数据位 停止位和奇偶校 验 对于两个进行通信的端口 这些参数必须匹配 波特率 这是一个衡量通信速度的参数 它表示每秒钟传 送的 bit 的个数 例如 300 波特表示每秒钟发送 300 个 bit 当我们提到时钟周期时 我们就是指波特率例如如果协议 需要 4800 波特率 那么时钟是 4800Hz 这意味着串口通信在 数据线上的采样率为 4800Hz 本设计采用 9600 波特率 数据位 这是衡量通信中实际数据位的参数 当计算机发 送一个信息包 实际的数据不会是 8 位的 标准的值是 5 7 和 8 位 如何设置取决于你想传送的信息 比如 标准的 ASCII 码是 0 127 7 位 扩展的 ASCII 码是 0 255 8 位 如果数据使用简单的文本 标准 ASCII 码 那么每 个数据包使用 7 位数据 每个包是指一个字节 包括开始 停 止位 数据位和奇偶校验位 由于实际数据位取决于通信协议 的选取 术语 包 指任何通信的情况 本设计采用 8 位数 据位 停止位 用于表示单个包的最后一位 典型的值为1 1 5 23 和 2 位 由于数据是在传输线上定时的 并且每一个设备有其 自己的时钟 很可能在通信中两台设备间出现了小小的不同步 因此停止位不仅仅是表示传输的结束 并且提供计算机校正 时钟同步的机会 适用于停止位的位数越多 不同时钟同步的 容忍程度越大 但是数据传输率同时也越慢 本设计无停止 位 奇偶校验位 在串口通信中一种简单的检错方式 有四种 检错方式 偶 奇 高和低 当然没有校验位也是可以的 对 于偶和奇校验的情况 串口会设置校验位 数据位后面的一位 用一个值确保传输的数据有偶个或者奇个逻辑高位 例如 如果数据是 011 那么对于偶校验 校验位为 0 保证逻辑高 的位数是偶数个 如果是奇校验 校验位位1 这样就有 3 个逻辑高位 高位和低位不真正的检查数据 简单置位逻辑高 或者逻辑低校验 这样使得接收设备能够知道一个位的状态 有机会判断是否有噪声干扰了通信或者是否传输和接收数据是 否不同步 本设计无奇偶校验位 串行通信程序如下所示 Serial c include include Serial h 串口初始化函数 InitSerial void InitSerial 24 TMOD TMOD 0 x20 Timer 1 in mode 2 TH1 0 xfd 9600 Bds at 11 059MHz TL1 0 xfd 9600 Bds at 11 059MHz TR1 1 Timer 1 run SM0 0 uart in mode 1 8 bit REN 1 SM1 1 REN 1 EA 1 ES 1 串口发送一字节数据函数 SerialSend characher void SerialSend character uchar character ES 0 SBUF character while TI TI 0 ES 1 void Serial interrupt 4 while RI 1 25 flag 1 RI 0 RxBuf SBUF P1 RxBuf SerialSend character RxBuf 4 4 主程序设计 主程序模块包含显示程序 通过串口中断实时接收电脑发来的数 据 并写入存储芯片中 然后从中读出数据 显示在数码管上 主程序就一直循环调用 持续更新 主程序如下所示 main c include include Serial h include 24c02 h define ADDRESS 22 写入 24C02 的地址单元 uchar DisData 待显示数据 uchar RxBuf 串口接收数据缓冲 uchar flag 0 接收数据后标志位 uchar Dis 3 显示 26 uchar code table 0 x28 0 数码管段码编码 0 xEB 1 0 x32 2 0 xA2 3 0 xE1 4 0 xA4 5 0 x24 6 0 xEA 7 0 x20 8 0 xA0 9 void DelayMs uchar n uchar i uchar j fo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论