计算机硬件技术基础综合实验报告.docx
- 文档编号:24903275
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:14
- 大小:20.75KB
计算机硬件技术基础综合实验报告.docx
《计算机硬件技术基础综合实验报告.docx》由会员分享,可在线阅读,更多相关《计算机硬件技术基础综合实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
计算机硬件技术基础综合实验报告
计算机硬件技术基础(2011)
综合性实验考试报告
一、题目:
作息时间控制系统(13)
二、问题的提出
一般机关、部队、企业等部门尤其是学校,对作息时间有严格的控制,可以采用MCS-51单片机设计一个控制作息时间的系统。
作业时间控制系统,由8051内部的定时器,设计一个电子时钟,当电子时钟达到作息时间的点钟时,用实验开发系统中的输入输出设备模拟早晨喇叭在唱歌,提醒晨练,模拟上课下课的打铃,模拟晚上熄灯等。
三、总体设计
1、分析问题的功能
设计一个电子时钟实现定时报时
2、系统总体结构设计
⑴硬件设计:
用导线连接D5区和A2区的P16→SCL,P17→SDA,P10→RST_L,INT_KEY→INT0,将P1.2与蜂鸣器BUZZ,P1.4与SW1,P1.5与SW2连接
⑵软件设计:
编程由8051内部的定时器,设计一个电子时钟,实现定点报时
四、详细设计:
1、硬件详细设计:
⑴画出电路图;
P1.0-------------RST_L
P1.2-------------BUZZ
P1.4-------------SW1
P1.5-------------SW2
P1.6--------------SCL
P1.7--------------SDA
INT0-------------INT_KEY
A2区J61--------D1区J52
⑵进行硬件资源分配(包括I/O口地址、所用各存储单元的用途)。
所需设备:
6位LED显示器,蜂鸣器,开关sw1,sw2,定时器0
连线方式:
占用P1口的P1.0,P1.2,P1.4,P1.5,P1.0,P1.6,P1.7,以及8位LED显示器中的6位,蜂鸣器开关sw1,sw2。
中断INT0以及INT_KEY和排线连接A2区J61和D1区J52
将P1.2与蜂鸣器,P1.4与sw1,P1.5与sw2连接,P1.6与scl,P1.7与sda,P1.6与rst_l。
INT0与INT_KEY,A2区J61与D1区J52
资源分配:
将P1口合理的分配给LED显示器,蜂鸣器,以及开关来完成软件中对硬件的操作。
将地址38H,39H,4AH,4BH,4CH,4DH提出使用用于存储时钟的分位,秒位以及时钟的时位,并且使用了第二组的工作寄存器组的R2作为计数器使用,使用了计时器0做定时使用。
2、软件详细设计:
实验的设计可以分为4个部分:
在LED显示器显示时间,定时报时
系统,以及报时声响中断系统,紧报警系统。
1)时间的在LED显示器显示:
通过编写程序代码,实现时间在LED显示器上的显示。
2)定时报时:
在时间的在LED显示器显示模块中加入编写好的定时报时系统,报时装置为蜂鸣器。
3)报时声响中断系统:
通过软件查询方式,来实现此功能,放置在时间的在LED显示器显示模块。
4)紧报警系统:
通过软件查询方式,来实现此功能,放置在时间的在LED显示器显示模块。
3、设计中的主要困难及解决方案
在这部分论述设计中遇到的主要困难及解决方案。
⑴困难1:
设计时,电子表时、分、秒针的显示。
解决:
把时、分、秒分别放在两个存储单元内。
⑵困难2:
在调试程序时,与外部连接出现问题,显示不出来
解决:
通过询问同学以及查询书籍,修改程序以及外部硬件的连接
三、程序清单
SDABITP1.7;I2C总线定义串行数据存取位
SCLBITP1.6;I2C总线定义串行时钟位
RSTBITP1.0;MCU复位输出信号,低电平复位ZLG7290
INT_KEYBITP3.2;MCU中断信号输入,有效的按键动作使该引脚信号变为低电平
MTDEQU40H;I2C总线发送数据缓冲区(8字节)
MRDEQU48H;I2C总线接收数据缓冲区(8字节)
DisBufEQU38H;显示缓冲区(8字节,可对应8位数码管显示)
;定义ZLG7290器件地址及子地址
ZLG7290EQU70H;ZLG7290的器件地址
ACKBIT10H;应答标志位
SLADATA50H;器件的从地址
SUBADATA51H;器件的子地址
NUMBYTEDATA52H;读/写的字节数变量
KeyDATA53H;返回用户按键值
SystemRegEQU00H;系统寄存器地址,保存ZLG7290系统状态
KeyRegEQU01H;键值寄存器,表示被压按键的键值
CmdBuf0EQU07H;命令缓冲区0
CmdBuf1EQU08H;命令缓冲区1
DpRamEQU10H;显示缓存寄存器
mz1equ38H;定义秒针位
mz2equ39H;定义秒针位2
fz1equ4AH;定义分针位
fz2equ4BH;定义分针位2
sz1equ4CH;定义时针位
sz2equ4DH;定义时针位2
ORG8000H
LJMPMAIN
org800bh
ajmptos;定时计数器0的中断程序的入口
ORG8100H
;-------主程序如下:
MAIN:
MOVSP,#70H;堆栈区从70H开始
CLRRST;复位ZLG7290
LCALLDELAY;等待复位完成,ZLG7290复位周期比较长,必须等待
SETBRST;结束复位
LCALLDELAY
lcallClsDisp;清除显示
MainLoop:
movDisBuf+0,#0;上电运行时,8位数码管显示
movDisBuf+1,#1;给显示缓冲区赋值,
movDisBuf+2,#FFH
movDisBuf+3,#3
movDisBuf+4,#4
movDisBuf+5,#FFH
movDisBuf+6,#6
movDisBuf+7,#7
lcallDisplay;调用显示子程序,显示内容
movmz1,#00h;;为时钟的各位处清零
movmz2,#05h
movfz1,#09h
movfz2,#05h
movsz1,#07h
movsz2,#00h
movtmod,#01h
movth0,#0f1h;开启4ms中断
movtl0,#99h;
setbrs1;切换工作组2
clrrs0
movr2,#00h;计数器设置
clrrs1;切换工作组0
clrrs0
movIE,#B;开启中断系统
setbtr0;开始计时
sjmp$;程序原地执行,等待中断的产生
tos:
;响应中断
movth0,#0f1h
movtl0,#99h
setbrs1;切换工作组2
clrrs0
incr2
cjner2,#250,jc
lcalldzz
movr2,#00h
jc:
jbp1.5,bj
mova,sz1
cjnea,#08h,next1
mova,fz1
cjnea,#00h,next1
mova,fz2
cjnea,#00h,next1
mova,mz2
cjnea,#00h,next1
jbp1.4,BJ;此段程序完成中断程序,8点时报警
next1:
reti
bj:
cplp1.2;紧急情况下报警
sjmpnext1
;电子钟程序
dzz:
clrrs0;开启电子钟的显示子程序
clrrs0
incmz1
mova,mz1
cjnea,#10,A0;判断秒针个位是否为10
movmz1,#00h
movDisBuf+0,mz1
incmz2
mova,mz2
cjnea,#6,A1;判断秒针十位是否为6
movmz2,#00h
movDisBuf+1,mz2
incfz1
mova,fz1
cjnea,#10,A2;判断分针个位是否为10
movfz1,#00h
movDisBuf+2,fz1
incfz2
mova,fz2
cjnea,#6,A3;判断分针十位是否为6
movfz2,#00h
movDisBuf+3,Fz2
incsz1
mova,sz1
cjnea,#10,A4
movsz1,#00h
movDisBuf+4,sz1
incsz2
mova,sz2
cjnea,#03,A5
A0:
movDisBuf+0,mz1
A1:
movDisBuf+1,mz2
A2:
movDisBuf+3,fz1
A3:
movDisBuf+4,fz2
A4:
movDisBuf+6,sz1
A5:
movDisBuf+7,sz2
mova,sz1
cjnea,#04h,xs
mova,sz2
cjnea,#02h,xs
movmz1,#00h
movmz2,#00h
movfz1,#00h
movfz2,#00h
movsz1,#00h
movsz2,#00h
movDisBuf+0,mz1;进行显示
movDisBuf+1,mz2
movDisBuf+3,fz1
movDisBuf+4,fz2
movDisBuf+6,sz1
movDisBuf+7,sz2
xs:
lcallDisplay
ret
;WaitKey:
JBINT_KEY,WaitKey;查询按键
;lcallGetKey;获取键值
;movA,Key
;jzWaitKey;Key=0无键按下,继续查询
;movDisBuf+7,DisBuf+6;显示内容左移
;movDisBuf+6,DisBuf+5
;movDisBuf+5,DisBuf+4
;movDisBuf+4,DisBuf+3
;movDisBuf+3,DisBuf+2
;movDisBuf+2,DisBuf+1
;movDisBuf+1,DisBuf+0
;movDisBuf+0,Key
;lcallDisplay
;ljmpWaitKey
;子程序名:
ClsDisp
;功能:
清除显示内容
;调用:
VI2C_ASM.INC
;入口参数:
无
;出口参数:
无
;占用资源:
R0,R1,R2,R3(工作寄存器组1),ACC,Cy,R5(当前工作寄存器组)
ClsDisp:
movR5,#8;循环计数器初值,8位数码管
movA,#B;按位下载数据且译码指令01100A2A1A0
;A2~A0:
对应显示位置1~8位数码管
Cls1:
MOVSLA,#ZLG7290;指定器件地址
MOVSUBA,#CmdBuf0;指定子地址
MOVMTD,A;命令送I2C总线发送数据缓冲区
movMTD+1,#1FH;命令参数,1FH:
无显示
MOVNUMBYTE,#02H;待发送数据2字节
pushACC;保护ACC
pushPSW;保护PSW
setbRS0;切换工作寄存器,I2C通信软件使用工作寄存器组1
clrRS1
LCALLIWRNBYTE;调用写2字节数据程序(VI2C_ASM.INC,I2C模拟软件包)
popPSW;恢复PSW
popACC;恢复ACC
incA;按位下载数据且译码指令地址部分+1
LCALLDELAY;延时,等待ZLG7290执行上述命令
djnzR5,Cls1;没有达到8次,继续循环
ret;子程序返回
;子程序名:
Display
;功能:
在8段LED数码管显示
;调用:
VI2C_ASM.INC
;入口参数:
Disbuf+0~Disbuf+7,8字节显示缓冲区
;出口参数:
无
;占用资源:
R0,R1,R2,R3(工作寄存器组1),ACC,Cy,R0,R5(当前工作寄存器组)
Display:
movR5,#8;循环计数器初值,8位数码管
movA,#B;按位下载数据且译码指令01100A2A1A0
;A2~A0:
对应显示位置1~8位数码管
movR0,#Disbuf;R0->Disbuf
Disp1:
MOVSLA,#ZLG7290;指定器件地址
MOVSUBA,#CmdBuf0;指定子地址
MOVMTD,A;命令送I2C总线发送数据缓冲区
movMTD+1,@R0;命令参数,待显示数据送I2C总线发送数据缓冲区
MOVNUMBYTE,#02H;待发送数据2字节
pushACC;保护ACC
pushPSW;保护PSW
setbRS0;切换工作寄存器,I2C通信软件使用工作寄存器组1
clrRS1
LCALLIWRNBYTE;调用写2字节数据程序(VI2C_ASM.INC,I2C模拟软件包)
popPSW;恢复PSW
popACC;恢复ACC
incA;按位下载数据且译码指令地址部分+1
incR0;R0+1,指向下一个待显示数据
LCALLDELAY;延时,等待ZLG7290执行上述命令
djnzR5,Disp1;没有达到8次,继续循环
ret;子程序返回
;子程序名:
GetKey
;功能:
获取用户按键值(Key)
;调用:
VI2C_ASM.INC
;入口参数:
无
;出口参数:
Key
;占用资源:
R0,R1,R2,R3(工作寄存器组1),ACC,Cy
GetKey:
MOVSLA,#ZLG7290;指定器件地址
MOVSUBA,#01H;指定子地址
MOVNUMBYTE,#01H;读1字节数据
pushACC;保护ACC
pushPSW;保护PSW
setbRS0;切换工作寄存器,I2C通信软件使用工作寄存器组
clrRS1
LCALLIRDNBYTE;调用读1字节数据程序
popPSW;恢复PSW
popACC;恢复ACC
movKey,MRD;读取的数据送Key
ret;子程序返回
;子程序名:
DELAY
;功能:
延时约36.5ms(11.0592MHz时钟)
;调用:
YS500US
;入口参数:
无
;出口参数:
无
;占用资源:
R7,R6
DELAY:
MOVR7,#80H
MIN:
LCALLYS500US
DJNZR7,MIN
RET
;子程序名:
YS500US
;功能:
延时约279us(11.0592MHz时钟)
;调用:
无
;入口参数:
无
;出口参数:
无
;占用资源:
R6
YS500US:
MOVR6,#80H
DJNZR6,$;延时128×2T=256T(T=1/)
RET
$INCLUDE(VI2C_ASM.INC);将VIIC软件包加入到本段代码后
END
四、调试程序的方法
⑴硬件调试方法
连线之后,观察程序运行是否正常,如不正常,一定要先断电再连线
⑵软件调试方法
1)按上述接线方法接线
2)开启硬件,开启计算机,打开KEIL新建立工程选择单片机NXP--P89C52X2
3)进行项目设置
设置时钟频率:
11.0592MHZ
设置片外代码存储Eprom#1开始:
0x8000,大小0x4000
设置片外Xdata存储Ram#1开始:
0C000,大小:
0x4000
选择Keil Monitor-51 Driver
4)将上述程序导入,进行测试。
5)测试结束,关机,关外设。
五、你所设计的程序最终完成的功能
⑴说明你编制的程序能完成的功能;
定时报警以及紧急情况下报警
⑵准备的测试数据,并记录运行结果。
7点59分50秒开始计时,到8点时开始报警,报警10秒钟,另外紧急情况按下SW2即可实现报警
六、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
程序执行过程中没能发现程序中有错误,导致答辩之前没能及时改正,这是不足的地方,但是程序执行的还算正常,可以完成老师要求的内容,并且有一部分创新,还算满意。
2、对课题提出更完善的方案。
不能完成多点报时,只有一个时间的报时,以及键盘输入定时计时,不能精简。
程序创新较少。
五、收获及心得体会
1、通过本次课程设计,自己在哪些方面的能力有所提高。
在设计程序时,遇到的问题,通过上网找,自学得到许多知识,独立思考能力提高很多。
经过本次的实验设计,学会了独立思考,语言表达能力有所提高,与同学的互助完成了任务,体会了合作的重要性,此外动手能力也较以前有很大提高。
2、收获和心得体会。
经过本次微机课题的设计与研究,掌握了许多实际的操作,开始编的程序不能运行,但是后来经过努力的修改,终于使得程序正确运行。
体会到合作的重要。
日期:
2011年12月28日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机硬件 技术 基础 综合 实验 报告