计算机硬件课程设计样本1Word格式.docx
《计算机硬件课程设计样本1Word格式.docx》由会员分享,可在线阅读,更多相关《计算机硬件课程设计样本1Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
本设计通过软件编程使8253输出定时信号申请中断,CPU发出命令由8255的下C口输出脉宽信号来控制步进电机的走步。
电机的转动和停止则是通过8255的A0端子输出高低电平来继续或暂停8253的计数从而控制中断申请来实现的。
8253的定时时间决定了电机转动的快慢。
相对简单的硬件电路,使软件设计成为本设计课题的中心内容。
1、设计思路
控制系统分五个功能模块,分别是转速设置、转向设置、固定步数转动、连续转动、退出系统,在前四个功能块中都设置了ESC键来取消或暂停执行当前操作。
程序中同时提供五个操作界面,一个主菜单和四个子菜单界面,进行可视控制。
(1)转速设置
根据赋给计数器的计数初值,我们可以计算出步进电机各相脉宽信号的频率和电机转速,也可以反过来根据对电机转速要求,计算并调整计算初值。
这里采用的是8253的0号计数器和方波产生方式,输入时钟为f=46875hz,设计数初值为n,要求转速为0.25转/秒,对四相步进电机而言即为5步/秒,则有:
f/n=5
n=f/5=46875/5=9375
反过来,当计数器初值确定时,决定了电机的转速,如计数初值为0时,有电机转速为1步每秒(本设计中最慢速度);
当计数初值为125时,电机转速为375步每秒(本设计中最快速度)。
具体设置初值及转速见表2。
表2
步速
转速
按键
计数初值
1
0.05
F1
46875
3
0.15
F2
15625
5
0.25
F3
9375
15
0.75
F4
3125
25
1.25
F5
1875
75
3.75
F6
625
125
6.25
F7
375
18.75
F8
(2)转向设置
在内存单元中设置一方向标志FLAG1,假设FLAG1为0时为顺时针转向,则当设置FLAG1不为0时即可使电机转逆时针转动。
判断操作在中断子程序中进行。
(3)连续转动设置
在此功能模块中,通过让8255的A0口输出高电平到8253的GATE0使其0号计数器继续工作(平常时A0口为低电平使8253的0号计数器暂停计数),并开放中断进入循环等待中断状态,在等待状态中若有键盘的‘ESC’键按下,则认为暂停要求而关闭中断和暂停8253计数回到主菜单。
需要继续原转向原速度运行,再选择此功能模块即可。
(4)固定步数转动设置
通过键盘输入0到999的十进制值来设定转动步数。
判断已转步数即中断次数是这样实现的,设置一内存单元FLAG0,中断时在中断子程序中求反,而在循环等待中断的程序中判断其有无变化,无变化继续循环,有变化则使计数寄存器CX减1后继续循环,当CX=0时退出等待中断状态,并关中断和暂停8253计数。
在这个等待程序中也判断键盘有无ESC键按下,若有则认为暂停要求而退出。
(6)中断子程序
在中断子程序中,将值为11001100B的内存单元循环左移或右移一位,通过8255的下C口输出低四位,控制步进电机的相序变化,从而使电机连续转动。
左移或右移将使电机顺时针或逆时针转动,它由标志FLAG1来决定。
(7)菜单界面设置
利用DOS下的BIOS功能调用,设计出简单而易于操作的界面,详细设计特点请参考程序清单。
2、程序流程图
(1)主程序框图如图2(见下页),除中断子程序外,将所有的框图集中到一起。
(2)中断服务子程序框图如图3。
图3中断服务子程序框图
六、心得体会
本次课设,是结合了硬件设计和软件设计以及调试,是一个综合性比较强的课程设计。
通过此次课程设计,我在一些方面有了感触:
1、硬件方面,应认真理解硬件电路的组成及其功能,才能为下一步的编程打下基础。
2、程序方面,一定要联系设计好的硬件来进行编程。
我在程序方面的总结是:
(1)写程序注释写得越详细越好、不要怕麻烦。
写上使用方法、结果起始地址是存高字节还是低等问题,这有助于后来的调试和改错。
(2)画流程图有助于写程序以及日后查错。
(3)随时备份,建议版本形式备份,并写清楚该版本实现了什么,改进了什么,还没有实现什么等。
3、调试方面与错误排除:
不能急于求成,但不要放弃,要保持清醒的头脑。
七、源程序
DSEGSEGMENT
CLOCK0EQU290H
CLOCK1EQU291H
CLOCK2EQU292H
CLOCKCEQU293H
PA55EQU280H
PB55EQU281H
PC55EQU282H
P55CEQU283H
INTNUMDB0DH
MAMESDB0DH,0AH
DB"
*************WELCOMETOCONTROLSYSTEM*************"
0DH,0AH,'
$'
MAMUDB"
1.SETUPSPEED"
0DH,0AH
2.SETUPDIRECTION"
3.ROTATINGWITHFIXEDSTEP"
4.CONTINUALROTATING"
5.EXIT"
*******************PLEASEINPUTCHOICE:
$"
MENU1DB0DH,0AH,0DH,0AH
F1.ROTATINGSPEEDIS0.05R/S"
F2.ROTATINGSPEEDIS0.15R/S"
F3.ROTATINGSPEEDIS0.25R/S"
F4.ROTATINGSPEEDIS0.75R/S"
F5.ROTATINGSPEEDIS1.25R/S"
F6.ROTATINGSPEEDIS3.75R/S"
F7.ROTATINGSPEEDIS6.25R/S"
F8.ROTATINGSPEEDIS18.75R/S"
INTERESCTOEXIT"
MENU2DB0DH,0AH,0DH,0AH
1.CLOCKWISE"
2.ANTI_CLOCKWISE"
MENU3DB0DH,0AH,0DH,0AH
PLEASEINPUTTHENUMBEROFSTEP:
MENU4DB0DH,0AH,0DH,0AH
CONTINUALROTATING!
"
EROMSDB0DH,0AH
YOURCHOISEISINVALID!
PLEASECHOOSEAGAIN"
'
F0DB0DH,0AH
ROTATINGSPEEDIS:
F1DB"
0.05R/S"
F2DB"
0.15R/S"
F3DB"
0.25R/S"
F4DB"
0.75R/S"
F5DB"
1.25R/S"
F6DB"
3.75R/S"
F7DB"
6.25R/S"
F8DB"
18.75R/S"
SPEDMDWF1,F2,F3,F4,F5,F6,F7,F8
CLCMSDB0DH,0AH
DIRECTIONISCLOCKWISE"
ANTMSDB0DH,0AH
DIRECTIONISANTI_CLOCKWISE"
QUITMSDB"
ENTERESCTOEXIT"
INTSEGDW?
INTOFFDW?
MCHOCDWSTSED,STDIR,ROTFX,CTROT
SPEDNDW46875,15625,9375,3125,1875,625,375,125
SPEEDDW46875
FLAG1DB0
FLAG0DB?
BUFFERDB4
DB?
DB4DUP(?
)
CW10DW10
INTIMRDB?
TURNDB11001100B
DSEGENDS
STACKSEGMENTPARASTACK'
STACK'
DB100DUP(?
STACKENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG,SS:
STACK
MAIN:
MOVAX,DSEG
MOVDS,AX
MOVAH,35H
MOVAL,0DH
INT21H
MOVINTSEG,ES
MOVINTOFF,BX
PUSHDS
MOVAX,CS
MOVDS,AX
MOVDX,OFFSETINTPROC
MOVAH,25H
POPDS
INAL,21H
MOVINTIMR,AL
ANDAL,11011111B
OUT21H,AL
MOVDX,CLOCKC
MOVAL,00110110B
OUTDX,AL
MOVDX,P55C
MOVAL,10000000B
STI
OMANU:
MOVDX,OFFSETMAMES
MOVAH,09H
MOVDX,OFFSETMAMU
INT21H
MOVAH,01H
CMPAL,'
1'
JBERROR
5'
JAERROR
JEEXIT
ANDAL,0FH
DECAL
MOVAH,00H
SHLAX,1
MOVBX,OFFSETMCHOC
ADDBX,AX
CALL[BX]
JMPOMANU
ERROR:
MOVDX,OFFSETEROMS
EXIT:
MOVAL,INTIMR
OUT21H,AL
MOVDX,INTOFF
MOVAX,INTSEG
POPDS
MOVAH,4CH
STSEDPROCNEAR
PUSHAX
PUSHDX
PUSHBX
OMENU1:
MOVDX,OFFSETMENU1
INT16H
CMPAL,1BH
JZEXIT1
CMPAH,59
JBERROR1
CMPAH,66
JAERROR1
SUBAH,59
MOVBH,0
MOVBL,AH
SHLBL,1
MOVAX,SPEDN[BX]
MOVSPEED,AX
MOVDX,OFFSETF0
MOVDX,SPEDM[BX]
JMPEXIT1
ERROR1:
MOVDL,0AH
MOVAH,02H
MOVDL,0DH
JMPOMENU1
EXIT1:
POPBX
POPDX
POPAX
RET
STSEDENDP
STDIRPROCNEAR
PUSHAX
OMENU2:
MOVDX,OFFSETMENU2
JEEXIT2
JECLFLG
2'
JEANTFLG
JMPOMENU2
CLFLG:
MOVFLAG1,0
MOVDX,OFFSETCLCMS
JMPEXIT2
ANTFLG:
MOVFLAG1,1
MOVDX,OFFSETANTMS
JMPEXIT2
EXIT2:
STDIRENDP
ROTFXPROCNEAR
PUSHCX
PUSHSI
OMENU3:
MOVDX,OFFSETMENU3
MOVDX,OFFSETBUFFER
MOVAH,0AH
MOVCL,BUFFER[1]
CMPCL,3
JAERROR3
LEASI,BUFFER
ADDSI,2
MOVCH,00H
MOVAX,00H
NEXT:
MULCW10
MOVBL,[SI]
ANDBX,000FH
ADDAX,BX
INCSI
LOOPNEXT
MOVCX,AX
MOVFLAG0,0
MOVDX,CLOCK0
MOVAX,SPEED
MOVAL,AH
MOVDX,PA55
MOVAL,0FFH
AGAIN1:
CMPCX,00H
JEEXIT3
MOVAH,06H
MOVDL,0FFH
CMPFLAG0,0
JEAGAIN1
DECCX
JMPAGAIN1
ERROR3:
JMPOMENU3
EXIT3:
CLI
MOVAL,00H
POPSI
POPCX
ROTFXENDP
CTROTPROCNEAR
MOVDX,OFFSETMENU4
STI
AGAIN2:
JNEAGAIN2
CTROTENDP
INTPROCPROC
MOVDX,PC55
MOVAL,TURN
CMPFLAG1,0
JETNCLC
ROLAL,1
JMPEXITI
TNCLC:
RORAL,1
EXITI:
MOVTURN,AL
MOVFLAG0,1
MOVAL,20H
OUT20H,AL
IRET
INTPROCENDP
CSEGENDS
ENDMAIN