📄 中断接收1字节.asm
字号:
SEL BIT P2.7
SDI BIT P2.6
SCK BIT P2.5
SDO BIT P2.4
IRQ BIT P3.2
ORG 0000H
AJMP MAIN
ORG 0003H
LJMP EXT0 ;INT0中断入口
ORG 0030H
MAIN:
;外部中断T0的初始化
CLR IT0 ;低电平触发
SETB EA ;开总中断
MOV SP,#0E8H
LCALL RFM12_INITTAL ;RFM12初始化
LCALL OPEN_RX ;打开接收机
WAIT_WAIT:
SJMP WAIT_WAIT
;接收(EXT0)中断程序
EXT0: CLR EX0
PUSH ACC
PUSH PSW
MOV PSW,#18H ;选择工作寄存器3
LCALL RCV_ZDATA
POP PSW
POP ACC
RETI
;接收子程序
RFM12_RECV:
LCALL WAITI
MOV A, #0B0H ;写入接收控制命令
LCALL RD_CMD
MOV A, #00H
LCALL RD_CMD
LCALL ENDD
RET
;RFM12初始化
RFM12_INITTAL:
SETB SEL
SETB SDI
CLR SCK
MOV A,#80H ;配制寄存器命令
LCALL WRT_CMD ;工作频段 433HZ/晶阵负载电容12PF
MOV A,#0D7H ;使能内部发射寄存器/使能内部FIFO寄存器
LCALL WRT_CMD
LCALL ENDD
MOV A,#0A6H ;频率设置命令
LCALL WRT_CMD ;设置发射机的中心频率430.8HZ
MOV A,#40H
LCALL WRT_CMD
LCALL ENDD
MOV A,#0C6H ;数据速率命令
LCALL WRT_CMD ;速率9600
MOV A,#23H
LCALL WRT_CMD
LCALL ENDD
MOV A,#94H ;接收机控制命令
LCALL WRT_CMD ;使能VDI/VDI响应时间最快
MOV A,#0A0H ;接收带宽134KHZ
LCALL WRT_CMD
LCALL ENDD
MOV A,#0C2H ;数据滤波命令
LCALL WRT_CMD ;启用时钟恢复自动锁定/时钟恢复快速自动锁定使能
MOV A,#0ACH ;选择数字滤波/设置门限DQD4
LCALL WRT_CMD
LCALL ENDD
MOV A,#0CAH ;输出和FIFO模式命令
LCALL WRT_CMD ;设置FIFO中断门限FIFO8
MOV A,#81H ;设置FIFO填充条件:同步字
LCALL WRT_CMD ;禁止高灵敏复位模式
LCALL ENDD
MOV A,#0C4H ;AFC命令
LCALL WRT_CMD ;VDI有效保留偏移值 /使能AFC输出寄存器/打开AFC功能
MOV A,#83H ;AFC自动模式:上电运行一次
LCALL WRT_CMD ;频率漂移范围:无限制
LCALL ENDD
MOV A,#98H ;发射机配置控制命令
LCALL WRT_CMD ;调制频偏:30KHZ \
MOV A,#50H
LCALL WRT_CMD
LCALL ENDD
RET
;******************************************************************************
;读字节
RD_CMD :
CLR SCK
CLR SEL
MOV R3,#08H
NOP
CLR C
RLC A
OUTBYT2:
CLR SCK
NOP
NOP
MOV SDI,C
SETB SCK
NOP
NOP
MOV C,SDO
CLR SCK
RLC A
DJNZ R3,OUTBYT2
RET
;******************************************************************************
;写字节
;*******************************************************************
WRT_CMD: CLR SCK
CLR SEL
MOV R7,#08H
OUTBYT1:
CLR SCK
NOP
NOP
RLC A
MOV SDI,C
SETB SCK
DJNZ R7,OUTBYT1
RET
;**********************************************************************
WAITI:
WAITQ: JB IRQ,WAITQ
RET
;**********************************************************************************************************************
;打开发射机
OPEN_TX:
MOV A, #00H ;读状态寄存器
LCALL WRT_CMD
MOV A, #00H
LCALL WRT_CMD
LCALL ENDD
MOV A,#82H ;电源管理命令
LCALL WRT_CMD ;打开发射机/打开频率合成器/打开晶体振荡器/禁止时钟输出
MOV A,#39H
LCALL WRT_CMD
LCALL ENDD
RET
;**********************************************************************************************************************
;关闭发射机、接收机
CLOSE_TRX:
MOV A,#82H ;电源管理命令
LCALL WRT_CMD ;关闭发射机/关闭频率合成器/关闭晶体振荡器/禁止时钟输出
MOV A,#01H
LCALL WRT_CMD
LCALL ENDD
RET
;***********************************************************************************************************************
;打开接收机
OPEN_RX:
MOV A, #82H
LCALL WRT_CMD
MOV A, #0D9H
LCALL WRT_CMD
LCALL ENDD
MOV A,#0CAH ;使能FIFO
LCALL WRT_CMD
MOV A, #83H
LCALL WRT_CMD
LCALL ENDD
MOV A,#00H ;读状态寄存器
LCALL WRT_CMD
MOV A,#00H
LCALL WRT_CMD
LCALL ENDD
RET
;*******************************************************************************************************************
;关闭接收机FIFO
CLOSE_RX_FIFO:
MOV A,#0CAH ;输出和FIFO模式命令 /禁止填充FIFO
CALL WRT_CMD ;设置FIFO中断门限FIFO8
MOV A ,#81H ;设置FIFO填充条件:同步字
CALL WRT_CMD ;禁止高灵敏复位模式
LCALL ENDD
RET
;******************************************************
;发送引导码,同步码
LEAD_CODE:
LCALL WAITI
MOV A, #0B8H ;发送引导码
LCALL WRT_CMD
MOV A,#0AAH
LCALL WRT_CMD
LCALL ENDD
LCALL WAITI
MOV A,#0B8H ;发送引导码
LCALL WRT_CMD
MOV A,#0AAH
LCALL WRT_CMD
LCALL ENDD
LCALL WAITI
MOV A, #0B8H ;发送引导码
LCALL WRT_CMD
MOV A, #0AAH
LCALL WRT_CMD
LCALL ENDD
LCALL WAITI
MOV A, #0B8H ;发送同步码
LCALL WRT_CMD
MOV A, #2DH
LCALL WRT_CMD
LCALL ENDD
LCALL WAITI
MOV A, #0B8H ;发送同步码
LCALL WRT_CMD
MOV A, #0D4H
LCALL WRT_CMD
LCALL ENDD
RET
OVER_CODE:
LCALL WAITI ; H
MOV A, #0B8H ;发送引导码
LCALL WRT_CMD
MOV A,#0AAH
LCALL WRT_CMD
LCALL ENDD
LCALL WAITI
MOV A,#0B8H ;发送引导码
LCALL WRT_CMD
MOV A, #0AAH
LCALL WRT_CMD
LCALL ENDD
LCALL WAITI
MOV A,#0B8H ;发送引导码
LCALL WRT_CMD
MOV A,#0AAH
LCALL WRT_CMD
LCALL ENDD
RET
ENDD:
CLR SCK
SETB SEL
NOP
NOP
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -