|
发表于 2010-4-24 00:33:51
|
显示全部楼层
写了个信号编码的!加入相应的映射表即可支持不同的国家编码
;Rcc signal generator
;#include <REGX52.H>
RTC_ST EQU 40H
R_SPEC EQU 40H ;00::07
;00->P/S/M
;01->ONE
;WWVB
;02->ZERO
;04->U100
;05->U200
;06->U400
;07->U800
;DCF
;02->M
;04->P1
;05->P2
;06->P3
R_STATUS EQU 41H ;08::15
;08->DST1
;09->DST2
;WWVB
;10->L1
;11->L2
;12->ADD1
;13->ADD2
;14->SUB
;DCF
;10->A1
;11->A2
;12->S
;13->R
R_SECOND EQU 42H ;16::23
R_MINUTE EQU 43H ;24::31
;24->M1
;25->M2
;26->M4
;27->M8
;28->M10
;29->M20
;30->M40
R_HOUR EQU 44H ;32::39
;32->H1
;33->H2
;34->H4
;35->H8
;36->H10
;37->H20
R_DAY EQU 45H ;40::47
;40->D1
;41->D2
;42->D4
;43->D8
;44->D10
;45->D20
R_DAYYEAR EQU 46H ;48::63
;48->D1
;49->D2
;50->D4
;51->D8
;52->D10
;53->D20
;54->D40
;55->D80
;56->D100
;57->D200
R_WEEK EQU 48H ;64::71
;64->W1
;65->W2
;66->W3
R_MONTH EQU 49H ;72::79
;72->MO1
;73->MO2
;74->MO4
;75->MO8
;76->MO10
R_YEAR EQU 4AH ;80::87
;80->Y1
;81->Y2
;83->Y4
;84->Y8
;84->Y10
;85->Y20
;86->Y40
;87->Y80
R_Option EQU 60H
C_WWVBSEL EQU 00H
C_DCFSEL EQU 01H
C_HBGSEL EQU 02H
C_MSFSEL EQU 03H
R_BitIndex EQU 4CH ;0-59
C_10KHz EQU 256-100
R_10KHzCnt EQU 4Dh
C_100Hz EQU 100
R_100HzCnt EQU 4EH
C_1HZ EQU 100
R_LowTime EQU 4FH
R_LowTemp EQU 50H
D_TCO EQU P1.0
D_TCON EQU P1.1
D_KEY EQU P1.2
D_LED EQU P1.3
D_LEDWWVB EQU P1.4
D_LEDDCF EQU P1.5
D_LEDHBG EQU P1.6
D_LEDMSF EQU P1.7
D_100HZ BIT 0
D_2HZ BIT 1
D_1HZ BIT 2
D_KEYBUF BIT 3
R_TabAddr EQU 51H
R_BitAddr EQU 53H
ORG 0000H
LJMP START
ORG 000BH
LJMP T0IRQ
ORG 0060H
START:
MOV TMOD, #02H ; 模式2, 定时器
MOV TH0,#C_10KHz
MOV TL0,#C_10KHz
MOV IE,#10000010B
MOV R_10KHzCnt,#C_100Hz
MOV R_100HzCnt,#00H
MOV R_HOUR,#16H
MOV R_MINUTE,#35H
MOV R_SECOND,#00H
MOV R_YEAR,#10H
MOV R_MONTH,#04H
MOV R_DAY,#22H
MOV R_DAYYEAR+0,#12H
MOV R_DAYYEAR+1,#01H
MOV R_BitIndex,#00H
; MOV R_Option,#C_WWVBSEL ;WWVB
MOV R_Option,#C_DCFSEL ;DCF
MOV P1,#0FFH
MOV R_SPEC,#02H
MOV R_STATUS,#00H
CLR D_TCO
CLR D_LED
SETB TR0 ; 启动定时器0
L_OptionChange:
CALL F_ActOpt
F_Main:
JB D_1Hz,L_SecChg
JB D_KEY,L_KeyHigh
L_KeyLow:
JNB D_KEYBUF,F_Main
L_KeyIn:
CLR D_KEYBUF
INC R_Option
JMP L_OptionChange
L_KeyHigh:
SETB D_KEYBUF
JMP F_Main
L_SecChg:
CPL D_1Hz
MOV DPL,R_TabAddr+0
MOV DPH,R_TabAddr+1
MOV A,R_BitIndex
INC A
MOVC A,@A+DPTR
JZ L_ToTemp
MOV R_BitAddr,A
RR A
RR A
RR A
ANL A,#1FH
ADD A,#RTC_ST
MOV R0,A
MOV A,R_BitAddr
ANL A,#07H
MOV DPTR,#T_BitMap
MOVC A,@A+DPTR
MOV DPL,R_TabAddr+0
MOV DPH,R_TabAddr+1
ANL A,@R0
JZ L_GetTime0
MOV A,#1
L_GetTime0:
ADD A,#60
L_ToTemp:
MOVC A,@A+DPTR
MOV R_LowTemp,A
L_INC_SEC:
MOV A,R_SECOND
ADD A,#1
DA A
MOV R_SECOND,A
CJNE A,#60H,$+3
JC L_Exit
MOV R_SECOND,#0
L_INC_MIN:
MOV A,R_MINUTE
ADD A,#1
DA A
MOV R_MINUTE,A
CJNE A,#60H,$+3
JC L_Exit
MOV R_MINUTE,#0
L_INC_HR:
MOV A,R_HOUR
ADD A,#1
DA A
CJNE A,#24H,$+3
JC L_Exit
MOV R_HOUR,#0
L_INC_DAY:
MOV A,R_DAY
ADD A,#1
DA A
MOV R_DAY,A
CJNE A,#30H,$+3
JC L_Exit
L_INC_MON:
MOV A,R_MONTH
ADD A,#1
DA A
MOV R_MONTH,A
CJNE A,#13H,$+3
JC L_Exit
MOV R_MONTH,#1
L_INC_YR:
MOV A,R_YEAR
ADD A,#1
DA A
MOV R_YEAR,A
L_Exit:
JMP F_Main
T0IRQ:
PUSH PSW
PUSH ACC
;10000HZ
DJNZ R_10KHzCnt,L_ExitIRQ
;100HZ
MOV R_10KHzCnt,#100
INC R_100HzCnt
MOV A,R_100HzCnt
CJNE A,#100,L_Not1Hz
;1HZ
MOV R_100HzCnt,#0
SETB D_1HZ
INC R_BitIndex
MOV A,R_BitIndex
CJNE A,#60,L_Not1Min
;1MIN
MOV R_BitIndex,#0
MOV DPL,R_TabAddr+0
MOV DPH,R_TabAddr+1
MOV A,#0
MOVC A,@A+DPTR
MOV R_LowTemp,A
L_Not1Min:
MOV R_LowTime,R_LowTemp
L_Not1Hz:
MOV A,R_100HzCnt
CJNE A,R_LowTime,L_OutPut
L_OutPut:
MOV D_TCON,C
CPL C
MOV D_TCO,C
CJNE A,#50,L_Not2Hz
;2HZ
SETB D_2Hz
L_Not2Hz:
MOV D_LED,C
L_ExitIRQ:
POP ACC
POP PSW
RETI
F_ActOpt:
MOV A,P1
ORL A,#0F4H
MOV P1,A
MOV A,R_Option
;L_ActWWVB:
CJNE A,#C_WWVBSEL,L_ActDCF
MOV DPTR,#T_BitMapWWVB
MOV R_TabAddr+0,DPL
MOV R_TabAddr+1,DPH ;high byte
CLR D_LEDWWVB
RET
L_ActDCF:
CJNE A,#C_DCFSEL,L_ActHBG
MOV DPTR,#T_BitMapDCF
MOV R_TabAddr+0,DPL
MOV R_TabAddr+1,DPH ;high byte
CLR D_LEDDCF
RET
L_ActHBG:
; CJNE A,#C_HBGSEL,L_ActMSF
; MOV DPTR,#T_BitMapWWVB
; MOV R_TabAddr+0,DPL
; MOV R_TabAddr+1,DPH ;high byte
; CLR D_LEDHBG
; RET
L_ActMSF:
; CJNE A,#C_MSFSEL,L_OptInvalid
; MOV DPTR,#T_BitMapWWVB
; MOV R_TabAddr+0,DPL
; MOV R_TabAddr+1,DPH ;high byte
; CLR D_LEDMSF
; RET
L_OptInvalid:
MOV R_Option,#C_WWVBSEL
JMP F_ActOpt
T_BitMap:
DB 01H,02H,04H,08H,10H,20H,40H,80H
T_BitMapWWVB:
DB 80,30,29,28,02,27,26,25,24,00
DB 02,02,37,36,02,35,34,33,32,00
DB 02,02,57,56,02,55,54,53,52,00
DB 51,50,59,58,02,02,12,14,13,00
DB 07,06,05,04,02,87,86,85,84,00
DB 83,82,81,80,02,10,11,08,09,00
DB 20,50,80
; Frm, M40, M20, M10, 0, M8, M4, M2, M1,@P1
; 0, 0, H20, H10, 0, H8, H4, H2, H1,@P2
; 0, 0,D200,D100, 0,D80,D40,D20,D10,@P3
; D8, D4, D2, D1, 0, 0,ADD,SUB,ADD,@P4
; U800,U400,U200,U100, 0,Y80,Y40,Y20,Y10,@P5
; Y8, Y4, Y2, Y1, 0,LS1,LS2,DST2,DST1,@P0
T_BitMapDCF:
DB 00,02,02,02,02,02,02,02,02,02
DB 02,02,02,02,02,02,13,08,09,11
DB 12,24,25,26,27,28,29,30,04,32
DB 33,34,35,36,37,05,40,41,42,43
DB 44,45,64,65,66,72,73,74,75,76
DB 80,81,82,83,84,85,86,87,06,02
DB 10,20
; Frm, 0, 0, 0, 0, 0, 0, 0, 0, 0
; 0, 0, 0, 0, 0, 0, R, Z1, Z2, A2
; S, M1, M2, M4, M8,M10,M20,M40, P1, H1
; H2, H4, H8,H10,H20, P2, D1, D2, D4, D8
; D10,D20, W1, W2, W4,MO1,MO2,MO4,MO8,M10
; Y1, Y2, Y4, Y8,Y10,Y20,Y40,Y80, P3, 0
END |
|