




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.1.5MCS-51的DA/AD扩展技术1.MCS-51单片机DA扩展技术MCS-51单片机扩展DA转换芯片可实现微机系统的模拟信号输出,MCS-51单片机扩展DAC0832时,可以有单缓冲方式和双缓冲方式两种连接方式。(1)单缓冲方式。单缓冲方式是指DAC0832内部的两个数据缓冲器有1个处于直通方式,另1个受单片机的控制。例
根据上图接线,将DAC0832用作波形发生器,分别写出产生如右图所示的锯齿波、三角波和方波的程序。1)锯齿波程序程序代码如下:ORG0100HSTART:MOVR0,#0FEHMOVX@R0,AINCASJMPSTARTEND2)三角波由锯齿波线性下降段和线性上升段组成,相应程序代码如下:ORG0100HSTART:CLRAMOVR0,#0FEHDOWN:MOVX@R0,A;线性下降段INCAJNZDOWN;若未完,则转DOWNMOVA,#0FEHUP:MOVX@R0,A;线性上升段DECAJNZUP;若未完,则UPSJMPDOWN;若已完,则循环3)正弦波程序代码如下:ORG0100HSTART:MOVR0,#0FEHMOVR1,#00HMOVR2,#65LOOP:MOVA,R1ADDA,#8MOVCA,@A+PCMOVX@R0,A;LCALLDELAY;INCR1DJNZR2,LOOPSJMPSTART;循环;64点正弦波数据表,可在MATLAB命令行中利用Y=dec2hex(ceil((256/2-1)*sin(0:pi*2/64:2*pi)+128));语句获得。DB80H,8DH,99H,0A5H,0B1H,0BCH,0C7H,0D1H,0DAH,0E3H,0EAH,0F1H,0F6H,0FAHDB0FDH,0FFH,0FFH,0FFH,0FDH,0FAH,0F6H,0F1H,0EAH,0E3H,0DAH,0D1H,0C7HDB0BCH,0B1H,0A5H,99H,8DH,81H,74H,68H,5CH,50H,45H,3AH,30H,27H,1EH,17H,DB10H,0BH,07H,04H,02H,01H,02H,04H,07H,0BH,10H,17H,1EH,27H,30H,3AHDB45H,50H,5CH,68H,74HDELAY:MOVR7,#02;外循环计数器。DELAY1:MOVR6,#0FFH;内循环计数器。DELAY2:DJNZR6,DELAY2DJNZR7,DELAY1RET(2)双缓冲方式。数字量的输入锁存和D/A转换输出是分两步完成:CPU的数据总线分时地向各路D/A转换器输入要转换的数字量并锁存在各自的输入寄存器中,然后CPU对所有的D/A转换器同时发出控制信号,使各自D/A转换器输入寄存器中的数据进入DAC寄存器,实现同步转换输出。2.MCS-51单片机AD扩展技术例
8051单片机采用中断控制方式,实现图中ADC0809对8个模拟通道的数据采集,采集数据存入内部RAM40H~47H单元中,设外部中断1采用边沿触发方式。8051单片机数据线低3位负责选择模拟输入通道IN0~IN7,8051单片机可通过向端口地址FEFFH写数据00H~07H选择IN0~IN7并启动ADC0809转换。待某1通道数据转换结束后,ADC0809的EOC信号向8051单片机提出中断申请,CPU响应中断后,通过读端口FEFFH获得转换数据并存入指定单元。ORG0000HLJMPSTARTORG0013HLJMPPINT1ORG3100HORG0100HSTART:MOVR7,#08H;通道数设置。MOVB,#00H;通道选择初始化设置。MOVR0,#40H;数据存储初始地址。SETBIT1
;置为下降沿触发。SETBEA
;单片机开中断。SETBEX1;开中断。MOVDPTR,#0FEFFH;建立地址指针。MOVA,B;选IN0通道输入。MOVX@DPTR,A;启动ADC0809。WAIT:SJMPWAIT;等中断。ORG0200HPINT1:MOVDPTR,#0FEFFHMOVXA,@DPTR;读A/D结果。MOV@R0,ADJNZR7,NEXTMOVR0,#40HMOVR7,#08HMOVB,#00HSJMPRETURNNEXT:INCR0INCBMOVA,B
;重新启动0809对INi的转换。MOVX@DPTR,ARETURN:RETI;中断返回7.1.6MCS-51I2C总线扩展技术I2C总线的操作过程包括启动、数据发送、数据接收、停止、应答、非应答等,根据实际通信需求典型信号的模拟子程序应包含启动信号子程序、停止信号子程序、发送应答位子程序、发送非应答位子程序、应答位检查子程序、发送单字节子程序、接收单字节子程序、发送多字节子程序、接收多字节子程序等。将MCS-51单片机的系统时钟设为6MHz,数据线SDA和时钟线SCL用I/O引脚模拟,数据线定义为VSDA,时钟线定义为VSCL,下面逐一介绍各子程序的实现过程。1.I2C启动信号子程序I2C总线的操作过启动信号要求在VSCL线高电平期间,VSDA线发生由高电平到低电平的跳变。启动信号子程序代码如下:STA:SETBVSDASETBVSCLNOPNOPCLRVSDANOPNOPCLRVSCLRET2.I2C停止信号子程序I2C总线的操作过停止信号要求在VSCL线高电平期间,VSDA线发生由低电平到高电平的跳变。停止信号子程序代码如下:STOP:CLRVSDASETBVSCLNOPNOPSETBVSDANOPNOPCLRVSDACLRVSCLRET3.I2C发送应答位子程序I2C发送应答位要求在VSCL线高电平期间,VSDA线保持低电平。发送应答位子程序代码如下:MACK:CLRVSDA
SETBVSCLNOPNOPCLRVSCLSETBVSDARET4.I2C发送非应答位子程序I2C发送非应答位要求在VSCL线高电平期间,VSDA线保持高电平。发送应答位子程序代码如下:MACK:SETBVSDA
SETBVSCLNOPNOPCLRVSCLCLRVSDARET5.I2C应答位检查子程序I2C总线中接收方若正确接收数据,应向发送方回发应答位,发送方需利用应答位检查子程序检查应答位。若应答位检查子程序利用PSW中的F0位作标志位,当检查到正常应答位后,F0=0,否则F0=1。应答位检查子程序代码如下:CACK:SETBVSDA;置VSDA为输入方式。SETBVSCL;使
VSDA上数据有效。CLRF0;预设F0=0。MOVC,VSDA
;输入VSDA引脚状态JNCCEND;检查VSDA状态,正常应答转
CEND,且F0=0。SETBF0;非正常应答,则F0=1。CEND:CLRVSCL;子程序结束,使VSCL=0。RET6.I2C发送单字节子程序I2C发送单字节子程序是向虚拟I2C总线的数据线VSDA上发送1个字节数据的操作。设调用本子程序前要发送的数据送入A中。程序中占用资源:R0、C。WR1:SETBVSDA;发送“1”程序段。SETBVSCLNOPNOPCLRVSCLCLRVSDASJMPWLP1WR0:CLRVSDA
;发送“0”程序段。SETBVSCLNOPNOPCLRVSCLWLP1:DJNZR0,WLP;8位是未发送完RET;8位发送完结束。发送单字节子程序代码如下:WRBYT:MOVR0,#08H。WLP:RLCAJCWR1
SJMPWR0
;发送“0”转WR07.I2C接收单字节子程序I2C接收单字节子程序用来从VSDA上读取1个字节数据,执行本程序后,从VSDA上读取1个字节存放在R2或A中。程序中占用资源:R0,R2,C。接收单字节子程序代码如下:RDBYT:MOVR0,#08H。RLP:SETBVSDA
SETBVSCL
MOVC,VSDA;读入VSDA引脚状态。MOVA,R2
;读入“0”程序段,由C拼装入R2中。RLCAMOVR2,ACLRVSCL
;使VSCL=0可继续接收数据位。DJNZR0,RLP
;8位未读完转RLP。RET8.I2C发送多字节子程序I2C总线数据传送中,主节点常常需要连续地向外围器件发送多个字节数据,I2C发送多字节子程序是用来向VSDA线上发送N个字节数据的操作。该子程序的编写必须按照I2C总线规定的读、写操作格式进行。主控器向I2C总线上某个外围器件连续发送N个数据字节时,其数据操作格式如下:SLAW为外围器件寻址字节(写)。主控制器发送N个字节的通用子程序代码如下:
WRNBYT:MOVR3,NUMBYTLCALLSTA;启动I2C总线。MOVA,#SLAW;发送SLAW字节。LCALLWRBYTLCALLCACK;检查应答位。JBF0,WRNBYT;非正常应答位则重发。MOVR1,#MTDWRDA:MOVA,@R1LCALLWRBYTLCALLCACKJBF0,WRNBYT;非正常应答位则重发。INCR1DJNZR3,WRDALCALLSTOPRETMTD,主节点发送数据缓冲区首址;SLA,外围器件寻址字节存放单元;NUMBYT,发送数据字节数存放单元。在调用本子程序之前必须将要发送的N个字节数据依次存放在以MTD为首地址的发送数据缓冲区中。调用本子程序后,N个字节数据依次传送到外围器件内部相应的地址单元中。9.I2C接收多字节子程序主控器按主接收方式从某个外围器件中读出N个字节数据操作格式如下:
在使用RDNBYT子程序时,占用资源R1、R3,但需调STA、STOP、WRBYT、RDBYT、ACK、MACK、MNACK等子程序,且需满足这些子程序的调用要求。RDNBYT子程序中还使用了:SLA,器件寻址(读)存放单元;MRD,主节点中数据缓冲区首址。主控器接收N字节子程序代码如下:RDNBYT:MOVR3,NUMBYTLCALLSTA
;启动I2C总线。MOVA,#SLAR;发送寻址字节(读)。LCALLWRBYTLCALLCACK;检查应答位。JBF0,RDNBYT;非正常应答时重新开始。RDN:MOVR1,#MRD;接收数据缓冲区首址MRD入R1。RDN1:LCALLRDBYT;读入一个字节到接收数据缓冲区中。MOV@R1,ADJNZR3,ACK
;N个子节读完否?未完转ACK。LCALLMNACK;N个字节读完发送非应答位。LCALLSTOP
;发送停止信号P。RET;子程序结束。ACK:LCALLMACK
;发送应答位。INCR1
;指向下一个接收数据缓冲单元。SJMPRDN1
;转读入下一个字节数据。例
8051单片机I/O口模拟I2C总线扩展E2PROMAT24C02,系统时钟为6MHz。(1)AT24C02的引脚及功能1)VDD。+5V电源。2)SCL。串行时钟输入端,在时钟的上升沿时把数据写入E2PROM;在时钟的下跳沿时将数据从E2PROM中读出来。3)SDA。串行数据I/O端,用于输入/出数据,漏极开路,可以组成“线与”结构。4)TEST。写保护端,该引脚提供了硬件数据保护,TEST接地时,允许芯片执行一般的读写操作,TEST接VDD时,则对芯片实施写保护。5)A0、A1、A2引脚。提供引脚地址,其状态由硬件组合(000~111),该型号芯片最多可接8片。(2)AT24C02存储器的内部结构AT24C02内部可存储容量为256B,共可接8片,总容量为256B×8=2KBAT24C02内部由SRAM性质内部缓冲器和256字节E2PROM组成,由于E2PROM写入时间较长(5~10mS),为了提高写入速度,设置了8个字节的内部缓冲器,对E2PROM写入实际上是先对缓冲器装载,装载完后自动将缓冲器中的全部数据1次写入E2PROM阵列中。对缓冲器写入称为页写,缓冲器容量称为页写字节数(8字节),占用对E2PROM阵列字节地址(00H~FFH)寻址的低3位,一般低3位地址从零开始写入输入缓冲器;而高5位为阵列的页地址(共有25=32页);对阵列的写入是以页为单位1次写入的,写入时应等候5~10mS后再启动1次写操作。由于输入缓冲器容量较少,且不具备溢出功能,所以在从非零地址写入8个字节或从零地址写入超过8个字节时,会形成地址翻卷,导致写入错误。(3)AT24C02的写入与读出操作
利用I2C总线对AT24C02进行读、写操作时,除了要传送节点地址(SLA)外,还必须传送E2PROM阵列的字节地址(起始地址低3位为零),称该地址为SUBADR。AT24C02的器件地址为1010B,对AT24C02写入操作的寻址字节SLAW为A0H,对AT24C02读操作的寻址字节SLAR为A1H,并设阵列字节地址SUBADR,以该地址为起始地址,连续写入或读出若干字节数据;对在执行写操作之前,应该在8051单片机内部RAM中设置1个发送数据缓冲区,可称为MTD,将被发送的数据连同SUBADR提前装入该缓冲区中,一并发送出去。例
编写程序将内部RAM60H起始的8个字节数据写入AT24C0250H起始的存储单元中。程序代码如下:ORG0000HLJMPSTARTORG0100HSUBADREQU50HSLAWEQU0A0HVSDAEQUP1.1VSCLEQUP1.0MTDEQU50HNUMBYTEQU40HMRDEQU41HVAT24W:LCALLWMOV9
;将写数据连同SUBADR
送入MTD。MOVNUMBYT,#09H;写入数据字节为9。LCALLWRNBYT;调发送N个字节子程序。RETWMOV9:MOVR0,#MTD;发送缓冲区首址入R0。MOV.@R0,#SUBADRINCR0MOVR1,#60H;数据区首址入R1。MOVR2,#8;移入数据字节数入R2。WMOV:MOVA,@R1;8个数据转入发送缓冲区MTD。MOV@R0,AINCR0INCR1DJNZR2,WMOVRET例
编写程序从AT24C02中的60H~67H中读出8个字节数据存入8051单片机内部RAM的60H~67H单元中。程序代码如下:ORG0000HLJMPSTARTORG0100HSUBADREQU60HSLAWEQU0A0HSLAREQU0A1HVSDAEQUP0.1VSCLEQUP0.0MRDEQU60HMTDEQU50HNUMBYTEQU40HVAT24R:MOVMTD,#SUBADR;向AT24C02写入SUBADR。
MOVNUMBYT,#1
;发送SLAW1个字节数据。LCALLWRNBYTMOVNUMBYT,#08HLCALLRDNBYTACALLRMOV8
;调数据转移子程序。RETRMOV8:MOVR0,#MRDMOVR1,#60HMOVR2,#8RMOV:MOVA,@R0MOV@R1,AINCR0INCR1DJNZR2,RMOVRET7.1.7MCS-51SPI总线扩展技术SPI总线包含时钟线SCLK、主控输出线MISO、主控输入线MOSI和从设备片选线SS。MCS-51单片机大多不具备SPI总线接口,若需扩展SPI接口设备,需要利用IO口模拟SPI时序,下面以8051单片机I/O口模拟SPI总线扩展E2PROM25AA040为例来简单介绍SPI总线的扩展技术,系统时钟为12MHz。(1)25AA040操作控制字25AA040内部存储容量为512B,由A8标记为两页,首页地址范围为0000H~00FFH(A8=0),次页地址范围为0100H~01FFH(A8=1)。(2)SPI读写操作程序实现1)写单字节子程序WRB:MOVA,WDATAMOVR2,#08HCLRCRS:CLRSCLK
;SCLK空闲状态。RLCAJCWR1CLRMOSISJMPCONWWR1:SETBMOSICONW:SETBSCLK
;SCLK上升沿。
DJNZR2,RSRET2)读单字节RDB:MOVRDATA,#00HCLRCMOVR2,#8CONR:CLRSCLK
;SCLK空闲状态。
MOVA,RDATASETBSCLK
;SCLK上升沿。
MOVC,MISORLCAMOVRDATA,ADJNZR2,CONRRET3)写指定地址单元
WRDESTA:CLRSCLKCLRSS
;选中从设备。MOVWDATA,#WRENLCALLWRB;写25AA040锁存器使能命令。SETBSSCLRSSMOVWDATA,WRITELCALLWRB
;送25AA040写入命令字。MOVWDATA,DESTALCALLWRB
;送25AA040数据写入起始地址。MOVWDATA,SDATALCALLWRB
;数据写入25AA040指定地址。SETBSSCLRSCLKRET4)读指定地址单元内容
RDESTA:CLRSCLKCLRSSMOVWDATA,READLCALLWRB
;送25AA040读出命令字。MOVWDATA,DESTALCALLWRB;送25AA040读出起始地址。LCALLRDB
;读25AA040指定地址数据。SETBSSCLRSCLKRET(3)编写程序实现将25AA040的首页所有单元赋值为55H,次页赋值为所有单元赋值为AAH,然后将25AA040的0000H~0010H的数据传送至内部RAM60H为起始地址的存储单元中。ORG0000HLJMPSTARTORG0100HSCLKEQUP1.0;时钟线。MISOEQUP1.1;主控输入线。MOSIEQUP1.2;主控输出线。SSEQUP1.3
;从控片选线。WRENEQU06H;25AA040锁存器使能命令字。WRDIEQU04H;25AA040锁存器禁止命令字。READEQU20H;25AA040读出命令字单元。WRITEEQU21H;25AA040写入命令字单元。WDATAEQU30H;发送单元。
RDATAEQU31H;读数据寄存单元。DESTAEQU50H;写数据目标地址单元。SDATAEQU51H;写数据存储单元WRLENEQU00H;RLENEQU11HRSTOREQU60H
START:MOVDESTA,#00HMOVSDATA,#55HMOVWRITE,#02H;首页写命令字设为02H。MOVR3,#WRLENREW1:LCALLWRDESTALCALLDELAY10mSINCDESTADJNZR3,REW1MOVDESTA,#00HMOVSDATA,#0AAHMOVWRITE,#0AH;次页写命令字设为0AH。MOVR3,#WRLENREW2:LCALLWRDESTALCALLDELAY10mSINCDESTADJNZR3,REW2MOV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智慧农业园区开发与运营合作协议
- 事业单位工会活动方案
- 税务顾问服务协议书
- 云计算服务平台建设合同
- 桩基工程施工专业分包规定合同
- 合同付款补充协议书
- 烟草产品购销合同
- 公司商铺租赁合同书
- 独家代理销售合同
- 办公效率提升解决方案实践
- “互联网+”大学生创新创业基础课件
- 活动板房防风加固专项方案
- 数控分度工作台设计概述
- 甘草种植技术课件
- 冀教版英语九年级Unit 5 单词短语预习复习单
- 公司安全生产监督管理办法
- 钢筋工工艺与实习(第二版)课件汇总全书电子教案完整版课件最全幻灯片(最新)课件电子教案幻灯片
- 煤矿从业人员考试题库全答案(word版)
- 最简易的帕累托图制作方法简介PPT通用课件
- 城市轨道交通应急处理课程标准
- (完整版)振幅调制与解调习题及其解答
评论
0/150
提交评论