单片机课程设设计单总线和IC总线结合实现数

  • 格式:doc
  • 大小:42.50 KB
  • 文档页数:30

下载文档原格式

  / 30
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计题目:单总线和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 for

Target …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 00H

DQ BIT P3.3 ;一线总线控制端口

SDA BIT P1.7 ;I2C总线定义

SCL BIT P1.6

MTD 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 0000H

LJMP MAIN

ORG 0100H

;-------温度计主程序如下:

MAIN:

MOV SP,#70H

DISP_LOOP:

LCALL GET_TEMPER ;从DS18B20读出温度数据LCALL TEMPER_COV ;转换读出的温度数据并保存LCALL DELAY

MOV MTD,#60H

MOV MTD+1,TEMPER_NUM;温度值低位

ANL MTD+1,#0FH

MOV SLA,#ZLG7290 ;指定器件地址

MOV SUBA,#07H ;指定子地址

MOV NUMBYTE,#02H ;发送2字节数据

LCALL IWRNBYTE ;调用写2字节数据程序

MOV MTD,#61H

MOV A,TEMPER_NUM

SWAP A

ANL A,#0FH

MOV MTD+1,A ;温度值高位

MOV SLA,#ZLG7290 ;指定器件地址

MOV SUBA,#07H ;指定子地址

MOV NUMBYTE,#02H ;发送2字节数据

LCALL IWRNBYTE ;调用写2字节数据程序

LCALL DELAY

SJMP DISP_LOOP ;温度循环采集显示

;-------读出转换后的温度值

GET_TEMPER:

SETB DQ ; 定时入口

BCD: LCALL INIT_1820

JB FLAG1,S22

LJMP BCD ; 若DS18B20不存在则返回S22: LCALL DELAY1 MOV A,#0CCH ; 跳过ROM匹配------0CC

LCALL WRITE_1820

MOV A,#44H ; 发出温度转换命令

LCALL WRITE_1820

NOP

LCALL DELAY

LCALL DELAY

CBA: LCALL INIT_1820

JB FLAG1,ABC

LJMP CBA

ABC: LCALL DELAY1

MOV A,#0CCH ; 跳过ROM匹配

LCALL WRITE_1820

MOV A,#0BEH ; 发出读温度命令

LCALL WRITE_1820

LCALL READ_18200 ;READ_1820

RET

;-------读DS18B20的程序,从DS18B20中读出一个字节的数据READ_1820: MOV R2,#8

RE1: CLR C

SETB DQ

NOP

NOP

CLR DQ

NOP