单片机课程设设计单总线和IC总线结合实现数
- 格式:doc
- 大小:42.50 KB
- 文档页数:30
《单片机原理及应用课程设计》报告——单只数码管循环显示设计专业:班级:姓名:学号:2012年5月1.课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
2.课程设计要求2.1单只数码管循环显示0~93.硬件设计3.1 设计思想1、数码管实际上是由7个发光二极管组成一个8字形,另外一个发光二极管做成圆点型,这样就构成了一个数码管。
所有的8个二级管的正极或者负极都连到一个公共端点上,对于公共端连在正极的数码管,称为共阳极数码管,反之称为共阴极数码管。
根据数码管的内部结构原理,可以很清楚的知道数码管显示数字的原理。
2、由于单片机的IO口的驱动能力有限,而数码管点亮时需要较大的电流,所以在用单片机构成数码管显示系统时,需要增加驱动电路,最简单的驱动电路就是利用三极管的电流放大能力来输出较大的电流,3、让数码管显示数字的步骤为:1)使数码管的公共端连到电源(共阳极)或者地(共阴极)上。
2)向数码管的各个段输出不同的电平。
3.2主要元器件介绍1. AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
简介美国Dallas公司近年推出的单总线技术及相应的集成芯片,用单片机可以组建成单总线技术的应用系统。
文中具体说明了系统的硬、软件组成特点,介绍了一些典型器件,并列举了在自动测控系统中的实际应用情况。
相对于传统的方案,单片机单总线技术具有突出的技术优势和更高的性能价格比。
关键词单片机单总线测控技术引言计算机用于测控系统时,测控对象与计算机之间的信息交换是通过总线进行的。
不管是通用的并行、串行总线,还是专用总线,其传送数据的信号线总是多根的。
最简单的RS-232串行总线也有两根信号线,且只能通向一路被测或被控对象,否则要用下位机扩展。
这样,当遇到多路多个测控对象时,系统中相互连接则非常复杂。
若只用一根信号线(1-wire),在其上可以挂上许多测控对象,且电源也经这根信号线馈给,这样组建一个系统就方便多了。
本文介绍使用这种一根信号线的技术,为了表述简明易懂,并区别于计算机的其他总线,将其称为单总线(1-wire bus)技术。
单总线及相应芯片是美国Dallas半导体公司近年推出的新技术。
在该公司支持下,信息产业部电子五所和桂林电子工业学院联合对单总线技术进行了开发应用。
我们正在对环境状态监测系统、实时气象监测系统(自动气象站)、军用仓库测控系统、农业塑料大棚测控系统、宾馆楼宇监管系统、停车收费系统、考勤管理系统等领域进行应用开发。
应用中主控计算机视要求,既可以采用PC机也可以采用单片机。
本文主要介绍在单片机控制下单总线技术的应用。
一、单总线技术单总线技术是只有一个总线命令者和一个或多个从者组成的计算机应用系统。
单总线系统由硬件配置、处理次序和单总线信号三部分组成。
系统按单总线协议规定的时序和信号波形进行初始化、识别器件和进行数据交换。
1. 硬件配置单总线系统只定义了一根信号线。
总线上的每个器件都能够在合适的时间驱动它,相当于把计算机的地址线、数据线、控制线合为一根信号线对外进行数据交换。
为了区分这些芯片,厂家在生产每个芯片时,都编制了惟一的序列号,通过寻址就能把芯片识别出来。
单片机中的总线接口设计与应用作为嵌入式系统中的重要组成部分,单片机在各种应用领域中发挥着重要的作用。
总线接口设计是单片机系统中不可忽视的一部分,他在单片机与其他外设之间起着桥梁的作用。
本文将探讨单片机中的总线接口设计与应用的相关内容。
一、总线接口概述总线接口是单片机与外设之间进行数据交换的通信线路。
通过总线接口,单片机可以与各种外设进行数据的收发、控制信号的传输等操作。
常见的总线接口设计包括I2C、SPI、UART等。
1. I2C(Inter-Integrated Circuit)总线I2C是一种常见的串行通信协议,它使用两根线路(SDA和SCL)进行数据和时钟信号的传输。
单片机通过I2C总线可以与多个设备进行通信,每个设备通过唯一的地址来识别。
I2C总线接口的设计与应用需要注意以下几个方面:(1)硬件电路设计:I2C总线的硬件电路包括I2C总线控制器、电平转换电路、上拉电阻等。
其中,电平转换电路用于将单片机的信号电平转换为I2C总线所需的电平。
(2)软件设计:在单片机中,需要编写相应的软件程序来实现I2C总线的读写操作。
软件程序需要对I2C总线进行初始化,并实现对不同设备的访问与数据交换。
2. SPI(Serial Peripheral Interface)总线SPI总线是一种全双工的串行通信协议,它使用四根线路(SCLK、MOSI、MISO和SS)进行数据的传输和设备的选择。
SPI总线常用于单片机与外部存储器、传感器等设备之间的通信。
SPI总线接口的设计与应用需要注意以下几个方面:(1)硬件电路设计:SPI总线的硬件电路包括SPI总线控制器、数据线、时钟线和设备选择线等。
其中,设备选择线(SS)用于选择与单片机通信的设备。
(2)软件设计:在单片机中,需要编写相应的软件程序来实现SPI总线的读写操作。
软件程序需要进行SPI总线的初始化,并实现与具体设备之间的数据交换。
3. UART(Universal Asynchronous Receiver/Transmitter)总线UART总线是一种常见的串行通信协议,它通过两根线路(RX和TX)进行异步的数据传输。
单片机课程设计一、目的和意义本课程设计是在学完单片机原理及课程之后综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现。
该课程设计的主要任务是通过解决一、两个实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。
二、选题要求在现有的开发装置上掌握相关硬件,正确地进行连线在计算机上编写汇编程序、调试、下载、配合外部电路进行系统功能测试,设计并实现参考选题中要求设计的系统。
要求按设计要求制订方案,直至正确地实现系统功能;写出课程设计报告;理解设计方案后再自己动手设计程序,并正确联线、构成硬件电路,通过独立调试实现设计方案。
三、任务及要求(一)课题要求1.数字电压表的设计技术要求:利用51单片机,ADC0809转换芯片,键盘显示系统,设计一个测量模拟电压的数字电压表,可以显示3位有效数字,通过汇编语言设计。
工作要求:画出设计原理图,编写出软件,并调试出各种功能2.温度检测系统的设计技术要求:利用51单片机,DS18B20芯片,键盘显示系统,设计温度检测系统,通过键盘控制,实现数字温度的采集,用汇编语言设计。
工作要求:画出设计原理图,编写出软件,并调试出各种功能。
(二)设计报告要求要求设计报告按以下条目顺序编写:1.封面2.内容提要3.正文概述所作题目的意义、本人所做的工作及系统的主要功能;硬件电路设计及描述;软件设计流程及描述;源程序代码(要有注释)。
4.课程设计体会5.参考文献四、进程安排1.介绍课程设计的教学内容,指导学生根据兴趣选题。
2.原理设计3.原理设计及软件设计4.课程设计报告要求及示例介绍,原理设计5.硬件调试,软件设计及调试6.验收答辩五、考核方法与成绩评定1、考核方法(1)理论设计方案,演示所设计的系统,总成绩50%;(2)设计报告,占总成绩20%;(3)回答教师所提出的问题,占总成绩20%;(4)考勤情况,占总成绩10%;2.有下列情况之一者,要酌情减分:(1)设计报告有抄袭行为或有意给别人抄袭。
单片机课程设计题目 :单总线和 I2C 总线结合实现数字温度计实验班级:设计者:指导教师 :单总线和 I2C 总线结合实现数字温度计实验一、实验目的通过本实验 ,理解掌握单总线器件和 I2C 总线器件的应用 ,熟悉串行总线的操作技巧。
二、实验设备及器件IBM PC 机一台DP-51PROC 单片机综合仿真实验仪一台三、实验内容1. 编写程序 ,通过单片机的 P3.3 口控制一个 DS18B20 完成数字温度的采集 ,然后用程序处理采集到的数据结果。
2. 编写程序 ,通过 I2C 总线器件 ZLG7290 实现温度数据的输出显示。
3. 结合以上两部分程序 ,编程实现数字式温度计的程序设计。
四、实验要求熟练掌握单总线方式器件的应用,熟悉I2C总线协议,学习I2C器件的使用方法。
五、实验过程和步骤(一、新建工程文件1、点击工具栏 Project 选项,在下拉菜单中选择 New Project 命令 ,弹出项目文件保存对话框 ,输入项目名后 ,点击保存按钮。
2、在工程建立完毕以后,uVision 会弹出器件选择窗口,选择相应的器件型号。
如想修改 ,可点击工具栏 Project 选项,在下拉菜单中选择 Select Device forTarget …Target ?命令。
3、点击工具栏 File 选项,选中 New 命令,新建文件 ,输入源程序。
4、把文件保存到磁盘中,如用汇编语言编写程序用.asm为扩展名,如用C语言编写程序用 .c 为扩展名。
5、添加该文件到工程中 ,在 Projectwindos 窗口内 ,选中 Source Group1 然后点击鼠标右键 ,选择 Add files to Group “Source Group1 ”,选择刚才创建的源程序文件 ,单击 Add 按钮。
(二、程序文件的编译、链接1. 安装B4区JP12接口上的短路帽,将B4区的DQ 与A2区INT1(P3.3相连。
2. 安装 D5 区 JP1 接口上的短路帽 ,将 D5 区的 SDA、 SCL 分别与 A2 区的 P17、P16 相连。
基于51单片机的ic卡智能水表课程设计基于51单片机的IC卡智能水表课程设计一、引言随着科技的发展和人们生活水平的提高,水资源的合理利用和管理变得愈发重要。
传统的水表只能实现简单的读数功能,无法满足现代社会对智能化水表的需求。
本文将介绍一种基于51单片机的IC 卡智能水表的课程设计方案,通过对IC卡的读写和水表计量功能的结合,实现对用户用水量的监测和管理。
二、课程设计方案1. 系统框架本课程设计采用51单片机作为控制核心,通过与IC卡、水表及相关传感器的连接与通信,实现智能水表的计量、存储和管理。
系统框架包括IC卡读写模块、水表计量模块、显示模块和数据管理模块。
2. IC卡读写模块IC卡作为存储用户信息和充值记录的介质,需要通过51单片机与系统进行数据交互。
本课程设计中,采用SPI总线通信协议,通过51单片机的SPI接口与IC卡进行通信,实现对IC卡的读写操作。
IC卡中存储了用户的身份信息、充值金额和消费记录等数据,通过读卡器读取IC卡中的数据,传输给51单片机进行处理。
3. 水表计量模块水表计量模块通过与水表传感器的连接与通信,实现对用户用水量的实时计量。
本课程设计中,采用脉冲计量的方式,水表传感器产生的脉冲信号通过51单片机的外部中断引脚接收并计数,实时记录用户的用水量。
通过设置合适的脉冲与用水量的换算关系,可以准确地计量用户的用水量。
4. 显示模块显示模块用于显示用户的用水量和剩余金额等信息,方便用户实时了解自己的用水情况。
本课程设计中,采用LCD液晶显示屏作为显示设备,通过51单片机与LCD显示屏进行通信,将计量数据和相关信息显示在屏幕上。
5. 数据管理模块数据管理模块用于对用户的用水量和消费记录进行管理和统计。
本课程设计中,采用EEPROM作为数据存储介质,通过51单片机与EEPROM进行通信,实现对用户信息、充值记录和消费记录等数据的读写操作。
通过数据管理模块,可以实现对用户用水量和消费情况的管理和查询。
单片机课程设计DS1820单总线数字温度计一统设计目的,用途,功能1,目的:.S1820温度传感器控制温度,熟悉芯片的使用,温度传感器的功能,实验电路板的焊接,数码显示管的使用,汇编语言的设计。
锻炼团队合作能力,动手设计能力以及发现问题并且解决问题的能力。
2,用途:温度是工业控制中主要的被控参数之一。
随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。
单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。
3,功能.:DS1820温度传感器温度的精确度高达0.1度,在许多工业控制中已经足够。
可以满足从-55摄氏度到+125摄氏度测量范围,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。
从用途上讲,该单片机类似于温度计,但用途又不仅仅集限于温度计,由于蜂鸣器的使用,编写程序后,超过预设温度后,蜂鸣器发出蜂鸣声,为工业控制的安全保驾护航。
二试验原原理DS1820单总线数字温度计引脚图DS1820单总线数字温度计一般说明:DS1820数字温度计提供9位温度读数,指示器件的温度信息经过单线接口送入 D S1820或从 DS1820送出因此从中央处理器到 DS1820仅需连接一条线和地读写和完成温度变换所需的电源可以由数据线本身提供而不需要外部电源因为每一个DS1820有唯一的系列号silicon serial number因此多个DS1820可以存在于同一条单线总线上这允许在许多不同的地方放置温度灵敏器件此性的应用范围包括HVAC环境控制建筑物设备或机械内的温度检测以及过程监视控制中的温度检测特性独特的单线接口只需1个接口引脚即可通信多点multidro 能力使分布式温度检测应用得以简化不需要外部元件可用数据线供电不需备份电源图1的方框图表示DS1820的主要部件DS1820有三个主要的数据部件164位激光laseredROM;2温度灵敏元件和3非易失性温度告警触发器TH和TL64位激光ROM每一DS1820包括一个唯一的64位长的ROM编码开绐的8位是单线产品系列编码DS1820编码是10h接着的48位是唯一的系列号最后的8 位是开始56位CRC见图564位 ROM 和 ROM 操作控制部分允许 DS1820作为一个单线器件工作并循单线总线系统一节中所详述的单线协议直到ROM操作协议被满足DS1820控制分的功能是不可访问的此协议在ROM操作协议流程图图6中叙述单线总线主机必须首先操作五种ROM操作命令之一1Read ROM(读ROM),2)Match ROM(匹配ROM),3) Search ROM(搜索ROM),4)Skip ROM(跳过ROM),或5)Alarm Search告警搜索在成功地执行了 ROM 操作序列之后DS1820特定的功能便可访问然后总线上主机可提供六个存贮器和控制功能命令之一DS1820内部结构框图如图1所示。
ds18b20数字温度计课程设计ds18b20数字温度计课程设计一、实验目的1、了解ds18b20数字温度计的原理;2、掌握使用单总线、多总线的ds18b20数字温度计的读取方法;3、学会程序设计,编写读取ds18b20数字温度计的程序;二、实验内容1、ds18b20原理介绍和使用指南;2、单总线ds18b20的读取;3、多总线ds18b20的读取;4、ds18b20数字温度计的程序设计。
三、实验准备1、ds18b20数字温度计一个;2、STC89C52单片机一个;3、74HC00芯片一个;4、基础模块一个;5、阻值电阻一块;6、按键一个;7、LED一个;四、实验步骤1、了解ds18b20的原理(1)ds18b20原理介绍:ds18b20是一款以串行通信方式完成温度采集的高精度热敏电阻,具有自带的识别码,可以同时读取多个ds18b20,具有低功耗,精度高,测量范围广等优点。
(2)ds18b20使用指南:ds18b20使用一根数据线进行通信,将这根数据线接到单片机的数据口即可,用来接收和发送数据。
2、单总线ds18b20的读取(1)实验环境搭建:将ds18b20数字温度计接到单片机的数据口上,并将电阻接入,使电路有效;(2)实验程序编写:编写读取单总线ds18b20的程序,实现单总线ds18b20数字温度计的读取;3、多总线ds18b20的读取(1)实验环境搭建:将多个ds18b20数字温度计使用同一个总线接到单片机的数据口上,并将电阻接入,使电路有效;(2)实验程序编写:编写读取多总线ds18b20的程序,实现多总线ds18b20数字温度计的读取;4、ds18b20数字温度计的程序设计(1)实验环境搭建:将ds18b20数字温度计接到单片机的数据口上,并将电阻、按键、LED等电子元件接入,使电路有效;(2)实验程序编写:编写ds18b20数字温度计的程序,实现读取ds18b20数字温度计的功能,并将按键控制LED亮灭,根据温度读取值判断LED是否亮起。
目录1 设计要求 (2)2 设计目的 (2)3 器件EEPROM的介绍 (2)3.1 EEPROM简介 (2)3.2 EEPROM24XX系列功能概述 (3)4 IIC协议的介绍 (3)4.1 IIC协议总线特征 (3)4.2 IIC协议工作原理 (3)4.3 IIC协议总线基本状态 (3)4.4 寻址约定 (5)5 EEPROM读写功能实现 (5)5.1写操作 (5)5.1.1 字节写操作 (6)5.1.2 页写入操作 (6)5.2 确认查询 (7)5.3 读操作 (7)5.3.1 当前地址的读操作 (8)5.3.2 随机读操作 (8)5.3.3 连续读操作 (9)6 具体设计过程 (10)6.1 程序流程设计 (10)6.2执行结果 (13)6.3 系统组成模块结构及功能 (15)6.3.1 函数定义 (15)6.3.2 主函数设计 (17)6.3.3 源程序 (19)7 设计心得体会 (27)8 参考文献 (28)IIC总线式EEPROM存储器应用设计1 设计要求利用51单片机和IIC总线式EEPROM芯片24C02进行存储器设计。
按下KEYWRITE1键,向24C02存储器写入数据1和2;按下KEYWRITE2键,向24C02存储器写入数据3和4;按下KEYREAD键,从24C02存储器读出刚写入的数据数据;写入数据显示在左两位,读出数据显示在右两位。
如图1.1所示。
图1.1 系统仿真运行图2 设计目的通过设计,了解IIC协议的基本原理,并对EEPROM读写功能的实现有个系统的概念,对其实现过程比较清楚。
同时,在设计中,巩固我们所学的理论知识。
3 器件EEPROM的介绍3.1 EEPROM简介EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。
EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。
单片机课程设计DS1820单总线数字温度计一统设计目的,用途,功能1,目的:.S1820温度传感器控制温度,熟悉芯片的使用,温度传感器的功能,实验电路板的焊接,数码显示管的使用,汇编语言的设计。
锻炼团队合作能力,动手设计能力以及发现问题并且解决问题的能力。
2,用途:温度是工业控制中主要的被控参数之一。
随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。
单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。
3,功能.:DS1820温度传感器温度的精确度高达0.1度,在许多工业控制中已经足够。
可以满足从-55摄氏度到+125摄氏度测量范围,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。
从用途上讲,该单片机类似于温度计,但用途又不仅仅集限于温度计,由于蜂鸣器的使用,编写程序后,超过预设温度后,蜂鸣器发出蜂鸣声,为工业控制的安全保驾护航。
二试验原原理DS1820单总线数字温度计引脚图DS1820单总线数字温度计一般说明:DS1820数字温度计提供9位温度读数,指示器件的温度信息经过单线接口送入 D S1820或从 DS1820送出因此从中央处理器到 DS1820仅需连接一条线和地读写和完成温度变换所需的电源可以由数据线本身提供而不需要外部电源因为每一个DS1820有唯一的系列号silicon serial number因此多个DS1820可以存在于同一条单线总线上这允许在许多不同的地方放置温度灵敏器件此性的应用范围包括HVAC环境控制建筑物设备或机械内的温度检测以及过程监视控制中的温度检测特性独特的单线接口只需1个接口引脚即可通信多点multidro 能力使分布式温度检测应用得以简化不需要外部元件可用数据线供电不需备份电源图1的方框图表示DS1820的主要部件DS1820有三个主要的数据部件164位激光laseredROM;2温度灵敏元件和3非易失性温度告警触发器TH和TL64位激光ROM每一DS1820包括一个唯一的64位长的ROM编码开绐的8位是单线产品系列编码DS1820编码是10h接着的48位是唯一的系列号最后的8 位是开始56位CRC见图564位 ROM 和 ROM 操作控制部分允许 DS1820作为一个单线器件工作并循单线总线系统一节中所详述的单线协议直到ROM操作协议被满足DS1820控制分的功能是不可访问的此协议在ROM操作协议流程图图6中叙述单线总线主机必须首先操作五种ROM操作命令之一1Read ROM(读ROM),2)Match ROM(匹配ROM),3) Search ROM(搜索ROM),4)Skip ROM(跳过ROM),或5)Alarm Search告警搜索在成功地执行了 ROM 操作序列之后DS1820特定的功能便可访问然后总线上主机可提供六个存贮器和控制功能命令之一DS1820内部结构框图如图1所示。
单片机总线概述,单片机的三总线结构一、总线概述计算机系统是以微处理器为核心的,各器件要与微处理器相连,且必须协调工作,所以在微处理机中引入了总线的概念,各器件共同享用总线,任何时候只能有一个器件发送数据(可以有多个器件同时接收数据) 。
计算机的总线分为控制总线、地址总线和数据总线等三种。
而数据总线用于传送数据,控制总线用于传送控制信号,地址总线则用于选择存储单元或外设。
二、单片机的三总线结构51系列单片机具有完善的总线接口时序,可以扩展控制对象,其直接寻址能力达到64k( 2的16次方) 。
在总线模式下,不同的对象共享总线,独立编址、分时复用总线,CPU 通过地址选择访问的对象,完成与各对象之间的信息传递。
单片机三总线扩展示意如图1 所示。
1、数据总线51 单片机的数据总线为P0 口,P0 口为双向数据通道,CPU 从P0 口送出和读回数据。
2、地址总线51 系列单片机的地址总线为16 位。
为了节约芯片引脚,采用P0 口复用方式,除了作为数据总线外,在ALE 信号时序匹配下,通过外置的数据锁存器,在总线访问前半周期从P0口送出低8位地址,后半周期从P0 口送出8 位数据。
高8位地址则通过P2 口送出。
3、控制总线51 系列单片机的控制总线包括读控制信号P3.7 和写控制信号P3.6 等,二者分别作为总线模式下数据读和数据写的使能信号。
三、单片机总线时序分析51 单片机总线时序如图2 所示。
从图2 中可以看出,完成一次总线( 读写) 操作周期为T,P0 口分时复用,在T0 期间,P0 口送出低8 位地址,在ALE 的下降沿完成数据锁存,送出低8位地址信号。
在T1 期间,P0 口作为数据总线使用,送出或读入数据,数据的读写操作在读、写控制信号的低电平期间完成。
需要注意的是,在控制信号( 读、写信号) 有效期间,P2 口送出高8位地址,配合数据锁存器输出的低8 位地址,实现16 位地址总线,即64kB 范围的内的寻址。
单片机课程设计题目:单总线和I2C总线结合实现数字温度计实验班级:设计者:指导教师:单总线和I2C总线结合实现数字温度计实验一、实验目的通过本实验,理解掌握单总线器件和I2C总线器件的应用,熟悉串行总线的操作技巧。
二、实验设备及器件IBM PC 机一台DP-51PROC 单片机综合仿真实验仪一台三、实验内容1.编写程序,通过单片机的P3.3 口控制一个DS18B20 完成数字温度的采集,然后用程序处理采集到的数据结果。
2.编写程序,通过I2C 总线器件ZLG7290 实现温度数据的输出显示。
3.结合以上两部分程序,编程实现数字式温度计的程序设计。
四、实验要求熟练掌握单总线方式器件的应用,熟悉I2C 总线协议,学习I2C 器件的使用方法。
五、实验过程和步骤(一、新建工程文件1、点击工具栏Project选项,在下拉菜单中选择New Project命令,弹出项目文件保存对话框,输入项目名后,点击保存按钮。
2、在工程建立完毕以后,uVision会弹出器件选择窗口,选择相应的器件型号。
如想修改,可点击工具栏Project选项,在下拉菜单中选择Select Device forTarget …Target‟命令。
3、点击工具栏File选项,选中New命令,新建文件,输入源程序。
4、把文件保存到磁盘中,如用汇编语言编写程序用.asm为扩展名,如用C语言编写程序用.c 为扩展名。
5、添加该文件到工程中,在Projectwindos窗口内,选中Source Group1然后点击鼠标右键,选择Add files to Group “Source Group1”,选择刚才创建的源程序文件,单击Add按钮。
(二、程序文件的编译、链接1. 安装B4 区JP12 接口上的短路帽,将B4 区的DQ 与A2 区INT1(P3.3相连。
2. 安装D5 区JP1 接口上的短路帽,将D5 区的SDA、SCL 分别与A2 区的P17、P16 相连。
3. 将D5 区的RST_L 针接上高电平。
4.按照下面的程序在Keil C51集成开发环境中建立工程文件,并进行调试仿真。
TEMPER_L EQU 36H ;存放读出温度低位数据TEMPER_H EQU 35H ;存放读出温度高位数据TEMPER_NUM EQU 37H ;存放转换后的温度值FLAG1 BIT 00HDQ BIT P3.3 ;一线总线控制端口SDA BIT P1.7 ;I2C总线定义SCL BIT P1.6MTD EQU 40H ;发送数据缓冲器MRD EQU 49H ;接收数据缓冲区;定义器件地址,变量ZLG7290 EQU 70H ;ZLG7290的器件地址ACK BIT 10H ;应答标志位SLA DA TA 50H ;器件的从地址SUBA DA TA 51H ;器件的子地址NUMBYTE DA TA 52H ;读/写的字节数变量ORG 0000HLJMP MAINORG 0100H;-------温度计主程序如下:MAIN:MOV SP,#70HDISP_LOOP:LCALL GET_TEMPER ;从DS18B20读出温度数据LCALL TEMPER_COV ;转换读出的温度数据并保存LCALL DELAYMOV MTD,#60HMOV MTD+1,TEMPER_NUM;温度值低位ANL MTD+1,#0FHMOV SLA,#ZLG7290 ;指定器件地址MOV SUBA,#07H ;指定子地址MOV NUMBYTE,#02H ;发送2字节数据LCALL IWRNBYTE ;调用写2字节数据程序MOV MTD,#61HMOV A,TEMPER_NUMSWAP AANL A,#0FHMOV MTD+1,A ;温度值高位MOV SLA,#ZLG7290 ;指定器件地址MOV SUBA,#07H ;指定子地址MOV NUMBYTE,#02H ;发送2字节数据LCALL IWRNBYTE ;调用写2字节数据程序LCALL DELAYSJMP DISP_LOOP ;温度循环采集显示;-------读出转换后的温度值GET_TEMPER:SETB DQ ; 定时入口BCD: LCALL INIT_1820JB FLAG1,S22LJMP BCD ; 若DS18B20不存在则返回S22: LCALL DELAY1 MOV A,#0CCH ; 跳过ROM匹配------0CCLCALL WRITE_1820MOV A,#44H ; 发出温度转换命令LCALL WRITE_1820NOPLCALL DELAYLCALL DELAYCBA: LCALL INIT_1820JB FLAG1,ABCLJMP CBAABC: LCALL DELAY1MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 发出读温度命令LCALL WRITE_1820LCALL READ_18200 ;READ_1820RET;-------读DS18B20的程序,从DS18B20中读出一个字节的数据READ_1820: MOV R2,#8RE1: CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE1RET;-------写DS18B20的程序WRITE_1820:MOV R2,#8CLR CWR1820: CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ R3,$SETB DQNOPDJNZ R2,WR1820SETB DQRET;-------读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出MOV R1,#36H ; 低位存入36H(TEMPER_L,高位存入35H(TEMPER_H RE00: MOV R2,#8RE01: CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET;-------将从DS18B20中读出的温度数据进行转换TEMPER_COV:MOV A,#0F0HANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值SWAP A MOV TEMPER_NUM,AMOV A,TEMPER_LJNB A CC.3,TEMPER_COV1 ; 四舍五入去温度值INC T EMPER_NUMTEMPER_COV1:MOV A,TEMPER_HANL A,#07HSWAP AADD A,TEMPER_NUMMOV TEMPER_NUM,A ; 保存变换后的温度数据LCALL BIN_BCDRET;-------将16进制的温度数据转换成压缩BCD码BIN_BCD:MOV DPTR,#TEMP_TABMOV A,TEMPER_NUMMOVC A,@A+DPTRMOV TEMPER_NUM,ARETTEMP_TAB:DB 00H,01H,02H,03H,04H,05H,06H,07H DB 08H,09H,10H,11H,12H,13H,14H,15H DB 16H,17H,18H,19H,20H,21H,22H,23H DB 24H,25H,26H,27H,28H,29H,30H,31H DB 32H,33H,34H,35H,36H,37H,38H,39H DB 40H,41H,42H,43H,44H,45H,46H,47H DB 48H,49H,50H,51H,52H,53H,54H,55H DB 56H,57H,58H,59H,60H,61H,62H,63H DB 64H,65H,66H,67H,68H,69H,70H,71H DB 72H,73H,74H,75H,76H,77H,78H,79H DB 80H,81H,82H,83H,84H,85H,86H,87H DB 88H,89H,90H,91H,92H,93H,94H,95H DB 96H,97H,98H,99H;-------DS18B20初始化程序INIT_1820:SETB DQNOPCLR DQMOV R0,#80HTSR1: DJNZ R0,TSR1 ; 延时SETB DQMOV R0,#25H ;96US-25HTSR2: DJNZ R0,TSR2JNB D Q,TSR3LJMP TSR4 ; 延时TSR3: SETB FLAG1 ; 置标志位,表示DS1820存在LJMP TSR5 TSR4: CLR FLAG1 ; 清标志位,表示DS1820不存在LJMP TSR7 TSR5: MOV R0,#06BH ;200USTSR6: DJNZ R0,TSR6 ; 延时TSR7: SETB DQRET;-------重新写DS18B20暂存存储器设定值RE_CONFIG:JB FLAG1,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1 RET RE_CONFIG1:MOV A,#0CCH ; 发SKIP ROM命令LCALL WRITE_1820MOV A,#4EH ; 发写暂存存储器命令LCALL WRITE_1820MOV A,#00H ; TH(报警上限中写入00H LCALL WRITE_1820MOV A,#00H ; TL(报警下限中写入00H LCALL WRITE_1820MOV A,#7FH ; 选择12位温度分辨率LCALL WRITE_1820RET;------------------延时子程序DELAY:MOV R7,#00HMIN: D JNZ R7,YS500RETYS500: LCALL YS500USLJMP MINYS500US:MOV R6,#00HDJNZ R6,$RETDELAY1: MOV R7,#20HDJNZ R7,$RET$INCLUDE(VI2C_ASM.INC ;包含VIIC软件包;END;启动I2C总线子程序START: SETB SDANOPSETB SCL ;起始条件建立时间大于4.7us NOPNOPNOPNOPNOPCLR SDANOP ;起始条件锁定时大于4usNOPNOPNOPNOPCLR SCL ;钳住总线,准备发数据NOPRET;结束总线子程序STOP: CLR SDANOPSETB SCL ;发送结束条件的时钟信号NOP ;结束总线时间大于4usNOPNOPNOPNOPSETB SDA ;结束总线NOP ;保证一个终止信号和起始信号的空闲时间大于4.7us NOPNOPNOPRET;发送应答信号子程序MACK: CLR SDA ;将SDA置0NOPNOPSETB SCLNOP ;保持数据时间,即SCL为高时间大于4.7us NOPNOPNOPNOPCLR SCLNOPNOPRET;发送非应答信号MNACK: SETB SDA ;将SDA置1NOPNOPSETB SCLNOPNOP ;保持数据时间,即SCL为高时间大于4.7us NOPNOPNOPCLR SCLNOPNOPRET;检查应答位子程序;返回值,ACK=1时表示有应答CACK: SETB SDANOPNOPSETB SCLCLR ACKNOPNOPMOV C,SDAJC CENDSETB ACK ;判断应答位CEND: NOPCLR SCLNOPRET;发送字节子程序;字节数据放入ACC;每发送一字节要调用一次CACK子程序,取应答位WRBYTE: MOV R0,#08H WLP: RLC A ;取数据位JC WR1SJMP WR0 ;判断数据位WLP1: DJNZ R0,WLPNOPRETWR1: SETB SDA ;发送1 NOPSETB SCLNOPNOPNOPNOPNOPCLR SCLSJMP WLP1WR0: CLR SDA ;发送0 NOPSETB SCLNOPNOPNOPNOPNOPCLR SCLSJMP WLP1;读取字节子程序;读出的值在ACC;每取一字节要发送一个应答/非应答信号RDBYTE: MOV R0,#08HRLP: SETB SDANOPNOPNOPNOPSETB SCL ;时钟线为高,接收数据位NOPNOPNOP ;+1NOP ;+1NOP ;+1NOP ;+1NOP ;+1MOV C,SDA ;读取数据位MOV A,R2CLR SCL ;将SCL拉低,时间大于4.7us RLC A ;进行数据位的处理MOV R2,ANOPNOPNOPNOP ;+1NOP ;+1NOP ;+1NOPNOPNOP ;+1NOPNOP ;+1NOP ;+1DJNZ R0,RLP ;未够8位,再来一次RET;=========================================================== ====================== =======;=========================================================== ====================== =======; 以下是用户接口子程序;;无子地址器件写字节数据;入口参数: 数据为ACC、器件从地址SLA;占用: A、R0、CYIWRBYTE: PUSH ACCIWBLOOP: LCALL START ;起动总线MOV A,SLALCALL WRBYTE ;发送器件从地址LCALL CACKJNB ACK,RETWRB ;无应答则跳转POP ACC ;写数据LCALL WRBYTELCALL CACKLCALL STOPRETRETWRB: POP ACCLCALL STOPRET;无子地址器件读字节数据;入口参数: 器件从地址SLA;出口参数: 数据为ACC;占用:A 、R0、R2 、CY IRDBYTE: LCALL STARTMOV A,SLA ;发送器件从地址INC ALCALL WRBYTELCALL CACKJNB ACK,RETRDBLCALL RDBYTE ;进行读字节操作LCALL MNACK ;发送非应信号RETRDB: LCALL STOP ;结束总线RET;向器件指定子地址写N字节数据;入口参数: 器件从地址SLA、器件子地址SUBA 、发送数据缓冲区MTD、发送字节数NUMBYTE; 占用: A 、R0 、R1 、R3 、CYIWRNBYTE: MOV A,NUMBYTEMOV R3,ALCALL START ;起动总线MOV A,SLALCALL WRBYTE ;发送器件从地址LCALL CACKJNB ACK,RETWRN ;无应答则退出MOV A,SUBA ;指定子地址LCALL WRBYTELCALL CACKMOV R1,#MTDWRDA: MOV A,@R1LCALL WRBYTE ;开始写入数据LCALL CACKJNB ACK,IWRNBYTEINC R1DJNZ R3,WRDA ;判断写完没有RETWRN: LCALL STOPRET;向器件指定子地址读取N字节数据;入口参数: 器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE ;出口参数: 接收数据缓冲区MTD;占用:A、R0、R1、R2、R3、CYIRDNBYTE: MOV R3,NUMBYTELCALL STARTMOV A,SLALCALL WRBYTE ;发送器件从地址LCALL CACKJNB ACK,RETRDNMOV A,SUBA ;指定子地址LCALL WRBYTELCALL CACKLCALL START ;重新起动总线MOV A,SLAINC A ;准备进行读操作LCALL WRBYTELCALL CACKJNB ACK,IRDNBYTEMOV R1,#MRDRDN1: LCALL RDBYTE ;读操作开始MOV @R1,A;NOP ;+1;NOP ;+1DJNZ R3,SACKLCALL MNACK ;最后一字节发非应答位RETRDN: LCALL STOP ;并结束总线RETSACK: LCALL MACKINC R1SJMP RDN1;无子地址器件写N字节数据;入口参数: 器件从地址SLA、发送数据缓冲区MTD、发送字节数NUMBYTE ; 占用: A 、R0 、R1 、R3 、CY;不发送子地址SUBA,直接发送多个数据.IWRNBYTEEXT:MOV A,NUMBYTEMOV R3,ALCALL START ;起动总线MOV A,SLALCALL WRBYTE ;发送器件从地址LCALL CACKJNB ACK,RETWRNE ;无应答则退出MOV R1,#MTDWRDAE: MOV A,@R1LCALL WRBYTE ;开始写入数据LCALL CACKJNB ACK,RETWRNEINC R1DJNZ R3,WRDAE ;判断写完没有RETWRNE: LCALL STOPRET;无子地址器件读取N字节数据;入口参数: 器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE;出口参数: 接收数据缓冲区MTD;占用:A、R0、R1、R2、R3、CY;说明:此函数不发送子址,也不重新启动总线,而是直接读取多个数据. IRDNBYTEEXT:MOV R3,NUMBYTELCALL STARTMOV A,SLAINC ALCALL WRBYTE ;发送器件从地址LCALL CACKJNB ACK,RETRDNEMOV R1,#MRDRDNE1: LCALL RDBYTE ;读操作开始MOV @R1,ADJNZ R3,SACKELCALL MNACK ;最后一字节发非应答位RETRDNE: LCALL STOP ;并结束总线RETSACKE: LCALL MACKINC R1SJMP RDNE1软件调试的具体步骤如下:1打开keil集成开发环境,新建一个新的工程文件。