📄 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"
include "ir_code.inc"
;===========================================================
; Start()
;===========================================================
ORG 0x00
jmp Start
ORG 0x01
reti
ORG 0x08
DISI
jbc INT_STATU,@TC_FLAG_BIT ;计时中断
jmp Time_Int
jbc INT_STATU,@EX_FLAG_BIT ;外部中断p60
jmp Exent_Int0
jbc INT_STATU,@P6_FLAG_BIT ;脚位变化中断
jmp Exent_Int1
reti
;------------------------------
; 程序开始
;------------------------------
ORG 0x20
Start:
DISI ;禁止中断
call Init_Con_reg ;初始化控制寄存器
call CleanRam ;清除寄存器
call Init_Ioport ;初始化输入输出口
ENI ;开中断
;===========================================================
; main()
;===========================================================
main:
call Get_Remote_Key ;获得遥控按键
;call delay_1s
;mov a,@0x80
;xor P6,a
jmp main
;===========================================================
; main end
;===========================================================
;==============================================================================================
;计时中断时间== (4*(256-TIME_COUNT)*时钟周期)/fos(晶振频率)
;100us int ones
;==============================================================================================
Time_Int:
;------------------------------
; 保存状态寄存器
;------------------------------
mov pop_a,a
mov a,FLAG
mov pop_statu,a
;------------------------------
; 设定每次中断时长
;------------------------------
mov a,@209d
mov TIME_COUNT,a
;------------------------------
;超过120毫秒后表示遥控按键己弹起
;------------------------------
inc Time_Int_Count
inc Time_Delay
mov a,Time_Delay
sub a,@60d
jbs FLAG,@Z
jmp return_t_int
inc Time_Delay1
clr Time_Delay
mov a,Time_Delay1
sub a,@20d
jbs FLAG,@Z
jmp return_t_int
clr Time_Delay1
clr Time_Delay
mov a,Status_1
and a,@0xFC
mov Status_1,a
;clr Ir_Repeat_Times
bc Status_1,@IR_KEY_DOWN_UP_BIT ;按键弹起
bc Status_1,@STATE_9M_BIT ;
return_t_int:
;*********************************************
time_Int_ret:
;------------------------------
; 恢复保存状态
;------------------------------
mov a,pop_statu
mov FLAG,a
mov a,pop_a
bc INT_STATU,@TC_FLAG_BIT
reti
;==============================================================================================
;脚位变化中断
;==============================================================================================
Exent_Int1:
;------------------------------
; 保存状态寄存器
;------------------------------
mov pop_a,a
mov a,FLAG
mov pop_statu,a
;*********************************************
;*********************************************
Exent_Int1_ret:
;------------------------------
; 恢复保存状态
;------------------------------
mov a,pop_statu
mov FLAG,a
mov a,pop_a
bc INT_STATU,@P6_FLAG_BIT
reti
;==============================================================================================
;外部中断
;==============================================================================================
Exent_Int0:
;------------------------------
; 保存状态寄存器
;------------------------------
mov pop_a,a
mov a,FLAG
mov pop_statu,a
;*********************************************
clr Time_Delay
clr Time_Delay1
jbc Status_1,@STATE_9M_BIT ;判断是否是接收起始码9毫秒状态
jmp state_first
jbc Status_1,@STATE_2M_BIT ;
jmp state_third
bs Status_1,@STATE_9M_BIT ;设置状态为接收9毫秒
jmp ex_int_ret
state_first:
mov a,Time_Int_Count
sub a,@IR_TIME_9000US+IR_TIME_4500US+10*IR_TIME_MARGIN
jbs FLAG,@C
jmp error_return
mov a,Time_Int_Count
sub a,@IR_TIME_9000US+IR_TIME_2250US-10*IR_TIME_MARGIN
jbc FLAG,@C
jmp error_return
mov a,Time_Int_Count
sub a,@IR_TIME_9000US+IR_TIME_4500US-10*IR_TIME_MARGIN
jbs FLAG,@C
jmp SET_SECN_2MS
inc Ir_Repeat_Times
jmp error_return
SET_SECN_2MS:
bs Status_1,@STATE_2M_BIT
bc Status_1,@STATE_9M_BIT
mov a,@0x20 ;接收码值长度
mov Remote_Bit_Count,a
jmp ex_int_ret
state_third:
mov a,Time_Int_Count
sub a,@IR_TIME_2250US+3*IR_TIME_MARGIN ;允许误差300us
jbs FLAG,@C
jmp error_return
mov a,Time_Int_Count
sub a,@IR_TIME_1125US-3*IR_TIME_MARGIN ;允许误差300us
jbc FLAG,@C
jmp error_return
mov a,Time_Int_Count
;与当中值(1125+2250)/2=1.6ms判断是1或0
sub a,@(IR_TIME_2250US+IR_TIME_1125US)/2
rrc Remote_Cmd_Code1
rrc Remote_Cmd_Code0
rrc Remote_Sys_Code1
rrc Remote_Sys_Code0
dec Remote_Bit_Count
jbs FLAG,@Z
jmp ex_int_ret
set_ok:
;遥控码接收完毕
clr Ir_Repeat_Times
bs Status_1,@IR_KEY_OK_BIT
bs Status_1,@IR_KEY_DOWN_UP_BIT
error_return:
;初始化接收状态
bc Status_1,@STATE_2M_BIT
bs Status_1,@STATE_9M_BIT
ex_int_ret:
clr Time_Int_Count
;*********************************************
Exent_Int0_ret:
bc INT_STATU,@EX_FLAG_BIT
;------------------------------
; 恢复保存状态
;------------------------------
mov a,pop_statu
mov FLAG,a
mov a,pop_a
reti
;------------------------------
;外部中断结束
;------------------------------
;===============================================
; Includes Other Functions.
;===============================================
include "init_sys.asm"
include "key.asm"
include "time.asm"
END
;===============================================
; End of file.
;===============================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -