📄 clock.psm
字号:
LOAD s5, 2D ;;;;;;;;;;;;;;;;;;;;;; -
CALL LCD_write_data
LOAD s5, 2D ;;;;;;;;;;;;;;;;;;;;;; -
CALL LCD_write_data
LOAD s5, 2D ;;;;;;;;;;;;;;;;;;;;;; -
CALL LCD_write_data
LOAD s5, 28
CALL LCD_cursor
LOAD s5, 2F ;;;;;;;;;;;;;;;;;;;;;; /
CALL LCD_write_data
LOAD s5, 2B
CALL LCD_cursor
LOAD s5, 2F ;;;;;;;;;;;;;;;;;;;;;; -
CALL LCD_write_data
RETURN
;
;Position the cursor ready for characters to be written.
;The display is formed of 2 lines of 16 characters and each
;position has a corresponding address as indicated below.
;
; Character position
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
;
; Line 1 - 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
; Line 2 - C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
;
;This routine will set the cursor position using the value provided
;in register s5. The upper nibble will define the line and the lower
;nibble the character position on the line.
; Example s5 = 2B will position the cursor on line 2 position 11
;
;Registers used s0, s1, s2, s3, s4
;
LCD_cursor: TEST s5, 10 ;test for line 1
JUMP Z, set_line2
AND s5, 0F ;make address in range 80 to 8F for line 1
OR s5, 80
CALL LCD_write_inst8 ;instruction write to set cursor
RETURN
set_line2: AND s5, 0F ;make address in range C0 to CF for line 2
OR s5, C0
CALL LCD_write_inst8 ;instruction write to set cursor
RETURN
;
;This routine will shift the complete display one position to the left.
;The cursor position and LCD memory contents will not change.
;
;
;Registers used s0, s1, s2, s3, s4, s5
;
;LCD_shift_left: LOAD s5, 18 ;shift display left
; CALL LCD_write_inst8
; RETURN
;
;**************************************************************************************
;Interrupt Service Routine (ISR)
;**************************************************************************************
ISR: STORE s0, ISR_s0 ;preserve s0
STORE s1, ISR_s1
STORE s2, ISR_s2
INPUT s1, rotary_port
LOAD s0, 00
TEST s1, rotary_press
JUMP Z, no_press
FETCH s0, pressed
COMPARE s0, 00
JUMP NZ, no_press
FETCH s2, LED_pattern
ADD s2, 01
STORE s2, LED_pattern
FETCH s2, mode
ADD s2, 01
COMPARE s2, 07
JUMP NZ, mode_save
AND s2, 00
mode_save: STORE s2, mode ;;;;;0-normal;1-hour;2-min;3-sec;4-day,5-mon,6-year
LOAD s0, FF
no_press: STORE s0, pressed
TEST s1, 40 ;;;rotary INT ?
JUMP Z, T2_5m_INT ;;NOT rotary INT,JUMP away
CLR_INT2: LOAD s0, 40 ;;;;;CLR_INT1
OUTPUT s0, 20
FETCH s0, LED_pattern
TEST s1, rotary_left
JUMP Z, ITS_RIGHT
ADD s0, FF
STORE s0, LED_pattern
;;;turn left,--
FETCH s0, mode
COMPARE s0, 00
JUMP Z, CLR_INT1 ;
COMPARE s0, 01
JUMP NZ, MODE2N
FETCH s1, hourB
ADD s1, FF
COMPARE s1, FF ;;;24
JUMP NZ, SAVE_HHN
LOAD s1, 17
SAVE_HHN: STORE s1, hourB
JUMP real_time_end
MODE2N: COMPARE s0, 02
JUMP NZ, MODE3N
FETCH s1, minB
ADD s1, FF
COMPARE s1, FF ;;;3C;;60
JUMP NZ, SAVE_MMN
LOAD s1, 3B
SAVE_MMN: STORE s1, minB
JUMP real_time_end
MODE3N: COMPARE s0, 03
JUMP NZ, MODE4N
FETCH s1, secB
ADD s1, FF
COMPARE s1, FF ;;;60
JUMP NZ, SAVE_SSN
LOAD s1, 3B
SAVE_SSN: STORE s1, secB
JUMP real_time_end
MODE4N: COMPARE s0, 04
JUMP NZ, MODE5N
FETCH s1, monB
ADD s1, FF
COMPARE s1, 00 ;;;12
JUMP NZ, SAVE_MONN
LOAD s1, 0C
SAVE_MONN: STORE s1, monB
JUMP real_time_end
MODE5N: COMPARE s0, 05
JUMP NZ, MODE6N
FETCH s1, dayB
ADD s1, FF
COMPARE s1, 00 ;;;12
JUMP NZ, SAVE_DAYN
FETCH s1, DMAX
SAVE_DAYN: STORE s1, dayB
JUMP real_time_end
MODE6N: COMPARE s0, 06
JUMP NZ, MODE7N
FETCH s1, yearB
ADD s1, FF
COMPARE s1, FF ;;;12
JUMP NZ, SAVE_YEARN
LOAD s1, 63
SAVE_YEARN: STORE s1, yearB
MODE7N:
JUMP real_time_end
ITS_RIGHT: ADD s0, 01
STORE s0, LED_pattern
;;;turn right++
FETCH s0, mode
COMPARE s0, 00
JUMP Z, CLR_INT1 ;
COMPARE s0, 01
JUMP NZ, MODE2P
FETCH s1, hourB
ADD s1, 01
COMPARE s1, 18 ;;;24
JUMP NZ, SAVE_HHP
LOAD s1, 00
SAVE_HHP: STORE s1, hourB
JUMP real_time_end
MODE2P: COMPARE s0, 02
JUMP NZ, MODE3P
FETCH s1, minB
ADD s1, 01
COMPARE s1, 3C ;;;3C;;60
JUMP NZ, SAVE_MMP
LOAD s1, 00
SAVE_MMP: STORE s1, minB
JUMP real_time_end
MODE3P: COMPARE s0, 03
JUMP NZ, MODE4P
FETCH s1, secB
ADD s1, 01
COMPARE s1, 3C ;;;60
JUMP NZ, SAVE_SSP
LOAD s1, 00
SAVE_SSP: STORE s1, secB
JUMP real_time_end
MODE4P: COMPARE s0, 04
JUMP NZ, MODE5P
FETCH s1, monB
ADD s1, 01
COMPARE s1, 0D ;;;12
JUMP NZ, SAVE_MONP
LOAD s1, 01
SAVE_MONP: STORE s1, monB
JUMP real_time_end
MODE5P: COMPARE s0, 05
JUMP NZ, MODE6P
FETCH s1, dayB
ADD s1, 01
FETCH s2, DMAX
ADD s2, 01
COMPARE s1, s2
JUMP NZ, SAVE_DAYP
LOAD s1, 01
SAVE_DAYP: STORE s1, dayB
JUMP real_time_end
MODE6P: COMPARE s0, 06
JUMP NZ, MODE7P
FETCH s1, yearB
ADD s1, 01
COMPARE s1, 64 ;;;12
JUMP NZ, SAVE_YEARP
LOAD s1, 00
SAVE_YEARP: STORE s1, yearB
MODE7P: JUMP real_time_end
CLR_INT1: LOAD s0, 40 ;;;;;CLR_INT1
OUTPUT s0, 20
;;;TIMER interrupt process;;;;mode:::0-normal;1-hour;2-min;3-sec;4-day,5-mon,6-year
T2_5m_INT: TEST s1, 80
JUMP Z, end_ISR
LOAD s0, 80 ;;;;;;;;;;clr_int2
OUTPUT s0, 20
FETCH s0, ms1
ADD s0, 01
STORE s0, ms1
COMPARE s0, 64
JUMP NZ, real_time_end
AND s0, 00 ;;;;;;;;;;;;;CLR ms1
STORE s0, ms1
FETCH s0, LED_pattern ;
ADD s0, 10
STORE s0, LED_pattern
FETCH s1, ms500
ADD s1, 01
STORE s1, ms500
COMPARE s1, 01 ;
JUMP NZ, CMP_2
LOAD s0, 2D ;;;------
JUMP CMP_4
CMP_2: COMPARE s1, 02 ;
JUMP NZ, CMP_3
LOAD s0, 60 ;;;\\\\\\
JUMP CMP_4
CMP_3: COMPARE s1, 03 ;
JUMP NZ, CMP_4
LOAD s0, 7C ;;;||||
CMP_4: STORE s0, disp_flag
COMPARE s1, 04
JUMP NZ, real_time_end
LOAD s0, 2F ;;;////
;;FETCH s0,disp_flag
;;ADD s0,01
STORE s0, disp_flag
AND s1, 00 ;;;;;;;;;;;;;CLR ms500
STORE s1, ms500
FETCH s0, secB ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CLOCK PROCESS START
ADD s0, 01
STORE s0, secB
COMPARE s0, 3C ;;;60
JUMP NZ, real_time_end
AND s0, 00
STORE s0, secB
FETCH s0, minB
ADD s0, 01
STORE s0, minB
COMPARE s0, 3C
JUMP NZ, real_time_end
AND s0, 00
STORE s0, minB
;;;24 Hours
FETCH s0, hourB
ADD s0, 01
STORE s0, hourB
COMPARE s0, 18
JUMP NZ, real_time_end
AND s0, 00
STORE s0, hourB
DAY_P: FETCH s0, DAY_UP
LOAD s0, 01
STORE s0, DAY_UP
real_time_end: FETCH s0, ms2 ;;;;;;;;2.5ms counter
ADD s0, 01
COMPARE s0, 28 ;;;;;;counter to 100ms
JUMP NZ, store_ms2
FETCH s1, ms100
ADD s1, 01
SAV_ms100: STORE s1, ms100
LOAD s0, 00
store_ms2: STORE s0, ms2
FETCH s0, LED_pattern
OUTPUT s0, LED_port
end_ISR: FETCH s0, ISR_s0 ;restore s0
FETCH s1, ISR_s1 ;restore s1
FETCH s2, ISR_s2 ;restore s2
RETURNI ENABLE
;**************************************************************************************
;Interrupt Vector
;**************************************************************************************
;
ADDRESS 3FF
JUMP ISR
;First Screen:
;1234567890123456
; Clock Based
;S3E Starter kit
;Second Screen:
;1234567890123456
; X Xilinx
;PicoBlaze Test
;Third Screen:
;1234567890123456
; Press & Turn
;Encoder to Adjust
;1234567890123456
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -