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

📄 timer.a51

📁 演示了如何开发WINDOES下I/O口驱动
💻 A51
字号:
; This module services the real time interrupt
;
; Get a Real Time interrupt every One millisecond (using SOF interrupt)
;
; Pulse the stepper motor every 10msec (100Hz) if required
;	EZ-USB PortA drives an Allegro 8219
;	Phase A is connected to bits 5,4 & 3, Phase B to bits 2,1 & 0
;	Bits 5 and 2 are PHASE
;	Bits 4:3 and 1:0 are I1:I0 current inputs
;
ServiceTimerRoutine:
	DJNZ    Msec_counter, Done      ; Only need to step every 10msec
	MOV     Msec_counter, #10	; Reinitialize

	MOV	R0, #MotorControl+1	; Point to LS byte of count
	MOV	R1, #MotorControl+2	; Point to MS byte of count
	MOV	A, @R0
	ORL	A, @R1
	JZ	Done			; No stepping required
StepTheMotor:
	DEC	@R0			; Unfortunately, no flags are set
	MOV	A, @R0
	CPL	A			; Test for LS = FF
	JZ	STM1
	DEC	@R1			; Underflow on LS, therefore adjust MS byte
STM1:	MOV	A, MotorControl		; Get the direction indicator
	JNZ	Clockwise
	MOV	A, #-1			; CounterClockwise = backup one
Clockwise:
	ADD	A, CurrentPosition
	ANL	A, #0FH			; Table is only 16 entries long
	MOV	CurrentPosition, A
	MOV	DPTR, #StepperTable
	MOVC	A, @A + DPTR		; Index into table 
	MOV	R0, #Low(PortA_Pins)
	MOVX	@R0, A			; Select the new step position
Done:	RET

StepperTable:
	DB 000111b	;  0 = Up
	DB 000010b	;  1
	DB 001001b	;  2
	DB 010000b	;  3
	DB 011000b	;  4 = Right
	DB 110000b	;  5
	DB 101001b	;  6
	DB 100010b	;  7
	DB 100011b	;  8 = Down
	DB 100110b	;  9
	DB 101101b	; 10
	DB 110100b	; 11
	DB 111100b	; 12 = Left
	DB 010100b	; 13
	DB 001101b	; 14
	DB 000110b	; 15

		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -