|
楼主 |
发表于 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 $ |
|