📄 zygd.asm
字号:
bsf STATUS,RP0
movlw 0xc7 ; 1100 0111
movwf TRISA ;RA0,RA1,RA2为输入,RA3,RA4,RA5为输出
bcf STATUS,RP0
movlw 0xff
movwf PORTA
clrf PORTB
clrf PORTC
bsf STATUS,RP0
movlw 0x80 ; 1000 0100
movwf TRISC
movlw 0x00 ;
movwf TRISB
bcf STATUS,RP0
movlw 0xff
movwf PORTB
movwf PORTC
movlw 0x6c
movwf FSR
clrdisbuf: ;清显示缓冲区从0x6c~
movlw 0xff
movwf INDF
incf FSR,f
btfss Fsr,7
goto clrdisbuf
movlw 0x20
movwf FSR
;*****************************************
;* set up timer2 for dispaly unit *
;*****************************************
bcf STATUS,RP0
movlw 0x02 ; 0 0000 0 00
movwf T2CON
clrf TMR2
bsf TMR2,2
bsf STATUS,RP0
movlw 0x40 ;40
movwf PR2 ;SET TIMER2 PERIOD REGISTER
bcf INTCON,GIE
bsf INTCON,PEIE
bsf PIE1,TMR2IE
bcf STATUS,RP0
bcf PIR1,TMR2IF ;clear intrupt flag
bsf T2CON,2 ;turn on timer2
;*****************************************
;* set up startup parameter *
;*****************************************
movlw 0x00
movwf rcounterl
movlw 0x6c
movwf ledaddress
movlw 0x0a
movwf delay_int
bsf STATUS,RP0
movlw 0xfe ; 1111 1 110
movwf OPTION_REG
bcf STATUS,RP0
BCF PIR1,TMR1IF
bsf Flag1,PoweronF
bcf Flag1,updateF
;*****************************************
;* MAIN PROGRAMM *
;*****************************************
main
btfsc PORTA,0
GOTO wait_deal_encoder
CLRWDT
movlw 0xbf ;clear all memory from 40~7f
movwf optiondata
movlw 0x6c
movwf startaddress
movlw 0x14
movwf ledcounter
call fill_data
movlw 0x01 ;set up delay timer for shift movtion
movwf timerb
clrf displayflag ; 0 ,1 ,2=start testing line
movlw 0xff
movwf dataleft
movwf datactrl
movwf tdataleft
movwf tdatactrl
clrf dataright
clrf tdataright
clrf keyb
clrf keya
movlw 0x10 ;50 ;10 ;40 ;20 ;10
movwf key_count1
bsf displayflag,0
movlw 0x20
movwf romcounter
bsf INTCON,GIE ;start int
movlw 0x20
movwf databank
continu_scan
clrwdt
movf databank,f
btfss STATUS,Z
goto continu_scan
movlw 0x20
movwf databank
movlw 0x14
movwf optiondata
movlw 0x6c
movwf FSR
continu_mov bcf STATUS,C
btfsc INDF,0
bsf STATUS,C
rrf INDF,f
incf FSR,f
decfsz optiondata,f
goto continu_mov
decfsz romcounter,f
goto continu_scan
;******************************************************************
check_key
bcf displayflag,0
call test_stop
movlw 0x6c
movwf startaddress
movlw 0x14
movwf ledcounter
call fill_data
bcf datactrl,2
clrf Flag1
CLRF key_flag
clrf tdatactrl
check_key_sign
clrwdt
btfsc tdatactrl,7
call out_service
call Read_key
btfss Flag1,updateF
goto check_key_sign
btfss Flag1,AllffF
goto subkey
call test_stop
goto check_key_sign
subkey:
movf tdataleft,w
movwf dataleft
movf tdataright,w
movwf dataright
btfsc tdatactrl,7
goto check_key_sign
bcf key_flag,0 ;os flag
call Data_Floor
call arrow_judge
goto check_key_sign
Data_Floor
movlw 0x03
andwf tdatactrl,w
sublw 0x03
bsf flag_arrow,no_arrow_f
btfss STATUS,Z
bcf flag_arrow,no_arrow_f
movlw 0xFF ;clear all memory from 40~7f
movwf optiondata
movlw 0x50
movwf startaddress
movlw 0x14
btfss flag_arrow,no_arrow_f
movlw 0x0a
movwf ledcounter
call fill_data
movlw 0xff
movwf 0x5e
subwf tdataleft,w
btfss STATUS,Z
goto floor1
movlw 0xff
subwf tdataright,w
btfsc STATUS,Z
return
floor1
movlw 0xff
subwf tdataleft,w
btfsc STATUS,Z
goto no_highfloor
movlw 0xff
subwf tdataright,w
btfsc STATUS,Z
goto special_floor
movf tdataleft,w
movwf romaddress
movlw 0x5a
btfss flag_arrow,no_arrow_f
movlw 0x55
movwf FSR
movlw 0x05
movwf rombank
call ReadanyByte
movf tdataright,w
movwf romaddress
movlw 0x55
btfss flag_arrow,no_arrow_f
movlw 0x50
movwf FSR
movlw 0x05
movwf rombank
call ReadanyByte
GOTO deal_data
no_highfloor
clrwdt
movlw 0xff
subwf tdataright,w
btfsc STATUS,Z
return
movf tdataright,w
movwf romaddress
movlw 0x50
movwf FSR
movlw 0x05
movwf rombank
call ReadanyByte
btfsc flag_arrow,no_arrow_f
goto no_a1
movf 0x50,w
movwf 0x56
movf 0x51,w
movwf 0x57
movf 0x52,w
movwf 0x58
movf 0x53,w
movwf 0x59
movf 0x54,w
movwf 0x50
movlw 0xff
movwf 0x51
movwf 0x52
movwf 0x53
movwf 0x54
movwf 0x5e
return
no_a1:
movf 0x50,w
movwf 0x5c
movf 0x51,w
movwf 0x5d
movf 0x52,w
movwf 0x5e
movf 0x53,w
movwf 0x55
movf 0x54,w
movwf 0x56
movlw 0xff
movwf 0x50
movwf 0x51
movwf 0x52
movwf 0x53
movwf 0x54
return
special_floor
movf tdataleft,w
andlw 0x0f
movwf rombank
addwf rombank,w
addlw 0x4d
movwf romaddress
movlw 0x50
btfsc flag_arrow,no_arrow_f
movlw 0x55
movwf FSR
movlw 0x0a
movwf rombank
call ReadanyByte
goto deal_data
deal_data
btfss flag_arrow,no_arrow_f
goto deal_data_arr
movf 0x5a,w
movwf 0x63
movf 0x5b,w
movwf 0x5a
movf 0x5c,w
movwf 0x5b
movf 0x5d,w
movwf 0x5c
movf 0x5e,w
movwf 0x5d
movlw 0xff
movwf 0x5e
return
deal_data_arr
movf 0x55,w
movwf 0x5e
movf 0x56,w
movwf 0x55
movf 0x57,w
movwf 0x56
movf 0x58,w
movwf 0x57
movf 0x59,w
movwf 0x58
movlw 0xff
movwf 0x59
movwf 0x5c
movwf 0x5d
return
arrow_judge
btfsc tdatactrl,2
bsf Flag1,continue_m
movlw 0x03
andwf datactrl,w
movwf tempa
movlw 0x03
andwf tdatactrl,w
subwf tempa,w
btfss STATUS,Z
goto con_arrow
movf tdatactrl,w
movwf datactrl
movlw 0x03
andwf tdatactrl,w
sublw 0x03
btfss STATUS,Z
goto arrow01
call mirror_data
return
arrow01:
call mirror_data1
return
con_arrow
btfss tdatactrl,2
bcf Flag1,continue_m
movf tdatactrl,w
movwf datactrl
btfsc flag_arrow,no_arrow_f
goto no_arrow1
movlw 0xff
movwf 0x5a
movwf 0x5b
movwf 0x5c
movwf 0x5d
movwf 0x5f
movwf 0x60
movwf 0x61
movwf 0x62
movwf 0x63
movlw 0x00
movwf coladdress
movlw 0x50
movwf ledaddress
clrwdt
bcf displayflag,0
btfss tdatactrl,0
goto up_arrow
btfsc tdatactrl,1
goto no_arrow
down_arrow movlw 0x27
movwf romaddress
movlw 0x5f
movwf FSR
movlw 0x05
movwf rombank
call ReadanyByte
no_arrow movf 0x5f,w
movwf 0x5b
movf 0x60,w
movwf 0x5a
bsf INTCON,GIE
no_arrow1
call mirror_data
return
up_arrow movlw 0x25
movwf romaddress
movlw 0x5f
movwf FSR
movlw 0x05
movwf rombank
call ReadanyByte
goto no_arrow
mirror_data:
bcf INTCON,GIE
movf 0x5a,w
movwf 0x76
movf 0x5b,w
movwf 0x77
movf 0x5f,w
movwf 0x7b
movf 0x60,w
movwf 0x7c
movf 0x61,w
movwf 0x7d
movf 0x62,w
movwf 0x7e
movf 0x63,w
movwf 0x7f
mirror_data1:
movf 0x50,w
movwf 0x6c
movf 0x51,w
movwf 0x6d
movf 0x52,w
movwf 0x6e
movf 0x53,w
movwf 0x6f
movf 0x54,w
movwf 0x70
movf 0x55,w
movwf 0x71
movf 0x56,w
movwf 0x72
movf 0x57,w
movwf 0x73
movf 0x58,w
movwf 0x74
movf 0x59,w
movwf 0x75
movf 0x5c,w
movwf 0x78
movf 0x5d,w
movwf 0x79
movf 0x5e,w
movwf 0x7a
bsf INTCON,GIE
return
;**********************************************************
;key_flag define:
;0---1:there is os just now
;1---0:display X ,1:display Floor
;2---1:clear display
;**********************************************************
out_service clrwdt
btfsc key_flag,0
goto serviceX
servicex1:
call test_stop
;clrf key_flag
bsf key_flag,0
bcf key_flag,1
bcf key_flag,2
movlw 0xff
movwf delay_a
movlw 0x1a
movwf delay_b
movf tdatactrl,w
movwf datactrl
movlw 0x44
movwf romaddress
movlw 0x55
movwf FSR
movlw 0x0a
movwf rombank
call ReadanyByte
call mirror_data
return
serviceX:
btfsc key_flag,1
goto service_fl1
decfsz delay_a,f
return
decfsz delay_b,f
return
btfsc key_flag,2
goto service_fl
bsf key_flag,2
movlw 0xff
movwf delay_a
movlw 0x0a
movwf delay_b
call test_stop
call mirror_data
return
service_fl:
bsf key_flag,1
bcf key_flag,2
call Data_Floor
movlw 0x1a
movwf delay_b
movlw 0xff
movwf delay_a
call mirror_data
return
service_fl1: decfsz delay_a,f
return
decfsz delay_b,f
return
btfsc key_flag,2
goto servicex1
bsf key_flag,2
movlw 0x0a
movwf delay_b
movlw 0xff
movwf delay_a
call test_stop
call mirror_data
return
;***************************************************
;***************************************************
move_uparrow
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -