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

📄 f876tmpo.asm

📁 电火花加工车床用的单片机控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;
PROGRAM
		NOP


		RETURN
;=========================================================
;自检
;1显示自检、2,声音自检
SELF_TEST
		MOVLW	B'10100100'			;发复位(清除指令)
		CALL	SEND
		MOVLW	B'10111111'					;发自检指令
		CALL	SEND
		MOVLW	D'40'
		MOVWF	TIMER
START_DELAY
		MOVLW	D'255'
		MOVWF	TIMER1
		BSF		PORTB,BEEP
STAR_DELAY1
		DECFSZ	TIMER1
		GOTO	STAR_DELAY1
		DECFSZ	TIMER
		GOTO	START_DELAY
		MOVLW	B'10100100'			;发复位(清除指令)
		CALL	SEND
		BCF		PORTB,BEEP        	;关闭声音
		BSF		PORTB,CS			;关闭HD7279
		;电机自检
		BSF		PORTC,A_ENABLE
		BSF		PORTC,B_ENABLE
		BSF		PORTC,A_CWB
		BSF		PORTC,B_CWB
		MOVLW	D'200'		
		MOVWF	TEMP
MOTOR_FF
		BSF		PORTC,A_CLOCK
		BSF		PORTC,B_CLOCK
		NOP
		NOP
		CALL	LONG_DELAY
		BCF		PORTC,A_CLOCK
		BCF		PORTC,B_CLOCK
		CALL	LONG_DELAY
		DECFSZ	TEMP
		GOTO	MOTOR_FF

		;电机反转自检
		BCF		PORTC,A_CWB
		BCF		PORTC,B_CWB
		MOVLW	D'200'		
		MOVWF	TEMP
MOTOR_RW
		BSF		PORTC,A_CLOCK
		BSF		PORTC,B_CLOCK
		NOP
		NOP
		CALL	LONG_DELAY
		BCF		PORTC,A_CLOCK
		BCF		PORTC,B_CLOCK
		CALL	LONG_DELAY
		DECFSZ	TEMP
		GOTO	MOTOR_RW
		BCF		PORTC,A_ENABLE
		BCF		PORTC,B_ENABLE		
		RETLW	0
;==============================================
;工作状态显示
CASE_SHOW
		NOP
;.........
;.........
;.........
;.........
;.........
		RETLW	0
;==============================================
;读键值	
READ_KEY
		
		BTFSC	PORTB,KEY
		GOTO	NO_KEY
		MOVLW	B'00010101'		
		CALL	SEND
		CALL	RECEIVE
		BSF		PORTB,CS
		CALL	TRANSE			;键处理
		RETLW 	1
NO_KEY	         				;添加取消手动功能	
		RETLW	0
;==============================================
;键码转换
TRANSE	CLRF	TEN
		MOVfW	DATA_IN
		XORLW	0X0E
		SKPZ
		GOTO	NEXT1
		MOVLW	D'1'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXT1	MOVfW	DATA_IN
		XORLW	0X1E
		SKPZ
		GOTO	NEXT2
		MOVLW	D'2'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXT2	MOVfW	DATA_IN
		XORLW	0X2E
		SKPZ
		GOTO	NEXT3
		MOVLW	D'3'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXT3	MOVfW	DATA_IN
		XORLW	0X3E
		SKPZ
		GOTO	NEXT4
		MOVLW	D'4'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXT4	MOVfW	DATA_IN
		XORLW	0X0C
		SKPZ
		GOTO	NEXT5
		MOVLW	D'5'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXT5	MOVfW	DATA_IN
		XORLW	0X1C
		SKPZ
		GOTO	NEXT6
		MOVLW	D'6'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXT6	MOVfW	DATA_IN
		XORLW	0X2C
		SKPZ
		GOTO	NEXT7
		MOVLW	D'7'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXT7	MOVfW	DATA_IN
		XORLW	0X3C
		SKPZ
		GOTO	NEXT8
		MOVLW	D'8'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXT8	MOVfW	DATA_IN
		XORLW	0X0A
		SKPZ
		GOTO	NEXT9
		MOVLW	D'9'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXT9	MOVfW	DATA_IN
		XORLW	0X1A
		SKPZ
		GOTO	NEXTX
		MOVLW	D'0'
		MOVWF	TEN
		CALL	SEND_TEN
		GOTO 	TRANSE_OVER
NEXTX	MOVfW	DATA_IN
		XORLW	0X28
		SKPZ
		GOTO	NEXT10
		MOVLW	D'10'
		MOVWF	TEN
		CALL	SEND_TEN			;”小数点“(原 小数点)功能处理
		GOTO 	TRANSE_OVER
NEXT10	MOVfW	DATA_IN
		XORLW	0X06
		SKPZ
		GOTO	NEXT11
		MOVLW	D'11'
		MOVWF	TEN
		;CALL	SEND_TEN			;”快速进刀“(原删除)功能处理
		;MOVLW	D'1'
		;MOVWF	CASE
		GOTO 	TRANSE_OVER
NEXT11	MOVfW	DATA_IN
		XORLW	0X26
		SKPZ
		GOTO	NEXT12
		MOVLW	D'12'
		MOVWF	TEN
		;CALL	SEND_TEN			;”快速退刀“(原日期)功能处理
		;MOVLW	D'2'
		;MOVWF	CASE
		GOTO 	TRANSE_OVER
NEXT12	MOVfW	DATA_IN
		XORLW	0X36
		SKPZ
		GOTO	NEXT13
		MOVLW	D'13'
		MOVWF	TEN
		;CALL	SEND_TEN			;”微动进刀“(原查询)功能处理
		;MOVLW	D'3'
		;MOVWF	CASE
		GOTO 	TRANSE_OVER
NEXT13	MOVfW	DATA_IN
		XORLW	0X16
		SKPZ
		GOTO	NEXT14
		MOVLW	D'14'
		MOVWF	TEN
		;CALL	SEND_TEN			;”微动退刀“(原次数)功能处理
		;MOVLW	D'4'
		;MOVWF	CASE
		GOTO 	TRANSE_OVER
NEXT14	MOVfW	DATA_IN
		XORLW	0X38
		SKPZ
		GOTO	NEXT15
		MOVLW	D'15'
		MOVWF	TEN
		;CALL	SEND_TEN			;”开始加工“(原	TAB+)功能处理
		GOTO 	TRANSE_OVER
NEXT15	MOVfW	DATA_IN
		XORLW	0X3a
		SKPZ
		GOTO	NEXT16
		MOVLW	D'16'
		MOVWF	TEN
		;CALL	SEND_TEN			;”停止加工“(原	TAB-)功能处理
		GOTO 	TRANSE_OVER
NEXT16	MOVfW	DATA_IN
		XORLW	0X2a
		SKPZ
		GOTO	NEXT17
		MOVLW	D'17'
		MOVWF	TEN
		;CALL	SEND_TEN			;”确认“(原	确认)功能处理
		GOTO 	TRANSE_OVER
NEXT17	MOVfW	DATA_IN
		XORLW	0X08
		SKPZ
		GOTO	NEXT18
		MOVLW	D'18'
		MOVWF	TEN
		;CALL	SEND_TEN			;”取消“(原	取消)功能处理
		GOTO 	TRANSE_OVER
NEXT18	MOVfW	DATA_IN
		XORLW	0X4E
		SKPZ
		GOTO	NEXT19
		MOVLW	D'19'
		MOVWF	TEN
		;CALL	SEND_TEN			;”程序设定“(原	A)功能处理
		GOTO 	TRANSE_OVER
NEXT19	MOVfW	DATA_IN
		XORLW	0X4c
		SKPZ
		GOTO	NEXT20
		MOVLW	D'20'
		MOVWF	TEN
		;CALL	SEND_TEN			;”反向“(原	B)功能处理
		GOTO 	TRANSE_OVER
NEXT20	MOVfW	DATA_IN
		XORLW	0X4a
		SKPZ
		GOTO	NEXT21
		MOVLW	D'21'
		MOVWF	TEN
		;CALL	SEND_TEN			;”加工电流“(原	C)功能处理
		GOTO 	TRANSE_OVER
NEXT21	MOVfW	DATA_IN
		XORLW	0X48
		SKPZ
		GOTO	NEXT22
		MOVLW	D'22'
		MOVWF	TEN
		;CALL	SEND_TEN			;”加工时间“(原	D)功能处理
		GOTO 	TRANSE_OVER
NEXT22	MOVfW	DATA_IN
		XORLW	0X48
		SKPZ
		GOTO	TRANSE_OVER
		MOVLW	D'23'
		MOVWF	TEN
		CALL	SELF_TEST			;”强制自检 “(原 米/节 )功能处理

TRANSE_OVER
		RETLW	0
;==============================================
;显示数据
SEND_TEN
		MOVLW	B'10100001'
		CALL	SEND
		MOVLW	B'10000000'
		CALL	SEND
		MOVFW	TEN
		CALL	SEND
		RETLW	0

;==============================================
;延时子程序,长的为50微秒,短的为8微秒
LONG_DELAY	movlw	D'16'    ;设定延时50uS
			movwf	TIMER
DELAY_LOOP	decfsz	TIMER
			goto	DELAY_LOOP
			retlw	0

SHORT_DELAY	movlw	D'3'	;设定延时8uS
			movwf	TIMER
SHORT_LP	decfsz	TIMER
			goto	SHORT_LP
			retlw	0
;==============================================
;发送1个字节到HD7279,高位在前
SEND		movwf	DATA_OUT			;保存待发送字节
			movlw	D'8'
			movwf	BIT_COUNT
			BANKSEL	TRISB				;此处注意PORTB,DAT的方向
			BCF		TRISB,DAT
			BANKSEL	PORTB
			bcf		PORTB,CS			;选中HD7279
			call	LONG_DELAY
SEND_LOOP	bcf		STATUS,C
			rlf		DATA_OUT			;输出1位
			bcf		PORTB,DAT
			btfsc	STATUS,C
			bsf		PORTB,DAT
			bsf		PORTB,CLK			;时钟跳变
			call	SHORT_DELAY
			bcf		PORTB,CLK
			call	SHORT_DELAY
			DECFSZ	BIT_COUNT			;检查发送是否完成
			GOTO	SEND_LOOP			
			BCF		PORTB,DAT
			RETLW		0		
;===============================================================
;从HD7279接收一个字节	,高位在前
RECEIVE		MOVLW	D'8'
			MOVWF	BIT_COUNT
			BANKSEL	TRISB
			BSF		TRISB,DAT
			BANKSEL	PORTB
			bcf		PORTB,CS			;选中HD7279
			CALL	LONG_DELAY
RECEIVE_LOOP
			BSF		PORTB,CLK
			CALL 	SHORT_DELAY
			BSF		STATUS,C
			BTFSS	PORTB,DAT
			BCF 	STATUS,C
			RLF		DATA_IN
			BCF		PORTB,CLK
			CALL	SHORT_DELAY
			DECFSZ	BIT_COUNT
			GOTO	RECEIVE_LOOP
			BANKSEL	TRISB
			BCF		TRISB,DAT
			BANKSEL	PORTB
			RETLW	0





		END                       ; directive 'end of program'

⌨️ 快捷键说明

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