搜索
bottom↓
回复: 5

菜鸟求教SI4432调试 汇编的,俺只会汇编

[复制链接]

出0入0汤圆

发表于 2013-3-27 22:33:39 | 显示全部楼层 |阅读模式
本帖最后由 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周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2013-3-28 01:00:54 | 显示全部楼层
留个沙发几小时居然木有人座。。。。。。。。。。。。。。

出0入0汤圆

 楼主| 发表于 2013-3-28 18:08:32 | 显示全部楼层
汗。。。。。。。。。。。。。

      
现在已经弄好接收与发射,在没开CRC校验时能收到数据了,可是收到的数据是错误的,开了CRC有效数据包的中断就没了,说明我在发射包没配置好,继续实验中。。。
   另外在FIFO模式下,发射完是返回在准备模式下的,接收需要指令一下。

         这等于变相的我自己回答了我自己昨天提出的问题了,呵呵。。。。。

出0入0汤圆

发表于 2013-3-29 09:15:21 | 显示全部楼层
什么东东来的

出0入0汤圆

 楼主| 发表于 2013-3-29 14:08:10 | 显示全部楼层
射频模块。

出0入0汤圆

 楼主| 发表于 2013-3-29 15:40:55 | 显示全部楼层
   感谢诸位的关注,特别感谢《玻璃之城》不倦教导,我调试完毕!

        关于“现在已经弄好接收与发射,在没开CRC校验时能收到数据了,可是收到的数据是错误的,开了CRC有效数据包的中断就没了,”这个问题,事实上是我用错了一条指令,汗。。。。。。。。。。
        SUBLW   用成SUBWF了。。。。。。。。。。。。。
这 哈佛结构里面少了一条冯诺依曼结构里的数与数的比较,还是麻烦了一点,不然昨天就弄好了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-2 14:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表