📄 zygd.asm
字号:
continu_int1 movlw 0x14
subwf ledaddress,f
goto continu_int
JKJKE:
MOVF INDF, 0
MOVWF BITTM
BTFSC BITTM, 7
BCF PORTA,SDI
BTFSS BITTM,7
BSF PORTA, SDI
BSF PORTA, CLK1
NOP
NOP
NOP
BCF PORTA, CLK1
BTFSC BITTM, 6
BCF PORTA, SDI
BTFSS BITTM, 6
BSF PORTA, SDI
BSF PORTA, CLK1
NOP
NOP
NOP
BCF PORTA, CLK1
BTFSC BITTM, 5
BCF PORTA, SDI
BTFSS BITTM, 5
BSF PORTA, SDI
BSF PORTA, CLK1
NOP
NOP
NOP
BCF PORTA, CLK1
BTFSC BITTM, 4
BCF PORTA, SDI
BTFSS BITTM, 4
BSF PORTA, SDI
BSF PORTA, CLK1
NOP
NOP
NOP
BCF PORTA, CLK1
BTFSC BITTM, 3
BCF PORTA, SDI
BTFSS BITTM, 3
BSF PORTA, SDI
BSF PORTA, CLK1
NOP
NOP
NOP
BCF PORTA, CLK1
BTFSC BITTM, 2
BCF PORTA, SDI
BTFSS BITTM, 2
BSF PORTA, SDI
BSF PORTA, CLK1
NOP
NOP
NOP
BCF PORTA, CLK1
BTFSC BITTM, 1
BCF PORTA, SDI
BTFSS BITTM, 1
BSF PORTA, SDI
BSF PORTA, CLK1
NOP
NOP
NOP
BCF PORTA, CLK1
BTFSC BITTM, 0
BCF PORTA, SDI
BTFSS BITTM, 0
BSF PORTA, SDI
BSF PORTA, CLK1
NOP
NOP
NOP
BCF PORTA, CLK1
bcf status,rp0
return
;*****************************************
;* fill data to ram *
;*****************************************
fill_data movf startaddress,w
movwf FSR
movf optiondata,w
fill_loop clrwdt
movwf INDF
incf FSR,f
decfsz ledcounter,f
goto fill_loop
movlw 0x20
movwf FSR
return
;*****************************************
;* READ KEY STATUS *
;*****************************************
Read_key:
clrwdt
bcf INTCON,GIE
bcf Flag1,updateF
bsf STATUS,RP0 ;//select ram bank1
movlw 0xff
movwf TRISB
bcf STATUS,RP0
;BSF PORTC,ROW_OUT
bcf PORTC,IN1CE
NOP
NOP
movf PORTB,w
movwf tempa
bsf PORTC,IN1CE
;;********************************************
nop
nop
nop
bcf PORTC,IN2CE
nop
movf PORTB,w
movwf tempb
bsf PORTC,IN2CE
;***********************************************
BSF INTCON,GIE
movlw 0xff
subwf tempa,w
btfss STATUS,Z
goto Usedkey
movlw 0xff
subwf tempb,w
btfss STATUS,Z
goto Usedkey
;goto Usedkey
btfss Flag1,ACsignalF
goto Getkey_pre0
decfsz key_count1,f
goto Read_key
decfsz key_count2,f
goto Read_key
bcf Flag1,ACsignalF
bsf Flag1,AllffF
;goto Usedkey_0 ;no key
goto Usedkey
Getkey_pre0:
bsf Flag1,ACsignalF
movlw d'150'
movwf key_count1
movlw d'2'
movwf key_count2
goto Read_key
Usedkey:
bcf Flag1,AllffF
Usedkey_0:
movf tempa,w
subwf tkeya,w
btfss STATUS,Z
goto exitreadkey
movf tempb,w
subwf tkeyb,w
btfss STATUS,Z
goto exitreadkey
;;-------------------------------------
btfss Flag1,PoweronF
goto deal_key
bcf Flag1,PoweronF
bsf Flag1,updateF
return
;;;-------------------------------------------
exitreadkey:
movf tempa,w
movwf tkeya
movf tempb,w
movwf tkeyb
movlw 0x40
movwf key_count3
return
;;;---------------------------------------------
deal_key:
movf tkeyb,w ;stardand is 1 2 3 4 5 6 7 8 9 10
subwf keyb,w
btfsc STATUS,Z
goto read_keyax
goto key_change
; tkeyb x x x x x x up down
read_keyax movf tkeya,w
subwf keya,w
btfss STATUS,Z
goto key_change
RETURN
key_change
decfsz key_count3,f
return
bsf Flag1,updateF
btfsc Flag1,AllffF
return
bcf INTCON,GIE
movf tkeyb,w
movwf keyb ; dec code up down stop o/s
movf tkeya,w
movwf keya ; tkeya o/s stop 6 5 4 3 2 1
movlw 0x00
movwf tdatactrl
btfss tkeya,0
bsf tdatactrl,7 ;//tdatactrl,5 ;----out of service-----;
btfss tkeya,1
;btfsc tkeya,1
bsf tdatactrl,2 ;//tdatactrl,4 ;----STOP-------;
btfss tkeya,3
bsf tdatactrl,1 ;//tdatactrl,3 ;-----over load-----;
btfss tkeya,2
bsf tdatactrl,0 ;//tdatactrl,2 ;------arrow stop-----;
movlw 0x03
andwf tdatactrl,w
movlw 0x03
btfsc STATUS,Z
iorwf tdatactrl,f
clrf tempa
;btfss tkeyb,1 ;高位检测
; bsf tempa,0
; btfss tkeyb,0 ;地位检测
;bsf tempa,1
;btfss tkeya,7
; bsf tempa,2
; btfss tkeya,6
; bsf tempa,3
; btfss tkeya,5
; bsf tempa,4
;btfss tkeya,4
;bsf tempa,5
btfss tkeya,0
bcf tkeya,0
bsf tkeya,0
btfss tkeya,1
bcf tkeya,1
bsf tkeya,1
btfss tkeya,2
bcf tkeya,2
bsf tkeya,2
;comf tkeya,w
;movwf tempa
;comf tkeyb,w
;movwf tempb
;swapf tempb,f
; movf tkeya,w
swapf tkeya,f
movf tkeya,w
movwf tempa
movlw B'01111111'
ANDWF tempb,f
movlw 0x03
btfsc tdatactrl,7
iorwf tdatactrl,f
movf tempa,w
btfss STATUS,Z
goto Get_Floor
movlw 0xff
movwf tdataleft
movwf tdataright
return
Get_Floor ;查表子程序
; abcdefg ;存储7段显示码10个从0~9存储到F0~F9
BSF STATUS,RP0 ;选择BANK1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;movlw B'0000001' ;数字0代码 ;存储7段显示码10个从0~9存储到F0~F9
;movwf F0
movlw B'1000000'
movwf number0
;movlw B'1001111' ;数字1代码
;movwf F1
movlw B'1111001'
movwf number1
;movlw B'0010010' ;数字2代码
;movwf F2
movlw B'0100100'
movwf number2
movlw B'0000110' ;数字3代码
;movwf F3
movlw B'0110000'
movwf number3
;movlw B'1001100' ;数字4代码
;movwf F4
movlw B'0011001'
movwf number4
;movlw B'0100100' ;数字5代码
movlw B'0010010'
;movwf F5
movwf number5
;movlw B'0100000' ;数字6代码
movlw B'0000010'
;movwf F6
movwf number6
;movlw B'0001111' ;数字7代码
;movwf F7
movlw B'1111000'
movwf number7
movlw B'0000000' ;数字8代码
;movwf F8
movwf number8
;movlw B'0000100' ;数字9代码
;movwf F9
movlw B'0010000'
movwf number9
MOVLW B'00000000'
;MOVWF F10
movwf number ;存放查找的数字
movlw B'00001010' ;查找10次循环
movwf number11 ;存放查找的次数
;movlw f0
;movlw number
;movwf FSR
MOVLW B'11110000'
MOVWF FSR
;movfw tempb
loopfloor: ;MOVF FSR,W
;MOVFW FSR
movf INDF,w
BCF STATUS,RP0 ;选择BANK0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SUBWF tempb,w
btfss status,z
goto loopfloor0
;goto floornumber
BSF STATUS,RP0
movf number,W
BCF STATUS,RP0
movwf tdataright
BCF STATUS,RP0 ;选择BANK0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GOTO HIGHFLOOR
loopfloor0
BSF STATUS,RP0 ;选择BANK1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
incf FSR,f
incf number,f
decfsz number11,f
goto loopfloor
goto lggug
return
lggug
movlw B'0100000'
BCF STATUS,RP0
CLRZ
SUBWF tempb,w
btfss status,z
goto HIGHFLOOR
;ruturn
BCF STATUS,RP0 ;选择BANK0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw B'00010000' ;把字符G送到tdataright
movwf tdataright
;return
GOTO HIGHFLOOR
;gue
;movlw B'0100000'
;SUBWF tempb,w
;btfss status,z
;goto gue
;movlw g ;把字符G送到tdataright
;movwf tdataright
; return
;;;;;;;;;;;;上面是低位楼层判断,以下是高位判断
; movfw tempa
HIGHFLOOR
BCF STATUS,RP0 ;选择BANK0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
swapf tempa,f ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;调试时所加的
movlw B'00001111'
andwf tempa,f
movlw B'00001111'
SUBWF tempa,z ;低四位为1111表示楼层高位没有
goto others
return
others
BCF STATUS,RP0
movlw B'00001111'
andwf tempa,f
movlw B'00001001'
SUBWF tempa,z ;低四位为1001表示楼层高位为1
goto others1
movlw 1
movwf tdataleft
return
others1
BCF STATUS,RP0
movlw B'00001111'
andwf tempa,f
movlw B'00001011'
SUBWF tempa,z ;低四位为1001表示楼层高位为2
goto others2
movlw 2
movwf tdataleft
return
others2
BCF STATUS,RP0
movlw B'00001111'
andwf tempa,f
movlw B'00000000'
SUBWF tempa,z ;低四位为1001表示楼层高位为1
goto others3 ;;;低四位为0000表示楼层高位为u
movlw B'00011111' ;u返回的代码是1f
movwf tdataleft
return
others3
BCF STATUS,RP0
movlw B'00001111'
andwf tempa,f
movlw B'00000110'
SUBWF tempa,z ;低四位为1001表示楼层高位为L
goto others4
movlw B'00010101'; L返回的代码是15h
movwf tdataleft
return
others4 BCF STATUS,RP0
movlw B'00001111'
andwf tempa,f
movlw B'00001110'
SUBWF tempa,z ;低四位为1110表示楼层高位为没有
;goto others2
;movlw L
;movwf tdataleft
return
;以上是检测楼层的高位字节检测后的楼层信息存储在tdataleft
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; addwf tempa,f
; swapf tempa,f
; movlw 0x0f ;把高四位设置为零
; andwf tempa,w ;把高四位设置为零
; iorlw 0x70 ;把高四位设置为0111.
; movwf romaddress
; call BStart
; call Deviceadd
; call Send1Byte
; call Wordadd
; swapf tempa,f
; movlw 0x0f
; andwf tempa,w
; iorwf romcounter,f
; call Send1Byte
; call BStart
; call Deviceadd
; bsf romcounter,0
; call Send1Byte
; call Read1Byte
; movf romcounter,w
; movwf tdataright
; call ACK
; call Read1Byte
; movf romcounter,w
; movwf tdataleft
; call NACK
; call BStop
; clrwdt
; bcf PIR1,TMR2IF
; return
;*****************************************
;* processs test sign *
;*****************************************
test_stop clrwdt
nop
bsf displayflag,2
clrall movlw 0xFF ;clear all memory from 40~7f
movwf optiondata
movlw 0x50
movwf startaddress
movlw 0x14
movwf ledcounter
call fill_data
return
;*****************************************
;* PROGRAMM START UP AND INIT ALL PORT *
;*****************************************
Start
nop
nop
movlw 0x65 ;14 ;speed of moving arrow
movwf rcounterh
ddloop2
clrwdt
decfsz rcounterh,f
goto ddloop2
BCF INTCON,GIE
bcf STATUS,RP1 ; only for 67
bsf STATUS,RP0
movlw 0x06
movwf ADCON1
bcf STATUS,RP0
CLRWDT
clrf PORTA
;mov
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -