找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1696|回复: 0
收起左侧

NRF24I01的单片机汇编程序

[复制链接]
ID:319118 发表于 2018-4-29 21:15 | 显示全部楼层 |阅读模式
NRF24I01的c语言汇编程序
0.jpg
实验时收发双方都采用相同的电路
  1. 发送方程序如下:
  2.                 org        0000H         
  3.                 AJMP        START

  4. ;延时1/4s子程序
  5. YANSHI1S:        MOV        R7,#250
  6. YANSHI1S1:        MOV        R6,#250
  7. YANSHI1S2:        NOP
  8.                 NOP
  9.                 DJNZ        R6,YANSHI1S2
  10.                 DJNZ        R7,YANSHI1S1
  11.                 RET


  12. ;将58开始的单或多字节(字节数在R3中)写入芯片
  13. XIENB:                MOV        R0,#58H
  14.                 CLR        P1.7                ;SCN变低
  15. XIE00:                ACALL        XIE1B
  16.                 INC        R0
  17.                 DJNZ        R3,XIE00
  18.                 SETB        P1.7
  19.                 RET

  20. ;;将R0所指1单元按SPI时序写入模块,调用该子程序前,应将CSN线变低
  21. ;单次或多次调用完成后将CSN线变高
  22. XIE1B:                MOV        R2,#8
  23.                 MOV        A,@R0
  24. XIE1B1:                RLC        A
  25.                 MOV        P1.5,C                ;数据送上MOSI线
  26.                 SETB        P1.4                ;数据移入模块
  27.                 CLR        P1.4
  28.                 DJNZ        R2,XIE1B1
  29.                 RET

  30. ;读芯片状态字        将芯片状态字读到5FH
  31. DUZT:                MOV        R2,#8
  32.                 SETB        P1.5
  33.                 CLR        P1.7                ;CSN变低,
  34. DUZT1:                SETB        P1.4                ;时钟上升
  35.                 MOV        C,P1.3                ;读入MISO线上的数据
  36.                 MOV        A,5FH
  37.                 RLC        A                ;数据移入5FH寄存器
  38.                 MOV        5FH,A
  39.                 CLR        P1.4                        
  40.                 DJNZ        R2,DUZT1
  41.                 SETB        P1.7                ;CSN变高,完成一次命令
  42.                 RET






  43. START:                MOV        P1,#0AFH        ;模块待机
  44.                 MOV        58H,#20H        ;准备写0寄存器
  45.                 MOV        59H,#0EH        ;上电,发射模式
  46.                 MOV        R3,#02H
  47.                 ACALL        XIENB
  48.                 MOV        58H,#21H        ;01寄存器
  49.                 MOV        59H,#03H        ;0,1通道允许自动应答
  50.                 MOV        R3,#02H
  51.                 ACALL        XIENB
  52.                 MOV        58H,#22H        ;02
  53.                 MOV        59H,#03H
  54.                 MOV        R3,#02H
  55.                 ACALL        XIENB
  56.                 MOV        58H,#23H        ;03寄存器
  57.                 MOV        59H,#03H        ;5字节地址宽带
  58.                 MOV        R3,#02H
  59.                 ACALL        XIENB
  60.                 MOV        58H,#24H        ;04
  61.                 MOV        59H,#14H        ;重发等待500uS,重发4次,1A则重发10次,在206c处
  62.                 MOV        R3,#02H
  63.                 ACALL        XIENB
  64.                 MOV        58H,#25H        ;05寄存器
  65.                 MOV        59H,#07H        ;射频频率(汇编后在2076处)
  66.                 MOV        R3,#02H
  67.                 ACALL        XIENB
  68.                 MOV        58H,#26H        ;06
  69.                 MOV        59H,#27H        ;07为1M传输速率,0dB增益,27则为250k传输速率
  70.                 MOV        R3,#02H
  71.                 ACALL        XIENB
  72.                 MOV        58H,#27H        ;07
  73.                 MOV        59H,#70H        ;清模块内中断
  74.                 MOV        R3,#02H
  75.                 ACALL        XIENB
  76.                 MOV        58H,#2AH        ;0A寄存器(通道0)
  77.                 MOV        59H,#02H        ;配置地址
  78.                 MOV        5AH,#3AH
  79.                 MOV        5BH,#39H
  80.                 MOV        5CH,#38H
  81.                 MOV        5DH,#37H
  82.                 MOV        R3,#06H
  83.                 ACALL        XIENB
  84.                 MOV        58H,#30H        ;10寄存器
  85.                 MOV        R3,#06H                ;发送地址
  86.                 ACALL        XIENB
  87.                 MOV        58H,#2BH        ;0B寄存器(通道1)
  88.                 MOV        59H,#01H        ;本机地址
  89.                 MOV        R3,#06H
  90.                 ACALL        XIENB
  91.                 MOV        58H,#31H        ;11寄存器
  92.                 MOV        59H,#10H        ;0通道有效数据宽带16字节
  93.                 MOV        R3,#02H
  94.                 ACALL        XIENB
  95.                 MOV        58H,#32H        ;12寄存器
  96.                 MOV        59H,#10H        ;1通道有效数据宽度16字节
  97.                 MOV        R3,#02H
  98.                 ACALL        XIENB
  99. XIEFS:                MOV        58H,#0A0H        ;写发送数据到芯片
  100.                 MOV        R0,#58H
  101.                 MOV        R3,#10H
  102.                 CLR        P1.7
  103.                 ACALL        XIE1B
  104.                 MOV        R0,#70H
  105. XIEXUN:                ACALL        XIE1B
  106.                 INC        R0
  107.                 DJNZ        R3,XIEXUN
  108.                 SETB        P1.7         
  109.                 SETB        P1.6                ;启动发射
  110.                 MOV        R7,#5
  111.                 DJNZ        R7,$
  112.                 CLR        P1.6
  113.                 JB        P3.2,$
  114.                 cpl        p1.0
  115.                 ACALL        DUZT                ;读状态寄存器
  116.                 MOV        58H,#27H        ;07
  117.                 MOV        59H,#70H        ;清中断
  118.                 MOV        R3,#02H
  119.                 ACALL        XIENB
  120.                 MOV        58H,#0E1H        ;清模块发送缓冲区
  121.                 MOV        R3,#01H         
  122.                 ACALL        XIENB
  123.                 ACALL        YANSHI1S
  124.                 SJMP        XIEFS
  125.                  
  126.          
  127. end

  128. 接收端程序:

  129.                 org        0000H         
  130.                 AJMP        START

  131.                 org        0003H
  132.                 AJMP        EXINT0

  133. ;延时1/4s子程序
  134. YANSHI1S:        MOV        R7,#250
  135. YANSHI1S1:        MOV        R6,#250
  136. YANSHI1S2:        NOP
  137.                 NOP
  138.                 DJNZ        R6,YANSHI1S2
  139.                 DJNZ        R7,YANSHI1S1
  140.                 RET


  141. ;将58开始的单或多字节(字节数在R3中)写入芯片
  142. XIENB:                MOV        R0,#58H
  143.                 CLR        P1.7                ;SCN变低
  144. XIE00:                ACALL        XIE1B
  145.                 INC        R0
  146.                 DJNZ        R3,XIE00
  147.                 SETB        P1.7
  148.                 RET

  149. ;;将R0所指1单元按SPI时序写入模块,调用该子程序前,应将CSN线变低
  150. ;单次或多次调用完成后将CSN线变高
  151. XIE1B:                MOV        R2,#8
  152.                 MOV        A,@R0
  153. XIE1B1:                RLC        A
  154.                 MOV        P1.5,C                ;数据送上MOSI线
  155.                 SETB        P1.4                ;数据移入模块
  156.                 CLR        P1.4
  157.                 DJNZ        R2,XIE1B1
  158.                 RET

  159. ;按SPI时序读模块一字节入单片机R0所指单元,调用该子程序前,应将CSN线变低
  160. ;单次或多次调用完成后将CSN线变高
  161. DU1B:                MOV        R2,#8
  162. DU1B1:                SETB        P1.4
  163.                 MOV        C,P1.3
  164.                 RLC        A
  165.                 CLR        P1.4
  166.                 DJNZ        R2,DU1B1
  167.                 MOV        @R0,A
  168.                 RET

  169. ;按SPI时序读模块接收缓冲区数据入单片机R0所指单元,字节数在R3中
  170. DUNB:                PUSH        00H
  171.                 MOV        58H,#61H        ;写一字节命令
  172.                 MOV        R0,#58H
  173.                 CLR        P1.7
  174.                 ACALL        XIE1B
  175.                 POP        00H                ;R0指向接收缓冲区首地址
  176. DUXUN:                ACALL        DU1B
  177.                 INC        R0
  178.                 DJNZ        R3,DUXUN
  179.                 SETB        P1.7
  180.                 RET         

  181. ;读芯片状态字        将芯片状态字读到5FH
  182. DUZT:                MOV        R2,#8
  183.                 SETB        P1.5                ;输入芯片1
  184.                 CLR        P1.7                ;CSN变低,
  185. DUZT1:                SETB        P1.4                ;时钟上升
  186.                 MOV        C,P1.3                ;读入MISO线上的数据
  187.                 MOV        A,5FH
  188.                 RLC        A                ;数据移入5FH寄存器
  189.                 MOV        5FH,A
  190.                 CLR        P1.4                        
  191.                 DJNZ        R2,DUZT1
  192.                 SETB        P1.7                ;CSN变高,完成一次命令
  193.                 RET






  194. START:                MOV        P1,#0AFH        ;模块待机
  195.                 SETB        0A8H                ;允许外部中断0
  196.                 CLR        88H                ;电平触发
  197.                 SETB        0B8H                ;高优先级
  198.                 SETB         0AFH                ;CPU开中断

  199.                 MOV        58H,#20H        ;准备写0寄存器
  200.                 MOV        59H,#0FH        ;上电,接收模式(发射时,设置为0EH)
  201.                 MOV        R3,#02H
  202.                 ACALL        XIENB
  203.                 MOV        58H,#21H        ;01寄存器
  204.                 MOV        59H,#03H        ;0,1通道允许自动应答
  205.                 MOV        R3,#02H
  206.                 ACALL        XIENB
  207.                 MOV        58H,#22H        ;02
  208.                 MOV        59H,#03H        ;允许0,1通道接收
  209.                 MOV        R3,#02H
  210.                 ACALL        XIENB
  211.                 MOV        58H,#23H        ;03寄存器
  212.                 MOV        59H,#03H        ;5字节地址宽带
  213.                 MOV        R3,#02H
  214.                 ACALL        XIENB
  215.                 MOV        58H,#24H        ;04
  216.                 MOV        59H,#14H        ;重发等待500uS,重发4次
  217.                 MOV        R3,#02H
  218.                 ACALL        XIENB
  219.                 MOV        58H,#25H        ;05寄存器
  220.                 MOV        59H,#07H        ;射频频率
  221.                 MOV        R3,#02H
  222.                 ACALL        XIENB
  223.                 MOV        58H,#26H        ;06
  224.                 MOV        59H,#27H        ;设置为07为1M传输速率,0dB增益(若为27,则是250kpbs,0dB)
  225.                 MOV        R3,#02H
  226.                 ACALL        XIENB
  227.                 MOV        58H,#27H        ;07
  228.                 MOV        59H,#70H        ;清模块内中断
  229.                 MOV        R3,#02H
  230.                 ACALL        XIENB
  231.                 MOV        58H,#2AH        ;0A寄存器(通道0)
  232.                 MOV        59H,#01H        ;配置地址(对方地址)
  233.                 MOV        5AH,#3AH
  234.                 MOV        5BH,#39H
  235.                 MOV        5CH,#38H
  236.                 MOV        5DH,#37H
  237.                 MOV        R3,#06H
  238.                 ACALL        XIENB
  239.                 MOV        58H,#30H        ;10寄存器
  240.                 MOV        R3,#06H                ;发送地址
  241.                 ACALL        XIENB
  242.                 MOV        58H,#2BH        ;0B寄存器(通道1)
  243.                 MOV        59H,#02H        ;本机地址
  244.                 MOV        R3,#06H
  245.                 ACALL        XIENB
  246.                 MOV        58H,#31H        ;11寄存器
  247.                 MOV        59H,#10H        ;0通道有效数据宽带16字节
  248.                 MOV        R3,#02H
  249.                 ACALL        XIENB
  250.                 MOV        58H,#32H        ;12寄存器
  251.                 MOV        59H,#10H        ;1通道有效数据宽度16字节
  252.                 MOV        R3,#02H
  253.                 ACALL        XIENB
  254.                 SETB        P1.6                ;启动接收
  255. HALT:                SJMP        HALT


  256. EXINT0:                PUSH        ACC
  257.                 PUSH        PSW
  258.                 ACALL        DUZT                ;读状态寄存器
  259.                 MOV        58H,#27H        ;07
  260.                 MOV        59H,#70H        ;清中断
  261.                 MOV        R3,#02H
  262.                 ACALL        XIENB
  263.                 MOV        R0,#60H                ;读接收数据到60H到6FH
  264.                 MOV        R3,#10H
  265.                 ACALL        DUNB
  266.                 CPL        P1.0
  267. FANHUI:                POP        PSW
  268.                 POP        ACC
  269.                 RETI
  270.          
  271.          
  272. end
复制代码


51汇编程序带原理图.rar

39.98 KB, 下载次数: 5, 下载积分: 黑币 -5

NRF24I01

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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