16*16精确字幕时钟汇编代码

来源:互联网 发布:spring事务源码分析 编辑:程序博客网 时间:2024/04/30 02:34

;******* variable table ****

; 021H~022H;RDWORD

; 030H,031H;HOUR
; 032H; :
; 033H,034H;MINUTE
; 035H, :
; 036H,037H;SECOND
; 038H;NUL SCR

; 023H;HOUR
; 024H;MINUTE
; 025H;SECOND
; 026H;JINZHI 函数
; 027H
; 028H TEMP
; 03EH;SCRLENGTH
; 0200h
; 0201h;interrupt_0 mark


; 03BH;TABLE VALUE 
; ;03CH;BIT_INDEX
; ;03DH;R3,TMP
; 03EH; SCRSTKLEN
; 03FH; SEEK_VALUE

; 0200H;BIT BITEND
; 0201H NEW_STACK
;
; 040H~05FH; SCREEN STACK
; 1区
; r5,r7;null
; R5;秒计数器

;******** FUNCTION TABLE ***
; T0START
; T0SERV
; SETTIME
; SETTB
; RDBYTE
; REWORD 
; RDTABVALUE
; DISPLAY
; CLSSCR
; FRAME
; CHK_BIT_END
; CHK_SRC_STACK
; POP_SCR_STACK
; inc_hour;int0
; inc_minute;int1

;******** START *****
 ORG 0000H;
RESET: AJMP START;
 ORG 0003H;
 ;AJMP INTERRUPT_0;

 ORG 000BH;
 AJMP T0SERV
 ORG 0013H;
  ;INTERRUPT_1:
 ORG 001BH;
  ;AJMP: INTERRUPT_TIMER0:
 ORG 0023H;
  ;SINT

 ORG 0100H;
START: 
 ;SETB P3.2;
 ;SETB P3.3;
 MOV SP,#60H;
 CALL CLS_SCR_STACK; 
 CALL SETTIME;
 SETB 0200H;
 MOV 03CH,#0FFH;
TIME_RESET: 
 
 MOV R5,#014H;(20)D 1 SECOND
 MOV 025H,#00H
 CALL INC_MINUTE;
 CALL INC_HOUR;
 CALL T0START;
MAIN:
 PRESS_INC_HOUR:
  JB P3.2,PRESS_INC_HOUR_END;
  JNB P3.2,$;
  INC 023H;
  AJMP TIME_RESET;
  PRESS_INC_HOUR_END:
 PRESS_INC_MINUTE:
  JB P3.3,PRESS_INC_MINUTE_END;
  JNB P3.3,$;
  INC 024H;
  AJMP TIME_RESET;
  PRESS_INC_MINUTE_END:  
  call display
AJMP MAIN
;***** display *******
display:
 MOV R4,#03H;
 display_AA:
  CALL FRAME;
 DJNZ R4,display_AA;
 CALL POP_SCR_STACK;
 CALL PUSH_SCR_STACK;
display_end:ret
;********* CLS_SCR_STACK ***
CLS_SCR_STACK: 
 MOV R1,#040H;
 MOV R0,#20H;
 CLS_SCR_STACK_LOOP:
  MOV @R1,#00H;
  INC R1;
 DJNZ R0,CLS_SCR_STACK_LOOP;

CLS_SCR_STACK_RET: RET

;********* T0START *******
T0START:
 
 MOV TL0,#0bH;
 MOV TH0,#03DH;
        MOV TMOD,#00000001B;
 setb EA;
 setb ET0;
 setb TR0;
RET;
;** T0SERV  *******
T0SERV:
 MOV 027H,A;
  MOV A,TL0;
  cjne a,#08h,repaire1; 2
   nop
   nop
   
   ajmp repaire; 2
  repaire1:
  cjne a,#07h,repaire2; 2
   nop
   
   ajmp repaire; 2
  repaire2:
  cjne a,#06h,repaire3;
   
   ajmp repaire;
  repaire3:
   nop
   nop
   nop
  repaire: 
  
 MOV A,027H;
 DJNZ R5,T0SERV_AA;
  CALL INC_TIME;
  MOV R5,#014H;
  AJMP T0SERV_BB;
  
 T0SERV_AA:
  MOV 027H,#34
  DJNZ 027H,$
  NOP

 T0SERV_BB:

  
  MOV TH0,#03DH;
  MOV TL0,#0bH;
   
T0SERV_RET: RETI;

;******* GARRIS0N *****
;有两个参数,一个是要检查的进位,还有一个是要进的位?
;SETB PSW.3
;MOV R0,SCR
;MOV R1,DEST;
;MOV 026H;JINZHI

GARRISON:
 ;INC @R0;
 MOV A,@R0;
 CJNE A,026H,GARRISON_REPAIRE;(026)jin'zhi
  INCREASE_HIGH:
  MOV @R0,#00H;
  INC @R1;
  AJMP GARRISON_RET;

 GARRISON_REPAIRE:
 NOP;
 NOP;
 NOP;
 NOP;
GARRISON_RET:
 
 CLR PSW.3;
 RET

 


;******* INC_TIME *******
INC_TIME:
 CALL INC_SECOND;
 CALL INC_MINUTE;
 CALL INC_HOUR;
INC_TIME_RET:
 RET

;*** INC_SECOND *****
; 023H;HOUR
; 024H;MINUTE
; 025H;SECOND
INC_SECOND:
 SETB PSW.3;
 MOV R0,#025H;
 MOV R1,#024H;
 INC @R0;
 MOV 026H,#03CH;
 CALL GARRISON;
INC_SECOND_RET:
 RET;
;** INC_MINUTE ******
INC_MINUTE:
 SETB PSW.3;
 MOV R0,#024H;
 MOV R1,#023H;
 MOV 026H,#03CH;
 CALL GARRISON;
INC_MINUTE_RET:
 RET;
;******* INC_HOUR ***
INC_HOUR:
 SETB PSW.3;
 MOV R0,#023H;
 MOV R1,#027H;
 MOV 026H,#018H;24D
 CALL GARRISON;
INC_HOUR_RET:
 RET;

;*** SETTIME *****
SETTIME: MOV 023H,#12;时
  MOV 024H,#42;分
  MOV 025H,#00;秒
  CALL SETTB;
  RET

;***** SETTB (SET TIME BIT)********
; 038H;HOUR
; 039H;MINUTE
; 03AH;SECOND
;
; 030H,031H;HOUR
; 032H; :
; 033H,034H;MINUTE
; 035H, :
; 036H,037H;SECOND
SETB PSW.4
SETTB:
 MOV R0,#23H;
 MOV R1,#030H;
 MOV R2,#03H;
 SETTB_AA:
  CALL SET_ONE_BIT;
 DJNZ R2,SETTB_AA;

 MOV 038H,#0BH;
CLR PSW.4

SETTB_RET:RET
;******* SET_ONE_BIT ******
SET_ONE_BIT:
 ;MOV R0,#023H;
 ;MOV R1,#030H;
 
 MOV A,@R0
 MOV B,#0AH;
 DIV AB;
 MOV @R1,A;
 INC R1;
 MOV @R1,B;
 INC R1; 
 
 MOV A,R1;
 CJNE A,#038H,SET_ONE_BIT_AA;
 AJMP SET_ONE_BIT_BB;
 SET_ONE_BIT_AA:
  MOV @R1,#0AH;
 SET_ONE_BIT_BB:
 INC R1;
 INC R0;

SET_ONE_BIT_RET: RET
;**** RDBYTE ***
RDBYTE:
 MOV A,#00H;
 MOVC A,@A+DPTR;
 INC DPTR;
RET

;** RDWORD ****
RDWORD:
 ;WORD buffer is 016h @ 017h;
 CALL RDBYTE;
 MOV 021H,A;
 CALL RDBYTE;
 MOV 022H,A;
RET
;**** READTABVALUE *******
; 03BH;READTABVALUE
; VARIABLE SEEK_VALUE
; 03FH; SEEK_VALUE
; RETURN TAB VALUE IN OBH
; RETURN TAB DATA'S DPTR IN DPTR
RDTABVALUE:
 MOV 03BH,#0FFH;
 ;MOV A,03FH;把要查的值给a
 MOV DPTR,#TAB0;
 RTVLOOP:
  MOV A,03FH;
  CJNE A,03BH,RTVLOOP1;比较readtabvalue的值和要查找?
   AJMP RDTV_RET;
   RTVLOOP1: 
    CALL RDWORD;
          MOV A,021H;
   CJNE A,#0CEH,RTVLOOP1;
   MOV 03BH,022H;
 AJMP RTVLOOP;
RDTV_RET: RET

;********* FRAME ********
; 0CH FRAME WIDTH
; 0DH TIME LENGTH
FRAME:
 ;SETB PSW.4
 CALL CLSSCR;
 MOV P1,#00H;
 MOV R0,#05FH;
 MOV R1,#010H;
 FRAMEAA:
  MOV P0,#00H;
  MOV P2,P0;
  MOV R6,#019H;
  DJNZ R6,$;

  MOV P2,@R0;
  DEC R0;
  MOV P0,@R0;
  CALL DELAY

  DEC R0;
  inc P1;
 DJNZ R1,FRAMEAA;
 ;CLR PSW.4 
RET

;******** DELAY ******

DELAY:
 
  MOV R3,#05H;
  DELAY1:
  MOV R2,#05FH;
  DJNZ R2,$;
  DJNZ R3,DELAY1;

DELAY_RET: RET
;******* CLRP0P2 ****
;CLRP0P2:
; MOV P0,#00H;
; MOV P2,P0;
;RET

;******** CHK_BIT_END *******
; BIT 0200H;RSC STACK FLOOD FLAG
;CHK_BIT_END:
; MOV A,#00H;
; INC DPTR;
 ;RDBYTE

CHK_BIT_END_RET:RET

;********** RD_BIT_A_WORD ***
; 0200H;BIT BITEND
RD_BIT_A_WORD:
 JB 0200H,RD_NEXT_BIT;
 RD_NEXT_BIT_RET:
 CALL RDWORD;
 MOV A,#01H;
 MOVC A,@A+DPTR;
 CJNE A,#0CFH,RD_BIT_A_WORD_RET
 SETB 0200H;

RD_BIT_A_WORD_RET: RET

;****** RD_NEXT_BIT **********
; ;03CH;BIT_INDEX

; 030H,031H;HOUR
; 032H; :
; 033H,034H;MINUTE
; 035H, :
; 036H,037H;SECOND

; 03BH;READTABVALUE
; VARIABLE SEEK_VALUE
; 03FH; SEEK_VALUE
; RETURN TAB VALUE IN OBH
; RETURN TAB DATA'S DPTR IN DPTR

RD_NEXT_BIT:
 CLR 0200H;
 INC 03CH;
 MOV R0,03CH;
 CJNE R0,#09H,RD_NEXT_BIT_AA;
 RD_NEXT_BIT_BB:
  MOV 03CH,#0FFH;
  ;DEBUG CALL INC_TIME;
  CALL SETTB
  AJMP RD_NEXT_BIT;

  RD_NEXT_BIT_AA:
   ;DEBUG
   ;SETB PSW.3
   ;SETB PSW.4
   ;CALL SETTB;
   ;CLR PSW.3
   ;CLR PSW.4;
   ;DEBUG
   MOV A,#030H;
   ADD A,R0;
   MOV R0,A;
   MOV 03FH,@R0;
   CALL RDTABVALUE;
AJMP RD_NEXT_BIT_RET
   
;*** CLSSCR******** 
CLSSCR:
 ;MOV P1,00H;
 MOV P0,#00H;
 MOV P2,P0;
RET

;***** POP_SCR_STACK *******
POP_SCR_STACK:
 MOV R0,#05FH;
 MOV R1,#05DH;
 ;MOV R3,#02H;
 POP_SCR_STACKBB:
  MOV R2,#01FH;
  POP_SCR_STACKAA:
   MOV A,@R1
   MOV @R0,A;
   DEC R0
   DEC R1
  DJNZ R2,POP_SCR_STACKAA;
 ;DJNZ R3,POP_SCR_STACKBB;
 ;DEC 03EH;
POP_SCR_STACK_RET: RET

;**** PUSH_SCR_STACK ****
PUSH_SCR_STACK:
 CALL RD_BIT_A_WORD;
 MOV 040H,021H;
 MOV 041H,022H;
PUSH_SCR_STACK_RET: RET
 

 

 

 

 

 

 

 

 

 

 

 

 


 
;*** TAB *****
TAB0:
;0[16*16]下上列排
DB 0CEH,00H;
DB  00h,  00h
DB  00h,  00h
DB  0F0h,  0Fh, 0F8h,  1Fh,  0Ch,  30h,  04h,  20h
DB   04h,  20h,  04h,  20h,  0Ch,  30h, 0F8h,  1Fh
DB  0F0h,  0Fh
DB 0CFH,0CFH;
TAB1:
;1[16*16]下上列?

DB 0CEH,01H;
DB  00h,  00h
DB 00H,00H
DB   00h,  00h,  08h,  20h, 0F8h,  3Fh
DB  0FCh,  3Fh,  00h,  20h
DB 0CFH,0CFH;
TAB2:
;2[16*16]下上列排

DB 0CEH,02H;
DB  00h,  00h
DB   00h,  00h
DB   30h,  20h,  38h,  30h,  0Ch,  38h,  04h,  2Ch
DB   04h,  26h,  0Ch,  23h, 0F8h,  21h, 0F0h,  38h
DB 0CFH,0CFH;
TAB3:
;3[16*16]下上列排

DB 0CEH,03H;
DB   00h,  00h
DB  00h,  00h
DB   10h,  08h,  18h,  18h,  0Ch,  30h,  84h,  20h
DB   84h,  20h, 0CCh,  31h,  78h,  1Fh,  30h,  0Eh
DB 0CFH,0CFH;
TAB4:
;4[16*16]下上列排

DB 0CEH,04H;
DB  00h,  00h
DB   00h,  00h,  00h,  06h
DB   80h,  07h, 0C0h,  05h,  70h,  04h,  18h,  24h
DB  0FCh,  3Fh, 0FEh,  3Fh,  00h,  24h,  00h,  04h
DB 0CFH,0CFH;
TAB5:
;5[16*16]下上列排

DB 0CEH,05H;
DB  00h,  00h
DB  00h,  00h
DB  0FCh,  08h, 0FCh,  18h, 0C4h,  30h,  44h,  20h
DB   44h,  20h, 0C4h,  30h,  84h,  1Fh,  04h,  0Fh
DB 0CFH,0CFH;
TAB6:
;6[16*16]下上列排
DB 0CEH,06H
DB  00h,  00h
DB   00h,  00h
DB  0F0h,  0Fh, 0F8h,  1Fh,  8Ch,  30h,  44h,  20h
DB   44h,  20h, 0CCh,  30h,  98h,  1Fh,  10h,  0Fh
DB 0CFH,0CFH;
TAB7:
;7[16*16]下上列排

DB 0CEH,07H;
DB  00h,  00h
DB   00h,  00h
DB   1Ch,  00h,  0Ch,  00h,  0Ch,  3Ch,  0Ch,  3Fh
DB  0CCh,  03h, 0ECh,  00h,  3Ch,  00h,  1Ch,  00h
DB 0CFH,0CFH;
TAB8:
;8[16*16]下上列排

DB 0CEH,08H;
DB  00h,  00h
DB    00h,  00h
DB   30h,  0Eh,  78h,  1Fh, 0CCh,  31h,  84h,  20h
DB   84h,  20h, 0CCh,  31h,  78h,  1Fh,  30h,  0Eh
DB 0CFH,0CFH;
TAB9:
;9[16*16]下上列排

DB 0CEH,09H;
DB  00h,  00h
DB   00h,  00h
DB  0F0h,  08h, 0F8h,  19h,  0Ch,  33h,  04h,  22h
DB   04h,  22h,  0Ch,  33h, 0F8h,  1Fh, 0F0h,  0Fh
DB 0CFH,0CFH;


TABA:
;:[16*16]下上列排

DB 0CEH,0AH;
DB  00h,  00h
DB   00h,  00h
DB 01100000B,00000110B,01100000B,00000110B
DB 0CFH,0CFH;

DB 0CEH,0BH;尾标示
;------------过渡尾数据--------------
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 0CFH,0CFH;

END

原创粉丝点击