矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: mov99

[求助]RX5808接收模块

[复制链接]
     
 楼主| 发表于 2022-12-2 15:42:41 | 显示全部楼层
; 写RTC6705,低字节在前,低位在前;片选=SPI_LE.时钟=SPI_SCK.数据=SPI_SDO
; 预写内容存放在RTC_REG0.RTC_REG0.RTC_REG2.RTC_REG3,最高位在RTC_REG0

SPI4BYTE: mov    R2,#4            ; 写4字节
          mov    R0,#RTC_REG3     ; 预字内容起地址->R0
          clr    SPI_LE           ; 芯片使能

LOOPING:  mov    R7,#8            ; 每字节8bit
          mov    A,@R0            ; 以R0为地址的内容->A
          acall  TX8BIT
          dec    R0               ; 地址减1
          djnz   R2,LOOPING       ; 已写4字节?
          clr    SPI_SCK
          nop
          setb   SPI_LE
          ret

TX8BIT:   clr    SPI_SCK
          rrc    A
          mov    SPI_SDO,C        ; 低位在前,输出1bit
          nop
          setb   SPI_SCK
          djnz   R7,TX8BIT
          ret
回复 支持 反对

使用道具 举报

     
发表于 2022-12-2 16:06:55 | 显示全部楼层
汇编刚刚的,(我是看不懂)。。。。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-12-2 17:39:10 | 显示全部楼层
本帖最后由 mov99 于 2022-12-2 17:44 编辑
ITOUR 发表于 2022-12-2 16:06
汇编刚刚的,(我是看不懂)。。。。


写着玩儿,而且,部分运算代码是抄来的
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-12-2 17:42:52 | 显示全部楼层
; PIC18Fxxx汇编代码

; 写RTC6705,低字节在前,低位在前;片选=SPI_LE.时钟=SPI_SCK.数据=SPI_SDO
; 预写内容存放在RTC_REG0.RTC_REG0.RTC_REG2.RTC_REG3,最高位在RTC_REG0

MakeData  bcf     SPI_LE          ; RTC6705使能
          movlw   .25             ; 写25bit
          movwf   COUNTS
         
SendCode  bcf     SPI_SCK         ; SPI_SCK=0         
          rrcf    RTC_REG0,F
          rrcf    RTC_REG1,F
          rrcf    RTC_REG2,F
          rrcf    RTC_REG3,F      ; 低位在前(右移),输出1bit
         
          btfsc   STATUS,C        ; 查询,数据=0?
          bsf     SPI_SDO         ; 否,置SPI_SDO
          btfss   STATUS,C        ; 再查,数据=1?
          bcf     SPI_SDO         ; 否,清SPI_SDO
          bcf     STATUS,C
         
          bsf     SPI_SCK
          decfsz  COUNTS          ; 已写25bit?
          bra     SendCode        ; 否,继续
          bcf     SPI_SCK
          nop
          bsf     SPI_LE          ; RTC6705禁止
          return
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-12-3 15:37:34 | 显示全部楼层
; 24X8位二进制无符号除法
; 除数在AARGB3;被除数及商存放在BARGB0.BARGB1.BARGB2
; 余数存放在CARGB0.CARGB1.CARGB2

DIV_24X8  movlw   .24             ; 循环24次
          movwf   COUNTS
          movff   BARGB0,DARGB0   ; 复制被除数
          movff   BARGB1,DARGB1
          movff   BARGB2,DARGB2
         
          clrf    BARGB0
          clrf    BARGB1
          clrf    BARGB2
          clrf    CARGB0
          clrf    CARGB1
          clrf    CARGB2
         
TO_LOOP   bcf     STATUS,C        ; C=0
          rlcf    DARGB2,F
          rlcf    DARGB1,F
          rlcf    DARGB0,F
          rlcf    CARGB2,F
          rlcf    CARGB1,F
          rlcf    CARGB0,F
         
          bsf     STATUS,C        ; C=1
          movf    CARGB1,F
          bnz     CHK_NO
          movf    AARGB3,W
          subwf   CARGB2,W
         
CHK_NO    bnc     NOT_GO
          movf    AARGB3,W
          subwf   CARGB2,F        ; 余数-除数 ->CARGB2
          clrf    WREG
          subwfb  CARGB1,F
          subwfb  CARGB0,F
          bsf     STATUS,C
         
