📄 clock.psm
字号:
ADD s1, 01
STORE s1, dayB
FETCH s2, DMAX
ADD s2, 01
COMPARE s1, s2
JUMP NZ, NO_MON_UP
LOAD s1, 01
STORE s1, dayB
FETCH s1, monB
ADD s1, 01
STORE s1, monB
COMPARE s1, 0D
JUMP NZ, NO_YEAR_UP
LOAD s1, 01
STORE s1, monB
FETCH s1, yearB
ADD s1, 01
STORE s1, yearB
COMPARE s1, 64
JUMP NZ, NO_YEAR_UP
LOAD s1, 00
STORE s1, yearB
JUMP NO_YEAR_UP
NO_MON_UP:
NO_DAY_UP:
NO_YEAR_UP:
LOAD s0, 00
STORE s0, DAY_UP
LOAD s0, DEC
FETCH s2, monB
ADD s0, s2
FETCH s1, (s0) ;;;K
FETCH s0, yearB
ADD s1, s0 ;;;;;;;K+Y
COMPARE s2, 03
JUMP C, RN
ADD s0, 01 ;;;;100+Y >2(3..12)
RN: ADD s0, 63 ;;;;;99+Y 1,2
SR0 s0
SR0 s0 ;;;/4
ADD s0, s1
ADD s0, 06
FETCH s2, dayB
ADD s0, s2
MOD7: ADD s0, F9
JUMP NC, M7_END
JUMP MOD7
M7_END: ADD s0, 07
STORE s0, week
FETCH s0, mode
AND s0, FF
JUMP NZ, SETUP
;;;RUN
LOAD s5, 20
CALL LCD_cursor
FETCH s5, disp_flag
CALL LCD_write_data
CALL LCD_write_data
CALL LCD_write_data
JUMP MODEUPDATE
SETUP:
;;;SET
LOAD s5, 20
CALL LCD_cursor
LOAD s5, 53 ;;;;;;;;;;;;;;;;;;;;;;; S
CALL LCD_write_data
LOAD s5, 45 ;;;;;;;;;;;;;;;;;;;;;;; E
CALL LCD_write_data
LOAD s5, 54 ;;;;;;;;;;;;;;;;;;;;;;; T
CALL LCD_write_data
MODEUPDATE: FETCH s0, mode
STORE s0, blink_flag
NOCHANGE:
INPUT s0, 00
FETCH s1, disp_flag2
XOR s1, s0
JUMP NZ, restart
STORE s0, disp_flag2
FETCH s0, monB
COMPARE s0, 05
JUMP NZ, chk_sf
FETCH s0, dayB
COMPARE s0, 11
JUMP NZ, chk_sf
FETCH s0, minB
COMPARE s0, 00
JUMP Z, msg7
chk_sf: COMPARE sF, FF
JUMP NZ, NO_BD
CALL LCD_reset
JUMP NO_BD
msg7: LOAD s5, 10
CALL LCD_cursor
CALL disp_msg7 ;
FETCH s0, ms100
COMPARE s0, 32
JUMP C, WAIT
LOAD sF, 00
JUMP restart
WAIT: LOAD sF, FF
JUMP loop
NO_BD: LOAD sF, 00
STORE sF, ms100
JUMP loop
;;;;;;;;;s0---BINARY, s1---BCD_H, s0---BCD_L
B2BCD: LOAD s1, 00 ;
BCD_LP: ADD s0, F6
JUMP NC, H_END
ADD s1, 01 ;
JUMP BCD_LP
H_END: ADD s0, 0A
RETURN
;
; normal_mode: INPUT s0, switch_port ;Read switches and buttons and directly drive LEDs
; OUTPUT s0, LED_port
; RETURN
;
;
;
;This procedure will poll the status of the rotary encoder.
;If rotation occurs, then the LED pattern will adjust appropriately.
;
; rotate_mode: FETCH sA, LED_pattern ;last known position
; FETCH s0, rotary_status ;check status of rotation
; TEST s0, 80 ;test flag
; JUMP Z, update_pattern
; AND s0, 7F ;clear flag
; STORE s0, rotary_status
; TEST s0, rotary_left ;event occurred so update pattern
; JUMP Z, move_right
; RL sA
; JUMP update_pattern
; move_right: RR sA
; update_pattern: STORE sA, LED_pattern
; OUTPUT sA, LED_port ;drive LEDs with current pattern
; RETURN
; ;
;
;
;
;**************************************************************************************
;LCD text messages
;**************************************************************************************
;
;
;Display 'SPARTAN-3E STARTER KIT' on LCD at current cursor position
;
;
disp_msg1:
CALL disp_space
LOAD s5, character_A
CALL LCD_write_data
CALL disp_space
LOAD s5, character_C
CALL LCD_write_data
LOAD s5, character_l
CALL LCD_write_data
LOAD s5, character_o
CALL LCD_write_data
LOAD s5, character_c
CALL LCD_write_data
LOAD s5, character_k
CALL LCD_write_data
CALL disp_space
LOAD s5, character_B
CALL LCD_write_data
LOAD s5, character_a
CALL LCD_write_data
LOAD s5, character_s
CALL LCD_write_data
LOAD s5, character_e
CALL LCD_write_data
LOAD s5, character_d
CALL LCD_write_data
CALL disp_space
RETURN
;
;
;
disp_msg2: LOAD s5, character_S
CALL LCD_write_data
LOAD s5, character_3
CALL LCD_write_data
LOAD s5, character_E
CALL LCD_write_data
CALL disp_space
LOAD s5, character_S
CALL LCD_write_data
LOAD s5, character_t
CALL LCD_write_data
LOAD s5, character_a
CALL LCD_write_data
LOAD s5, character_r
CALL LCD_write_data
LOAD s5, character_t
CALL LCD_write_data
LOAD s5, character_e
CALL LCD_write_data
LOAD s5, character_r
CALL LCD_write_data
CALL disp_space
LOAD s5, character_K
CALL LCD_write_data
LOAD s5, character_i
CALL LCD_write_data
LOAD s5, character_t
CALL LCD_write_data
LOAD s5, character_3
CALL LCD_write_data
RETURN
disp_msg3: CALL disp_space
CALL disp_space
CALL disp_space
CALL disp_space
CALL disp_space
LOAD s5, character_X
CALL LCD_write_data
LOAD s5, character_i
CALL LCD_write_data
LOAD s5, character_l
CALL LCD_write_data
LOAD s5, character_i
CALL LCD_write_data
LOAD s5, character_n
CALL LCD_write_data
LOAD s5, character_x
CALL LCD_write_data
CALL disp_space
CALL disp_space
CALL disp_space
CALL disp_space
CALL disp_space
RETURN
disp_msg4: LOAD s5, character_P
CALL LCD_write_data
LOAD s5, character_i
CALL LCD_write_data
LOAD s5, character_c
CALL LCD_write_data
LOAD s5, character_o
CALL LCD_write_data
LOAD s5, character_B
CALL LCD_write_data
LOAD s5, character_l
CALL LCD_write_data
LOAD s5, character_a
CALL LCD_write_data
LOAD s5, character_z
CALL LCD_write_data
LOAD s5, character_e
CALL LCD_write_data
CALL disp_space
LOAD s5, character_T
CALL LCD_write_data
LOAD s5, character_e
CALL LCD_write_data
LOAD s5, character_s
CALL LCD_write_data
LOAD s5, character_t
CALL LCD_write_data
CALL disp_space
RETURN
disp_msg5: LOAD s5, character_P
CALL LCD_write_data
LOAD s5, character_r
CALL LCD_write_data
LOAD s5, character_e
CALL LCD_write_data
LOAD s5, character_s
CALL LCD_write_data
LOAD s5, character_s
CALL LCD_write_data
CALL disp_space
LOAD s5, 26
CALL LCD_write_data
CALL disp_space
LOAD s5, character_T
CALL LCD_write_data
LOAD s5, character_u
CALL LCD_write_data
LOAD s5, character_r
CALL LCD_write_data
LOAD s5, character_n
CALL LCD_write_data
CALL disp_space
LOAD s5, character_t
CALL LCD_write_data
LOAD s5, character_h
CALL LCD_write_data
LOAD s5, character_e
CALL LCD_write_data
RETURN
disp_msg6: CALL disp_space
LOAD s5, character_E
CALL LCD_write_data
LOAD s5, character_n
CALL LCD_write_data
LOAD s5, character_c
CALL LCD_write_data
LOAD s5, character_o
CALL LCD_write_data
LOAD s5, character_d
CALL LCD_write_data
LOAD s5, character_e
CALL LCD_write_data
LOAD s5, character_r
CALL LCD_write_data
CALL disp_space
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -