📄 rx.dt
字号:
;******************************************;
; 项目名称: 遥控接收器
; 设计者: 小丁
; 完成日期: 2007年8月16日
; 芯片型号: EM78P153S
; 振荡类型: IRC
; 频率: 4MHz/2Clock
; WDT: 开
; CHECKSUM: E709
;******************************************;
; P60 C_Control
; P61 B_Control
; P62 A_Control
; P63 RF
; P64 继电器
; P65
;========EM78常量定义======================;
Data_Division equ @16
A_Port equ r6
A_P equ 2
B_Port equ r6
B_P equ 1
C_Port equ r6
C_P equ 0
RF_Port equ r6
RF equ 3
Relay_Port equ r6
Relay equ 4
;========EM78专用寄存器地址定义============;
include "em78p153.h"
;========EM78一般寄存器定义================;
Temporary_Register equ 0x10 ;1byte 临时变量
Samples equ 0x11 ;1byte PF采样缓存
Bit_Counter equ 0x12 ;1byte 接收位计数
RF_High_Counter equ 0x13 ;1byte 接收高电平计数
RF_Low_Counter equ 0x14 ;1byte 接收低电平计数
RF_Byte_Buffer equ 0x15 ;3byte 接收数据
Hold_RF_Key_Time equ 0x18 ;2byte RF持续键时间
IO_Buffer equ 0x1A ;1byte IO缓存
Key_Time equ 0x1B ;1byte 放键时间
User_Id equ 0x20 ;2byte 前使用的用户码
Same_Key_Value equ 0x1C
System_Clock equ 0x22 ;1Byte
;========EM78一般控制位定义================;
System_Status equ 0x2A ;1byte 系统变量
Hold_RF_Key equ 1
RF_Data equ 2
Save_Data equ 3
Error_ID equ 4
Study_ID equ 5
Hold_Key equ 6
;**************上电复位入口****************;
org 0x3FF
jmp System_Initialize
org 0
jmp System_Initialize
;**************用户码表入口****************;
Id_Table:
add pc,a
retl @0x82 ;Id_Num1(00~FF)
retl @0x83 ;Id_Num2(00~FF)
;**************中断程序入口****************;
org 8
Tcc_Interrupt_Serve:
;{
;=============
bc intf,tcif
mov a,@256-80 ;4M 40uS
add tcc,a
;=============
inc System_Clock
jbs status,z
jmp Receive_RF
clr System_Clock ;10mS
;=============
Not_RF_Key_Time:
inc Hold_RF_Key_Time
jbs Hold_RF_Key_Time,4
jmp Receive_RF_Data
clr Hold_RF_Key_Time
bc System_Status,Hold_Key
bc System_Status,Hold_RF_Key ;是否RF无键160mS
bs C_Port,C_P
bs B_Port,B_P
bs A_Port,A_P
inc Hold_RF_Key_Time+1
jbc Hold_RF_Key_Time+1,5 ;5S
bc Relay_Port,Relay
;=============
Receive_RF:
jmp Receive_RF_Data
;**************用户码表入口****************;
IR_Sample_Table:
and a,@0b00000111
add pc,a
bc System_Status,RF_Data;000
ret;001
ret;010
ret;011
ret;100
ret;101
ret;110
bs System_Status,RF_Data;111
ret
;==========================================;
; 程序名: Receive_RF
; 功能: 无线接收程序
;==========================================;
Receive_RF_Data:
jbc RF_Port,RF
bs status,c
jbs RF_Port,RF
bc status,c
rlc Samples
mov a,Samples
call IR_Sample_Table
;-------;
jbs System_Status,RF_Data
jmp RF_Low_Voltage
RF_High_Voltage:
bs System_Status,Save_Data ;数据低电平标置
inc RF_High_Counter
jbc RF_High_Counter,7 ;长度超出,则重新接收
jmp Error_Data
clr RF_Low_Counter
reti
RF_Low_Voltage:
inc RF_Low_Counter
jbc RF_Low_Counter,7 ;长度超出,则重新接收
jmp Error_Data
;-------;
jbs System_Status,Save_Data ;下降沿
reti
Keep_Data:
bc System_Status,Save_Data
;-------;
mov a,RF_High_Counter ;0 = 2*Low_Counter > High_Counter / 1 = 2*Low_Counter < High_Counter
add a,@256-Data_Division
rrc RF_Byte_Buffer+2
rrc RF_Byte_Buffer+1
rrc RF_Byte_Buffer+0
;-------;
clr RF_High_Counter
;-------;
inc Bit_Counter
mov a,Bit_Counter
add a,@256-24 ;24 Bits 3Byte
jbs status,c
reti
;****************************************;
Compare_User_ID:
mov a,RF_Byte_Buffer+0 ;比较ID
xor a,User_Id+0
jbs status,z
jmp Error_Data
mov a,RF_Byte_Buffer+1
xor a,User_Id+1
jbs status,z
jmp Error_Data
;=============
Compare_Id_Data:
mov a,RF_Byte_Buffer+2
xor a,Same_Key_Value
jbs status,z
jmp Dispose_RF_Key
jbc System_Status,Hold_RF_Key ;操作时RF无效
jmp RF_Key_Ret
Dispose_RF_Key:
mov a,RF_Byte_Buffer+2
and a,@0b00000011
add pc,a
jmp Error_Data ;00
jmp Key_1 ;01
jmp Key_2 ;10
jmp Error_Data ;11
;=============
Key_1:
jbc System_Status,Hold_Key
jmp RF_Key_Ret
bs C_Port,C_P
bc B_Port,B_P
bc A_Port,A_P
jmp RF_Key_Ret
Key_2:
bc C_Port,C_P
bc B_Port,B_P
bc A_Port,A_P
bs Relay_Port,Relay
clr Hold_RF_Key_Time+1
bs System_Status,Hold_Key
jmp RF_Key_Ret
RF_Key_Ret:
mov a,RF_Byte_Buffer+2
mov Same_Key_Value,a
bs System_Status,Hold_RF_Key
clr Hold_RF_Key_Time
Error_Data:
clr Bit_Counter
bc System_Status,Save_Data
reti
;==========================================;
;----------子程序Receive_IR结束------------;
;==========================================;
;****************系统初始化****************;
System_Initialize:
;{
clr r5 ;
iow ioc5,@0b00000000 ;
mov r6,@0b00001111 ;
iow ioc6,@0b00001000 ;
iow iocd,@0b11110111 ;P6全开上拉
iow ioce,@0b10000000 ;开看门狗 开P60/INT
iow iocf,@0b00000001 ;开看门狗 开P60/INT
contw @0b00001000 ;
;=======
iclr ;初始化清空变量
;=======
mov a,@0
call Id_Table
mov User_Id+0,a
mov a,@1
call Id_Table
mov User_Id+1,a
eni
;****************主程序开始****************;
Main_Loop:
wdtc
nop
nop
jmp Main_Loop
;==========================================;
;==========================================;
mov macro Reg,@Value
mov a,@Value
mov Reg,a
endm
;==========================================;
mov macro dReg,sReg
mov a,sReg
mov dReg,a
endm
;==========================================;
contw macro @Value ;contw
mov a,@Value
contw
endm
;==========================================;
iow macro Reg,@Value
mov a,@Value
iow Reg
endm
;==========================================;
xora macro dReg,sReg
mov a,dReg
xor a,sReg
endm
;==========================================;
xora macro Reg,@Value
mov a,Reg
xor a,@Value
endm
;==========================================;
suba macro Reg,@Value
mov a,Reg
sub a,@Value
endm
;==========================================;
suba macro @Value,Reg
mov a,@Value
sub a,Reg
endm
;==========================================;
imov macro dReg,sReg ;整数移动
rmov dReg+1,sReg+1
rmov dReg,sReg
endm
;==========================================;
iinc macro Reg ;int inc
inc Reg+1
jbc status,z
inc Reg
endm
;==========================================;
idec macro Reg ;int dec
mov Reg+1,Reg+1
jbc status,z
dec Reg
dec Reg+1
endm
;==========================================;
ineg macro Reg
com Reg+1
inc Reg+1
jbc status,z
dec Reg+0
com Reg+0
endm
;==========================================;
iadd macro dReg,sReg
mov a,sReg+1
add dReg+1,a
jbc status,c
inc dReg+0
mov a,sReg
add dReg+0,a
endm
;==========================================;
jnz macro Reg
mov Reg,Reg
jbc status,z
endm
;==========================================;
ijnz macro Reg
mov a,Reg+1
or a,Reg
jbc status,z
endm
;==========================================;
je macro sReg1,sReg2 ;相同
mov a,sReg1
xor a,sReg2
jbs status,z
endm
;==========================================;
jne macro sReg1,sReg2 ;不相同
mov a,sReg1
xor a,sReg2
jbc status,z
endm
;==========================================;
jh macro Reg1,Reg2 ;Reg1>Reg2?
mov a,Reg1
sub a,Reg2
jbc status,c
endm
;==========================================;
jl macro Reg1,Reg2 ;Reg1<Reg2?
mov a,Reg2
sub a,Reg1
jbc status,c
endm
;==========================================;
jlc macro Reg,@Value ;Reg<@Value?
mov a,@Value
sub a,Reg
jbc status,c
endm
;==========================================;
Table macro Reg
mov a,Reg
add pc,a
endm
;==========================================;
iclr macro ;indirect Clear Ram
mov a,@15
mov rsr,a
Initial_User_Ram: ;初始化清空变量
inc rsr
clr iar
mov a,rsr
and a,@0b00111111
xor a,@0b00111111
jbs status,z
jmp Initial_User_Ram
clr rsr
endm
;==========================================;
END
;=========================================;
;=========================================;
;=========================================;
;=========================================;
;=========================================;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -