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

📄 radio.asm

📁 有时钟功能
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;==================================
;Project:Radio
;Date
;Author:Hsm
;Body:P092-28pin
;=================================
	LIST    p=16C57
;*********RAM Define*********
INDEX		equ	00h
TMR0		equ	01h
PCL		equ	02h
Status		equ	03h
FSR		equ	04h
PA		equ	05h
PB		equ	06h
PC		equ	07h
INTCON		equ	08h
DataBuf0	equ	09H
DataBuf1	equ	0ah
Flag0		equ	0bh
Flag1		equ	0ch
SaveChanFlag	equ	0dh
Second		equ	0eh
ReadDataWaitTime equ	0fh
;============Bank0===========
SendData0	equ	10h
SendData1	equ	11h
SendData2	equ	12h
SendData3	equ	13h
AMAdjust0	equ	14h
AMAdjust1	equ	15h
SaveChan10	equ	16h
SaveChan11	equ	17h
SaveChan20	equ	18h
SaveChan21	equ	19h
SaveChan30	equ	1ah
SaveChan31	equ	1bh
SaveChan40	equ	1ch
SaveChan41	equ	1dh
SaveChan50	equ	1eh
SaveChan51	equ	1fh
;============Bank1===========
LcdRAMBuf0	equ	10h
LcdRAMBuf1	equ	11h
LcdRAM00	equ	12h
LcdRAM01	equ	13h
LcdRAM10	equ	14h
LcdRAM11	equ	15h
LcdRAM20	equ	16h
LcdRAM21	equ	17h
LcdRAM30	equ	18h
LcdRAM31	equ	19h
LcdFlag		equ	1ah
LcdDriveCnt	equ	1bh
LcdDelayTime	equ	1ch
KeyDelayTime	equ	1dh
VolStep		equ	1eh
VolCycle	equ	1fh
;============Bank2===========
FMData0		equ	10h
FMData1		equ	11h
AMData0		equ	12h
AMData1		equ	13h
ClockHour	equ	14h
ClockMin	equ	15h
Alarm1Hour	equ	16h
Alarm1Min	equ	17h
Alarm2Hour	equ	18h
Alarm2Min	equ	19h
KiloBit		equ	1ah
HundBit		equ	1bh
TenBit		equ	1ch
OneBit		equ	1dh
BCDData1	equ	1eh
BCDData0	equ	1fh
;============Bank3===========
AdjustTime	equ	10h
Timer1s		equ	11h
Timer500ms	equ	12h
KeyPressTime	equ	13h

AutoTime	equ	14h







;**************IO Define*************
#Define 	PCom0		PA,0
#Define 	PCom1		PA,1
#Define 	PCom2		PA,2
#Define 	PCom3		PA,3
        
#Define		PCD		PC,2	;PA,4
        
#Define 	PSeg0		PB,0
#Define 	PSeg1		PB,1
#Define 	PSeg2		PB,2
#Define 	PSeg3		PB,3
#Define 	PSeg4		PB,4
#Define 	PSeg5		PB,5
#Define 	PSeg6		PB,6
#Define 	PSeg7		PB,7
#Define 	PSeg8		PC,0
#Define 	PSeg9		PC,1
        
        
#Define		PData		PC,7
#Define		PClk		PC,6
#Define		PCs		PC,5
#Define		PBand		PC,4
#Define		PPower		PC,3
#Define		PVol		PC,2
        
        
#Define		PKeyBand	PB,0
#Define		PKeyBandInc	PB,1
#Define		PKeyBandDec	PB,2
#Define		PKeyVolInc	PB,3
#Define		PKeyVolDec	PB,4
#Define		PKeyBand1	PB,5
#Define		PKeyBand2	PB,6
#Define		PKeyBand3	PB,7
#Define		PKeyBand4	PC,0
#Define		PKeyBand5	PC,1

;*************Flag Define***********
#Define		FLcd1A		LcdRAM00,0
#Define		FLcd1B		LcdRAM10,1
#Define		FLcd1C		LcdRAM30,1
#Define		FLcd1D		LcdRAM30,0
#Define		FLcd1E		LcdRAM20,0
#Define		FLcd1F		LcdRAM10,0
#Define		FLcd1G		LcdRAM20,1
        	
#Define		FLcd2A		LcdRAM00,2
#Define		FLcd2B		LcdRAM10,3
#Define		FLcd2C		LcdRAM30,3
#Define		FLcd2D		LcdRAM30,2
#Define		FLcd2E		LcdRAM20,2
#Define		FLcd2F		LcdRAM10,2
#Define		FLcd2G		LcdRAM20,3
        	
#Define		FLcd3A		LcdRAM00,4
#Define		FLcd3B		LcdRAM10,5
#Define		FLcd3C		LcdRAM30,5
#Define		FLcd3D		LcdRAM30,4
#Define		FLcd3E		LcdRAM20,4
#Define		FLcd3F		LcdRAM10,4
#Define		FLcd3G		LcdRAM20,5
        	
#Define		FLcd4A		LcdRAM00,6
#Define		FLcd4B		LcdRAM10,7
#Define		FLcd4C		LcdRAM30,7
#Define		FLcd4D		LcdRAM30,6
#Define		FLcd4E		LcdRAM20,6
#Define		FLcd4F		LcdRAM10,6
#Define		FLcd4G		LcdRAM20,7
        	
#Define		FLCDPlay	LcdRAM00,5
#Define		FLCDAlarm1	LcdRAM01,0
#Define		FLCDAlarm2	LcdRAM11,0
#Define		FLCDSleep	LcdRAM01,1
#Define		FLCDSnooze	LcdRAM11,1
#Define		FLCDRDM		LcdRAM00,7
#Define		FLCDRPT		LcdRAM21,1
#Define		FLCDPROG	LcdRAM31,1
#Define		FLCDPM		LcdRAM00,1
#Define		FLcdAM		LcdRAM21,0
#Define		FLcdFM		LcdRAM31,0
#Define		FLcdDOT		LcdRAM00,3
        	
#Define		FLcdHi		LcdFlag,0
#Define		FLcdOff		LcdFlag,1
        	
#Define		FC		Status,0
#Define		FDC		Status,1
#Define		FZ		Status,2
#Define		FPD		Status,3
#Define		FTO		Status,4
#Define		FPA0		Status,5
#Define		FPA1		Status,6
#Define		FPA2		Status,7
#Define		FBank0		FSR,5
#Define		FBank1		FSR,6
        	
#Define		FAMLed		Flag0,0
#Define		FFMLed		Flag0,1
#Define		FClockLed	Flag0,2
#Define		FAlarm1Led	Flag0,3
#Define		FAlarm2Led	Flag0,4
#Define		FKeyPress	Flag0,5
#Define		FFM		Flag0,6
#Define		FSendData	Flag0,7
#Define		F500ms		Flag1,0
#Define		FLedFlash	Flag1,1
#Define		FBandAdjust	Flag1,2
#Define		FReadData	Flag1,3
#Define		FRadioInit	Flag1,4
#Define		FAutoTime	Flag1,5
#Define		FAutoOn		Flag1,6
        	
#Define		FBand1Flag	SaveChanFlag,0
#Define		FBand2Flag	SaveChanFlag,1
#Define		FBand3Flag	SaveChanFlag,2
#Define		FBand4Flag	SaveChanFlag,3
#Define		FBand5Flag	SaveChanFlag,4
#Define		FVol100ms	SaveChanFlag,5

;***********Const Define**********
CKeyDelayTime		equ	020h
CLcdDelayTime		equ	001h
CKeyReadDelay		equ	080h

CFMDataMax0		equ	03dh
CFMDataMax1		equ	004h	;108.5
CFMDataMin0		equ	06bh
CFMDataMin1		equ	003h	;87.5

CAMDataMax0		equ	063h
CAMDataMax1		equ	006h	;1635
CAMDataMin0		equ	013h
CAMDataMin1		equ	002h	;531

CVolStepMax		equ	d'5'
CVolStepMin		equ	d'2'

CVolCycleMax		equ	d'50'

CTimer1s		equ	0f7h
CTimer500ms		equ	07bh
CAutoTime		equ	d'100'
CAdjustTime		equ	00ah
CKeyPressTime		equ	020h
CReadDataWaitTime	equ	d'50'

CFMCDMax1		equ	02ah
CFMCDMax0		equ	017h
CFMCDMin1		equ	029h
CFMCDMin0		equ	081h

CAMCDMax1		equ	001h
CAMCDMax0		equ	0c2h
;=================Macro=====================
Page0	macro
	bcf	FPA0
	bcf	FPA1
	endm
Page1	macro
	bsf	FPA0
	bcf	FPA1
	endm
Page2	macro
	bcf	FPA0
	bsf	FPA1
	endm
Page3	macro
	bsf	FPA0
	bsf	FPA1
	endm

Bank0	macro
	bcf	FBank0
	bcf	FBank1
	endm
Bank1	macro
	bsf	FBank0
	bcf	FBank1
	endm
Bank2	macro
	bcf	FBank0
	bsf	FBank1
	endm
Bank3	macro
	bsf	FBank0
	bsf	FBank1
	endm

;*****************ROM Area***********************
	org	0
	goto	Reset
Reset:
	nop
	nop
	nop
	nop
	nop
	call	InitRam
	call	InitPort
	call	InitTimer
	call	InitLcdDrive

	Bank0
	movlw	06bh
	movwf	SaveChan10
	movwf	SaveChan20
	movwf	SaveChan30
	movwf	SaveChan40
	movwf	SaveChan50
	movlw	003h
	movwf	SaveChan11
	movwf	SaveChan21
	movwf	SaveChan31
	movwf	SaveChan41
	movwf	SaveChan51
	movlw	01fh
	movwf	SaveChanFlag
	Bank1
	movlw	CKeyDelayTime
	movwf	KeyDelayTime
	movlw	d'2'
	movwf	VolStep
	Bank2
	movlw	CAMDataMin0
	movwf	AMData0
	movlw	CAMDataMin1
	movwf	AMData1
	movlw	CFMDataMin0
	movwf	FMData0
	movlw	CFMDataMin1
	movwf	FMData1
	movlw	d'12'
	movwf	ClockHour
	movlw	d'00'
	movwf	ClockMin
	movlw	d'13'
	movwf	Alarm1Hour
	movlw	d'01'
	movwf	Alarm1Min
	movlw	d'14'
	movwf	Alarm2Hour
	movlw	d'02'
	movwf	Alarm2Min
	Bank3
	movlw	CAdjustTime
	movwf	AdjustTime
	bsf	FFMLed
	bsf	FFM
	bsf	FSendData
	bcf	PBand
	bsf	PPower
	bcf	PVol
	bsf	FRadioInit
;*******************************
;*******************************
MainLoop:
;	goto	Volume
VolumeRet:
	goto	ReadCDData
ReadCDDataRet:
	Page1
	goto	LcdDrive
LcdDriveRet:
	Page1
	goto	FillLcdRAM
FillLcdRAMRet:
	Page3
	goto	Timer
TimerRet:
	Page2
	goto	KeyCheck
KeyCheckRet:
	Page3
	goto	SendData
SendDataRet:
	Page2
	goto	IfAutoAdjustBand
IfAutoAdjustBandRet:	
	goto	 MainLoop
;*******************************
;*******************************
InitRam:
	movlw	08h
	movwf	FSR
InitRamLoop1:
	clrf	INDEX
	incf	FSR,1
	movlw	01fh
	andwf	FSR,0
	xorlw	00h
	btfss	FZ
	goto	InitRamLoop1

	movlw	30h
	movwf	FSR
InitRamLoop2:
	clrf	INDEX
	incf	FSR,1
	movlw	01fh
	andwf	FSR,0
	xorlw	0
	btfss	FZ
	goto	InitRamLoop2

	movlw	50h
	movwf	FSR
InitRamLoop3:
	clrf	INDEX
	incf	FSR,1
	movlw	01fh
	andwf	FSR,0
	xorlw	0
	btfss	FZ
	goto	InitRamLoop3

	movlw	70h
	movwf	FSR
InitRamLoop4:
	clrf	INDEX
	incf	FSR,1
	movlw	01fh
	andwf	FSR,0
	xorlw	0
	btfss	FZ
	goto	InitRamLoop4
InitRamEnd:
	retlw	0

InitPort:
	movlw	0
	tris	PA
	tris	PB
	movlw	b'00000100'
	tris	PC
	clrf	PA
	clrf	PB
	clrf	PC
InitPortEnd:
	retlw	0
InitTimer:
	movlw	03h
	option
	clrf	TMR0
InitTimerEnd:
	retlw	0
InitLcdDrive:
	clrf	PA
	clrf	PB
	clrf	PC
	Bank1
	movlw	1
	movwf	LcdDriveCnt
InitLcdDriveEnd:
	retlw	0
;===========================================
VolumeTab:
	addwf	PCL
	retlw	d'00'
	retlw 	d'10'
	retlw	d'20'
	retlw	d'30'
	retlw	d'40'
        retlw	d'55'
Volume:
;	btfss	FVol100ms
;	goto	VolumeEnd
;	bcf	FVol100ms
	Bank1
	incf	VolCycle,1
	movlw	CVolCycleMax
	subwf	VolCycle,0
	btfsc	FC
	clrf	VolCycle

	movf	VolStep,0
	call	VolumeTab
;	movf	VolCycle,0
	subwf	VolCycle,0
	btfsc	FC
	goto	SetVol
ClrVol:
	bcf	PVol
	goto	VolumeEnd
SetVol:
	bsf	PVol
	goto	VolumeEnd
VolumeEnd:
	goto	VolumeRet
;===========================================
ReadCDData:
	btfss	FReadData
	goto	ReadCDDataEnd
	decfsz	ReadDataWaitTime,1
	goto	ReadCDDataEnd
	bcf	FReadData
	Bank0
	clrf	SendData0
	clrf	SendData1
	clrf	SendData2
	clrf	SendData3
	movlw	d'24'
	movwf	DataBuf0
ReadDataLoop:
	nop
	nop
	nop
	nop
	bsf	PClk
	movlw	05h
	movwf	DataBuf1
ClkDelay_ReadCD:
	nop
	nop
	decfsz	DataBuf1,1
	goto	ClkDelay_ReadCD
	
	bcf	PClk
	
	bcf	SendData0,0
	btfsc	PCD
	bsf	SendData0,0
	decfsz	DataBuf0
	goto	$+2
	goto	ExitReadCDData

	rlf	SendData0
	rlf	SendData1
	rlf	SendData2
;	rlf	SendData3

	goto	ReadDataLoop
ExitReadCDData:
	bcf	PClk
CmpeCDData:
	btfss	FFM
	goto	CmpeAMCDData
CmpeFMCDData:

	goto	ReadCDDataEnd		
CmpeAMCDData:	
	goto	ReadCDDataEnd
ReadCDDataEnd:
	goto	ReadCDDataRet
;=============================
	Org	200h
;=============================
FigureTab:
	addwf	PCL
	retlw 	3FH
	retlw	06H
	retlw	5BH
	retlw	4FH
        retlw	66H
        retlw	6DH
        retlw	7DH
        retlw	07H
        retlw	7FH
        retlw	6FH
        retlw	77H
        retlw	7CH
        retlw	39H
        retlw	5EH
        retlw	79H
        retlw	71H
BCDCode:
	clrf	KiloBit
	clrf	HundBit
	clrf	TenBit
	clrf	OneBit

	btfsc	FFMLed
	goto	BCDCode_4Bit
	btfsc	FAMLed
	goto	BCDCode_4Bit
	goto	BCDCode_2Bit
BCDCode_4Bit:
	movf	BCDData0,0
	movwf	DataBuf0
	movf	BCDData1,0
	movwf	DataBuf1
IfAboveKilo:		;1000=3ebh
	movlw	0e8h
	subwf	BCDData0,0
	btfss	FC
	decf	BCDData1,1
	movlw	003h
	subwf	BCDData1,0
	btfss	FC
	goto	NoAboveKilo
	movf	DataBuf0,0
	movwf	BCDData0
	movf	DataBuf1,0
	movwf	BCDData1

	incf	KiloBit,1
	movlw	0e8h
	subwf	BCDData0,1
	btfss	FC
	decf	BCDData1,1
	movlw	03h
	subwf	BCDData1,1
	goto	CountHundBit
NoAboveKilo:
	movf	DataBuf0,0
	movwf	BCDData0
	movf	DataBuf1,0
	movwf	BCDData1
CountHundBit:
	movlw	064h
	subwf	BCDData0,0
	movwf	DataBuf0
	movlw	00h
	btfss	FC
	movlw	01h
	subwf	BCDData1,0
	movwf	DataBuf1
	btfss	FC
	goto	CountTenBit
CountHundBitLoop:
	incf	HundBit,1
	movf	DataBuf0,0
	movwf	BCDData0
	movf	DataBuf1,0
	movwf	BCDData1
	goto	CountHundBit
CountTenBit:
	movlw	00ah
	subwf	BCDData0,0
	movwf	DataBuf0
	btfss	FC
	goto	CountOneBit
CountTenBitLoop:
	incf	TenBit,1
	movf	DataBuf0,0
	movwf	BCDData0
	goto	CountTenBit
CountOneBit:
	movf	BCDData0,0
	movwf	OneBit
	goto	BCDCodeEnd
BCDCode_2Bit:
	movf	BCDData1,0
	movwf	HundBit
	clrf	KiloBit
CountHourBCDLoop:
	movlw	00ah
	subwf	HundBit,0
	btfss	FC
	goto	BCDCode_2Bit_1
	movwf	HundBit
	incf	KiloBit,1
	goto	CountHourBCDLoop
BCDCode_2Bit_1:
	movf	BCDData0,0
	movwf	OneBit
	clrf	TenBit
CountMinBCDLoop:
	movlw	00ah
	subwf	OneBit,0
	btfss	FC
	goto	BCDCode_2Bit_2
	movwf	OneBit
	incf	TenBit,1
	goto	CountMinBCDLoop
BCDCode_2Bit_2:
	goto	BCDCodeEnd
BCDCodeEnd
	retlw	0
LcdDrive:
	Bank1
	decfsz	LcdDelayTime,1
	goto	LcdDriveEnd
	movlw	CLcdDelayTime
	movwf	LcdDelayTime
	btfss	FLcdOff
	goto	NoClearLcd
ClearLcd:
	bcf	FLcdOff
	call	ClearAllLcd
	goto	LcdDriveEnd
NoClearLcd:
	btfsc	FLcdHi
	goto	LcdHi
;*****************************
LcdLo:
LcdLo0:
	movf	LcdDriveCnt,0
	xorlw	01h
	btfss	FZ
	goto	LcdLo1
	movlw	b'00001110'

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -