中南大学_微机课设报告-小型步进电机控制系统设计(编辑修改稿)内容摘要:

x20,0x60,0x40,0xc0,0x80,0x90}。 char c1[]= {0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10}。 小型步进电机控制系统设计报告 21/ 39 20xx 年 12 月 30 号 int dir=1。 int mode=0。 int grd=1。 int cc。 int n。 int j。 void main() { int i=0。 int j。 outp(MY8255_MODE, 0x81)。 while(1) { while((i=7)amp。 amp。 (i=0)) { while(1) { keyscan()。 if(mode==1) break。 key()。 } if(dir==1) { if(grd==4) { outp(MY8255_A, c[i])。 delay1(0x200)。 keyscan()。 } if(grd==3) { outp(MY8255_A, c[i])。 delay1(0x310)。 keyscan()。 } if(grd==2) { outp(MY8255_A, c[i])。 小型步进电机控制系统设计报告 22/ 39 20xx 年 12 月 30 号 delay1(0x400)。 keyscan()。 } if(grd==1) { outp(MY8255_A, c[i])。 delay1(0x500)。 keyscan()。 } for(j=1。 j30。 j++) { keyscan()。 } i++。 } if(dir==0) { if(grd==4) { outp(MY8255_A, c1[i])。 delay1(0x200)。 keyscan()。 } if(grd==3) { outp(MY8255_A, c1[i])。 delay1(0x310)。 keyscan()。 } if(grd==2) { outp(MY8255_A, c1[i])。 delay1(0x400)。 keyscan()。 } if(grd==1) { outp(MY8255_A, c1[i])。 delay1(0x500)。 keyscan()。 } for(j=1。 j30。 j++) { 小型步进电机控制系统设计报告 23/ 39 20xx 年 12 月 30 号 keyscan()。 } i++。 } key()。 } if(i7) i=0。 } } void delay1(int time) { int i。 int j。 for(i=0。 i=time。 i++) { for(j=0。 j=0x7000。 j++) { } } return。 } void keyscan() { dis()。 clear()。 ccscan()。 if (cc) { dis()。 delay0(0x100)。 delay0(0x100)。 clear()。 ccscan()。 if (cc) { 小型步进电机控制系统设计报告 24/ 39 20xx 年 12 月 30 号 getkey()。 putbuf()。 } } key()。 } void getkey(void) { int i。 int j = 0xfef。 for(i=0。 i=3。 i++) { outp(MY8255_C, j)。 if ( !( (inp(MY8255_C)) amp。 0x01) ) { n = i + 0。 action()。 return。 } if ( !( (inp(MY8255_C)) amp。 0x02) ) { n = i + 4。 action()。 return。 } if ( !( (inp(MY8255_C)) amp。 0x04) ) { n = i + 8。 action()。 return。 } if ( !( (inp(MY8255_C)) amp。 0x08) ) { n = i + 12。 action()。 小型步进电机控制系统设计报告 25/ 39 20xx 年 12 月 30 号 return。 } j = 1。 } } void ccscan(void) { outp(MY8255_C, 0x00)。 cc = inp(MY8255_C)。 cc = (~cc) amp。 0x0F。 } void dis(void) { int i。 int j = 0xf7。 for(i=3。 i=0。 i) { outp(MY8255_A, j)。 outp(MY8255_B, a[b[i]])。 delay0(0x100)。 j = 1。 j |= 0x80。 } } void clear(void) { outp(MY8255_B, 0x00)。 } void action(void) { if(n==5) { 小型步进电机控制系统设计报告 26/ 39 20xx 年 12 月 30 号 if(dir==1) dir=0。 else dir=1。 } if(n==4) { if(mode==1) mode=2。 else mode=1。 } if(n==6) { dir=1。 mode=0。 grd=1。 } if(n==0) grd=1。 if(n==1) grd=2。 if(n==2) grd=3。 if(n==3) grd=4。 } void putbuf(void) { b[0]=mode。 b[1]=dir+3。 b[2]=grd+4。 dis()。 clear()。 ccscan()。 while (cc) { dis()。 clear()。 ccscan()。 } } void key(void) 小型步进电机控制系统设计报告 27/ 39 20xx 年 12 月 30 号 { if (bioskey(1) != 0) { exit(0)。 } } void delay0(int time) { int i。 int j。 for(i=0。 i=time。 i++) { for(j=0。 j=0x100。 j++) { } } return。 } 汇编程序 IOY0 EQU 03000H。 片选 IOY0对应的端口始地址 MY8255_A EQU IOY0+00H*4。 8255的 A口地址 MY8255_B EQU IOY0+01H*4。 8255的 B口地址 MY8255_C EQU IOY0+02H*4。 8255的 C口地址 MY8255_MODE EQU IOY0+03H*4。 8255的控制寄存器地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT DTABLE1 DB 6DH,79H,73H,77H,39H,06H,5BH,4FH,66H,40H 小型步进电机控制系统设计报告 28/ 39 20xx 年 12 月 30 号 DTABLE2 DB 10H,30H,20H,60H,40H,0C0H,80H,90H DTABLE3 DB 90H,80H,0C0H,40H,60H,20H,30H,10H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,3000H MOV BYTE PTR [SI],00H MOV BYTE PTR[SI+2],09H MOV BYTE PTR[SI+4],04H MOV BYTE PTR[SI+6],05H MOV BYTE PTR[SI+8],01H MOV DX,MY8255_MODE。 初始化 8255工作方式 MOV AL,81H。 方式 0, A口、 B口输出, C口低 4位输入 OUT DX,AL KAISHI: MOV SI,3000H CALL KEYSCAN MOV DH,[SI] CMP DH,01H JNZ KAISHI MOV DH,[SI+4] CMP DH,04H JNZ FANZHUAN1 JMP ZHENGZHUAN FANZHUAN1: JMP FANZHUAN ZHENGZHUAN: DANG11: M。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。