⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 自动校时器.asm

📁 单片机的自动校时器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;**********************************************************
;			自动校时器
;**********************************************************
;主要硬件:
;	(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 + -