📄 main.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 + -