📄 cont.lst
字号:
A51 MACRO ASSEMBLER CONT 11/27/2007 21:43:10 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN cont.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\Bin\a51.exe cont.asm DB GENONLY RB(0) XREF
LOC OBJ LINE SOURCE
1 ;步进电机控制程序
2 ;**************************************************************************
3 ;主程序
0000 4 ORG 0000H
0000 020100 5 LJMP MAIN
0013 6 ORG 0013H ;INT1的中断入口
0013 020153 7 LJMP PINT1
0100 8 ORG 0100H
0100 C2D5 9 MAIN: CLR F0 ;清中断发生标志
0102 758160 10 MOV SP,#60H
0105 908FFF 11 MOV DPTR,#8FFFH ;8279初始化清除命令
0108 74D1 12 MOV A,#0D1H
010A F0 13 MOVX @DPTR,A
010B E0 14 WAIT: MOVX A,@DPTR ;等8279清除结束
010C 20E7FC 15 JB ACC.7,WAIT
010F 7400 16 MOV A,#00 ;8279送方式命令
0111 F0 17 MOVX @DPTR,A
0112 7434 18 MOV A,#34H ;fosc=12Mhz时钟编程命令
0114 F0 19 MOVX @DPTR,A
0115 D28A 20 SETB IT1 ;外部中断,下降沿触发
0117 D2AF 21 SETB EA ;开总中断
0119 D2AA 22 SETB EX1 ;允许外部中断1中断
011B 30D5FD 23 LOOP: JNB F0,LOOP ;判中断是否发生?
011E E8 24 LOOP1: MOV A,R0 ;取出键值
011F B40011 25 CJNE A,#00H,LOOP2 ;是正转键吗?非转LOOP2
0122 7B00 26 LP0: MOV R3,#00H
0124 900169 27 LP1: MOV DPTR,#TABLE ;控制字首地址
0127 EB 28 MOV A,R3 ;查表偏移量送A
0128 93 29 MOVC A,@A+DPTR ;查表取控制字
0129 60F7 30 JZ LP0 ;转完八拍
012B F590 31 MOV P1,A ;控制字送P1口
012D 314A 32 ACALL DELAY ;延时
012F 0B 33 INC R3 ;偏移量+1(拍数加1)
0130 2124 34 AJMP LP1
0132 22 35 RET
0133 E8 36 LOOP2: MOV A, R0 ;取出键值
0134 B40108 37 CJNE A,#01H,LOOP3 ;是反转键吗?非转LOOP3
0137 7B00 38 LP2: MOV R3,#00H
0139 EB 39 MOV A,R3 ;查表偏移量送A
013A 2409 40 ADD A,#09H ;修正偏移量,查反向控制字
013C FB 41 MOV R3,A ;偏移量保存在R3中
013D 2124 42 AJMP LP1
013F E8 43 LOOP3: MOV A, R0 ;取出键值
0140 B402D8 44 CJNE A,#02H,LOOP ;是停止键吗?否转PINT1
0143 759000 45 MOV P1,#00H ;是则停转
0146 C2D5 46 CLR F0
0148 211B 47 AJMP LOOP
014A 7F20 48 DELAY: MOV R7,#20H ;延时子程序
014C 7EF8 49 D1: MOV R6,#248
014E DEFE 50 DJNZ R6,$
0150 DFFA 51 DJNZ R7,D1
0152 22 52 RET
53 ;**************************键输入中断服务程序*********************************
0153 C2AF 54 PINT1: CLR EA ;关中断
0155 C0E0 55 PUSH ACC
56 ;PUSH PSW ;入栈保护
57 ;PUSH DPH
58 ;PUSH DPL
A51 MACRO ASSEMBLER CONT 11/27/2007 21:43:10 PAGE 2
0157 908FFF 59 MOV DPTR,#8FFFH ;向命令口写入读键盘RAM
015A 7440 60 MOV A,#40H
015C F0 61 MOVX @DPTR,A
015D 908FFE 62 MOV DPTR,#8FFEH ;读入键值
0160 E0 63 MOVX A,@DPTR
0161 F8 64 MOV R0,A ;键值暂存入R0
0162 65 PRI1: ;POP DPL ;出栈恢复
66 ;POP DPH
67 ;POP PSW
0162 D0E0 68 POP ACC
0164 D2D5 69 SETB F0 ;置中断标志
0166 D2AF 70 SETB EA ;开中断
0168 32 71 RETI
72 ;/////////////////////////////////////////////////////////////////////////////
0169 10302060 73 TABLE: DB 10H,30H,20H,60H,40H,0C0H,80H,90H,00H ;正转
016D 40C08090
0171 00
0172 109080C0 74 DB 10H,90H,80H,0C0H,40H,60H,20H,30H,00H ;反转
0176 40602030
017A 00
75 END
A51 MACRO ASSEMBLER CONT 11/27/2007 21:43:10 PAGE 3
XREF SYMBOL TABLE LISTING
---- ------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES / REFERENCES
ACC. . . . . . . . D ADDR 00E0H A 15 55 68
D1 . . . . . . . . C ADDR 014CH A 49# 51
DELAY. . . . . . . C ADDR 014AH A 32 48#
EA . . . . . . . . B ADDR 00A8H.7 A 21 54 70
EX1. . . . . . . . B ADDR 00A8H.2 A 22
F0 . . . . . . . . B ADDR 00D0H.5 A 9 23 46 69
IT1. . . . . . . . B ADDR 0088H.2 A 20
LOOP . . . . . . . C ADDR 011BH A 23# 23 44 47
LOOP1. . . . . . . C ADDR 011EH A 24#
LOOP2. . . . . . . C ADDR 0133H A 25 36#
LOOP3. . . . . . . C ADDR 013FH A 37 43#
LP0. . . . . . . . C ADDR 0122H A 26# 30
LP1. . . . . . . . C ADDR 0124H A 27# 34 42
LP2. . . . . . . . C ADDR 0137H A 38#
MAIN . . . . . . . C ADDR 0100H A 5 9#
P1 . . . . . . . . D ADDR 0090H A 31 45
PINT1. . . . . . . C ADDR 0153H A 7 54#
PRI1 . . . . . . . C ADDR 0162H A 65#
SP . . . . . . . . D ADDR 0081H A 10
TABLE. . . . . . . C ADDR 0169H A 27 73#
WAIT . . . . . . . C ADDR 010BH A 14# 15
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -