⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.psm

📁 PicoBlaze_Real_Time_Clock
💻 PSM
📖 第 1 页 / 共 5 页
字号:
                 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 + -