PCF8591DA和AD转换器读写程序.docx
- 文档编号:16666815
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:14
- 大小:720.35KB
PCF8591DA和AD转换器读写程序.docx
《PCF8591DA和AD转换器读写程序.docx》由会员分享,可在线阅读,更多相关《PCF8591DA和AD转换器读写程序.docx(14页珍藏版)》请在冰点文库上搜索。
PCF8591DA和AD转换器读写程序
PCF8591_DA和AD转
换器换写程序
PCF8591读写程序
(一)、PCF8591
1ANIOV^VCC
16
ANI1
AOUT
ANI2
VREF
ANI3
AO
FFXT
Al
00DSC
A2
5SCL
8
GNL
出SDA
91
1、引脚说明
ANI0-ANI3为模拟信号输入端,不使用的输入端应接地
A0~A2地址输入端
GND、VCC地和电源端(+5V)
SDA为I2C数据输入与输出端
SCL为I2C时钟输入端
EXT内外部时钟选择端,使用内部时钟时接地,使用外部时钟时接+5V
OSC外部时钟输入、内部时钟输出端,不使用时应悬空AGND模拟信号地
VREF基准电圧输入端
AOUTD/A转换后的电压输出端
2、功能说明
PCF8591是具有I2C总线接口的8位A/D及D/A转换器,具有4路A/D输入,1路D/A输岀。
PCF8591采用典型的I2C总线接口器件寻址方法,即总线地址山器件地址(1001)、引脚地址(由A0~A2接地或+5V来确定,接地代表0;接+5V代表1)、方向位(即R/W)组成。
因此,在I2C总线系统中最多可接8个这样的器件。
D7
D6
D5
D4
D3
D2
DI
DO
1
0
0
1
A2
Al
AO
R/W
R/W=l表示读操作,R/W=0表示写操作。
本例将A0-A2接地,则读地址为91H:
写地址为
90Ho
地址字节:
山器件地址、引脚地址、方向位组成,它是通信时主机发送的第一字节数据。
控制字节:
用于控制PCF8951的输入方式、输入通道、D/A转换等,是通信时主机发送的第二字节数据,其格式如下:
D7
D6
D5
D4
D3
D2
D1
D0
D/A输出允许位0为禁止2为允许
A/D输入方式选择位00:
4路单端输入01:
3路差分输入10:
单端与差分11:
2路差分输入
自动增益选择位0为禁用1为启用
AD通道选择位
00:
选择通道0
01:
选择通道1
10:
选择通道2
11:
选择通道3
A/D输入方式选择说明:
3、通信格式
第一字节
第二字节
第三字节
写入器件地址(90H)
写入控制字节
要写入的数据
向PCF8591写入格式(高位在前)
第一字节
第二字节
第三字节
第四字节
写入器件地址(90H写)
写入控制字节
写入器件地址(91H读)
读出一字节数据
从PCF8591读数据格式(高位在前)
(二)、I2C总线
1、I2C总线数据位的传输
它通过2根线:
串行数据线(SDA)和串行时钟线(SCL)组成。
连接到总线上的每一个器件都有一个唯一的地址,而且都可以作为一个发生器或接收器,SDA和SCL都是双向线路,分别通过一个电阻连接到电源(+5V)端。
前提是连接到总线上的器件的SDA和SCL端必须是漏极或集电极开路型oI2C总线上的数据传输速率在标准模式下可达100Kb/s,快速模式可达400Kb/s,高速模式下可达s。
连接到总线的器件数量只由总线的电容(400PF)限制决定。
I2C总线上每传输一个数据位必须产生一个时钟脉冲,I2C总线上数据传输的有效性要求SDA线上的数据必须在时钟线SCL的高电平期间保存稳定,数据线的改变只能在时钟线为低电平期间。
在标准模式下,高低电平宽度必须大于(即每次时钟线需延时后才能改变)o
2、I2C总线数据的传输
数据传输的字节格式
发送到SDA线上的每一个字节必须为8位,每次发送的字节数量不受限制,从机在接收完一个字节后向主机发送一个应答位,主机在收到从机应答后才会发送第二字节数据,发送数据时先发数据的最高位。
数据传输中的应答
相应的应答位山接收方(从机)产生,在应答的时钟脉冲期间,发送方(主机)应释放SDA线(使其为高电平)。
在应答过程中,接收方(从机)必须将数据线SDA拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。
3、I2C总线的传输协议
寻址字节
主机产生起始条件后,发送的第一字节为寻址字节,该字节的前7位为从机地址,最低位决定了传输的方向,该最低位为“0”表示主机写数据到从机,“1”表示主机从从机中读数据。
从机地址由一个固定的部分(如高4位1001)和可编程部分(如低3位A0-A2)及一个方向位
(R/W)组成。
传输格式
主机产生起始条件后,首先发送一个寻址字节,收到从机应答后,接着就传输数据,数据传输一般山主机产生的停止位终止。
但如果主机仍希望在总线上通信,则它可以产生重复起始条件和寻址另一个从机,而不必产生一个停止条件。
主机写数据到从机的通信格式如下:
1
2
3
4
5
6
7
N
N-1
主机产生起始位
发从机地址90H
等待从机应答
发送数
据
等待从机应答
发送数据
等待从机应答
OOOO
停止位
主机从从机中读数据的通信格式如下:
1
2
3
4
5
6
7
N
N-1
主生一
发从机地址91H
等待从机应答
接收从机发出的数据
向从机应答
接收从机发出的数据
向从机应答
OOOO
主机产生停止位
原理图如下:
汇编源代码如下:
;〃本测试程序将AINO通道的模拟电压进行A/D转换后,将数字量通过LED数码管显示出来,同时再将该数字
;〃量耳入PCF8591中,通过其内部的D/A转换为模拟电压输出驱动LED发光二极管。
ACKBIT;应答标志位ACK=O表示无应答
SCLBIT;时钟线
SDABIT擞据线
WADDEQU21H;器件地址(即从地址)
SUBDEQU22H;器件内部地址(即子地址)
NUMBREQU23H;需读取的字节数
NUMBWEQU24H;需写入的字节数
RDATAEQU25H;矗出数据的存放首地址
WDATAEQU26H;写入数据的存放首地址
ORG0000H
SJMPMAIN
ORG0030H
MAIN:
MOVWADD,#90H;写入PCF8591的地址
MOVP乙#OFFH
MOVSUBD,#40HMOVNUMBR,#1MOVNUMBW,#!
MOVPO,#OFFH;关闭显示
;写入PCF8591的控制字
;写入需读取的字节数
;写入需写入的字节数
MOVRDATA,#3OH;送入首地址
MOVWDATA,#40H;送入首地址
MOV50H,#0;显示的白位清零
MOV51H,#0;显示的十位清零
MOV52H,#0;显示的个位清零
Ml:
LCALLREADI2C;读PCF8591子程序
MOV40HQ0HMOVNUMBR,#!
MOVNUMBW,#1
LCALLDAT
LCALLDISPLAY
LCALLWRITEI2C;写PCF8591子程序
SJMPMl
;数据处理子程序
DAT:
MOVA,30H
MOVB,#100
DIVAB
MOV5OH,A
MOVA,#10
XCHA,B
DIVAB
MOV51H,A
MOV52H,B
RET
;显示子程序
DISPLAY:
MOVDPTR,#TAB
MOVA,5OH
MOVCA,@A+DPTR
MOVPO,A
MOVP2,#O1H
LCALLTIM2MS
MOVA,51H
MOVCA,@A+DPTR
MOVPO,A
MOVP乙#02H
LCALLTIM2MS
MOVA,52H
MOVCA,@A+DPTR
MOVPO,A
MOVP乙#04H
LCALLTIM2MS
RET
;2ms延时子程序
TIM2MS:
MOVR6,#2
TIM1:
MOVR5,#250
TIM2:
NOP
NOP
DJNZR5JIM2
DJNZR6JIM1
RET
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,ROUTMOVA,SUBDLCALLWI2CLCALLRACKLCALLSTARTI2C
;判断从机有无应答ACK=O则无应答
;送入器件内部地址
MOVA,WADD
INCA;改总线为读取状态
LCALLWI2C
LCALLRACK
JNBACK,READI2C
MOVRO,RDATA
;送入读出数据的存放首地址
RI2C2:
LCALLRI2C
MOV@RO,A
DJNZNUMBR,RI2C1;判断字节读取完否
LCALLNMACK
;调主机非应答子程序
ROUT:
LCALLSTOPI2C;调I2C总线停止子程序
MOVRDATA,#3OH
RET
RI2C1:
LCALLMACK;调主机应答子程序
INCRO
SJMPRI2C2
;向I2C总线发送N个字节数据子程序
WRITEI2C:
LCALLSTARTI2C;启动I2C总线
MOVA,WADD;送入器件地址
LCALLWI2C;向I2C总线发送一个字节数据子程序LCALLRACK;读取从机应答位子程序
JNBACK,WOUT;判断从机有无应答ACK=O则无应答
MOVA,SUBD;送入器件内部地址
LCALLWI2C
LCALLRACK
JNBACK,WOUT
MOVRO,WDATA;送入写入数据的存放首地址
WI2C1:
MOVA,@RO
LCALLWI2C
LCALLRACK
JNBACK,WRITEI2C
INCRO
DJNZNUMBW,WI2C
WOUT:
LCALLSTOPI2C
MOVWDATA,#40H
RET
;I2C总线启动子程序
STARTI2C:
SETBSDA
SETBSCL
NOP
NOP
NOP
NOP
NOP
CLRSDA
NOP
NOP
NOP
NOP
NOP
CLRSCL
RET
;I2C总线停止子程序
STOPI2C:
CLRSDA
SETBSCL
NOP
NOP
NOP
NOP
NOP
SETBSDA
RET
;主机应答子程序
MACK:
CLRSDA
SETBSCL
NOP
NOP
NOP
NOP
NOP
CLRSCL
RET
;主机非应答子程序
NMACK:
SETBSDA
SETBSCL
NOP
NOP
NOP
NOP
NOP
CLRSCL
RET
;向I2C总线发送一个字节数据子程序
WI2C:
MOVR7,#8
WLP:
RLCA
MOVSDA,C
NOP
SETBSCL
NOP
NOP
NOP
NOP
NOP
CLRSCL
DJNZR7,WLP
RET
;从I2C总线读取一个字节数据子程序
RI2C:
MOVR7,#8
CLRA
SETBSDA
NOP
RLP:
SETBSCL
NOP
NOP
MOVC,SDA
NOP
CLRSCL
RLCA
NOP
NOP
NOP
NOP
DJNZR7,RLP
NOP
RET
;读取从机应答位子程序
RACK:
SETBSDA
NOP
NOP
SETBSCL
CLRACK
NOP
NOP
MOVC,SDA
JCACKEND
SETBACK
ACKEND:
NOP
CLRSCL
NOP
RET
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PCF8591DA AD 转换器 读写 程序