河北工业大学计算机硬件技术基础(MCS-51)2007年课程设计
报告
一、题目:工业顺序控制
二、问题的提出
1.目的:
(1)培养学生综合利用MCS-51单片机的软硬件知识进行程序设计的能
力,解决一些实际问题。
(2)进一步加深对MCS-51单片机内部结构和程序设计方法的理解。
(3)提高学生建立程序文档、归纳总结的书面表达能力。
(4)通过查阅和网上搜索资料,提高学生独立获取知识的能力。
(5)在设计的全过程中,通过理论与实践相结合,培养和提高学生的实
践能力和创新能力。
三、总体设计
1、分析问题的功能
在工业控制中,像冲压、注塑、轻纺、制瓶等生产过程,都是一些继续生产过程,按某种顺序有规律的完成某种预定的动作,对这类继续生产过程称为顺序控制,倒注塑机工艺大致按“合模-注射-延时-开模-产伸-产退”顺序工作。
P1.0~P1.6代表控制注塑机的七道工程,模拟控制七只发光二极管的点亮,低电平有效,设每道工序时间为延时,P3.4为开工启动开关,低电平启动,P3.3为外部故障输入模拟开关,低电平报警,P1.7为报警输出,前六道工序只有一位输出,第七道工序中有三位输出。
2、系统总体结构设计
根据上述问题描述,本设计运用了两个中断,一个外部INT1中断,一个定时
器T/C1中断,
四、详细设计:
1、画出电路图;
2. 流程图
3、设计中的主要困难及解决方案
1)困难1 实现蜂鸣器与故障中断的同步
解决方法:当语句LOOP: JNB P3.3,LOOP 循环执行时,开定时器不断给蜂鸣器高低方波,这样,只要定时器一直开着,蜂鸣器就一直处于鸣响状态,直到外部中断解除。
LOOP: JNB P3.3, LOOP
SETB P1.7
CLR ET1
RETI
定时器停止工作,工程回到端点继续执行。
2)困难2 各工序的用时应该不同
我们准备了几个不同的子程序,每个灯亮时就可以调用不同的子程序了,这样等量的时间就不同了。
三、程序清单
ORG 8000H
AJMP MAIN
ORG 8013H
LJMP INT1SV
ORG 801BH
LJMP T1S
MAIN: MOV SP, #5FH
SETB EA ;允许CPU中断
SETB EX1 ;允许INT1中断
CLR IT1 ;INT1为电平触发
L0: JNB P3.4, L1
AJMP L0 ;是否开工?
L1: ;第一道工序
SETB P1.7
CLR P1.0
ACALL DLAY
L3: SETB P1.0 ;第二道工序
CLR P1.1
ACALL DLAYA
AJMP L4
L4:SETB P1.1 ;第三道工序
CLR P1.2
ACALL DLAYB
AJMP L5
L5: SETB P1.2 ;第四道工序
CLR P1.3
ACALL DLAY
L6: SETB P1.3 ;第五道工序
CLR P1.4
ACALL DLAYA
L7:SETB P1.4 ;第六道工序
CLR P1.5
ACALL DLAYB
L8: SETB P1.5 ;第七道工序
CLR P1.6
ACALL DLAYA
SETB P1.6
WAIT: MOV P1, #0ffH
MOV R7, #0
Lp: MOV R6, #0
DJNZ R6, $
DJNZ R6, $
DJNZ R6, $
DJNZ R7, Lp
AJMP L0
DLAY: MOV R4, #01H ;延时子程序DLAY1: MOV R5, #0fH
DLAY2: MOV R6, #5fH
DLAY3: MOV R7, #0ffH
DLAY4: DJNZ R7, DLAY4
DJNZ R6, DLAY3
DJNZ R5, DLAY2
DJNZ R4, DLAY1
RET
DLAYA: MOV R4, #01H ;延时子程序A DLAYA1: MOV R5, #0fH
DLAYA2: MOV R6, #0ffH
DLAYA3: MOV R7, #0ffH
DLAYA4: DJNZ R7, DLAYA4
DJNZ R6, DLAYA3
DJNZ R5, DLAYA2
DJNZ R4, DLAYA1
RET
DLAYB: MOV R3, #01H ;延时子程序B DLAYB1: MOV R4, #0fH
DLAYB2: MOV R5, #0fH
DLAYB3: MOV R6, #1fH
DLAYB4: MOV R7, #0ffH
DLAYB5: DJNZ R7, DLAYB5
DJNZ R6, DLAYB4
DJNZ R5, DLAYB3
DJNZ R4, DLAYB2
DJNZ R3, DLAYB1
RET
INTI中断程序:
INT1SV: MOV TMOD, #10H ;选用工作模式寄存器方式1
MOV TH1, #0FFH ;定时器赋初值
MOV TL1, #00H
SETB PT1 ;定义T/C1为高优先级中断
SETB ET1 ;允许T/C1中断
SETB TR1 ;启动T/C1定时器
LOOP: JNB P3.3, LOOP ;有故障则循环等待,故障解除往下运行SETB P1.7 ;蜂鸣器关闭
CLR ET1 ;关T/C1中断
RETI
T1S: MOV TH1, #0FFH
MOV TL1, #00H
CPL P1.7 ;蜂鸣器报警
RETI
END
四、调试程序的方法
1)硬件调试方法(确定硬件工作是否正常)
在没接线之前,打开电源开关,如果电源灯亮,且没有杂音,则硬件工作正常。
2)软件调试方法(如何调试程序的方法)
首先接好排线开关,然后将 A2区的INT1接开关SW2,A2区的T0接开关SW1,A2区的PI.7接蜂鸣器。
程序运行前,均SW1SW2置一,程序开始运行后,将SW1置零,灯开始闪亮,如果将SW2置零,则第六个灯亮,同时蜂鸣器开始响,再将SW2置一,蜂鸣器停止响,第七个灯灭。
如果将SW1置一,六个灯闪亮完一遍后才停止。
五、你所设计的程序最终完成的功能
1)说明你编制的程序能完成的功能;
P1.0~P1.6代表控制注塑机的七道工程,模拟控制七只发光二极管的点亮,低电平有效,设每道工序时间为延时,P3.4为开工启动开关,低电平启动,P3.3为外部故障输入模拟开关,低电平报警,P1.7为报警输出,
本程序中,SW.1,SW.2在开始都置一。
所有工序都处于准备状态,程序运行,SW.1置零,相当于打开工序开关,各工序按次序逐步执行,如果执行过程中出现意外,则将SW.2置零。
相当于启动故障按钮,这时工程停止在故障处,蜂鸣器响起。
只要故障不解除,蜂鸣器便一直处于报警状态,等故障一解除,蜂鸣器便停止报警,工程从原来故障处继续往下执行。
根据各工序功能不同,每个灯亮的时间不同,代表每道工序需要的时间。
若中途关闭开关,而工序还未完成一遍,则直到工序完成一遍才停止,保证产品的完整。
六、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
我们这次设计,首先按要求完成了基本功能,实现了工程的连贯进行与故障处理,在完成基本要求的前提下,又进一步完善了程序,每道工序所用时间不同,设置有所不同,报警装置,我们选择了蜂鸣器。
以便引起人们的重视。
2、对课题提出更完善的方案。
虽然这个程序本身要求的简单,但有很多可以完善的地方,例如工程重复执行的次数,可以通过计数器计数显示出来,来显示工程的进度,以便对工程更好的调控。
只是因为编程时无法实现数据的显示而没有实现。
五、收获及心得体会
1、通过本次课程设计,自己在哪些方面的能力有所提高。
通过本次课程设计,我对单片机语言从不会到会,从害怕到喜欢,确实有了很大的提高,对中断有了更深层的了解,也发现了它与其它语言的相通之处,每种语言都有它独特的魅力,我却只是因为自己发现的浩瀚大海边的一块贝壳而沾沾自喜,以后我会有个大的动力去探索计算机语言这个神秘的领域。
2.收获和心得体会。
这次程序设计,我们学到很多东西,对书上的知识能运用到实际中,对知识也有了进一步的了解,也体会到了编程的乐趣。
对这学期学到的知识,有了系统的认识,感谢学校为我们提供的这次机会,让我们检验学到的指示。
给我们一个锻炼的平台。
日期:2007年12 月25 日。