您好,欢迎访问三七文档
电子科技大学中山学院学生实验报告院别:电子信息学院课程名称:微处理器实验班级:12通信工程A班姓名:束阳学号:2012010101046实验名称:串口扩展实验实验时间;2014年11月11日成绩:教师签名:批改时间:一、实验原理与目的1、了解I2C串口通信的构成原理和软件编程方法。2、掌握80C51的I2C串口通信仿真方法。3、了解AT24C64的构成原理和软件编程方法。4、掌握80C51对AT24C64读写应用。二、实验仪器1、PC机一台(已安装KeilµVision、STC_ISP等软件);2、ZSC-1单片机实验箱一台。三、原理I2C总线是Philips公司推出的二线制高性能串行总线,SDA为串行数据线,SCL为时钟号线;可以通过器件地址和器件上的子地址对从器件上的存储单元进行读写,并可以是多主模式的。AT24C64是一个基于I2C通信模式的EEPROM器件,共有64Kbit,可以分为256页,每一页有32字节。A089S51SCLP3.3SDAWPA1A2P3.6+5V5.1KΩ×2VccVcc图3.7.1单片机与AT24C64连接原理图图3.7.2AT24C64页写时序图图3.7.3AT24C64随机读时序图图3.7.4AT24C64顺序读时序图四、实验参考程序1、向AT24C64从50H开始的10单元存入10个字符‘0’-‘9’;。①在Keil中编写源程序。参考程序如下(请将下划线部分补充完整):;向E2PROM的50H-59H写入10个字节内容SDAEQUP3.3SCLEQUP3.6WNUMDATA40HWADDRDATA41HWBUFDATA42HRNUMDATA50HRADDRDATA51HRBUFDATA52HADDRSHEQU00HADDRSLEQU50HORG0000HAJMPMAINORG0040HMAIN:MOVSP,#5FHMOVWNUM,#10LCALLLDATA;设置数据缓冲区MOVWADDR,#0A0H;写IICMOVR1,#WBUFCALLWRNBMOVP0,#55H;提示写完成SJMP$LDATA:MOVDPTR,#TAB;把TAB区数据放入写缓冲区MOVR1,#WBUFMOVR7,#10;数据字节MP1:MOVA,#0MOVCA,@A+DPTRMOV@R1,AINCDPTRINCR1DJNZR7,MP1RETTAB:DB0123456789ABCDEF$INCLUDE(I2C.ASM)END②在Keil中创建工程,加入源程序文件,设置选项,进行汇编/编译、连接、转换处理,生成HEX格式的单片机程序文件。③用串行电缆连接实验箱和PC机各自的串行通信口,并运行PC机上的STC_ISP程序,进行单片机程序下载。④观察程序运行结果,若LED显示效果与要求的效果不同,说明程序正常运行,否则须修改源程序,重新进行汇编/编译、连接、转换处理,生成最新HEX文件,再按③中介绍的步骤下载和运行最新程序。⑤I2C.ASM文件如下;起始信号STA:CLRSCLMOVR6,#5DJNZR6,$SETBSDAMOVR6,#5DJNZR6,$SETBSCL;起始条件建立时间大于4.7usMOVR6,#15DJNZR6,$CLRSDAMOVR6,#15DJNZR6,$CLRSCL;钳住总线,准备发数据MOVR6,#10DJNZR6,$RET;终止信号STP:CLRSDAMOVR6,#5DJNZR6,$SETBSCL;发送结束条件的时钟信号MOVR6,#15DJNZR6,$SETBSDA;结束总线MOVR6,#15DJNZR6,$CLRSCLMOVR6,#10DJNZR6,$SETBSCLRET;发送一个时钟脉冲信号SENDCLK:MOVR6,#40DJNZR6,$SETBSCLMOVR6,#25DJNZR6,$CLRSCLMOVR6,#10DJNZR6,$RET;发送应答位0ACK:CLRSDA;将SDA置0LCALLSENDCLKRET;发送非应答位1NAS:SETBSDA;将SDA置1LCALLSENDCLKRET;应答位检查,正常应答时F0为1,否则为0ACKC:LCALLRBITRET;读一位数据到F0RBIT:MOVR6,#40DJNZR6,$SETBSDAMOVR6,#10DJNZR6,$SETBSCLMOVR6,#20DJNZR6,$MOVC,SDAMOVF0,CCLRSCLMOVR6,#10DJNZR6,$RET;发送一个字节WRB:MOVR0,#8WLP1:RLCAMOVSDA,CLCALLSENDCLKDJNZR0,WLP1LCALLRBITRET;读一个字节RDB:MOVR0,#8RLP1:LCALLRBITMOVC,F0RLCADJNZR0,RLP1RET;发送n个字节;R1--发送数据首地址;WNUM--发送字节数;WADDR--写寻址WRNB:LCALLSTAMOVA,WADDR;写器件寻址写CALLWRBJBF0,WFENDMOVA,#ADDRSH;写地址高字节CALLWRBJBF0,WFENDMOVA,#ADDRSL;写地址低字节CALLWRBJBF0,WFENDMOVR7,WNUM;缓冲区字节数WRLP:MOVA,@R1;写入字节LCALLWRBJBF0,WFENDINCR1DJNZR7,WRLPWEND:LCALLSTPMOVR7,#00;延时X1:MOVR6,#00DJNZR6,$DJNZR7,X1RETWFEND:SETBSCLRET;读n个字节;R1--存储数据首地址;RNUM--读字节数;RADDR--读寻址RDNB:LCALLSTAMOVA,WADDR;写器件寻址LCALLWRBJBF0,RFENDMOVA,#ADDRSH;写地址高字节CALLWRBJBF0,RFENDMOVA,#ADDRSL;写地址低字节CALLWRBJBF0,RFENDLCALLSTAMOVA,RADDR;写器件寻址读LCALLWRBJBF0,RFENDMOVR7,RNUM;读字节数RNLP:LCALLRDBMOV@R1,ADJNZR7,FASKLCALLNASREND:LCALLSTPRETRFEND:SETBSCLRETFASK:CALLACKINCR1SJMPRNLP2、读程序1所写入的10个字符并把它们在上位机上显示。参考程序如下(请将下划线部分补充完整):;读取50H-59H的10个字节内容,并显示在上位机;参考程序1定义相关内容ORG0000HAJMPMAINORG0040HMAIN:MOVSP,#5FHMOVWADDR,#0A0H;读数据MOVRADDR,#0A1HMOVRNUM,#10MOVR1,#RBUFCALLRDNBCALLUARTINIT;初始化UARTCALLDIS;回送上位机SJMP$UARTINIT:MOVTMOD,;设置T1为方式2MOVTH1,#0FDH;设置波特率为9600MOVTL1,MOVSCON,#40H;设置串口位方式1MOVPCON,#00HSETBTR1;定时器1开始计数RETDIS:MOVR7,RNUMMOVR1,#RBUFDISLP:MOVA,@R1MOVSBUF,A;开始发送JNBTI,$CLRTIINCR1DJNZR7,DISLPRET$INCLUDE(I2C.ASM)END注意,为检验EEPOM写入效果,进行程序2前,可以关掉实验箱电源。利用STC-ISP软件提供的串口助手进行通信,并注意相关参数的设置要与单片机程序程序设置一致。3、接收从上位机传来的以$结束的不超过10个字符,写入AT24C64从50H开始的单元,然后读出回显到上位机。;上位机输入,写,读,回显;参考程序1,2,编写相关内容ORG0000HAJMPMAINORG0040HMAIN:MOVSP,#5FHLCALLUARTINIT;串口初始化LCALLRECEIVE;接收上位机数据MOVWADDR,#0A0H;写数据MOVR1,#WBUFCALLWRNBMOVRADDR,#0A1H;读数据MOVRNUM,WNUMMOVR1,#RBUFCALLRDNBCALLDIS;显示到上位机SJMP$RECEIVE:MOVR7,#0MOVR1,#WBUFRRR:JNBRI,$CLRRIMOVA,SBUFCJNEA,#'$',REVLPSJMPRRENDREVLP:MOV@R1,AINCR1INCR7CJNER7,#8,RRRRREND:MOVWNUM,R7RET$INCLUDE(I2C.ASM)END五、注意事项和要求1、注意程序的完整性、正确性和逻辑性,对出现的语法和逻辑错误要认真分析原因。2、必要时可利用Keil进行软件模拟调试。3、STC12C5A60S2采用了优化的内部时钟电路,程序运行速度可达传统80C51单片机的8-12倍,因此软件延时子程序中循环变量的取值也增加了相应倍数。六、实验心得1、了解串口通信的构成原理和软件编程方法;2、掌握80C51的I2C串口通信仿真方法;3、了解程序语言指令的含义及用法,加深理解。
本文标题:单片机实验7sy
链接地址:https://www.777doc.com/doc-2594335 .html