ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:21.55KB ,
资源ID:4876121      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4876121.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字电子表.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字电子表.docx

1、数字电子表河北工业大学计算机硬件技术基础(MCS-51)2008年秋季综合性、开放性实验报告 学院 土木学院 班级 姓名:学号:成绩 一、题目:数字电子表二、问题的提出 通过外部中断INT0随时检测有没有调时按键按下,转入提取键值部分程序。三、总体设计1、调试功能:按下K1键进入调试,再通过键盘输入数字以调整时间。2、系统总体结构设计1)硬件设计: MCS-51单片机、硬件试验设备。2)软件设计:首先时用LED显示数字的问题,可以利用试验十四的程序设计;然后进入整体程序设计,做流程图整理思路,然后根据流程图一步步进行。四、详细设计:1、硬件详细设计:将硬件设备上的数码显示器区的SDA接A区的P

2、17,SCL接P16,RST接P10, INT_KEY接P3.2;2、所用存储单元为ACC,R0,R1,R2,R3,CY3、设计中的主要困难及解决方案利用键盘输入数字以调整时间这段程序,没有完善,导致最终没能做出调时这个功能。三、程序清单 SDA BIT P1.7 ;I2C总线定义 串行数据存取位 SCL BIT P1.6 ;I2C总线定义 串行时钟位 RST BIT P1.0 ;MCU复位输出信号,低电平复位ZLG7290 INT_KEY BIT P3.2 ;MCU中断信号输入,有效的按键动作使该引脚信号变为低电平 MTD EQU 40H ;I2C总线发送数据缓冲区(8字节) MRD EQU

3、 48H ;I2C总线接收数据缓冲区(8字节) DisBuf EQU 38H ;显示缓冲区(8字节,可对应8位数码管显示) ;定义ZLG7290器件地址及子地址 ZLG7290 EQU 70H ;ZLG7290的器件地址 ACK BIT 10H ;应答标志位 SLA DATA 50H ;器件的从地址 SUBA DATA 51H ;器件的子地址 NUMBYTE DATA 52H ;读/写的字节数变量 Key DATA 53H ;返回用户按键值 SystemReg EQU 00H ;系统寄存器地址,保存 ZLG7290系统状态 KeyReg EQU 01H ;键值寄存器,表示被压按键的键值 Cmd

4、Buf0 EQU 07H ;命令缓冲区0 CmdBuf1 EQU 08H ;命令缓冲区1 DpRam EQU 10H ;显示缓存寄存器 SECOND EQU 30HMINITE EQU 31HHOUR EQU 32H ORG 8000H LJMP MAIN ORG 8003H LJMP INT_T0 ;-主程序如下: MAIN: MOV SP,#70H ;堆栈区从70H开始 CLR RST ;复位ZLG7290 LCALL DELAY ;等待复位完成,ZLG7290复位周期比较长,必须等待 SETB RST ;结束复位 LCALL DELAY lcall ClsDisp ;清除显示MainLo

5、op: mov DisBuf+0,#0 ;上电运行时,8位数码管显示00120000 mov DisBuf+1,#0 ;给显示缓冲区赋值,00120000 mov DisBuf+2,#0 mov DisBuf+3,#0 mov DisBuf+4,#2 mov DisBuf+5,#1 mov DisBuf+6,#1FH mov DisBuf+7,#1FH MOV R4,#00H lcall Display ;调用显示子程序,显示内容 MOV TMOD,#01HMOV TH0,#4CHMOV TL0,#00HSETB TR0SETB EASETB IT0SETB EX0MOV SECOND,#00

6、HMOV MINITE,#00HMOV HOUR,#12MAINSC: JBC TF0,KS SJMP MAINSC KS: MOV TH0,#4CH MOV TL0,#00H INC R4 CJNE R4,#20,MAINSC MOV R4,#00HMOV A, SECONDADD A,#01H MOV SECOND,A CJNE A,#60,NS602 MOV SECOND,#00H MOV A, MINITE ADD A,#01H MOV MINITE,ANS602: MOV A,SECONDMOV B,#10DIV ABMOV DisBuf+1,AMOV A,BMOV DisBuf+0

7、,AKM: MOV A, MINITE CJNE A,#60,NM602 MOV MINITE,#00H MOV A, HOUR ADD A,#01H MOV HOUR,ANM602: MOV A, MINITEMOV B,#10DIV ABMOV DisBuf+3,AMOV A,BMOV DisBuf+2,AKH: MOV A, HOUR CJNE A,#24,NH602 MOV HOUR,#00HNH602: MOV A, HOURMOV B,#10DIV ABMOV DisBuf+5,AMOV A,BMOV DisBuf+4 ,A LCALL Display SJMP MAINSC;子程

8、序名:ClsDisp ;功能:清除显示内容 ;调用:VI2C_ASM.INC ;入口参数:无 ;出口参数:无 ;占用资源: R0,R1,R2,R3(工作寄存器组1),ACC,Cy,R5(当前工作寄存器组)ClsDisp: mov R5,#8 ;循环计数器初值,8位数码管 mov A,#01100000B ;按位下载数据且译码指令 01100 A2A1A0 ;A2A0:对应显示位置 18位数码管Cls1: MOV SLA,#ZLG7290 ;指定器件地址 MOV SUBA,#CmdBuf0 ;指定子地址 MOV MTD,A ; 命令送I2C总线发送数据缓冲区 mov MTD+1,#1FH ;命令

9、参数,1FH:无显示 MOV NUMBYTE,#02H ;待发送数据2字节 push ACC ;保护ACC push PSW ;保护PSW setb RS0 ;切换工作寄存器,I2C通信软件使用工作寄存器组1 clr RS1 LCALL IWRNBYTE ;调用写2字节数据程序(VI2C_ASM.INC,I2C模拟软件包) pop PSW ;恢复PSW pop ACC ;恢复ACC inc A ;按位下载数据且译码指令地址部分1 LCALL DELAY ;延时,等待ZLG7290执行上述命令 djnz R5,Cls1 ;没有达到8次,继续循环 ret ;子程序返回 ;子程序名:Display

10、;功能:在8段LED数码管显示 ;调用:VI2C_ASM.INC ;入口参数: Disbuf+0 Disbuf+7,8字节显示缓冲区;出口参数:无 ;占用资源: R0,R1,R2,R3(工作寄存器组1),ACC,Cy,R0,R5(当前工作寄存器组)Display: mov R5,#8 ;循环计数器初值,8位数码管 mov A,#01100000B ;按位下载数据且译码指令 01100 A2A1A0 ;A2A0:对应显示位置 18位数码管 mov R0,# Disbuf ;R0- DisbufDisp1: MOV SLA,#ZLG7290 ;指定器件地址 MOV SUBA,#CmdBuf0 ;指

11、定子地址 MOV MTD,A ;命令送I2C总线发送数据缓冲区 mov MTD+1,R0 ;命令参数,待显示数据送I2C总线发送数据缓冲区 MOV NUMBYTE,#02H ;待发送数据2字节 push ACC ;保护ACC push PSW ;保护PSW setb RS0 ;切换工作寄存器,I2C通信软件使用工作寄存器组1 clr RS1 LCALL IWRNBYTE ;调用写2字节数据程序(VI2C_ASM.INC,I2C模拟软件包) pop PSW ;恢复PSW pop ACC ;恢复ACC inc A ;按位下载数据且译码指令地址部分1 inc R0 ;R0+1,指向下一个待显示数据

12、LCALL DELAY ;延时,等待ZLG7290执行上述命令 djnz R5,Disp1 ;没有达到8次,继续循环 ret ;子程序返回;子程序名:GetKey ;功能:获取用户按键值(Key) ;调用:VI2C_ASM.INC ;入口参数:无 ;出口参数:Key ;占用资源: R0,R1,R2,R3(工作寄存器组1),ACC,CyGetKey: MOV SLA,#ZLG7290 ;指定器件地址 MOV SUBA,#01H ;指定子地址 MOV NUMBYTE,#01H ;读1字节数据 push ACC ;保护ACC push PSW ;保护PSW setb RS0 ;切换工作寄存器,I2C

13、通信软件使用工作寄存器组1 clr RS1 LCALL IRDNBYTE ;调用读1字节数据程序 pop PSW ;恢复PSW pop ACC ;恢复ACC mov Key,MRD ;读取的数据送Key ret ;子程序返回;子程序名: DELAY;功能:延时约36.5 ms(11.0592MHz时钟);调用:YS500US;入口参数:无;出口参数:无;占用资源: R7,R6DELAY: MOV R7,#80H MIN: LCALL YS500US DJNZ R7,MIN RET ;子程序名: YS500US;功能:延时约279us(11.0592MHz时钟);调用:无;入口参数:无;出口参数

14、:无;占用资源: R6YS500US:MOV R6,#80H DJNZ R6,$ ;延时1282T256T (T=1/1159200) RET ;子程序名:中断程序INT_T0: lcall GetKey ;获取键值 mov A,Key PUSH ACC CJNE A,#01,COUT1 ADD A,#01H DA A MOV MINITE,A CJNE A,#60,NS60 MOV MINITE,#00HNS60: MOV A,MINITEMOV B,#10DIV ABMOV DisBuf+3,AMOV A,BMOV DisBuf+2,ALCALL DisplaySJMP FHCXCOUT1

15、: JNC FHCX MOV A, HOUR ADD A,#01H DA A MOV HOUR,A CJNE A,#24,NH60 MOV HOUR,#00HNH60: MOV A, HOURMOV B,#10DIV ABMOV DisBuf+5,AMOV A,BMOV DisBuf+4,ALCALL DisplayFHCX: RETI $INCLUDE(VI2C_ASM.INC) ;将VIIC软件包加入到本段代码后 END;-; MCS-51单片机模拟I2C软件包(V1.1); 文件名:VI2C_ASM.INC; 功能说明:本模拟I2C软件包包含了I2C操作的底层子程序,使用前要定义;好SC

16、L和SDA。在标准8051模式(12 Clock)下,对主频要求是不高于12MHz(即1个;机器周期1us);若Fosc12MHz则要增加相应的NOP指令数。(总线时序符合I2C标;准模式,100Kbit/S); 版本说明:本版新增了两个子程序,IWRNBYTEEXT,IRDNBYTEEXT两个子程序,;这两个子程序用于主从通讯上及一此特殊器件的读写操作较为方便.; 更新时间:2002.06.04;-;启动I2C总线子程序 START: SETB SDA NOP SETB SCL ;起始条件建立时间大于4.7us NOP NOP NOP NOP NOP CLR SDA NOP ;起始条件锁定时

17、大于4us NOP NOP NOP NOP CLR SCL ;钳住总线,准备发数据 NOP RET;结束总线子程序STOP: CLR SDA NOP SETB SCL ;发送结束条件的时钟信号 NOP ;结束总线时间大于4us NOP NOP NOP NOP SETB SDA ;结束总线 NOP ;保证一个终止信号和起始信号的空闲时间大于4.7us NOP NOP NOP RET;发送应答信号子程序MACK: CLR SDA ;将SDA置0 NOP NOP SETB SCL NOP ;保持数据时间,即SCL为高时间大于4.7us NOP NOP NOP NOP CLR SCL NOP NOP

18、RET;发送非应答信号MNACK: SETB SDA ;将SDA置1 NOP NOP SETB SCL NOP NOP ;保持数据时间,即SCL为高时间大于4.7us NOP NOP NOP CLR SCL NOP NOP RET;检查应答位子程序;返回值,ACK=1时表示有应答CACK: SETB SDA NOP NOP SETB SCL CLR ACK NOP NOP MOV C,SDA JC CEND SETB ACK ;判断应答位CEND: NOP CLR SCL NOP RET;发送字节子程序;字节数据放入ACC ;每发送一字节要调用一次CACK子程序,取应答位 WRBYTE: MO

19、V R0,#08HWLP: RLC A ;取数据位 JC WR1 SJMP WR0 ;判断数据位WLP1: DJNZ R0,WLP NOP RETWR1: SETB SDA ;发送1 NOP SETB SCL NOP NOP NOP NOP NOP CLR SCL SJMP WLP1WR0: CLR SDA ;发送0 NOP SETB SCL NOP NOP NOP NOP NOP CLR SCL SJMP WLP1;读取字节子程序 ;读出的值在ACC;每取一字节要发送一个应答/非应答信号 RDBYTE: MOV R0,#08HRLP: SETB SDA NOP NOP NOP NOP SET

20、B SCL ;时钟线为高,接收数据位 NOP NOP NOP ;+1 NOP ;+1 NOP ;+1 NOP ;+1 NOP ;+1 MOV C,SDA ;读取数据位 MOV A,R2 CLR SCL ;将SCL拉低,时间大于4.7us RLC A ;进行数据位的处理 MOV R2,A NOP NOP NOP NOP ;+1 NOP ;+1 NOP ;+1 NOP NOP NOP ;+1 NOP NOP ;+1 NOP ;+1 DJNZ R0,RLP ;未够8位,再来一次 RET;=;=; 以下是用户接口子程序;无子地址器件写字节数据;入口参数: 数据为ACC、器件从地址SLA ;占用: A、

21、R0、CYIWRBYTE: PUSH ACCIWBLOOP: LCALL START ;起动总线 MOV A,SLA LCALL WRBYTE ;发送器件从地址 LCALL CACK JNB ACK,RETWRB ;无应答则跳转 POP ACC ;写数据 LCALL WRBYTE LCALL CACK LCALL STOP RETRETWRB: POP ACC LCALL STOP RET;无子地址器件读字节数据;入口参数: 器件从地址SLA;出口参数: 数据为ACC ;占用: A 、R0、R2 、CYIRDBYTE: LCALL START MOV A,SLA ;发送器件从地址 INC A

22、LCALL WRBYTE LCALL CACK JNB ACK,RETRDB LCALL RDBYTE ;进行读字节操作 LCALL MNACK ;发送非应信号RETRDB: LCALL STOP ;结束总线 RET;向器件指定子地址写N字节数据;入口参数: 器件从地址SLA、器件子地址SUBA 、发送数据缓冲区MTD、发送字节数NUMBYTE; 占用: A 、R0 、R1 、R3 、CY IWRNBYTE: MOV A,NUMBYTE MOV R3,A LCALL START ;起动总线 MOV A,SLA LCALL WRBYTE ;发送器件从地址 LCALL CACK JNB ACK,R

23、ETWRN ;无应答则退出 MOV A,SUBA ;指定子地址 LCALL WRBYTE LCALL CACK MOV R1,#MTDWRDA: MOV A,R1 LCALL WRBYTE ;开始写入数据 LCALL CACK JNB ACK,IWRNBYTE INC R1 DJNZ R3,WRDA ;判断写完没有RETWRN: LCALL STOP RET;向器件指定子地址读取N字节数据;入口参数: 器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE;出口参数: 接收数据缓冲区MTD;占用:A、 R0、 R1、 R2、 R3、 CY IRDNBYTE: MOV R3,NUMBYT

24、E LCALL START MOV A,SLA LCALL WRBYTE ;发送器件从地址 LCALL CACK JNB ACK,RETRDN MOV A,SUBA ;指定子地址 LCALL WRBYTE LCALL CACK LCALL START ;重新起动总线 MOV A,SLA INC A ;准备进行读操作 LCALL WRBYTE LCALL CACK JNB ACK,IRDNBYTE MOV R1,#MRDRDN1: LCALL RDBYTE ;读操作开始 MOV R1,A ;NOP ;+1 ;NOP ;+1 DJNZ R3,SACK LCALL MNACK ;最后一字节发非应答位

25、 RETRDN: LCALL STOP ;并结束总线 RETSACK: LCALL MACK INC R1 SJMP RDN1;无子地址器件写N字节数据;入口参数: 器件从地址SLA、发送数据缓冲区MTD、发送字节数NUMBYTE; 占用: A 、R0 、R1 、R3 、CY ;不发送子地址SUBA,直接发送多个数据.IWRNBYTEEXT: MOV A,NUMBYTE MOV R3,A LCALL START ;起动总线 MOV A,SLA LCALL WRBYTE ;发送器件从地址 LCALL CACK JNB ACK,RETWRNE ;无应答则退出 MOV R1,#MTDWRDAE: M

26、OV A,R1 LCALL WRBYTE ;开始写入数据 LCALL CACK JNB ACK,RETWRNE INC R1 DJNZ R3,WRDAE ;判断写完没有RETWRNE: LCALL STOP RET;无子地址器件读取N字节数据;入口参数: 器件从地址SLA、器件子地址SUBA、接收字节数NUMBYTE;出口参数: 接收数据缓冲区MTD;占用:A、 R0、 R1、 R2、 R3、 CY ;说明:此函数不发送子址,也不重新启动总线,而是直接读取多个数据.IRDNBYTEEXT: MOV R3,NUMBYTE LCALL START MOV A,SLA INC A LCALL WRBYTE ;发送器件从地址 LCALL CACK JNB ACK,RETRDNE MOV R1,#MRDRDNE1: LCALL RDBYTE ;读操作开始 MOV R1,A DJNZ R3,SACKE LCALL MNACK ;最后一字节发非应答位 RETRDNE: LCALL STOP ;并结束总线 RETSACKE: LCALL MACK INC R1 SJMP RDNE1;*

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

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