PCF8591DA和AD转换器读写程序Word文件下载.docx

上传人:b****6 文档编号:20673620 上传时间:2023-01-25 格式:DOCX 页数:13 大小:76.55KB
下载 相关 举报
PCF8591DA和AD转换器读写程序Word文件下载.docx_第1页
第1页 / 共13页
PCF8591DA和AD转换器读写程序Word文件下载.docx_第2页
第2页 / 共13页
PCF8591DA和AD转换器读写程序Word文件下载.docx_第3页
第3页 / 共13页
PCF8591DA和AD转换器读写程序Word文件下载.docx_第4页
第4页 / 共13页
PCF8591DA和AD转换器读写程序Word文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

PCF8591DA和AD转换器读写程序Word文件下载.docx

《PCF8591DA和AD转换器读写程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《PCF8591DA和AD转换器读写程序Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。

PCF8591DA和AD转换器读写程序Word文件下载.docx

A2

A1

A0

R/W

R/W=1表示读操作,R/W=0表示写操作。

本例将A0~A2接地,则读地址为91H;

写地址为90H。

地址字节:

由器件地址、引脚地址、方向位组成,它是通信时主机发送的第一字节数据。

控制字节:

用于控制PCF8951的输入方式、输入通道、D/A转换等,是通信时主机发送的第二字节数据,其格式如下:

未用(写0)

D/A输出允许位0为禁止1为允许

A/D输入方式选择位00:

4路单端输入01:

3路差分输入10:

单端与差分11:

2路差分输入

自动增益选择位0为禁用1为启用

AD通道选择位00:

选择通道001:

选择通道110:

选择通道211:

选择通道3

A/D输入方式选择说明:

3、通信格式

第一字节

第二字节

第三字节

写入器件地址(90H)

写入控制字节

要写入的数据

向PCF8591写入格式(高位在前)

第四字节

写入器件地址(90H写)

写入器件地址(91H读)

读出一字节数据

从PCF8591读数据格式(高位在前)

(二)、I2C总线

1、I2C总线数据位的传输

它通过2根线:

串行数据线(SDA)和串行时钟线(SCL)组成。

连接到总线上的每一个器件都有一个唯一的地址,而且都可以作为一个发生器或接收器,SDA和SCL都是双向线路,分别通过一个电阻连接到电源(+5V)端。

前提是连接到总线上的器件的SDA和SCL端必须是漏极或集电极开路型。

I2C总线上的数据传输速率在标准模式下可达100Kb/s,快速模式可达400Kb/s,高速模式下可达s。

连接到总线的器件数量只由总线的电容(400PF)限制决定。

I2C总线上每传输一个数据位必须产生一个时钟脉冲,I2C总线上数据传输的有效性要求SDA线上的数据必须在时钟线SCL的高电平期间保存稳定,数据线的改变只能在时钟线为低电平期间。

在标准模式下,高低电平宽度必须大于(即每次时钟线需延时后才能改变)。

2、I2C总线数据的传输

数据传输的字节格式

发送到SDA线上的每一个字节必须为8位,每次发送的字节数量不受限制,从机在接收完一个字节后向主机发送一个应答位,主机在收到从机应答后才会发送第二字节数据,发送数据时先发数据的最高位。

数据传输中的应答

相应的应答位由接收方(从机)产生,在应答的时钟脉冲期间,发送方(主机)应释放SDA线(使其为高电平)。

在应答过程中,接收方(从机)必须将数据线SDA拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。

3、I2C总线的传输协议

寻址字节

主机产生起始条件后,发送的第一字节为寻址字节,该字节的前7位为从机地址,最低位决定了传输的方向,该最低位为“0”表示主机写数据到从机,“1”表示主机从从机中读数据。

从机地址由一个固定的部分(如高4位1001)和可编程部分(如低3位A0~A2)及一个方向位(R/W)组成。

传输格式

主机产生起始条件后,首先发送一个寻址字节,收到从机应答后,接着就传输数据,数据传输一般由主机产生的停止位终止。

但如果主机仍希望在总线上通信,则它可以产生重复起始条件和寻址另一个从机,而不必产生一个停止条件。

主机写数据到从机的通信格式如下:

2

3

4

5

6

7

N

N-1

主机产生起始位

发从机地址90H

等待从机应答

发送数据

停止位

主机从从机中读数据的通信格式如下:

发从机地址91H

接收从机发出的数据

向从机应答

