?? 自動校時器.asm
字號:
;**********************************************************
; 自動校時器
;**********************************************************
;主要硬件:
; (1) MCU:AT89C2051或AT89C4051
; (2) FM接收器:TDA7088或SC1088
; (3) 數字電位器:X9315
; (4) 運放:MAX4294
; (4) LCD顯示器:LCM06XK
;----------------------------------------------------------
;代碼:
; 1.6KB
;----------------------------------------------------------
;主要性能:
; (1)自動搜索電臺,自動校準時鐘
; (2)自動識別報時信號特征,全球通用
; (3)校時誤差小于0.5毫秒
; (4)手工調時
; (5)電池低電量提示
; (6)無電臺提示
; (7)音頻監聽接口
; (8)節電控制
;**********************************************************
; JSQ.ASM
; yaner 2003.9.6
;##########################################################
SDA BIT P1.6 ;串行數據
CLK BIT P1.5 ;串行時鐘
DLA BIT P1.7 ;數據裝入
;------------------------------------
CS BIT P1.2 ;片選
UD BIT P1.3 ;增/減
STEP BIT P1.4 ;步進
;------------------------------------
RST BIT P1.0 ;復位
SCAN BIT P1.1 ;掃描
PWEN BIT P3.0 ;電源
;------------------------------------
XHIN BIT P3.2 ;音頻信號輸入
;------------------------------------
MENU BIT P3.3 ;菜單鍵
UP BIT P3.4 ;+鍵
DOWN BIT P3.5 ;-鍵
;------------------------------------
LED BIT P3.7 ;LED
;====================================顯示
XSF BIT 20H.0 ;顯示忙標志
INST DATA 28H ;LCD指令寄存器
;====================================秒計時
JSF BIT 21H.0 ;秒計時到標志
JSDATA DATA 40H ;40H-42H,計時器
JSCACH DATA 43H ;43H-48H,顯示緩存
XHYS DATA 29H ;信號丟失延時計數器
XHYSC EQU 100 ;信號丟失延時常數
;====================================手動調時
MS1 BIT 22H.0 ;調整位指示
MS2 BIT 22H.1 ;
MS3 BIT 22H.2 ;
SID BIT 22H.3 ;首次增/減標志
YSD BIT 22H.4 ;按鍵延時到標志
IDF BIT 22H.5 ;增/減標志(0增1減)
WSF BIT 22H.6 ;位閃標志
SSSDC EQU 02 ;位閃爍速度常數
AJYSC EQU 30 ;按鍵延時常數
;====================================電臺搜索
DTF BIT 23H.0 ;電臺標志
XHF BIT 23H.1 ;信號標志
XHDDF BIT 23H.2 ;信號等待時限到標志
SSCGF BIT 23H.3 ;搜索成功標志
JZTYF BIT 23H.4 ;禁止調音標志
WTF BIT 23H.5 ;無臺標志
HTF BIT 23H.6 ;換臺標志
SSWCF BIT 23H.7 ;搜索滿標志
VOL DATA 38H ;音量位置
PDS DATA 39H ;頻道位置
XHDD DATA 2AH ;信號等待計數器
XHDDC EQU 05 ;信號等待時限
;====================================自動校時
JCST BIT 25H.0 ;檢測啟動標志
JSENF BIT 25H.1 ;校時允許標志
LXJSF BIT 25H.2 ;例行校時標志
LXJSSTF BIT 25H.3 ;例行校時啟動標志
JSCGF BIT 25H.4 ;校時成功標志
XHJGF BIT 25H.5 ;信號間隔標志
STRF BIT 25H.6 ;校時啟動標志
PLSJF BIT 25H.7 ;頻率首檢標志
MKSJF BIT 26H.0 ;脈寬首檢標志
ZDJSF BIT 26H.1 ;正點校時標志
JSSB DATA 2BH ;校時失敗計數器
PL_LL DATA 2CH ;頻率下限低字節
PL_LH DATA 2DH ;頻率下限高字節
PL_HL DATA 2EH ;頻率上限低字節
PL_HH DATA 2FH ;頻率上限高字節
MK_LL DATA 30H ;脈寬下限低字節
MK_LH DATA 31H ;脈寬下限高字節
MK_HL DATA 32H ;脈寬上限低字節
MK_HH DATA 33H ;脈寬上限高字節
MK_L DATA 34H ;脈寬低字節
MK_H DATA 35H ;脈寬高字節
KXD DATA 36H ;信號可信度計數器
JSSBC EQU 02 ;校時失敗常數
PLSX EQU 0014H ;頻率上限常數
PLXX EQU 0014H ;頻率下限常數
MKSX EQU 0028H ;脈寬上限常數
MKXX EQU 0028H ;脈寬下限常數
KXDC EQU 02 ;信號可信度
PDSMAX EQU 33 ;最大頻道數
;====================================通用
DRY DATA 37H ;通用延時計數器
DRYC EQU 04 ;通用延時常數
;####################################
ORG 0000H
JMP MAIN
ORG 0003H
JMP JCQ ;信號檢測器
ORG 0013H
JMP SGJS ;手工校時
ORG 001BH
JMP JSQ ;秒計時器
;====================================
ORG 0033H
MAIN: MOV SP,#50H
MOV PSW,#00H
MOV TMOD,#21H ;定時器1方式2,定時器0方式1
MOV IP,#0CH ;計時中斷高優先級
MOV TCON,#05H ;下降沿觸發中斷
;------------------------------------
MOV P1,#0FFH ;復位端口
MOV P3,#0FFH
MOV 20H,#00 ;清標志
MOV 21H,#00
MOV 22H,#00
MOV 23H,#00
MOV 24H,#00
MOV 25H,#00
MOV 26H,#00
MOV 27H,#00
SETB RS0
MOV R2,#00
MOV R3,#00
MOV JSSB,#00
MOV PDS,#00
MOV KXD,#00
MOV XHDD,#XHDDC
MOV XHYS,#XHYSC
MOV PSW,#00
;------------------------------------初始化LCD
CALL LCDRST
CALL LCDRST
CALL YS60M
MOV INST,#20H
CALL OUTI
MOV INST,#18H
CALL OUTI
MOV INST,#01H
CALL OUTI
MOV INST,#03H
CALL OUTI
MOV R0,#JSDATA ;清計時緩存
MOV R1,#JSCACH
MOV R2,#06
L000: CLR A
MOV @R0,A
MOV @R1,A
INC R0
INC R1
DJNZ R2,L000
CALL XS ;顯示
;------------------------------------初始化
MOV PSW,#00
CLR TR1
CLR TF1
MOV TH1,#06
MOV TL1,#06
CLR TR0
CLR TF0
MOV TL0,#00
MOV TH0,#00
SETB ET1
SETB EX0
SETB EX1
CLR IE0
CLR IE1
SETB EA
SETB TR1 ;啟動計時器
;====================================LCD顯示每秒更新
L003: JNB JSF,L001
CLR JSF
CALL XS
;====================================校時控制
L001: JNB JSENF,L002
CLR JSENF
CALL DTSS
JMP L003
;------------------------------------
L002: JNB LXJSF,L004
JB LXJSSTF,L003
SETB LXJSSTF
SETB JSENF
JMP L003
;------------------------------------
L004: JNB LXJSSTF,L003
CLR LXJSSTF
SETB PWEN
JNB JSCGF,L005
MOV JSSB,#00
CLR JSCGF
JMP L003
;------------------------------------
L005: INC JSSB
MOV A,JSSB
CJNE A,#JSSBC,L003
MOV JSSB,#00
SETB HTF
JMP L003
;####################################
;************************************信號檢測器
JCQ: PUSH PSW
PUSH ACC
;------------------------------------REG3
SETB RS0
SETB RS1
;====================================
JB SSCGF,JCQ00
JMP JCQ01A ;EXIT
JCQ04: JMP JCQ01
;------------------------------------
JCQ00: CLR TR0
JNB XHJGF,JCQ02
JMP JCQ03
;------------------------------------
JCQ02: JNB STRF,JCQ04
JNB PLSJF,JCQ05
JMP JCQ06
;------------------------------------保存頻率上下限值
JCQ05: SETB PLSJF
MOV A,TL0
ADD A,#LOW PLSX
MOV PL_HL,A
MOV A,TH0
ADDC A,#HIGH PLSX
MOV PL_HH,A
MOV A,TL0
CLR C
SUBB A,#LOW PLXX
MOV PL_LL,A
MOV A,TH0
SUBB A,#HIGH PLXX
MOV PL_LH,A
JMP JCQ01
;------------------------------------與頻率上下限值比較
JCQ06: MOV A,TH0
CJNE A,PL_LH,JCQ07
JCQ07: JNC JCQ08
JCQ14: JMP JCQ09
JCQ08: CJNE A,PL_LH,JCQ10
MOV A,TL0
CJNE A,PL_LL,JCQ11
JCQ11: JNC JCQ10
JMP JCQ09
JCQ10: MOV A,TH0
CJNE A,PL_HH,JCQ12
JCQ12: JC JCQ13
CJNE A,PL_HH,JCQ14
MOV A,TL0
CJNE A,PL_HL,JCQ15
JCQ15: JC JCQ13
CJNE A,PL_HL,JCQ14
;------------------------------------脈寬計數器增1
JCQ13: INC MK_L
MOV A,MK_L
CJNE A,#00,JCQ16
INC MK_H
JCQ16: JMP JCQ01
;------------------------------------
JCQ09: JNB ZDJSF,JCQ17
JMP JCQ18
;------------------------------------
JCQ17: CLR STRF
JCQ20: CLR MKSJF
CLR PLSJF
CLR ZDJSF
MOV KXD,#00
JCQ22: CLR XHJGF
MOV MK_L,#00
MOV MK_H,#00
JMP JCQ01
;------------------------------------
JCQ03: JB STRF,JCQ19
SETB STRF
JMP JCQ20
;------------------------------------保存首個脈寬值
JCQ19: JB MKSJF,JCQ21
SETB MKSJF
MOV A,MK_L
ADD A,#LOW MKSX
MOV MK_HL,A
MOV A,MK_H
ADDC A,#HIGH MKSX
MOV MK_HH,A
MOV A,MK_L
CLR C
SUBB A,#LOW MKXX
MOV MK_LL,A
MOV A,MK_H
SUBB A,#HIGH MKXX
MOV MK_LH,A
JMP JCQ22
;------------------------------------與脈寬上下限值比較
JCQ21: MOV A,MK_H
CJNE A,MK_LH,JCQ23
JCQ23: JNC JCQ24
JCQ27: JMP JCQ17
JCQ24: CJNE A,MK_LH,JCQ25
MOV A,MK_L
CJNE A,MK_LL,JCQ26
JCQ26: JC JCQ27
JCQ25: MOV A,MK_H
CJNE A,MK_HH,JCQ28
JCQ28: JC JCQ29
CJNE A,MK_HH,JCQ27
MOV A,MK_HL
CJNE A,MK_HL,JCQ30
JCQ30: JC JCQ29
CJNE A,MK_HL,JCQ27
;------------------------------------
JCQ29: JNB ZDJSF,JCQ31
JMP JCQ22
;------------------------------------檢查信號可信度
JCQ31: INC KXD
MOV A,KXD
CJNE A,#KXDC,JCQ32
JCQ32: JC JCQ33
SETB ZDJSF
JCQ33: JMP JCQ22
;====================================正點校時
JCQ18: CLR EA
SETB PWEN ;關閉電源
MOV A,JSDATA+1
CJNE A,#30,JCQ40 ;檢查分鐘數
JCQ40: JC JCQ41
INC JSDATA+2 ;分鐘數大于或等于30,時數增1
MOV A,JSDATA+2
CJNE A,#24,JCQ42 ;時數大于或等于24則清0
JCQ42: JC JCQ41
MOV JSDATA+2,#00
JCQ41: MOV JSDATA+1,#00 ;分鐘、秒數清0
MOV JSDATA,#00
CALL XS
;------------------------------------初始化
MOV C,JZTYF
MOV 20H,#00
MOV 21H,#00
MOV 22H,#00
MOV 23H,#00
MOV 24H,#00
MOV 25H,#00
MOV 26H,#00
MOV 27H,#00
MOV JZTYF,C
SETB RS0
CLR RS1
MOV R2,#00
MOV R3,#00
MOV JSSB,#00
MOV KXD,#00
SETB LXJSSTF
SETB JSCGF ;校時成功
MOV XHDD,#XHDDC
MOV XHYS,#XHYSC
MOV PSW,#00
CLR TR1
CLR TF1
MOV TH1,#06
MOV TL1,#06
CLR TR0
CLR TF0
MOV TMOD,#21H
CLR IE0
CLR IE1
SETB TR1
JMP JCQ01A
;====================================
JCQ01: MOV TL0,#00
MOV TH0,#00
SETB TR0
CLR IE0
;====================================復位信號延時計數器
JCQ01A: CLR EA
SETB XHF
CLR LED
MOV XHYS,#XHYSC
SETB EA
;====================================
POP ACC
POP PSW
;====================================
RETI
;************************************自動搜索電臺
DTSS: PUSH PSW
;------------------------------------REG2
CLR RS0
SETB RS1
;====================================
MOV TMOD,#21H
CLR SSCGF
CLR SSWCF
CLR WTF
;====================================復位FM接收器
CLR PWEN
CALL YS500M
CALL YS500M
CALL YS500M
DTSS03: CALL YS500M
CLR RST
CALL YS500M
SETB RST
CALL YS500M
;====================================找到原電臺
MOV R7,PDS
INC R7
JNB HTF,DTSS00
CLR HTF
INC PDS
INC R7
DTSS00: CJNE R7,#PDSMAX,DTSS01
DTSS01: JC DTSS02
MOV PDS,#00
CLR JZTYF
JMP DTSS03
;------------------------------------掃描
DTSS02: CALL YS100M
CLR SCAN
CALL YS500M
CALL YS500M
SETB SCAN
CALL YS100M
DJNZ R7,DTSS02
;====================================搜索電臺
DTSS07: CALL DTSB
JB DTF,DTSS04
CLR JZTYF
INC PDS
MOV R7,PDS
INC R7
CJNE R7,#PDSMAX,DTSS05
DTSS05: JC DTSS06
MOV PDS,#00
CLR JZTYF
JB SSWCF,DTSS08
SETB SSWCF
JMP DTSS03
DTSS08: CLR SSWCF
SETB WTF
SETB PWEN
JMP DTSS09
DTSS06: CALL YS100M ;掃描
CLR SCAN
CALL YS500M
CALL YS500M
SETB SCAN
CALL YS100M
JMP DTSS07
;------------------------------------搜索成功
DTSS04: MOV KXD,#00
CLR WTF
SETB JZTYF
CLR STRF
CLR TR0
MOV TMOD,#29H
MOV TL0,#00
MOV TH0,#00
SETB TR0
CLR XHJGF
SETB SSCGF
;====================================
DTSS09: POP PSW
;====================================
RET
;************************************電臺識別
DTSB: PUSH PSW
PUSH ACC
;====================================
CLR DTF
JNB JZTYF,DTSB09
JMP DTSB02
;====================================數字電位器復位
DTSB09: CLR UD
SETB STEP
CALL YS54
CALL YS54
CLR CS
CALL YS54
CALL YS54
MOV R6,#32
DTSB00: CLR STEP
CALL YS54
SETB STEP
CALL YS54
DJNZ R6,DTSB00
;------------------------------------
MOV VOL,#00
;====================================數字電位器步進
DTSB11: CALL YS100M
SETB UD
CALL YS54
CLR STEP
CALL YS54
SETB STEP
CALL YS54
;------------------------------------
INC VOL
MOV R6,VOL
CJNE R6,#12,DTSB01
DTSB01: JC DTSB02
JMP DTSB03
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -