|

楼主 |
发表于 2022-11-4 13:28:40
|
显示全部楼层
本帖最后由 mov99 于 2022-11-4 15:22 编辑
; MCS-51单片机汇编代码
RTC_REG0 equ 0x30 ; 频率字最高位
RTC_REG1 equ 0x31
RTC_REG2 equ 0x32 ; 最低位
RTC_REG3 equ 0x33 ; 预写地址
TEMP_REG equ 0x34 ; 临时
;--------------------------------------------------------------------
org 0x0
sjmp McsJust ; 到初始化
org 0x36 ; 存放起地址
McsJust: mov SP,#0x7F ; 堆栈指针[0x80起]
;---------------------------------
; 接收频率:5795MHz,中频:479MHz
; 5795-479=5316/2=2658=0xA62
mov RTC_REG0,#0x0
mov RTC_REG1,#0xA ; 频率字
mov RTC_REG2,#0x62
mov RTC_REG3,#0x1 ; 预写寄存器地址
mov B,RTC_REG3 ; RTC_REG3的内容->B
setb B.4 ; 4bit=1,写操作
mov RTC_REG3,B ; B->RTC_REG3
;---------------------------------
call NORM_D32 ; 调用格式化
ajmp $
;---------------------------------
; 频率字格式化代码
; 双模预分频器P除32/33;P=32,A≤B,0≤A≤P
; 除A计数器是7位,必需保证5、6bit为0
NORM_D32: mov TEMP_REG,RTC_REG2 ; 备份,待用
clr C
mov A,RTC_REG2
rlc A ; 移出7bit
mov RTC_REG2,A
mov A,RTC_REG1
rlc A
mov RTC_REG1,A
clr C
mov A,RTC_REG2
rlc A ; 移出6bit
mov RTC_REG2,A
mov A,RTC_REG1
rlc A
mov RTC_REG1,A
mov A,RTC_REG2
anl A,#0x80 ; 屏蔽其它位
mov RTC_REG2,A
mov A,TEMP_REG
anl A,#0x1F
orl RTC_REG2,A ; 完成频率字格式化
; 预写数据格式化(发送:低字节在前,低位在前)
mov A,RTC_REG3 ; RTC_REG3内容->A
rl A ; 逻辑左移
rl A
rl A ; 无效高3位移至低3位,待用
mov RTC_REG3,A ; 累加器->RTC_REG3
mov R7,#3 ; 整体右移3次
TO_LOOP: mov A,RTC_REG0
rrc A ; 带进位位右移
mov RTC_REG0,A
mov A,RTC_REG1
rrc A
mov RTC_REG1,A
mov A,RTC_REG2
rrc A
mov RTC_REG2,A
mov A,RTC_REG3
rrc A
mov RTC_REG3,A ; 移出无效低3位
djnz R7,TO_LOOP ; 完成格式化?
ret
;--------------------------------------------------------------------
end
补充内容 (2022-11-5 21:58):
mov SP,#0x6F |
|