主机产生停止位

 

原理图如下:

汇编源代码如下:

;

//本测试程序将AIN0通道的模拟电压进行A/D转换后,将数字量通过LED数码管显示出来,同时再将该数字

//量写入PCF8591中,通过其内部的D/A转换为模拟电压输出驱动LED发光二极管。

ACKBIT;

应答标志位ACK=0表示无应答

SCLBIT;

时钟线

SDABIT;

数据线

WADDEQU21H;

器件地址(即从地址)

SUBDEQU22H;

器件内部地址(即子地址)

NUMBREQU23H;

需读取的字节数

NUMBWEQU24H;

需写入的字节数

RDATAEQU25H;

读出数据的存放首地址

WDATAEQU26H;

写入数据的存放首地址

ORG0000H

SJMPMAIN

ORG0030H

MAIN:

MOVWADD,#90H;

写入PCF8591的地址

MOVP0,#0FFH;

关闭显示

MOVP2,#0FFH

MOVSUBD,#40H;

写入PCF8591的控制字

MOVNUMBR,#1;

写入需读取的字节数

MOVNUMBW,#1;

写入需写入的字节数

MOVRDATA,#30H;

送入首地址

MOVWDATA,#40H;

MOV50H,#0;

显示的百位清零

MOV51H,#0;

显示的十位清零

MOV52H,#0;

显示的个位清零

M1:

LCALLREADI2C;

读PCF8591子程序

MOV40H,30H

MOVNUMBR,#1

MOVNUMBW,#1

LCALLDAT

LCALLDISPLAY

LCALLWRITEI2C;

写PCF8591子程序

SJMPM1

数据处理子程序

DAT:

MOVA,30H

MOVB,#100

DIVAB

MOV50H,A

MOVA,#10

XCHA,B

MOV51H,A

MOV52H,B

RET

显示子程序

DISPLAY:

MOVDPTR,#TAB

MOVA,50H

MOVCA,@A+DPTR

MOVP0,A

MOVP2,#01H

LCALLTIM2MS

MOVA,51H

MOVP2,#02H

MOVA,52H

MOVP2,#04H

2ms延时子程序

TIM2MS:

MOVR6,#2

TIM1:

MOVR5,#250

TIM2:

NOP

NOP

DJNZR5,TIM2

DJNZR6,TIM1

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,8CH,0C6H,0C7H,86H,0FFH;

共阳数码管

从I2C总线读取N个字节数据子程序

READI2C:

LCALLSTARTI2C;

启动I2C总线

MOVA,WADD;

送入器件地址

LCALLWI2C;

向I2C总线发送一个字节数据子程序

LCALLRACK;

读取从机应答位子程序

JNBACK,ROUT;

判断从机有无应答ACK=0则无应答

MOVA,SUBD;

送入器件内部地址

LCALLWI2C

LCALLRACK

LCALLSTARTI2C

MOVA,WADD

INCA;

改总线为读取状态

JNBACK,READI2C

MOVR0,RDATA;

送入读出数据的存放首地址

RI2C2:

LCALLRI2C

MOV@R0,A

DJNZNUMBR,RI2C1;

判断字节读取完否

LCALLNMACK;

调主机非应答子程序

ROUT:

LCALLSTOPI2C;

调I2C总线停止子程序

MOVRDATA,#30H

RI2C1:

LCALLMACK;

调主机应答子程序

INCR0

SJMPRI2C2

向I2C总线发送N个字节数据子程序

WRITEI2C:

JNBACK,WOUT;

JNBACK,WOUT

MOVR0,WDATA;

送入写入数据的存放首地址

WI2C1:

MOVA,@R0

JNBACK,WRITEI2C

DJNZNUMBW,WI2C

WOUT:

LCALLSTOPI2C

MOVWDATA,#40H

I2C总线启动子程序

STARTI2C:

SETBSDA

SETBSCL

CLRSDA

CLRSCL

I2C总线停止子程序

STOPI2C:

CLRSDA

SETBSDA

主机应答子程序

MACK:

主机非应答子程序

NMACK:

WI2C:

MOVR7,#8

WLP:

RLCA

MOVSDA,C

DJNZR7,WLP

从I2C总线读取一个字节数据子程序

RI2C:

CLRA

RLP:

SETBSCL

MOVC,SDA

RLCA

DJNZR7,RLP

RACK:

CLRACK

JCACKEND

SETBACK

ACKEND:

END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1