⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testsystem25.asm

📁 采用电流正弦波细分原理
💻 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 + -