PCF8591_DA和AD转换器读写程序.doc

上传人:PIYPING 文档编号:11152946 上传时间:2021-07-06 格式:DOC 页数:9 大小:154KB
返回 下载 相关 举报
PCF8591_DA和AD转换器读写程序.doc_第1页
第1页 / 共9页
PCF8591_DA和AD转换器读写程序.doc_第2页
第2页 / 共9页
PCF8591_DA和AD转换器读写程序.doc_第3页
第3页 / 共9页
PCF8591_DA和AD转换器读写程序.doc_第4页
第4页 / 共9页
PCF8591_DA和AD转换器读写程序.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《PCF8591_DA和AD转换器读写程序.doc》由会员分享,可在线阅读,更多相关《PCF8591_DA和AD转换器读写程序.doc(9页珍藏版)》请在三一文库上搜索。

1、PCF8591读写程序(一)、PCF85911、引脚说明ANI0ANI3 为模拟信号输入端,不使用的输入端应接地A0A2 地址输入端GND、VCC 地和电源端(+5V)SDA 为I2C数据输入与输出端SCL 为I2C时钟输入端EXT 内外部时钟选择端,使用内部时钟时接地,使用外部时钟时接+5VOSC 外部时钟输入、内部时钟输出端,不使用时应悬空AGND 模拟信号地VREF 基准电压输入端AOUT D/A转换后的电压输出端2、功能说明PCF8591是具有I2C总线接口的8位A/D及D/A转换器,具有4路A/D输入,1路D/A输出。PCF8591采用典型的I2C总线接口器件寻址方法,即总线地址由器

2、件地址(1001)、引脚地址(由A0A2接地或+5V来确定,接地代表0;接+5V代表1)、方向位(即R/W)组成。因此,在I2C总线系统中最多可接8个这样的器件。D7D6D5D4D3D2D1D01001A2A1A0R/WR/W=1表示读操作,R/W=0表示写操作。本例将A0A2接地,则读地址为91H;写地址为90H。地址字节:由器件地址、引脚地址、方向位组成,它是通信时主机发送的第一字节数据。控制字节:用于控制PCF8951的输入方式、输入通道、D/A转换等,是通信时主机发送的第二字节数据,其格式如下:D7D6D5D4D3D2D1D0未用 (写0)D/A输出允许位 0为禁止 1为允许A/D输入

3、方式选择位00:4路单端输入 01:3路差分输入 10:单端与差分 11:2路差分输入 未用 (写0)自动增益选择位 0为禁用 1为启用AD通道选择位 00:选择通道0 01:选择通道1 10:选择通道2 11:选择通道3 A/D输入方式选择说明:3、通信格式第一字节第二字节第三字节写入器件地址(90H)写入控制字节要写入的数据向PCF8591写入格式(高位在前)第一字节第二字节第三字节第四字节写入器件地址(90H写)写入控制字节写入器件地址(91H读)读出一字节数据从PCF8591读数据格式(高位在前)(二)、I2C总线1、I2C总线数据位的传输 它通过2根线:串行数据线(SDA)和串行时钟

4、线(SCL)组成。连接到总线上的每一个器件都有一个唯一的地址,而且都可以作为一个发生器或接收器,SDA和SCL都是双向线路,分别通过一个电阻连接到电源(+5V)端。前提是连接到总线上的器件的SDA和SCL端必须是漏极或集电极开路型。I2C总线上的数据传输速率在标准模式下可达100Kb/s,快速模式可达400Kb/s,高速模式下可达3.4Mb/s。连接到总线的器件数量只由总线的电容(400PF)限制决定。 I2C总线上每传输一个数据位必须产生一个时钟脉冲,I2C总线上数据传输的有效性要求SDA线上的数据必须在时钟线SCL的高电平期间保存稳定,数据线的改变只能在时钟线为低电平期间。在标准模式下,高

5、低电平宽度必须大于4.7us(即每次时钟线需延时4.7us后才能改变)。2、I2C总线数据的传输数据传输的字节格式发送到SDA线上的每一个字节必须为8位,每次发送的字节数量不受限制,从机在接收完一个字节后向主机发送一个应答位,主机在收到从机应答后才会发送第二字节数据,发送数据时先发数据的最高位。数据传输中的应答相应的应答位由接收方(从机)产生,在应答的时钟脉冲期间,发送方(主机)应释放SDA线(使其为高电平)。在应答过程中,接收方(从机)必须将数据线SDA拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。3、I2C总线的传输协议寻址字节主机产生起始条件后,发送的第一字节为寻址字节,该字节的

6、前7位为从机地址,最低位决定了传输的方向,该最低位为“0”表示主机写数据到从机,“1”表示主机从从机中读数据。从机地址由一个固定的部分(如高4位1001)和可编程部分(如低3位A0A2)及一个方向位(R/W)组成。传输格式主机产生起始条件后,首先发送一个寻址字节,收到从机应答后,接着就传输数据,数据传输一般由主机产生的停止位终止。但如果主机仍希望在总线上通信,则它可以产生重复起始条件和寻址另一个从机,而不必产生一个停止条件。主机写数据到从机的通信格式如下:1234567NN-1主机产生起始位发从机地址90H等待从机应答发送数据等待从机应答发送数据等待从机应答。停止位主机从从机中读数据的通信格式

7、如下:1234567NN-1主机产生起始位发从机地址91H等待从机应答接收从机发出的数据向从机应答接收从机发出的数据向从机应答。主机产生停止位原理图如下:汇编源代码如下:;/本测试程序将AIN0通道的模拟电压进行A/D转换后,将数字量通过LED数码管显示出来,同时再将该数字;/量写入PCF8591中,通过其内部的D/A转换为模拟电压输出驱动LED发光二极管。ACK BIT 20H.0 ;应答标志位ACK=0表示无应答SCL BIT P1.0 ;时钟线SDA BIT P1.1 ;数据线WADD EQU 21H ;器件地址(即从地址)SUBD EQU 22H ;器件内部地址(即子地址)NUMBR

8、EQU 23H ;需读取的字节数NUMBW EQU 24H ;需写入的字节数RDATA EQU 25H ;读出数据的存放首地址WDATA EQU 26H ;写入数据的存放首地址ORG 0000HSJMP MAINORG 0030HMAIN: MOV WADD,#90H ;写入PCF8591的地址MOV P0,#0FFH ;关闭显示MOV P2,#0FFHMOV SUBD,#40H ;写入PCF8591的控制字MOV NUMBR,#1 ;写入需读取的字节数MOV NUMBW,#1 ;写入需写入的字节数MOV RDATA,#30H ;送入首地址MOV WDATA,#40H ;送入首地址MOV 50

9、H,#0 ;显示的百位清零MOV 51H,#0 ;显示的十位清零MOV 52H,#0 ;显示的个位清零M1: LCALL READI2C ;读PCF8591子程序MOV 40H,30HMOV NUMBR,#1MOV NUMBW,#1LCALL DATLCALL DISPLAYLCALL WRITEI2C ;写PCF8591子程序SJMP M1;数据处理子程序DAT: MOV A,30HMOV B,#100DIV ABMOV 50H,AMOV A,#10XCH A,BDIV ABMOV 51H,AMOV 52H,BRET;显示子程序DISPLAY: MOV DPTR,#TABMOV A,50HM

10、OVC A,A+DPTRMOV P0,AMOV P2,#01HLCALL TIM2MSMOV A,51HMOVC A,A+DPTRMOV P0,AMOV P2,#02HLCALL TIM2MSMOV A,52HMOVC A,A+DPTRMOV P0,AMOV P2,#04HLCALL TIM2MSRET;2ms延时子程序TIM2MS: MOV R6,#2TIM1: MOV R5,#250TIM2: NOPNOPDJNZ R5,TIM2DJNZ R6,TIM1RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,8CH,0C6H

11、,0C7H,86H,0FFH ;共阳数码管;从I2C总线读取N个字节数据子程序READI2C: LCALL STARTI2C ;启动I2C总线MOV A,WADD ;送入器件地址LCALL WI2C ;向I2C总线发送一个字节数据子程序LCALL RACK ;读取从机应答位子程序JNB ACK,ROUT ;判断从机有无应答ACK=0则无应答MOV A,SUBD ;送入器件内部地址LCALL WI2CLCALL RACKLCALL STARTI2CMOV A,WADDINC A ;改总线为读取状态LCALL WI2CLCALL RACKJNB ACK,READI2CMOV R0,RDATA ;送

12、入读出数据的存放首地址RI2C2: LCALL RI2CMOV R0,ADJNZ NUMBR,RI2C1 ;判断字节读取完否LCALL NMACK ;调主机非应答子程序ROUT: LCALL STOPI2C ;调I2C总线停止子程序MOV RDATA,#30HRETRI2C1: LCALL MACK ;调主机应答子程序INC R0SJMP RI2C2;向I2C总线发送N个字节数据子程序WRITEI2C: LCALL STARTI2C ;启动I2C总线MOV A,WADD ;送入器件地址LCALL WI2C ;向I2C总线发送一个字节数据子程序LCALL RACK ;读取从机应答位子程序JNB

13、ACK,WOUT ;判断从机有无应答ACK=0则无应答MOV A,SUBD ;送入器件内部地址LCALL WI2CLCALL RACKJNB ACK,WOUTMOV R0,WDATA ;送入写入数据的存放首地址WI2C1: MOV A,R0LCALL WI2CLCALL RACKJNB ACK,WRITEI2CINC R0DJNZ NUMBW,WI2CWOUT: LCALL STOPI2CMOV WDATA,#40HRET;I2C总线启动子程序STARTI2C: SETB SDASETB SCLNOPNOPNOPNOPNOPCLR SDANOPNOPNOPNOPNOPCLR SCLRET;I2

14、C总线停止子程序STOPI2C: CLR SDASETB SCLNOPNOPNOPNOPNOPSETB SDARET;主机应答子程序MACK: CLR SDASETB SCLNOPNOPNOPNOPNOPCLR SCLRET;主机非应答子程序NMACK: SETB SDASETB SCLNOPNOPNOPNOPNOPCLR SCLRET;向I2C总线发送一个字节数据子程序WI2C: MOV R7,#8WLP: RLC AMOV SDA,CNOPSETB SCLNOPNOPNOPNOPNOPCLR SCLDJNZ R7,WLPRET;从I2C总线读取一个字节数据子程序RI2C: MOV R7,#8CLR ASETB SDANOPRLP: SETB SCLNOPNOPMOV C,SDANOPCLR SCLRLC ANOPNOPNOPNOPDJNZ R7,RLPNOPRET;读取从机应答位子程序RACK: SETB SDANOPNOPSETB SCLCLR ACKNOPNOPMOV C,SDAJC ACKENDSETB ACKACKEND: NOPCLR SCLNOPRETEND

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1