📄 testsystem25.asm
字号:
;*****************************************************************
;R0保存A相位置,R1保存B相所在位置
;后向运行时:R0增加,R1减小,
;正向运行时:R0减小,R1增加
;30H,36H保存R0,R1上限值和上限复员值
;37H,保存R0,R1的下限值,下限复员值为#01H;
;p3.6写使能信号,输出数据时,片选->输出数据->写使能->关闭写使能
;
;************************************************************
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT_X0
ORG 000BH
AJMP INT_T0
INT_T0: ;半流中断服务程序
MOV A,R0 ;读取当前A相电流值
MOVC A,@A+DPTR
CLR C
RRC A ;输出A相电流值的一半
ADD A,#40H
CLR P2.7
MOV P0,A
MOV A,R1 ;读取当前B相电流值
MOVC A,@A+DPTR
CLR C
RRC A
ADD A,#40H ;输出B相电流值的一半
SETB P2.7
MOV P0,A
RETI ;中断返回
;********************************************** ;
INT_X0: ;中断X0服务函数
CLR TR0 ;清空半流计时器
MOV TH0,#00H
MOV TL0,#00H
JNB P3.1,RETURN_X0 ;判断使能
JB P3.0,INT_X0_F ;判断方向
INT_X0_B: ;后向中断程序
INC R0
MOV A,R0 ;检查R0是否超上限
CJNE A,30H,CHECK_R1_B ;若没有超上限,则检查R1
MOV R0,#01H ;若超限,则重置R0为1
CHECK_R1_B:
DJNZ R1,RETURN_X0 ;若R1未到下限,中断返回
MOV R1,36H ;否则重置R1
AJMP RETURN_X0
INT_X0_F: ;前向中断程序
DJNZ R0,CHECK_R1_F ;若R0不为1,R0减1,中断返回
MOV R0,36H ;否则重置R0
CHECK_R1_F:
INC R1
MOV A,R1
CJNE A,30H,RETURN_X0 ;判断R1是否超上限
MOV R1,#01H ;重置R1
RETURN_X0:
MOV A,R0 ;[R0]->R3
MOVC A,@A+DPTR
MOV R3,A
MOV A,R1 ;[R1]->R4
MOVC A,@A+DPTR
SETB P2.7 ;设置为B相输出
MOV P0,A
CLR P3.6
SETB P3.6
CLR P2.7 ;单片机28脚,设置为A相输出
MOV P0,R3
CLR P3.6
SETB P3.6
;SETB TR0 ;使能半流计时器
RETI
;**************************************************************
MAIN: ;主程序
MOV P0,#80H ;清零输出
MOV A,P2 ;初始值设定
ANL A,#0DH ;取出P2口的3,5,6三位
CHOOSE_TABLE10000:
CJNE A,#0CH,CHOOSE_TABLE5000 ;判断每转脉冲数设定值
MOV 30H,#201D ;确定初始值
MOV 36H,#200D
MOV 37H,#99D
MOV DPTR,#TAB10000
JMP INITIAL_TIMER
CHOOSE_TABLE5000:
CJNE A,#08H,CHOOSE_TABLE4000
MOV 30H,#101D
MOV 36H,#100D
MOV 37H,#33D
MOV DPTR,#TAB5000
JMP INITIAL_TIMER
CHOOSE_TABLE4000:
CJNE A,#00H,CHOOSE_TABLE2000
MOV 30H,#81D
MOV 31H,#107D
MOV 32H,#27D
MOV 36H,#80D
MOV 37H,#26D
MOV 38H,#106D
MOV DPTR,#TAB4000
JMP INITIAL_TIMER
CHOOSE_TABLE2000:
CJNE A,#04H,CHOOSE_TABLE8000
MOV 30H,#41D
MOV 36H,#40D
MOV 37H,#1D
MOV DPTR,#TAB2000
JMP INITIAL_TIMER
CHOOSE_TABLE8000:
CJNE A,#09H,CHOOSE_TABLE6000
MOV 30H,#161D
MOV 31H,#214D
MOV 32H,#54D
MOV 36H,#160D
MOV 37H,#54D
MOV 38H,#213D
MOV DPTR,#TAB8000
JMP INITIAL_TIMER
CHOOSE_TABLE6000:
CJNE A,#01H,CHOOSE_TABLE3000
MOV 30H,#121D
MOV 31H,#161D
MOV 32H,#41D
MOV 36H,#160D
MOV 37H,#40D
MOV 38H,#160D
MOV DPTR,#TAB6000
JMP INITIAL_TIMER
CHOOSE_TABLE3000:
CJNE A,#05H,CHOOSE_TABLE1000
MOV 30H,#61D
MOV 31H,#81D
MOV 32H,#21D
MOV 36H,#60D
MOV 37H,#20D
MOV 38H,#80D
MOV DPTR,#TAB3000
CHOOSE_TABLE1000:
MOV 30H,#21D
MOV 36H,#20D
MOV 37H,#1D ;更换数据表时,一定要修改改数据
MOV DPTR,#TAB1000
INITIAL_TIMER:
MOV R0,#01H
MOV R1,37H
SETB P1.5
CLR P1.2 ;使能GAL,GAL开始输出
MOV A,R1 ;输出R1 将初始值输出
MOVC A,@A+DPTR
SETB P2.7 ;设置为B相输出
MOV P0,A
CLR P3.6
SETB P3.6
MOV A,R0 ;输出R0
MOVC A,@A+DPTR
CLR P2.7 ;单片机28脚,设置为A相输出
MOV P0,A
CLR P3.6
SETB P3.6
MOV TMOD,#01H ;T0为半流计时器
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
SETB IT0
SETB EX0
SETB ET0
SETB EA
AJMP $
TAB10000:
DB 00H
DB 236D
DB 234D
DB 232D
DB 229D
DB 227D
DB 224D
DB 221D
DB 219D
DB 216D
DB 213D
DB 210D
DB 207D
DB 204D
DB 200D
DB 197D
DB 194D
DB 190D
DB 187D
DB 183D
DB 180D
DB 176D
DB 172D
DB 169D
DB 165D
DB 161D
DB 157D
DB 153D
DB 149D
DB 145D
DB 141D
DB 137D
DB 133D
DB 129D
DB 125D
DB 121D
DB 117D
DB 113D
DB 109D
DB 106D
DB 102D
DB 98D
DB 94D
DB 90D
DB 86D
DB 82D
DB 79D
DB 75D
DB 72D
DB 68D
DB 65D
DB 61D
DB 58D
DB 54D
DB 51D
DB 48D
DB 45D
DB 42D
DB 39D
DB 36D
DB 34D
DB 31D
DB 28D
DB 26D
DB 24D
DB 21D
DB 19D
DB 17D
DB 15D
DB 14D
DB 12D
DB 10D
DB 9D
DB 8D
DB 6D
DB 5D
DB 4D
DB 4D
DB 3D
DB 2D
DB 2D
DB 1D
DB 1D
DB 1D
DB 1D
DB 1D
DB 1D
DB 2D
DB 2D
DB 3D
DB 4D
DB 5D
DB 6D
DB 7D
DB 8D
DB 9D
DB 11D
DB 13D
DB 14D
DB 16D
DB 18D
DB 20D
DB 22D
DB 24D
DB 27D
DB 29D
DB 32D
DB 35D
DB 37D
DB 40D
DB 43D
DB 46D
DB 49D
DB 52D
DB 56D
DB 59D
DB 62D
DB 66D
DB 69D
DB 73D
DB 76D
DB 80D
DB 84D
DB 87D
DB 91D
DB 95D
DB 99D
DB 103D
DB 107D
DB 111D
DB 115D
DB 119D
DB 123D
DB 127D
DB 131D
DB 135D
DB 139D
DB 143D
DB 147D
DB 150D
DB 154D
DB 158D
DB 162D
DB 166D
DB 170D
DB 174D
DB 177D
DB 181D
DB 184D
DB 188D
DB 191D
DB 195D
DB 198D
DB 202D
DB 205D
DB 208D
DB 211D
DB 214D
DB 217D
DB 220D
DB 222D
DB 225D
DB 228D
DB 230D
DB 232D
DB 235D
DB 237D
DB 239D
DB 241D
DB 242D
DB 244D
DB 246D
DB 247D
DB 248D
DB 250D
DB 251D
DB 252D
DB 252D
DB 253D
DB 254D
DB 254D
DB 255D
DB 255D
DB 255D
DB 255D
DB 255D
DB 255D
DB 254D
DB 254D
DB 253D
DB 252D
DB 251D
DB 250D
DB 249D
DB 248D
DB 247D
DB 245D
DB 243D
DB 242D
DB 240D
DB 238D
TAB5000:
;DB 00H
DB 00H
DB 88H
DB 90H
DB 98H
DB 0A0H
DB 0A7H
DB 0AFH
DB 0B6H
DB 0BDH
DB 0C4H
DB 0CBH
DB 0D1H
DB 0D7H
DB 0DDH
DB 0E2H
DB 0E7H
DB 0EBH
DB 0EFH
DB 0F3H
DB 0F6H
DB 0F9H
DB 0FBH
DB 0FDH
DB 0FEH
DB 0FFH
DB 0FFH
DB 0FFH
DB 0FEH
DB 0FDH
DB 0FBH
DB 0F9H
DB 0F6H
DB 0F3H
DB 0EFH
DB 0EBH
DB 0E7H
DB 0E2H
DB 0DDH
DB 0D7H
DB 0D1H
DB 0CBH
DB 0C4H
DB 0BDH
DB 0B6H
DB 0AFH
DB 0A7H
DB 0A0H
DB 98H
DB 90H
DB 88H
DB 80H
DB 78H
DB 70H
DB 68H
DB 60H
DB 59H
DB 51H
DB 4AH
DB 43H
DB 3CH
DB 35H
DB 2FH
DB 29H
DB 23H
DB 1EH
DB 19H
DB 15H
DB 11H
DB 0DH
DB 0AH
DB 07H
DB 05H
DB 03H
DB 02H
DB 01H
DB 01H
DB 01H
DB 02H
DB 03H
DB 05H
DB 07H
DB 0AH
DB 0DH
DB 11H
DB 015H
DB 019H
DB 01EH
DB 023H
DB 029H
DB 2FH
DB 35H
DB 3CH
DB 43H
DB 4AH
DB 51H
DB 59H
DB 60H
DB 68H
DB 70H
DB 78H
DB 80H ;lenth
TAB4000:
DB 00H
TAB2000: ;算法2算出来的
DB 00D
DB 64D
DB 82D
DB 101D
DB 121D
DB 141D
DB 161D
DB 180D
DB 198D
DB 214D
DB 227D
DB 239D
DB 247D
DB 253D
DB 255D
DB 255D
DB 252D
DB 245D
DB 235D
DB 223D
DB 209D
DB 192D
DB 174D
DB 155D
DB 135D
DB 115D
DB 95D
DB 76D
DB 58D
DB 42D
DB 29D
DB 17D
DB 9D
DB 3D
DB 0D
DB 1D
DB 4D
DB 11D
DB 21D
DB 33D
DB 47D ;lenth
TAB1000:
DB 00D
DB 64D
DB 33D
DB 11D
DB 1D
DB 3D
DB 17D
DB 42D
DB 76D
DB 115D
DB 155D
DB 192D
DB 223D
DB 245D
DB 255D
DB 253D
DB 239D
DB 214D
DB 180D
DB 141D
DB 101D
TAB8000:
DB 00H
TAB6000:
DB 00H
TAB3000:
DB 00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -