📄 f876tmpo.asm
字号:
;
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 + -