NOT_GO    rlcf    BARGB2,F        ; C->B
          rlcf    BARGB1,F
          rlcf    BARGB0,F
          decfsz  COUNTS,F        ; 已检查所有位?
          bra     TO_LOOP         ; 否,继续
          return
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-12-3 16:06:05 | 显示全部楼层
; HEX码转BCD码(似曾相识?由MSC-51移植而来)
; HEX码输入到CARGB1.CARGB2.CARGB3,最高位是CARGB1
; 压缩BCD码输出在R0.R1.R2.R3,最高位是R0

HEX4BCD   movlw   .24             ; 循环24次
          movwf   COUNTS
          clrf    R0              ; 清零,待用
          clrf    R1
          clrf    R2
          clrf    R3
         
TO_4BCD   rlcf    CARGB3,F        ; 带C左移,7bit->C
          rlcf    CARGB2,F
          rlcf    CARGB1,F
         
          movf    R3,W
          addwfc  R3,W            ; BCD码带进位自身相加(相当于乘2)
          daw                     ; 十进制调整
          movwf   R3              ; 结果送回自身
         
          movf    R2,W
          addwfc  R2,W
          daw
          movwf   R2
         
          movf    R1,W
          addwfc  R1,W
          daw
          movwf   R1
         
          movf    R0,W
          addwfc  R0,W
          daw
          movwf   R0
         
          decfsz  COUNTS,F        ; 处理完24bit?
          bra     TO_4BCD         ; 否,继续
          return
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-12-9 18:53:52 | 显示全部楼层
; 根据已知载波频率、参考频率,求除B、除A计数器值
; 芯片含除2固定分频器;预分频器P除64/65(P=64);除B计数器;除A计数器(或余数吞除)
; 载波频率=[(64*B+A)*2]*REF
; ① N=载波频率÷(参考频率x固定分频);② B=N÷64(取整数);③ A=N-(B*64)
; 载波频率在TX_BYTE0.TX_BYTE1.TX_BYTE2;除B在RTC_REG0.RTC_REG1;除A在RTC_REG2

FreqDesc  movlw   .20             ; 参考频率=20KHz
          mullw   .2              ; 乘以固定分频2
          movff   PRODL,AARGB3    ; 积->AARGB3(除数)
         
          movff   TX_BYTE0,BARGB0 ; 被除数(频率字)
          movff   TX_BYTE1,BARGB1
          movff   TX_BYTE2,BARGB2 ; 低8位
         
          call    DIV_24X8        ; 求除N;载波频率÷参考频率(含固定分频)
          movff   BARGB0,R0
          movff   BARGB1,R1       ; 备份除N,待用
          movff   BARGB2,R2
         
          movlw   .64             ; 除数(预分频P=64)
          movwf   AARGB3
          call    DIV_24X8        ; N÷P,求除B(取整数)
          movff   BARGB1,RTC_REG0
          movff   BARGB2,RTC_REG1 ; 除B->RTC_REG0.RTC_REG1
         
          clrf    BARGB0          ; 清零
          movf    RTC_REG1,W      ; 除B->W
          mullw   .64             ; W*P
          movff   PRODL,BARGB2    ; 积低8位->BARGB2
          movff   PRODH,BARGB1    ; 高8位->BARGB1

          movf    RTC_REG0,W      ; 除B高8位->W
          mullw   .64
          movf    PRODL,W         ; 积->W
          addwf   BARGB1,F
          clrf    WREG            ; 清工作寄存器
          addwfc  BARGB0,F        ; 高位+进位位
          movf    PRODH,W
          addwf   BARGB0,F        ; 积+高8位
         
          movf    BARGB2,W        ; 除B->W
          subwf   R2,F            ; N-(B*64),求除A
          movf    BARGB1,W
          subwfb  R1,F            ; 减(含借位位)
          movf    BARGB0,W
          subwfb  R0,F            ; 最高位
          btfss   STATUS,C        ; 查询,运算出错?
          bra     ErroTips        ; ***是,到提示***
          movff   R2,RTC_REG2     ; 正确!除A->RTC_REG2
          return
;---------------------------------
ErroTips: nop                     ; 错误处理
          ; .......
          bra     $
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-4-30 04:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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