📄 freq.asm
字号:
LEDBUF EQU 40H ;31H到3aH存储区用来存放要显示的段码
C100US EQU 42H ;存放10000的低字节
DISP EQU 43H
T100US EQU 156 ;100微秒的初值
TICK EQU 10000 ;溢出10000次
BIT_CNT EQU 30H
DELAY EQU 31H
;DECIMAL EQU 32H
SEND_BUF EQU 32H
REC_BUF EQU 33H
COUNT8 EQU 44H
T_1 BIT P1.6
CLR_1 BIT P1.7
CS BIT P1.3
CLK BIT P1.0
DIO BIT P1.1
KEY BIT P3.2
SECOND_EN BIT 00H
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1INT ;定时器1的入口地址
ORG 0030H
;主程序开始
MAIN:
MOV sp,#70h
MOV TMOD,#20H ;定时器1工作于方式2
MOV TH1,#T100US ;载入初值
MOV TL1,#T100US
MOV C100US+1,#HIGH(TICK)
MOV C100US,#LOW(TICK)
MOV IE,#10001010B
SETB TR1
CLR T_1
SETB CLR_1
SETB SECOND_EN
GOON1:
LJMP GOON1 ;不断重复该程序
;中断1处理子程序
T1INT:
PUSH PSW
PUSH ACC
MOV A,C100US
JNZ GOON2
DEC C100US+1
GOON2:
DEC C100US
MOV A,C100US+1
ORL A,C100US
JNZ EXIT
; CPL T_1
LCALL CHANGET1
MOV C100US+1,#HIGH(TICK)
MOV C100US,#LOW(TICK)
;退出中断1
EXIT:
POP ACC
POP PSW
RETI
READ_DATA:
MOV COUNT8,#8
MOV R0,#LEDBUF
MOV DPTR,#0B000H
AGAIN: MOVX A,@DPTR
ANL A,0FH
MOV @R0,A
INC DPTR
DEC R0
DJNZ COUNT8,AGAIN
RET
DISPLAY:
MOV COUNT8,#8
MOV R1,#LEDBUF
MOV DISP,#11001111B
JIXU: MOV SEND_BUF,DISP
LCALL SEND
MOV SEND_BUF,@R1
LCALL SEND
SETB CS
DEC DISP
DEC R1
DJNZ COUNT8,JIXU
RET
;----------------------------------
;发送数据给7289显示
;----------------------------------
SEND:
MOV BIT_CNT,#8 ; 8.
CLR CLK
CLR CS
LCALL LONG_DELAY ; 50.
SEND_LP:
MOV A,SEND_BUF
RLC A
MOV SEND_BUF,A
MOV DIO,C
NOP
NOP
SETB CLK
LCALL SHORT_DELAY ; 10.
CLR CLK
LCALL SHORT_DELAY ; 10.
DJNZ BIT_CNT,SEND_LP
CLR DIO
RET
;----------------------------------------------
;接受数据来自7289按键
;----------------------------------------------
RECEIVE:
MOV BIT_CNT,#8 ; 8.
; SETB DAT
LCALL LONG_DELAY ; 50.
RECEIVE_LP:
SETB CLK
LCALL SHORT_DELAY ; 10.
MOV C,DIO ; REC_BUF.
MOV A,REC_BUF
RLC A
MOV REC_BUF,A
CLR CLK
LCALL SHORT_DELAY ; 10.
DJNZ BIT_CNT,RECEIVE_LP
CLR DIO
RET
LONG_DELAY:
MOV DELAY,#25
DJNZ DELAY,$
RET
SHORT_DELAY:
MOV DELAY,#4
DJNZ DELAY,$
RET
DELAY100MS:
MOV R6,#0FFH
DL: MOV R7,#0FFH
DJNZ R6,DL
RET
;-----------------------------------------
CHANGET1:
JNB SECOND_EN,END_CHANGE
JB T_1,CLRT_1
SETB T_1
SETB CLR_1
AJMP END_CHANGE
CLRT_1: CLR SECOND_EN
CLR T_1
LCALL DELAY100MS
LCALL READ_DATA
LCALL DISPLAY
SETB SECOND_EN
CLR CLR_1
END_CHANGE:RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -