📄 fint.asm
字号:
/////////////////////////////////// START /////////////////////////////////////
$INCLUDE(C8051F020.INC)
BIT_COUNT DATA 07FH
S1 DATA 07EH
S2 DATA 07DH
S3 DATA 07CH
S4 DATA 07BH
TIMER DATA 07AH
TIMER1 DATA 069H
DATA_IN DATA 020H
DATA_OUT DATA 021H
CLK BIT P1.6
DAT BIT P1.7
ORG 0000H
AJMP START
ORG 0100H
START: mov WDTCN, #0deh ; disable watchdog timer
mov WDTCN, #0adh
mov OSCXCN, #76h ; enable external crystal
; oscillator at 22.1184MHz
clr A ; wait at least 1ms
djnz acc, $ ; wait ~512us
djnz acc, $ ; wait ~512us
osc_wait: ; poll for XTLVLD-->1
mov a, OSCXCN
jnb acc.7, osc_wait
orl OSCICN, #08h ; select external oscillator as
; system clock source
orl OSCXCN, #80h ; enable missing clock detector
//CP1INIT: mov CPT1CN, #080h ; Comparator 1 Control Register
// mov A, #010h ;CPT1CN// djnz ACC, $ ;CPT1CN wait at least 20us// anl CPT1CN, #not(30h)
// mov EIP1, #040h
// MOV TIMER,#50
//PORTINIT:mov XBR2, #044h
// mov P0MDOUT, #001h
TIMEASSUME: mov XBR2,#040h
MOV XBR0,#07H
MOV XBR1,#02H
MOV TMOD,#00010101B
DELAY0: MOV TIMER1,#255
DELAY1: DJNZ TIMER1,DELAY1
DJNZ TIMER,DELAY0
ANL P5,#00H
MOV DATA_OUT,#10100100B
CALL SEND
MOV DATA_OUT,#0BFH
CALL SEND//TEST
CALL DELAY1S
CALL DELAY1SE
CALL DELAY1S
MOV DATA_OUT,#10100100B
CALL SEND//RESET
TIME: MOV DATA_OUT,#11001000B
CALL SEND
MOV DATA_OUT,#00000000B
CALL SEND// 1
MOV DATA_OUT,#11001001B
CALL SEND
MOV DATA_OUT,#00000000B
CALL SEND// 2
MOV DATA_OUT,#11001010B
CALL SEND
MOV DATA_OUT,#00000000B
CALL SEND// 3
MOV DATA_OUT,#11001011B
CALL SEND
MOV DATA_OUT,#00000000B
CALL SEND// 4
MOV DATA_OUT,#11001100B
CALL SEND
MOV DATA_OUT,#00000000B
CALL SEND// 5
MOV DATA_OUT,#11001101B
CALL SEND
MOV DATA_OUT,#00000000B
CALL SEND// 6
CALL DELAY1S
MOV DATA_OUT,#10100100B
CALL SEND//RESET
CS1: MOV R7,#00H
CS2: MOV DATA_OUT,#11001101B
ACALL SEND
MOV DATA_OUT,R7
ACALL SEND// 6
CS3: MOV R6,#00H
CS4: MOV DATA_OUT,#11001100B
ACALL SEND
MOV DATA_OUT,R6
ACALL SEND// 5
CS5: MOV R5,#00H
CS6: MOV DATA_OUT,#11001011B
ACALL SEND
MOV DATA_OUT,R5
ACALL SEND// 4
CS7: MOV R4,#00H
CS8: MOV DATA_OUT,#11001010B
ACALL SEND
MOV DATA_OUT,R4
ACALL SEND// 3
CS9: MOV R3,#00H
CS10: MOV DATA_OUT,#11001001B
ACALL SEND
MOV DATA_OUT,R3
ACALL SEND// 2
CS11: MOV R2,#00H
CS12: MOV DATA_OUT,#11001000B
ACALL SEND
MOV DATA_OUT,R2
ACALL SEND// 1
CALL COUNT
INC R2
CJNE R2,#0AH,CS12
INC R3
CJNE R3,#0AH,CS10
INC R4
CJNE R4,#0AH,CS8
INC R5
CJNE R5,#0AH,CS6
INC R6
CJNE R6,#0AH,CS4
INC R7
CJNE R7,#0AH,CS2
MOV DATA_OUT,#10001000B
ACALL SEND
MOV DATA_OUT,#00H
ACALL SEND// shan
JMP EXIT
DELAY1S: MOV R0,00H //delay
XX: MOV A,00H
DJNZ ACC,$
MOV A,00H
DJNZ ACC,$
MOV A,00H
DJNZ ACC,$
MOV A,00H
DJNZ ACC,$
DJNZ R0,XX
RET
COUNT: MOV TH0,#0FFH //COUNTING
MOV TL0,#0FFH
SETB TR0
LOOP1: JBC TF0,LOOP2
SJMP LOOP1
LOOP2: CLR TR0
RET
SEND: MOV BIT_COUNT,#8 ;发送字符子程序
ANL P5,#00H
CALL LONG_DELAY
SEND_LOOP:MOV C,DATA_OUT.7
MOV DAT,C
SETB CLK
MOV A,DATA_OUT
RL A
MOV DATA_OUT,A
CALL SHORT_DELAY
CLR CLK
CALL SHORT_DELAY
DJNZ BIT_COUNT,SEND_LOOP
CLR DAT
RET
LONG_DELAY: MOV TIMER,#250 ;延时约200US
DELAY_LOOP: DJNZ TIMER,DELAY_LOOP
RET
SHORT_DELAY: MOV TIMER,#100 ;延时约20US
SHORT_LP: DJNZ TIMER,SHORT_LP
RET
DELAY1SE: MOV R1,#108
DELAYS: MOV R0,#10
SS: CLR A
DJNZ ACC,$
DJNZ ACC,$
DJNZ R0,SS
DJNZ R1,DELAYS
RET
EXIT: AJMP EXIT
RET
END
///////////////////////////////////////// END /////////////////////////////////////////
TI2: MOV R6,#00H
TIM2: MOV R5,#00H
TIME2: MOV DATA_OUT,#10000011B
CALL SEND
MOV DATA_OUT,R5
CALL SEND// 4
MOV DATA_OUT,#10000100B
CALL SEND
MOV DATA_OUT,R6
CALL SEND// 5
TI1: MOV R4,#00H
TIM1: MOV R3,#00H
TIME1: MOV DATA_OUT,#11001000B
CALL SEND
MOV DATA_OUT,R3
CALL SEND// 1位
MOV DATA_OUT,#11001001B
CALL SEND
MOV DATA_OUT,R4
CALL SEND// 2位
CALL DELAY1S
INC R3
CJNE R3,#0AH,TIME1
INC R4
CJNE R4,#06H,TIM1
INC R5
CJNE R5,#0AH,TIME2
INC R6
CJNE R6,#06H,TIM2
// 00-00 -- 59-59
CALL DELAY1S
CALL DELAY1SE//DELAY
MOV DATA_OUT,#10100100B
CALL SEND
TIMED: MOV DATA_OUT,#10000000B
CALL SEND
MOV DATA_OUT,#00001010B
CALL SEND// 1 '-'
MOV DATA_OUT,#10000001B
CALL SEND
MOV DATA_OUT,#0BH
CALL SEND// 2 'E'
MOV DATA_OUT,#11001010B
CALL SEND
MOV DATA_OUT,#04H
CALL SEND// 3 'Y'
MOV DATA_OUT,#11001011B
CALL SEND
MOV DATA_OUT,#0BH
CALL SEND// 4 'b'
MOV DATA_OUT,#10000100B
CALL SEND
MOV DATA_OUT,#0AH
CALL SEND// 5 '-'
MOV DATA_OUT,#10000101B
CALL SEND
MOV DATA_OUT,#0AH
CALL SEND// 5 '-'
CALL DELAY1S
MOV DATA_OUT,#10001000B
CALL SEND
MOV DATA_OUT,#11110001B
CALL SEND//SHAN
CALL DELAY1S
CALL DELAY1S
MOV DATA_OUT,#10100100B
CALL SEND//RESET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -