|
本帖最后由 liying1981 于 2013-3-27 22:34 编辑
我知道配置FIFO就能让SI4432自动发送数据,可接收是如何的呢?还是它在挂起、待机、预备模式,只要有符合条件的数据包来时就自动转为接收状态呢?
附上代码
;晶振:16MHz
;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。
;*****************************************************
LIST P=16F84A,R=DEC ;定义器件,默认为十进制
;-----------------------------------------------------
__CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
;没有代码保护
;看门狗关闭
;上电廷时器开启
;振荡器模式为XT
;-----------------------------------------------------
;定义各寄存器 ID校验:168 频道 169 频率 170 电量 171 遥控 172 确认
SDO EQU 0 ;SI4432数据输出
SDI EQU 1 ;SI4432数据输出入
SCLK EQU 2 ;SI4432时钟RA2
NSEL EQU 3 ;SI4432使能
NIRQ EQU 4 ;SI4432中断输出
;------------------------------------
K1 EQU 40H ;用于从无线接收到的ID暂时存放
K2 EQU 41H ;用于从无线接收到的数据暂时存放
SHUJU EQU 42H ;用于从主机收到的ID暂存处理中转
SHUJU1 EQU 43H ;用于从主机收到的数据暂存处理中转
K3 EQU 44H ;SI4432数据收发转送区
;--------------------------------------------------------------延时子程序使用
N0 EQU 20H
N1 EQU 21H
N2 EQU 22H
N3 EQU 23H
N4 EQU 24H
N5 EQU 25H
N6 EQU 26H
;-----------------------------------------------------------------接收 发射使用
N10 EQU 30H ;一字节位数
N11 EQU 31H ;字节数
;---------------------------------------------------------------
PORTA EQU 05H ;将RA口定义在这里
PORTB EQU 06H ;将RB口定义在这里
TRISA EQU 5H
TRISB EQU 6H
STATUS EQU 03H; 定义状态寄存器地址 必用,它包含了 IRP,RP1,RP0,TO,PD, Z,DC,C
RP0 EQU 5 ;定义状态寄存器中的RAM页选位RP0 7 6 5 4 3 2 1 0
Z EQU 2 ;定义Z在2位
C EQU 0 ;定义C在0位
;---------------------------------------
ORG 00H
CLRF PORTA ;初始化数据接收I/O口
CLRF PORTB ;
BSF STATUS,RP0 ;设置数据寄存器体1 \
MOVLW B'00010001' ;定义RA。0,RA。4为输入其它为输出 其顺序为: RB4 RB3 RB2 RB1 RB0 \初始化I/O口必用
MOVWF TRISA ; 0 0 0 1 1 1 1 1 B \
MOVLW B'00000000' ;定义RB。0,RB。1为输入其它为输出 其顺序为:RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 \
MOVWF TRISB ; 0 0 0 0 0 0 0 0 B \
BCF STATUS,RP0 ;恢复数据寄存器体0
BSF PORTA,NSEL
CALL YS40MS
CALL SI4432CHUSHIHUA ;调用SI4432初始化 \
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;初始化结束
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--------------------------------------SI4432无线收发 GFSK/FIFO模式 初始化
;-------------------------
SI4432CHUSHIHUA
CALL SI4432QINGCHUSUOYOU;清除所有中断
;---------------------------------------配置SI4432的IF滤波器带宽 地址为1CH 当最高位置1后为9CH
MOVLW 0x9C
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址1CH
;-----------
MOVLW 0x2E
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的AFC循环变速超速 地址为1DH 当最高位置1后为9DH
;-----------
MOVLW 0x40
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的AFC定时控制 地址为1EH 当最高位置1后为9EH
;-----------
MOVLW 0x0A
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的时钟恢复变速超速 地址为1FH 当最高位置1后为9FH
;-----------
MOVLW 0x03
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的时钟恢复抽样率 地址为20H 当最高位置1后为A0H
;-----------
MOVLW 0x68
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的时钟恢复偏差2 地址为21H 当最高位置1后为A1H
;-----------
MOVLW 0x01
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的时钟恢复偏差1 地址为22H 当最高位置1后为A2H
;-----------
MOVLW 0x3A
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的时钟恢复偏差0 地址为23H 当最高位置1后为A3H
;-----------
MOVLW 0x93
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的时钟恢复定时增益1 地址为24H 当最高位置1后为A4H
;-----------
MOVLW 0x01
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的IF滤波器带宽 地址为25H 当最高位置1后为A5H
;-----------
MOVLW 0x30
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
;*******************************************************************
;-------------------------配置SI4432的///// 地址为2AH 当最高位置1后为AAH
MOVLW 0xAA
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址2AH
;-----------
MOVLW 0x10
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
;********************************************************
;*********************************************************************************************************30H-4EH
;-------------------------配置SI4432的///// 地址为30H 当最高位置1后为B0H
MOVLW 0xB0 ;数据访问控制
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址30H
;-----------
MOVLW B'10001101' ;默认值:B'10001101'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为31H EZMAC状态
;-----------
MOVLW B'00000000' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为32H 帧头控制1
;-----------
MOVLW B'00000000' ;默认值:B'00001100'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为33H 帧头控制2
;-----------
MOVLW B'00100010' ;默认值:B'00100010'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为34H 引导码长度
;-----------
MOVLW B'00001000' ;默认值:B'00001000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为35H 引导码检测控制1
;-----------
MOVLW B'00101010' ;默认值:B'00101010'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为36H 同步字3
;-----------
MOVLW B'00101101' ;默认值:B'00101101'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为37H 同步字2
;-----------
MOVLW B'11010100' ;默认值:B'11010100'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为38H 同步字1
;-----------
MOVLW B'00000000' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为39H 同步字0
;-----------
MOVLW B'00000000' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为3AH 发射帧头3
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为3BH 发射帧头2
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为3CH 发射帧头1
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为3DH 发射帧头0
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为3EH 发射包长度
;-----------
MOVLW D'6'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为3FH 帧头检测3
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为40H 帧头检测2
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为41H 帧头检测1
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为42H 帧头检测0
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为43H 帧头使能3
;-----------
MOVLW B'11111111' ;默认值:B'11111111'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为44H 帧头使能2
;-----------
MOVLW B'11111111' ;默认值:B'11111111'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为45H 帧头使能1
;-----------
MOVLW B'11111111' ;默认值:B'11111111'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为46H 帧头使能0
;-----------
MOVLW B'11111111' ;默认值:B'11111111'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为47H 接收帧头3
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为48H 接收帧头2
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为49H 接收帧头1
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为4AH 接收帧头0
;-----------
MOVLW B'10101010' ;默认值:B'00000000'
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432 地址为4BH 接收包长度
;-----------
MOVLW D'6'
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
;***************************************************
;------------------------配置SI4432的VCO 校正/超速 地址为58H 当最高位置1后为D8H
MOVLW 0xD8
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址1CH
;-----------
MOVLW 0x80
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
;*********************************************
;-------------------------配置SI4432的AGC超速1 地址为69H 当最高位置1后为E9H
MOVLW 0xE9
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址69H
;-----------
MOVLW 0x60
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
;*********************************************************************
;-------------------------配置SI4432的发射速率1 地址为6EH 当最高位置1后为EEH
MOVLW 0xEE
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址6EH
;-----------
MOVLW 0x4E
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的发射速率0 地址为6FH 当最高位置1后为EFH
;-----------
MOVLW 0xA5
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的调制模式1 地址为70H 当最高位置1后为F0H
;-----------
MOVLW 0x2C
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的调制模式2 地址为71H 当最高位置1后为F1H
;-----------
MOVLW 0x23
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的调制频偏 地址为72H 当最高位置1后为F2H
;-----------
MOVLW 0x20
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
;**********************************************
;-------------------------配置SI4432的频段选择 地址为75H 当最高位置1后为F5H
MOVLW 0xF5
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址75H
;-----------
MOVLW 0x53
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的标称载波1 地址为76H 当最高位置1后为F6H
;-----------
MOVLW 0x4B
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的标称载波0 地址为77H 当最高位置1后为F7H
;-----------
MOVLW 0x00
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
;------------------------SI4432GFSK模式初始化结束 开始配置数据收发格式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-------------------------配置SI4432的发射FIFO上限节数 地址为7CH 当最高位置1后为FCH
MOVLW 0xFC
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址7CH
;-----------
MOVLW D'4' ;设置为1字节 当接近此数值时自动发送数据
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的发射FIFO下限节数 地址为7DH 当最高位置1后为FDH
;-----------
MOVLW D'0' ;设置为1字节
MOVWF K3
CALL SI4432FA;---发送数据
;-------------------------配置SI4432的接收FIFO门限字节数 地址为7EH 当最高位置1后为FEH
;-----------
MOVLW D'4' ;设置为1字节
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-------------------------配置SI4432的设置启用中断 地址为05H 当最高位置1后为85H
MOVLW 0x85
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址08H
;-----------
MOVLW 0x02
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
;-------------------------配置SI4432的设置FIFO为自动TX 地址为08H 当最高位置1后为88H
MOVLW 0x88
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;--发送地址08H
;-----------
MOVLW 0x08
MOVWF K3
CALL SI4432FA;---发送数据
BSF PORTA,NSEL
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;清除所有中断
SI4432QINGCHUSUOYOU MOVLW 0x03 ;向SI4432发送数据缓冲地址 地址为03FH
MOVWF K3
BCF PORTA,NSEL
CALL SI4432FA ;向SI4432发送地址
CALL SI4432SHOU ;向SI4432读取数据
CALL SI4432SHOU ;向SI4432读取数据
BSF PORTA,NSEL
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SI4432收一字节
SI4432SHOU MOVLW D'8'
MOVWF N10
CALL YS5US
SI4432SHOU1 BSF PORTA,SCLK
CALL YS5US
BTFSC PORTA,SDO
GOTO SI4432SHOU2 ;接收到的数据暂时放在K3中
GOTO SI4432SHOU3
SI4432SHOU2 BSF STATUS,C
RLF K3
BCF PORTA,SCLK
CALL YS5US
DECFSZ N10,1
GOTO SI4432SHOU1
RETURN
SI4432SHOU3 BCF STATUS,C
RLF K3
BCF PORTA,SCLK
CALL YS5US
DECFSZ N10,1
GOTO SI4432SHOU1
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SI4432发一字节
SI4432FA MOVLW D'8'
MOVWF N10
CALL YS5US
SI4432FA1 RLF K3
BTFSC STATUS,C
GOTO SI4432FA2
GOTO SI4432FA3 ;要发送的数据放在K3中
SI4432FA2 BSF PORTA,SDI
BSF PORTA,SCLK
CALL YS5US
BCF PORTA,SCLK
CALL YS5US
DECFSZ N10,1
GOTO SI4432FA1
RETURN
SI4432FA3 BCF PORTA,SDI
BSF PORTA,SCLK
CALL YS5US
BCF PORTA,SCLK
CALL YS5US
DECFSZ N10,1
GOTO SI4432FA1
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;延时子程序
YS5US
MOVLW 0xFA ;取值
MOVWF N4
INCFSZ N4
GOTO $-1
RETURN
END
现在能发射了,可就不知道如何接收,烦请诸位大神指点一二,“玻璃之城”讲得通俗易懂,可就联系不上他,俺E文小白实在尴尬,在此先谢过诸位了。
另说句题外话,别看俺才注册阿莫,一年前俺开始接触MCU(冯诺依曼结构的)在这淘到不少好东东的。。。。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|