📄 cc1000.asm
字号:
PALE BIT P3.7
PDATA BIT P1.2
PCLK BIT P1.3
DIO BIT P3.5
DCLK BIT P3.4
SETB P3.2
ORG 00H
AJMP CONFIGURE
ORG 30H
CONFIGURE:
MOV TMOD,#20H;置定时方式控制字,定时器1工作在方式2
MOV SCON,#50H;串口工作于方式1
MOV PCON,#00H;SMOD位设为0
MOV TL1,#0FDH
MOV TH1,#0FDH;设置波特率为9600
MOV IE,#90H;允许串口中断
SETB TR1;启动定时器1
MOV R1,#30H;设置单片机接收数据地址
MOV R2,#50H;设置单片机接收数据长度
SETB DIO;输入数据口置位
SETB PDATA
SETB PCLK
SETB PALE
SETB DCLK
MOV A,#00H
MOV R0,#0FEH
CALL SUBWRITE;初始化并复位CC1000,给MAIN寄存器赋值
MOV A,#00H
MOV R0,#01H
CALL SUBWRITE;将RESET_N置1
CALL DELAY2MS;等待2ms
MOV A,#01H;给频率寄存器A设值,频率为403MHz,48BDF0
MOV R0,#48H
CALL SUBWRITE
MOV A,#02H
MOV R0,#0BDH
CALL SUBWRITE
MOV A,#03H
MOV R0,#0F0H
CALL SUBWRITE
MOV A,#0AH
MOV R0,#00H;68
CALL SUBWRITE;设前端控制寄存器
MOV A,#42H
MOV R0,#3FH
CALL SUBWRITE
MOV A,#0BH
MOV R0,#00H
CALL SUBWRITE;关功放
MOV A,#0CH;给PLL寄存器赋值
MOV R0,#40H;REFDIV设定为8
CALL SUBWRITE
MOV A,#0DH
MOV R0,#10H;28
CALL SUBWRITE
MOV A,#1CH;
MOV R0,#50H
CALL SUBWRITE
MOV A,#0EH;
MOV R0,#00H;
CALL SUBWRITE
MOV A,#0FH
MOV R0,#8EH
CALL SUBWRITE;选择峰值检测电平
MOV A,#42H
MOV R0,#3FH
CALL SUBWRITE
MOV A,#10H
MOV R0,#09H;09
CALL SUBWRITE;设置
MOV A,#11H;设定数据率和数据格式
MOV R0,#4AH;数据率为9600,UART格式
CALL SUBWRITE
MOV A,#12H
MOV R0,#70H
CALL SUBWRITE;设置接收匹配
MOV A,#0EH
MOV R0,#00H
CALL SUBWRITE;设置校准储存
MOV A,#00H
MOV R0,#11H
CALL SUBWRITE;接收校准设置
MOV A,#09H
MOV R0,#84H;84H
CALL SUBWRITE;设置接收电流;
MOV A,#0CH
MOV R0,#40H
CALL SUBWRITE;设定PLL锁定
MOV A,#0EH
MOV R0,#0A6H
CALL SUBWRITE;设置完毕,开始校验VCO和PLL
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
CALL DELAY2MS;等待2ms
MOV A,#0EH
MOV R0,#26H
CALL SUBWRITE;关接收校准
MOV A,#00H
MOV R0,#3FH
CALL SUBWRITE;进入掉电模式
MOV A,#0BH
MOV R0,#00H
CALL SUBWRITE;关功放
JIESHOU:
MOV A,#00H
MOV R0,#3BH
CALL SUBWRITE;退出掉电模式
MOV A,#09H
MOV R0,#84H;84
CALL SUBWRITE;设置接收电流
MOV A,#0CH
MOV R0,#40H
CALL SUBWRITE;PLL设定
CALL DELAY2MS;等待2ms
MOV A,#00H
MOV R0,#39H
CALL SUBWRITE;打开电流发生器
CALL DELAY250US;等待250us
MOV A,#00H
MOV R0,#31H
CALL SUBWRITE;设置主寄存器,处于接收状态
MOV A,#00H
MOV R0,#11H
CALL SUBWRITE;设置主寄存器,处于接收状态
MOV A,#0CH
MOV R0,#40H
CALL SUBWRITE;REFDIV设定为8
MOV A,#09H
MOV R0,#84H;84H
CALL SUBWRITE;设置接收电流
CALL DELAY250US;等待250us
BEGIN1:
MOV R4,#06H;2
BEGIN2:
MOV C,DCLK;判aa的起始位0;2
JC BEGIN1;2
CALL DELAY5US;8
DJNZ R4,BEGIN2;2,78us
NOP
NOP
NOP
NOP
;MOV C,DCLK;2
;JC BEGIN1;2
CLR P1.0;标志
MOV R4,#06H;2
BEGIN3:
MOV C,DCLK;读数据位,判aa的第1位为0;2
JC BEGIN1;2
CALL DELAY5US;8
DJNZ R4,BEGIN3;2,78us
NOP
NOP
NOP
NOP
;MOV C,DCLK;2
;JC BEGIN1;2
CLR P1.1;标志
BEGIN4:
MOV C,DCLK;读数据位,判aa的第2位为1;2
JNC BEGIN4;2
CALL DELAY30US;52us
NOP
NOP
NOP
NOP
;MOV C,DCLK;2
;JNC BEGIN4;2
CALL DELAY104US;104us
CLR P1.4;标志
MOV C,DCLK;读数据位,判aa的第3位为0,2
JC BEGIN40;2
SJMP AA3
BEGIN40:
MOV C,DCLK;读数据位,再判1次
JC BEGIN1
AA3:CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第4位为1,2
JNC BEGIN41;2
SJMP AA4
BEGIN41:
MOV C,DCLK;读数据位,再判1次
JNC BEGIN1
AA4:CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第5位为0,2
JC BEGIN42;2
SJMP AA5
BEGIN42:
MOV C,DCLK;读数据位,再判1次
JC BEGIN1
AA5:CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第6位为1,2
JNC BEGIN43;2
SJMP AA6
BEGIN43:
MOV C,DCLK;读数据位,再判1次
JNC BEGIN1
AA6:CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第7位为0,2
JC BEGIN44;2
SJMP AA7
BEGIN44:
MOV C,DCLK;读数据位,再判1次
JC BEGIN1
AA7:CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第8位为1,2
JNC BEGIN45;2
SJMP BEGIN5
BEGIN45:
MOV C,DCLK;读数据位,再判1次
JNC BEGIN1
BEGIN5:
MOV C,DCLK;读数据位,判aa的起始位0,2
JC BEGIN5;2
CALL DELAY30US;52US
NOP
NOP
NOP
NOP
;MOV C,DCLK;2
;JC BEGIN5;2
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第1位为0,2
JC BEGIN50;2
SJMP AA21
BEGIN50:
MOV C,DCLK;读数据位,再判1次
JC AA29
AA21:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第2位为1,2
JNC BEGIN51;2
SJMP AA22
BEGIN51:
MOV C,DCLK;读数据位,再判1次
JNC AA29
AA22:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第3位为0,2
JC BEGIN52;2
SJMP AA23
BEGIN52:
MOV C,DCLK;读数据位,再判1次
JC AA29
AA23:
CALL DELAY104US
MOV C,DCLK;读数据位,判aa的第4位为1;2
JNC BEGIN53;2
SJMP AA24
BEGIN53:
MOV C,DCLK;读数据位,再判1次
JNC AA29
AA24:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第5位为0,2
JC BEGIN54;2
SJMP AA25
BEGIN54:
MOV C,DCLK;读数据位,再判1次
JC AA29
AA25:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第6位为1,2
JNC BEGIN55;2
SJMP AA26
BEGIN55:
MOV C,DCLK;读数据位,再判1次
JNC AA29
AA26:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第7位为0,2
JC BEGIN56;2
SJMP AA27
BEGIN56:
MOV C,DCLK;读数据位,再判1次
JC AA29
AA27:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判aa的第8位为1,2
JNC BEGIN58;2
SJMP AA28
BEGIN58:
MOV C,DCLK;读数据位,再判1次
JNC AA29
SJMP AA28
AA29:LJMP BEGIN1
AA28:
CALL DELAY104US
MOV A,#10H
MOV R0,#19H
CALL SUBWRITE;设置平均值滤波器锁定,153个字节,等于延迟166us
;AJMP BEGIN1
;AJMP BEGIN80
BEGIN6:
MOV C,DCLK;读数据位,判33的起始位0,2
JC BEGIN6;2
CALL DELAY30US;52US
NOP
NOP
NOP
NOP
;MOV C,DCLK;2
;JC BEGIN6;2
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判33的第1位为1,2
JNC BB1;2
SJMP BB21
BB1:
MOV C,DCLK;读数据位,再判1次
JNC BB29
BB21:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判33的第2位为1,2
JNC BB2;2
SJMP BB22
BB2:
MOV C,DCLK;读数据位,再判1次
JNC BB29
BB22:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判33的第3位为0,2
JC BB3;2
SJMP BB23
BB3:
MOV C,DCLK;读数据位,再判1次
JC BB29
BB23:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判33的第4位为0,2
JC BB4;2
SJMP BB24
BB4:
MOV C,DCLK;读数据位,再判1次
JC BB29
BB24:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判33的第5位为1,2
JNC BB5;2
SJMP BB25
BB5:
MOV C,DCLK;读数据位,再判1次
JNC BB29
BB25:
CALL DELAY104US;2
MOV C,DCLK;读数据位,判33的第6位为1,2
JNC BB6;2
SJMP BB26
BB6:
MOV C,DCLK;读数据位,再判1次
JNC BB29
BB26:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判33的第7位为0,2
JC BB7;2
SJMP BB27
BB7:
MOV C,DCLK;读数据位,再判1次
JC BB29
BB27:
CALL DELAY104US;104us
MOV C,DCLK;读数据位,判33的第8位为0,2
JC BB8;2
SJMP BB28
BB8:
MOV C,DCLK;读数据位,再判1次
JC BB29
BB28:
CALL DELAY104US;104us
SJMP BEGIN7
BB29:
LJMP BEGIN1
BEGIN7:
MOV C,DCLK;读数据位,判CC的起始位0,2
JC BEGIN7;2
CALL DELAY30US;52US
NOP
NOP
NOP
NOP
;MOV C,DCLK;2
;JC BEGIN7;2
CALL DELAY104US
MOV C,DCLK;读数据位,判CC的第1位为0
JC CC1
SJMP CC21
CC1:
MOV C,DCLK;读数据位,再判1次
JC CC29
CC21:
CALL DELAY104US
MOV C,DCLK;读数据位,判CC的第2位为0
JC CC2
SJMP CC22
CC2:
MOV C,DCLK;读数据位,再判1次
JC CC29
CC22:
CALL DELAY104US
MOV C,DCLK;读数据位,判CC的第3位为1
JNC CC3
SJMP CC23
CC3:
MOV C,DCLK;读数据位,再判1次
JNC CC29
CC23:
CALL DELAY104US
MOV C,DCLK;读数据位,判CC的第4位为1
JNC CC4
SJMP CC24
CC4:
MOV C,DCLK;读数据位,再判1次
JNC CC29
CC24:
CALL DELAY104US
MOV C,DCLK;读数据位,判CC的第5位为0
JC CC5
SJMP CC25
CC5:
MOV C,DCLK;读数据位,再判1次
JC CC29
CC25:
CALL DELAY104US
MOV C,DCLK;读数据位,判CC的第6位为0
JC CC6
SJMP CC26
CC6:
MOV C,DCLK;读数据位,再判1次
JC CC29
CC26:
CALL DELAY104US
MOV C,DCLK;读数据位,判CC的第7位为1
JNC CC7
SJMP CC27
CC7:
MOV C,DCLK;读数据位,再判1次
JNC CC29
CC27:
CALL DELAY104US
MOV C,DCLK;读数据位,判CC的第8位为1
JNC CC8
SJMP CC28
CC8:
MOV C,DCLK;读数据位,再判1次
JNC CC29
CC28:
CALL DELAY104US
SJMP BEGIN80
CC29:
LJMP BEGIN1
BEGIN80:
CLR P3.3
;SJMP BEGIN8
CLR P3.2
;SJMP $
;AJMP BEGIN8
;BEGIN70:AJMP BEGIN1
BEGIN8:
MOV R2,#08H;数据长度,a0
MOV C,DCLK;读数据位,判01的起始位0,2
JC BEGIN8;2
CALL DELAY30US;52US
CALL DELAY104US
BEGIN10:
MOV C,DCLK;
RRC A
CALL DELAY104US
DJNZ R2,BEGIN10
CJNE A,#01H,BEGIN8
SETB P3.2
SETB P3.3
AJMP BEGIN1
SUBWRITE:RL A;写寄存器子程序
MOV R3,#07H;循环次数为7
CLR PALE;清地址锁存器口
SETB PCLK;准备写时钟为高
CLR C;清位
START:RLC A;准备数据
MOV PDATA ,C;写数据位
CPL PCLK;产生一个下降沿
CPL PCLK;准备时钟为高电平
DJNZ R3,START
SETB PCLK
SETB PDATA;准备数据为高电平
CPL PCLK;写有效一个下降沿
CPL PCLK
CLR C
SETB PALE;准备写数据
SETB PCLK
MOV R3,#08H
MOV A,R0
LOOP:RLC A;写数据
MOV PDATA,C
CPL PCLK
CPL PCLK
DJNZ R3,LOOP
RET
JUDGE:
MOV R7,#00H
MOV R3,#03H
NEXT1:
MOV C,DCLK
JC NEXT3
INC R7
SJMP NEXT2
NEXT3:
NOP
NOP
NOP
NEXT2:
DJNZ R3,NEXT1
CLR C
MOV A,R7
SUBB A,#02H
JC NEXT4
CLR C
RRC A
SJMP NEXT5
NEXT4:
SETB C
RRC A
NEXT5:
RET
DELAY2MS:MOV R5,#73H;延时2ms
WAIT2:MOV R6,#08H
DJNZ R6,$
DJNZ R5,WAIT2
RET
DELAY250US:MOV R7,#73H;延时250us
DJNZ R7,$
RET
DELAY200US:MOV R7,#5CH;延时200us
DJNZ R7,$
RET
DELAY20US:MOV R7,#12H;延时20us
DJNZ R7,$
RET
DELAY104US:MOV R7,#2DH;延时104us
DJNZ R7,$
NOP
RET
DELAY100US:MOV R7,#2DH;延时100us
DJNZ R7,$
RET
DELAY99US:MOV R7,#2CH;延时99us
DJNZ R7,$
NOP
RET
DELAY52US:MOV R7,#16H;延时54us,15H
DJNZ R7,$
NOP
RET
DELAY5US:NOP;延时5us
NOP
NOP
NOP
NOP
RET
DELAY30US:MOV R7,#0DH;延时30us
DJNZ R7,$
NOP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -