黄金会员
主题
帖子
积分6701
阅读权限40
注册时间2011-3-11
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2019-8-10 22:36
|
显示全部楼层
/*******************************************************************************
/* NE804H STC89LE52 @ 24MHz 安鑫 nRF2401A 无线模块
/******************************************************************************/
$NOMOD51 ; 取消预定义寄存器,避免不兼容
/******************************************************************************/
#include <STC89C5xRC.H>
/******************************************************************************/
NAME nRF2401A
/******************************************************************************/
nRF2401_PWR BIT P4.0
nRF2401_CE BIT P2.6
nRF2401_CS BIT P2.4
nRF2401_DR1 BIT P2.2
nRF2401_CLK BIT P2.0
nRF2401_DATA BIT P3.7
/*************************************/
LED BIT P3.2
/******************************************************************************/
?PR?MAIN?nRF2401A SEGMENT CODE
?PR?nRF2401_RX_PARA?nRF2401A SEGMENT CODE
/******************************************************************************/
ORG 000H
RSEG ?PR?MAIN?nRF2401A
USING 0
MAIN:
MOV SP , #040H
; 预处理2041管脚,进入掉电模式
CLR nRF2401_CE
CLR nRF2401_CS
CLR nRF2401_PWR
DJNZ R7 ,$
DJNZ R7 ,$
; 清理内存
CLR A
MOV R0 , A
JP0_MAIN: MOV @R0 , A
DJNZ R0 , JP0_MAIN
; Init UART @ 57600 bps-----
MOV SCON , #050H ; 8位数据,可变波特率
MOV T2CON , #034H
MOV RCAP2H , #0FFH ; 57600 @ 24MHz @ STC89LE52RC
MOV TH2 , #0FFH
MOV RCAP2L , #0F3H ; STC89LE52RC
MOV TL2 , #0F3H
; nRF2401 上电 -------------
SETB nRF2401_PWR
MOV R5 , #100D ; 250毫秒@24MHz
JP1_MAIN: DJNZ R7 , $
DJNZ R5 , JP1_MAIN
; 设置2401管脚电平,进入CONFIG模式
;SETB nRF2401_PWR
CLR nRF2401_CE
SETB nRF2401_DR1
CLR nRF2401_CLK
CLR nRF2401_DATA
DJNZ R7 ,$
DJNZ R7 ,$
SETB nRF2401_CS
DJNZ R7 ,$
DJNZ R7 ,$
; 写入15字节的配置字
MOV DPTR , #nRF2401_RX_PARA
; 先发送高地址字节(已逆向排序),先发送字节高位
MOV R5 , #00FH
JP2_MAIN:
CLR A
MOVC A , @A+DPTR
MOV R7 , #008H
JP3_MAIN:
RLC A
MOV nRF2401_DATA, C
NOP
NOP
SETB nRF2401_CLK
NOP
NOP
CLR nRF2401_CLK
DJNZ R7 , JP3_MAIN
INC DPTR
DJNZ R5 , JP2_MAIN
; 设置2401管脚电平,进入接收模式
DJNZ R7 ,$
DJNZ R7 ,$
SETB nRF2401_PWR
SETB nRF2401_CE
CLR nRF2401_CS
SETB nRF2401_DR1
DJNZ R7 ,$
DJNZ R7 ,$
JP4_MAIN: ; 采样,输出
MOV C , nRF2401_DR1
MOV LED , C
JNC JP5_MAIN
MOV R5 , #004H
JP0_RD2401:
MOV R7 , #008H
JP1_RD2401: SETB nRF2401_CLK
NOP
NOP
MOV C , nRF2401_DATA
RLC A
CLR nRF2401_CLK
DJNZ R7 , JP1_RD2401
; 送标识到串口
CLR TI
MOV SBUF , A
JNB TI , $
DJNZ R5 , JP0_RD2401
JP5_MAIN: MOV R5 , #200D ; 50毫秒@24MHz
JP6_MAIN: DJNZ R7 , $
DJNZ R5 , JP6_MAIN
JMP JP4_MAIN
/******************************************************************************/
RSEG ?PR?nRF2401_RX_PARA?nRF2401A
nRF2401_RX_PARA:
DB 020H ; MSB 通道2数据
DB 020H ; 通道1数据长度( 1 BIT为单位)
DB 000H , 000H , 000H, 000H , 020H ; 通道2地址
DB 000H , 000H , 020H, 015H , 008H ; 通道1地址 201508
DB 063H ; 01100011B 24位地址,16位CRC,CRC使能
DB 06FH ; 0 1 1 011 11B 单通道,Burst模式,1Mbps,16MHz,0dBm
DB 005H ; LSB 频率 + 收发
/* ----------------------------------------------------------------------------
配合“鬼才” 的遥控器
1:启用CRC16校验
2:设置为接收模式
3:禁止自动应答
4:设置地址宽度3字节(地址为0x201508)
5:使用2频道
6:选择1Mbit传输速率
7:4字节数据宽度
8:启动接收.
收到的4字节数据DAT1,DAT2,DAT3,DAT4含义为:
DAT1=电池电压AD值(平时都是0xff,小于0xe9则欠压保护,对应电池电压约2v)
DAT2=键码
DAT3=键码
DAT4=键码
一共22个按键,每个按键对应1bit,按下为1,其中DAT4的bit1,bit0为保留位,始终是0
/******************************************************************************/
END
|
|