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

📄 main.asm

📁 153控制收音5800的源码
💻 ASM
字号:
;==========================================================
;
;	模块:	FM发射模块控制代码
;
;	版本:	1.01
;
;	日期:	2007-7-28
;
;	作者:	施探宇
;
;	说明:	Zi2020 应用图
;
;                   +-----+
;    (106.7)P5.0 ===|     |=== P5.1(PREV KEY)(POWER KEY)
;    (107.1)P6.7 ===|     |=== P5.2(NEXT KEY)
;    (107.5)P6.6 ===|     |=== P5.3(CE,Zi2020 高打开)
;               Vdd ===|     |=== Vss
;    (107.9)P6.5 ===|     |=== P6.0(音频检测)
;   FM LED)P6.4 ===|     |=== P6.1(SDA,Zi2020)
;        (NC)P6.3 ===|     |=== P6.2(SCL,Zi2020)
;                   +-----+
;
;==========================================================
include	"reg.inc"

;===========================================================
;	Start()
;===========================================================
		ORG		0x00
		jmp		Start

		ORG		0x01
		reti
		ORG		0x08
		bc		INT_STATU,@P6_FLAG_BIT
		bc		INT_STATU,@EX_FLAG_BIT
		reti
		





;===============================================
;	Function:TblFmModeHi(A)
TblFmDefault_bal:
		ADD	 	PC, A
		RETL 		@FM_Default_02H	 		
		RETL 		@FM_Default_02L	 		
		RETL 		@FM_Default_03H	 		
		RETL 		@FM_Default_03L	 		
		RETL 		@FM_Default_04H	 		
		RETL 		@FM_Default_04L	 		
		RETL 		@FM_Default_05H	 		
		RETL 		@FM_Default_05L	 		
		RETL 		@FM_Default_06H	 		
		RETL 		@FM_Default_06L	 		
		RETL 		@FM_Default_07H	 		
		RETL 		@FM_Default_07L	 		
		RETL 		@FM_Default_08H	 		
		RETL 		@FM_Default_08L	 		
		RETL 		@FM_Default_09H	 		
		RETL 		@FM_Default_09L


		
		RETL 		@FM_Default_10H	 		
		RETL 		@FM_Default_10L	 		
		RETL 		@FM_Default_11H	 		
		RETL 		@FM_Default_11L	 		
		RETL 		@FM_Default_12H	 		
		RETL 		@FM_Default_12L	 		
		RETL 		@FM_Default_13H	 		
		RETL 		@FM_Default_13L	 		
		RETL 		@FM_Default_14H	 		
		RETL 		@FM_Default_14L	 		
		RETL 		@FM_Default_15H	 		
		RETL 		@FM_Default_15L	 		
		RETL 		@FM_Default_16H	 		
		RETL 		@FM_Default_16L	 		
		RETL 		@FM_Default_17H	 		
		RETL 		@FM_Default_17L	 		
		RETL 		@FM_Default_18H	 		
		RETL 		@FM_Default_18L	 		
		RETL 		@FM_Default_19H	 		
		RETL 		@FM_Default_19L
		
		RETL 		@FM_Default_20H	 		
		RETL 		@FM_Default_20L	 		
		RETL 		@FM_Default_21H	 		
		RETL 		@FM_Default_21L	 		
		RETL 		@FM_Default_22H	 		
		RETL 		@FM_Default_22L	 		
		RETL 		@FM_Default_23H	 		
		RETL 		@FM_Default_23L	 		
		RETL 		@FM_Default_24H	 		
		RETL 		@FM_Default_24L	 		
		RETL 		@FM_Default_25H	 		
		RETL 		@FM_Default_25L	 		
		RETL 		@FM_Default_26H	 		
		RETL 		@FM_Default_26L	 		
		RETL 		@FM_Default_27H	 		
		RETL 		@FM_Default_27L	 		
		RETL 		@FM_Default_28H	 		
		RETL 		@FM_Default_28L	 		
		RETL 		@FM_Default_29H	 		
		RETL 		@FM_Default_29L
	 		
		RETL 		@FM_Default_30H	 		
		RETL 		@FM_Default_30L	 		
		RETL 		@FM_Default_31H	 		
		RETL 		@FM_Default_31L	 		
		RETL 		@FM_Default_32H	 		
		RETL 		@FM_Default_32L	 		
		RETL 		@FM_Default_33H	 		
		RETL 		@FM_Default_33L	 		
		RETL 		@FM_Default_34H	 		
		RETL 		@FM_Default_34L	 		
		RETL 		@FM_Default_35H	 		
		RETL 		@FM_Default_35L	 		
		RETL 		@FM_Default_36H	 		
		RETL 		@FM_Default_36L	 		
		RETL 		@FM_Default_37H	 		
		RETL 		@FM_Default_37L	 		
		RETL 		@FM_Default_38H	 		
		RETL 		@FM_Default_38L	 		
		RETL 		@FM_Default_39H	 		
		RETL 		@FM_Default_39L
	 		

		RETL 		@FM_Default_40H	 		
		RETL 		@FM_Default_40L	 		
		RETL 		@FM_Default_41H	 		
		RETL 		@FM_Default_41L	 		
		RETL 		@FM_Default_42H	 		
		RETL 		@FM_Default_42L	 		
		RETL 		@FM_Default_43H	 		
		RETL 		@FM_Default_43L	 		
		RETL 		@FM_Default_44H	 		
		RETL 		@FM_Default_44L

		;------------------------------
		;	程序开始
		;------------------------------
		ORG		0x100
Start:
		DISI						;禁止中断
		call		Init_Con_reg			;初始化控制寄存器
		call		CleanRam			;清除寄存器
		call		Init_Ioport			;初始化输入输出口
		;ENI		;开中断

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		;初始化5800
		call		delay_500ms	
		call		I2cStop
		call		delay_50ms	
		mov		a,@0xd8
		mov		Rd5800_Reg_02H,a
		mov		a,@0x81
		mov		Rd5800_Reg_02L,a
		call		I2cStart
		; Device Id : (A = I2cDevId)
		mov		A,@0x20
		call 		I2cSendByte
		call		I2cGetAck
		jbs		A_buff,ACK
		jmp		FmTuneDonem


		mov		a,Rd5800_Reg_02H
		call 		I2cSendByte
		call		I2cGetAck
		jbs		A_buff,ACK
		jmp		FmTuneDonem

		mov		a,Rd5800_Reg_02L
		call 		I2cSendByte
		call		I2cGetAck
		jbs		A_buff,ACK
		jmp		FmTuneDonem

FmTuneDonem:

		call		I2cStop
		mov		A,A_buff
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
	
		call		delay_500ms	
		call		delay_50ms
		call		R5800_Init_I2c
		call		delay_500ms
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		mov		a,@0xd0
		mov		Rd5800_Reg_02H,a
		mov		a,@0x02
		mov		Rd5800_Channel,a			;设置初初始频率为87.7---87.5 step 100k
		mov		a,@0x00
		mov		Rd5800_Reg_03L,a
		call		delay_50ms	
		call		FmTune
		nop
	
;===========================================================
;	main()
;===========================================================
main:
		;判断FM信号强度
		;jmp		Judgment_Rssi				;判断信号的强度大小,而决定是否静音
Judgment_Rssi_end:

		jmp		Judgment_Sleep				;判断是否需要进入睡眠
Judgment_Sleep_End:


		jmp		main

		
;===========================================================
;	main end
;===========================================================



Judgment_Rssi:
		;等待一秒判断信号强度
		call		delay_500ms
		call		delay_500ms

		call		I2cRead
		mov		a,RSSI
		and		a,@0x3f
		sub		a,@Rssi_MidPoint			;如果信号 强度小于0x10就静音
		jbs		FLAG,@C
		jmp		fm_unmute
fm_mute_:
		jbc		FM_STATUS,@FM_MUTE
		jmp		Judgment_Rssi_muting
		
		bs		FM_STATUS,@FM_MUTE			;置收音状态为静音
		bc		Rd5800_Reg_02H,@DMUTE			;静音
		call		FmTune
		call		delay_50ms
		jmp		Judgment_Rssi_ret
fm_unmute:
		jbs		FM_STATUS,@FM_MUTE
		jmp		Judgment_Rssi_ret
		bc		FM_STATUS,@FM_MUTE			;置收音状态为开起音量
		bs		Rd5800_Reg_02H,@DMUTE			;开音量
		call		FmTune
		call		delay_50ms
		jmp		Judgment_Rssi_ret

Judgment_Rssi_muting:
		call		FmTune
		call		delay_50ms
		call		I2cRead
		mov		a,RSSI
		and		a,@0x3f
		sub		a,@Rssi_MidPoint			;rssi 强度
		jbs		FLAG,@C
		jmp		fm_unmute
		jmp		Judgment_Rssi_ret

Judgment_Rssi_ret:
		
		jmp		Judgment_Rssi_end	
;-------------------------------------------------------------------------

Judgment_Sleep:

		jbc		P6,@0					;着断是否需要进入睡眠
		jmp		Judgment_Sleep_End
		call		delay_50ms				;目的是防止收到假信号
		jbc		P6,@0					;着断是否需要进入睡眠
		jmp		Judgment_Sleep_End
		call		delay_50ms				;目的是防止收到假信号
		jbc		P6,@0					;着断是否需要进入睡眠
		jmp		Judgment_Sleep_End

		
		bc		Rd5800_Reg_02L,@POWERUP_ENABLE		;关收音电源
		call		FmTune

		mov		a,@0001110B		
		contw		
		wdtc		
		ior		WTDCON					;禁止持门狗
		mov		A_buff,a
		bc		A_buff,@0x07
		mov		a,A_buff
		iow		WTDCON
		mov		P6,P6

		DISI
				
		slep
		bc		INT_STATU,@P6_FLAG_BIT
		bc		INT_STATU,@EX_FLAG_BIT

		mov		a,@0001110B		
		contw		
		wdtc		
		call		delay_50ms
		bc		FM_STATUS,@FM_MUTE			;置收音状态为开起音量
		bs		Rd5800_Reg_02L,@POWERUP_ENABLE		;开启收音电源
		bc		Rd5800_Reg_02H,@DMUTE			;静音
		call		FmTune
		call		delay_50ms
		call		delay_500ms
		bs		Rd5800_Reg_02H,@DMUTE			;开音量
		call		FmTune
		jmp		Judgment_Sleep_End


;===============================================
;	Includes Other Functions.
;===============================================

include		"init_sys.asm"
include		"time.asm"
include		"i2cproc.asm"
include		"5800.asm"
		END
;===============================================
;	End of file.
;===============================================

⌨️ 快捷键说明

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