?? 頻率計.asm
字號:
VALUEH EQU 20H ;暫存TH1的值
VALUEL EQU 21H ;暫存TL1的值
DATE0 EQU 22H ;暫存計數值的BCD碼
DATE1 EQU 23H
DATE2 EQU 24H
DATE3 EQU 25H
DATE4 EQU 26H
DATE5 EQU 27H
DATE6 EQU 28H
COUNT EQU 30H
RS EQU P2.0
RW EQU P2.1
E EQU P3.7
;-----------------------------------------------------------------------------
ORG 0000H
SJMP MAIN
ORG 000BH
LJMP INT_T0
ORG 001BH
LJMP INT_T1
MAIN:
MOV SP,#60h
MOV 20H,#00H ;存儲空間初始化
MOV 21H,#00H
MOV 22H,#00h
MOV 23H,#00H
MOV 24H,#00H
MOV 25H,#00H
MOV 26H,#00H
MOV 27H,#00H
MOV 28H,#0AH
MOV 29H,#0BH
MOV 30H,#00H
MOV TMOD,#15H ;定時器1工作在定時方式
;定時器0工作在計數方式
MOV TH1,#3CH
MOV TL1,#0B0H
MOV TH0,#00H
MOV TL0,#00H
MOV IE,#8AH
LCALL LCD_INIT ;對液晶寫控制指令進行初始化
SETB TR0 ;啟動定時
SETB TR1 ;啟動計數
AJMP $
;------------------------------------------------------------------------
INT_T0: ;中斷0作為計數器溢出
;溢出,R1加1
MOV TH0,#00H
MOV TL0,#00H
INC R1
CLR TF0
RETI
INT_T1:
MOV TH1,#0B7H
MOV TL1,#0ffH
INC COUNT
MOV A,COUNT
CJNE A,#100,RETUNE ;是否計滿1秒
MOV COUNT,#00H
CLR TR0 ;關閉定時器
CLR TR1 ;關閉計數器
MOV VALUEL,TL0 ;存放計數值
MOV VALUEH,TH0
LCALL HTOD
LCALL LCD_DISPLAY
RETUNE:
RETI
;--------------液晶寫控制-----------------------------------------------------
LCD_INIT:
LCALL DELAY ; DELAY 延時一段時間
MOV P0,#01H ; 寫指令01H,清屏
LCALL ENABLE ; 讀入使能信號使液晶正常工作
MOV P0,#38H ; 設置工作方式,寫指令38H,設定LCD為16*2顯示,5*7點陣,8位數據接口
LCALL ENABLE
MOV P0,#0FH ; 設置顯示,光標,及閃爍開、關。顯示開,光標開,閃爍開
LCALL ENABLE
MOV P0,#06H ; 設置光標,畫面移動方式。數據讀、寫操作后,AC自動減一,畫面平移
LCALL ENABLE
RET
;--------------------液晶顯示--------------------------------------------------
LCD_DISPLAY:
SETB RS0
MOV R4,#08H
MOV R2,#80H
MOV R0,#22H
MOV DPTR,#TABLE0
DISPLAY_NUM:
/* MOV 31H,@R0
JNB 31H,DISPLAY_RT */
MOV P0,R2 ; 設置DDRAM地址,第一行起始字符地址
LCALL ENABLE
MOV A,@R0
MOVC A,@A+DPTR
LCALL DISP0
DISPLAY_RT:
INC R2
INC R0
DJNZ R4,DISPLAY_NUM
MOV TH0,#0
MOV TL0,#0
MOV R1,#0
SETB TR0 // 重新開啟中斷重新計數定時
SETB TR1
RET
;-------------------------------------------------------------------------------------
;這段程序將VALUEH/VALUEL中的16進制數轉成10進制并且把5位數依次存入DATE0至DATE5
;-------------------------------------------------------------------------------------
HTOD:
// CLR RS0
MOV R2,VALUEH
MOV R3,VALUEL
CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#18H
LOOP1:
CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R1
RLC A
MOV R1,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,LOOP1
CZ:
MOV R0,#DATE5
MOV A,R6
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R6
SWAP A
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R5
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R5
SWAP A
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R4
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R4
SWAP A
ANL A,#0FH
MOV @R0,A
MOV R1,#0
RET
;---------------------------------------------------------------
ENABLE:
CLR RS ; 寫指令子程序
CLR RW
CLR E
LCALL DELAY
SETB E
RET
DISP0:
MOV P0,A ; 寫1字節數據到顯示端口
SETB RS ; 寫數據時序
CLR RW
CLR E
LCALL DELAY
SETB E
RET
DELAY: ; 延時子程序
MOV R7,#255
D1: MOV R6,#255
D2: DJNZ R6,D2
DJNZ R7,D1
RET
TABLE0: DB "0123456789Hz"
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -