计算机硬件技术基础综合实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机硬件技术基础(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、硬件详细设计:
⑴画出电路图;
⑵进行硬件资源分配(包括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:在调试程序时,与外部连接出现问题,显示不出来
解决:通过询问同学以及查询书籍,修改程序以及外部硬件的连接
三、程序清单
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 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 ;键值寄存器,表示被压按键的键值
CmdBuf0 EQU 07H ;命令缓冲区0
CmdBuf1 EQU 08H ;命令缓冲区1
DpRam EQU 10H ;显示缓存寄存器
mz1 equ 38H;定义秒针位
mz2 equ 39H;定义秒针位2
fz1 equ 4AH;定义分针位
fz2 equ 4BH;定义分针位2
sz1 equ 4CH;定义时针位
sz2 equ 4DH;定义时针位2
ORG 8000H
LJMP MAIN
org 800bh
ajmp tos;定时计数器0的中断程序的入口
ORG 8100H
;-------主程序如下:
MAIN: MOV SP,#70H ;堆栈区从70H开始
CLR RST ;复位ZLG7290
LCALL DELAY ;等待复位完成,ZLG7290复位周期比较长,必须等

SETB RST ;结束复位
LCALL DELAY
lcall ClsDisp ;清除显示
MainLoop: mov DisBuf+0,#0 ;上电运行时,8位数码管显示mov DisBuf+1,#1 ;给显示缓冲区赋值,
mov DisBuf+2,#FFH
mov DisBuf+3,#3
mov DisBuf+4,#4
mov DisBuf+5,#FFH
mov DisBuf+6,#6
mov DisBuf+7,#7
lcall Display ;调用显示子程序,显示内容 mov mz1,#00h; ; 为时钟的各位处清零
mov mz2,#05h
mov fz1,#09h
mov fz2,#05h
mov sz1,#07h
mov sz2,#00h
mov tmod,#01h
mov th0,#0f1h;开启4ms中断
mov tl0,#99h;
setb rs1;切换工作组2
clr rs0
mov r2,#00h;计数器设置
clr rs1;切换工作组0
clr rs0
mov IE,#B;开启中断系统
setb tr0;开始计时
sjmp $;程序原地执行,等待中断的产生tos:;响应中断
mov th0,#0f1h
mov tl0,#99h
setb rs1;切换工作组2
clr rs0
inc r2
cjne r2,#250,jc
lcall dzz
mov r2,#00h
jc:jb p1.5,bj
mov a,sz1
cjne a,#08h,next1
mov a,fz1
cjne a,#00h,next1
mov a,fz2
cjne a,#00h,next1
mov a,mz2
cjne a,#00h,next1
jb p1.4, BJ ;此段程序完成中断程序,8点时报警
next1: reti
bj: cpl p1.2 ;紧急情况下报警
sjmp next1
;电子钟程序
dzz: clr rs0;开启电子钟的显示子程序
clr rs0
inc mz1
mov a,mz1
cjne a,#10,A0 ;判断秒针个位是否为10
mov mz1,#00h
mov DisBuf+0,mz1
inc mz2
mov a,mz2
cjne a,#6,A1 ;判断秒针十位是否为6
mov mz2,#00h
mov DisBuf+1,mz2
inc fz1
mov a,fz1
cjne a,#10,A2 ;判断分针个位是否为10
mov fz1,#00h
mov DisBuf+2,fz1
inc fz2
mov a,fz2
cjne a,#6,A3 ;判断分针十位是否为6
mov fz2,#00h
mov DisBuf+3,Fz2
inc sz1
mov a,sz1
cjne a,#10,A4
mov sz1,#00h
mov DisBuf+4,sz1
inc sz2
mov a,sz2
cjne a,#03,A5
A0: mov DisBuf+0,mz1
A1: mov DisBuf+1,mz2
A2: mov DisBuf+3,fz1
A3: mov DisBuf+4,fz2
A4: mov DisBuf+6,sz1
A5: mov DisBuf+7,sz2
mov a,sz1
cjne a,#04h,xs
mov a,sz2
cjne a,#02h,xs
mov mz1,#00h
mov mz2,#00h
mov fz1,#00h
mov fz2,#00h
mov sz1,#00h
mov sz2,#00h
mov DisBuf+0,mz1;进行显示
mov DisBuf+1,mz2
mov DisBuf+3,fz1
mov DisBuf+4,fz2
mov DisBuf+6,sz1
mov DisBuf+7,sz2
xs:lcall Display
ret
;WaitKey: JB INT_KEY,WaitKey ;查询按键
;lcall GetKey ;获取键值
;mov A,Key
;jz WaitKey ;Key=0无键按下,继续查询
;mov DisBuf+7,DisBuf+6 ;显示内容左移
;mov DisBuf+6,DisBuf+5
;mov DisBuf+5,DisBuf+4
;mov DisBuf+4,DisBuf+3
;mov DisBuf+3,DisBuf+2
;mov DisBuf+2,DisBuf+1
;mov DisBuf+1,DisBuf+0
;mov DisBuf+0,Key
;lcall Display
;ljmp WaitKey
;子程序名:ClsDisp
;功能:清除显示内容
;调用:VI2C_ASM.INC
;入口参数:无
;出口参数:无
;占用资源: R0,R1,R2,R3(工作寄存器组1),ACC,Cy,R5(当前工作寄存器组)
ClsDisp: mov R5,#8 ;循环计数器初值,8位数码管
mov A,#B ;按位下载数据且译码指令 01100 A2A1A0
;A2~A0:对应显示位置 1~8位数码管Cls1: MOV SLA,#ZLG7290 ;指定器件地址
MOV SUBA,#CmdBuf0 ;指定子地址
MOV MTD,A ; 命令送I2C总线发送数据缓冲区
mov MTD+1,#1FH ;命令参数,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
;功能:在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,#B ;按位下载数据且译码指令 01100 A2A1A0
;A2~A0:对应显示位置 1~8位数码管
mov R0,# Disbuf ;R0-> Disbuf
Disp1: MOV SLA,#ZLG7290 ;指定器件地址
MOV SUBA,#CmdBuf0 ;指定子地址
MOV MTD,A ;命令送I2C总线发送数据缓冲区
mov MTD+1,@R0 ;命令参数,待显示数据送I2C总线发送数据缓冲区
MOV NUMBYTE,#02H ;待发送数据2字节
push ACC ;保护ACC
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,指向下一个待显示数据
LCALL DELAY ;延时,等待ZLG7290执行上述命令
djnz R5,Disp1 ;没有达到8次,继续循环
ret ;子程序返回
;子程序名:GetKey
;功能:获取用户按键值(Key)
;调用:VI2C_ASM.INC
;入口参数:无
;出口参数:Key
;占用资源: R0,R1,R2,R3(工作寄存器组1),ACC,Cy
GetKey: MOV SLA,#ZLG7290 ;指定器件地址
MOV SUBA,#01H ;指定子地址
MOV NUMBYTE,#01H ;读1字节数据
push PSW ;保护PSW
setb RS0 ;切换工作寄存器,I2C通信软件使用工作寄存器组
clr RS1
LCALL IRDNBYTE ;调用读1字节数据程序
pop PSW ;恢复PSW
pop ACC ;恢复ACC
mov Key,MRD ;读取的数据送Key
ret ;子程序返回
;子程序名: DELAY
;功能:延时约36.5 ms(11.0592MHz时钟)
;调用:YS500US
;入口参数:无
;出口参数:无
;占用资源: R7,R6
DELAY: MOV R7,#80H
MIN: LCALL YS500US
DJNZ R7,MIN
RET
;子程序名: YS500US
;功能:延时约279us(11.0592MHz时钟)
;调用:无
;入口参数:无
;出口参数:无
;占用资源: R6
YS500US:MOV R6,#80H
DJNZ R6,$ ;延时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 日。

相关文档
最新文档