大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。
/****************************************************
名称: 标准红发遥控 接收程序--4BYTE
平台为: 松瀚SN8P2511
接收方式为 定时中断接收 中断定时时间为100U
*****************************************************/
;寄存器定义
STS1 DS 1
F_IRECOK EQU STS1. 0 ;接收到一帖数据
T_IRSTA DS 1
T_IRNUMPOSI DS 1 ;高电平计数器
R_IRDAT1 DS 1 ;接收缓冲区
R_IRDAT2 DS 1
R_IRDAT3 DS 1
R_IRDAT4 DS 1
R_IRDATBUF DS 1 ;成功接收到的数据
;常数定义
VT_LEVEL0 EQU 10 ;1MS
VT_LEVEL1 EQU 20 ;2MS
;下面为中断接收程序--100U进入中断一次
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;先接收R_IRDAT4 最后接收R_IRDAT1
;R_IRDAT4 R_IRDAT3 R_IRDAT2 R_IRDAT1 分别为地址码 地址反码 数据码 数据反码
BTS0 F_IRECOK ;数据未取出 临时不接收新数据
JMP L_IREXIT
CLR T_IRSTA
BTS1 P_IR
INCMS T_IRSTA
BTS1 P_IR
INCMS T_IRSTA
BTS1 P_IR
INCMS T_IRSTA
BTS1 T_IRSTA. 1
JMP L_IRPOSI
L_NEGA1: ;当前为0
MOV A, T_IRNUMPOSI
B0BTS0 FZ
JMP L_IREXIT
MOV A, T_IRNUMPOSI
SUB A, #VT_LEVEL1 ;高电平时间大于 数据1 觉得起始
B0BTS0 FC
JMP L_INITIRDAT
BTS0 R_IRDAT4. 0
BSET F_IRECOK ;接收完一帖数据
MOV A, T_IRNUMPOSI
SUB A, #VT_LEVEL0 ;高电平时间大于 数据0 觉得接收到数据1
RRCM R_IRDAT1
RRCM R_IRDAT2
RRCM R_IRDAT3
RRCM R_IRDAT4
CLR T_IRNUMPOSI
JMP L_IREXIT
L_INITIRDAT: ;接收到起始码以后 初始化各数据
CLR T_IRNUMPOSI
MOV A, #0X80
MOV R_IRDAT1, A
CLR R_IRDAT2
CLR R_IRDAT3
CLR R_IRDAT4
; BCLR F_IRECOK
JMP L_IREXIT
;-------------------------------
L_IRPOSI: ;当前为1
INCMS T_IRNUMPOSI
NOP
L_IREXIT: ;退出接收程序
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/118522.html原文链接:https://javaforall.cn