久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3834|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

nRF9E5芯片的中文資料及應(yīng)用(匯編程序)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-3-4 00:52 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
()、nRF9E5芯片應(yīng)用簡(jiǎn)述
nRF9E5是一款工作頻率為433/868/915MHz的智能射頻芯片,該芯片采用1.9V~3.6V單電源供電,32腳QFN封裝(5×5mm),發(fā)射功率為10dBm,接收靈敏度-100dBm,在低功耗時(shí)電流僅2.5μA,在發(fā)射功率為-10dBm時(shí)的發(fā)射電流11mA,接收模式下的電流12.5mA,適用于工業(yè)無(wú)線傳感器、遙控器和無(wú)線報(bào)警器等。經(jīng)測(cè)試在沒(méi)有建筑物阻擋的情況下,發(fā)送端放在辦公室的桌子上,隔一層玻璃,接收端在1000米遠(yuǎn)的馬路上能穩(wěn)定傳輸沒(méi)問(wèn)題,或者在本樓層1至4樓之間傳輸也很好。
下圖所示為nRF9E5的內(nèi)部結(jié)構(gòu)框圖。nRF9E5是一片嵌入了nRF905無(wú)線收發(fā)芯片、集成增強(qiáng)型8051微處理器和4個(gè)通道的10位ADC,采樣速率為80ksps,內(nèi)含1.22V電壓基準(zhǔn)、電源管理、PWM輸出、UART異步串口、SPI通訊接口、邏輯接口電路、看門(mén)夠電路、多通道可編程喚醒,以及CRC檢驗(yàn)和多點(diǎn)通信控制,高頻電感和濾波器等已經(jīng)全部?jī)?nèi)置,外圍元件很少,芯片的一致性能好、穩(wěn)定且不易受干擾。
nRF9E5沒(méi)有復(fù)雜的通訊協(xié)議,完全對(duì)用戶透明,同種產(chǎn)品之間可以自由通訊,內(nèi)置的CRC糾錯(cuò)硬件電路和協(xié)議免去了軟件開(kāi)發(fā)人員的軟件糾錯(cuò)編程和微控器的糾錯(cuò)運(yùn)算,降低了無(wú)線應(yīng)用的開(kāi)發(fā)難度。

(二)、nRF9E5芯片I/O口設(shè)置
nRF9E5有一8 位的通用雙向口(P0口)。另外,4個(gè)SPI 也可以用作通用IO口(P1 口)。大部分通用 I/O 口都可以通過(guò)編程設(shè)置為第二功能,第二功能包括:RXD、TXD,SPI、3個(gè)定時(shí)器/計(jì)數(shù)、PWM輸出等。
nRF9E5的P0 口通過(guò) P0_ALT 和 P0_DIR 進(jìn)行設(shè)置。若 P0_ALT.n = 1,則引腳P0.n 具有UART、外部中斷、定時(shí)器輸入或脈寬調(diào)制輸出功能; RXD方向取決于 P0_DIR.1 的值。若要使用 INT0_N  或INT1_N作為中斷,則必須使用 P0_ALT.3 / P0_ALT.4 的第二功能。若未置 P0_ALT.n=1,則相應(yīng)的 P0.n 作為通用 IO 口使用, 其方向由P0_DIR.n 確定。如下表所示:


引腳
P0_ALT.nP0_DIR.n
10
11
00
01
P00
GTIMER
Out
GTIMER
Out
P0.0
Out
P0.0
In
P01
RXD
Out
RXD
In
P0.1
Out
P0.1
In
P02
TXD
Out
TXD
Out
P0.2
Out
P0.2
In
P03
INT0_N
In
INT0_N
In
P0.3
Out
P0.3
In
P04
INT1_N
In
INT1_N
In
P0.4
Out
P0.4
In
P05
T0
In
T0
In
P0.5
Out
P0.5
In
P06
T1
In
T1
In
P0.6
Out
P0.6
In
P07
PWM
Out
PWM
Out
P0.7
Out
P0.7
In
表9   P0 口功能設(shè)置表
P1 口有4 個(gè)引腳,當(dāng)SPI_CTRL=01時(shí)是作SPI 口用。。引腳EECSN作為EEPROM 的片選信號(hào),MOSI作為SPI輸出,MISO作為SPI輸入,SCK作為SPI時(shí)鐘。將SPI_CTRL設(shè)為不等于01時(shí),若P1_ALT.n 設(shè)為0則P1.0--P1.3為通用 IO 口,此時(shí) P1_DIR.n 決定是輸入還是輸出口,見(jiàn)下表。

引腳

SPI_CTRL=01
SPI_CTRL!=01
P1_ALT.n=1
P1_ALT.n=0
P1_DIR.n=0
P1_DIR.n=1
SCK
SPI.時(shí)鐘
Out
T2
In
P1.0
In
P1.0
Out
MOSI
SPI 數(shù)據(jù)輸出
Out
P1.1
I/O
P1.1
In
P1.1
Out
MISO
SPI 數(shù)據(jù)輸入
In
P1.2
In
P1.2
In
P1.2
In
EECSN
P1.3
Out
P1.3
I/O
P1.3
In
P1.3
Out
無(wú)線收發(fā)器是由 P2 口來(lái)控制的,P2口的地址與 8051相同。但是因無(wú)線收發(fā)器集成在片內(nèi),P2口不再是雙向口。為了匹配無(wú)線電收發(fā)器子系統(tǒng)的需要,P2 口鎖存電壓值與標(biāo)準(zhǔn)8051也有所不同。無(wú)線收發(fā)器是通過(guò) P2 口特殊功能寄存器的SPI_CTRL 來(lái)控制的,如下表所示:
SFR 地址
R/W
位數(shù)
初始值
名稱
功能
A0
R/W
8
04
P2
NRF905 無(wú)線電收發(fā)器和AD 轉(zhuǎn)換器子系統(tǒng)的 IO
接口
B3
R/W
2
0
SPI_CTRL
00->不用SPI
01->SPI 與端口P1 相連接
1x->SPI 與nRF905/AD相連接

P2 寄存器位:功能
相應(yīng)的 nRF905 收發(fā)器引腳名稱
讀:
7: nRF905 收發(fā)器地址匹配
AM
6: nRF905 收發(fā)器載波檢測(cè)
CD
5: nRF905 收發(fā)器數(shù)據(jù)就緒
DR
4:ADC  轉(zhuǎn)換結(jié)束
EOC
3:0   (未使用)

2: nRF905收發(fā)器和ADC SPI  數(shù)據(jù)輸出(SBMISO)
MISO
1: 0(未使用)

0:0(未使用)

寫(xiě):
7: (未使用)

6: (未使用)

5: nRF905收發(fā)器使能接收器功能
TRX_CE
4: nRF905收發(fā)器發(fā)射/接收選擇
TX_EN
3: nRF905收發(fā)器和ADC SPI 芯片選擇(SBCSN)
CSN
2: (未使用)

1: nRF905收發(fā)器和ADC SPI  數(shù)據(jù) (SBMOSI)
MOSI
0: nRF905收發(fā)器和ADC SPI  時(shí)鐘(SBSCK)
SCK
()、nRF9E5芯片A/D口轉(zhuǎn)換
nRF9E5的AD轉(zhuǎn)換器是一個(gè)10位的線性轉(zhuǎn)換器,在低頻信號(hào)及濾波器的作用下可以增大到12位。AD轉(zhuǎn)換器的基準(zhǔn)電壓是:AREF或內(nèi)部帶隙參考電壓(1.22V)。
默認(rèn)狀態(tài)下AD 轉(zhuǎn)換器是 10位的,如有特殊要求,也可以設(shè)置成6,8,12位轉(zhuǎn)換模式。AD轉(zhuǎn)換器也可以應(yīng)用在其它模式下,比如 AIN0 輸入一負(fù)電壓,AIN1~AIN3作為放大輸入端。
AD 轉(zhuǎn)換器有兩個(gè)寄存器ADC_CONFIG_REG 和 ADC_DATA_REG。輸入頻道的選擇直接由 START_ADC_CONV 控制,CHSEL 的值從0 到 3 分別對(duì)應(yīng)選擇 AIN0 到AIN3, 若CHSEL 設(shè)置為 1xxx 則nRF9E5 提供給 AD轉(zhuǎn)換器內(nèi)部電壓:VDD/3~1.22V。
AD 轉(zhuǎn)換的結(jié)果將保存在ADC_DATA_REG 寄存器中。數(shù)據(jù)存儲(chǔ)形式如下表所示由ADC_RL_JUST來(lái)決定。

溢出狀態(tài)保存在STATUS_REGISTER寄存器中的 ADC_RFLAG 中。當(dāng) ADC_PWR_UP=0時(shí),AD轉(zhuǎn)換器功能被禁止。

使用內(nèi)部參考電壓時(shí)的測(cè)量值:當(dāng)VFSSEL=0,CHSEL選擇一個(gè)輸入AINi(AIN0到 AIN3),AD轉(zhuǎn)換的結(jié)果 ADCDATA 與 VAINi/1.22成正比:

ADC-配置寄存器說(shuō)明
參數(shù)
位寬
說(shuō)明
CSTARTN
1
當(dāng) ADCRUN  無(wú)效時(shí),此信號(hào)的上升沿將啟動(dòng)AD 轉(zhuǎn)換,
ADCRUN
1
有效時(shí),AD 轉(zhuǎn)換器連續(xù)轉(zhuǎn)換。此時(shí)可忽視CSTARTN 的狀態(tài)
ADC_PWR_UP
1
ADC 使能
VFSSEL
1
AD 轉(zhuǎn)換器參考電壓選擇
0:內(nèi)部帶隙參考電壓(1.22V)
1:外部引腳AREF 參考電壓(如果CHSEL=[1xxx],不考慮VFSSEL狀態(tài))
CHSEL
4
輸入通道選擇:
0000:AIN0             0001: AIN1
0010:AIN2             0011:AIN3
1xxx:內(nèi)部 VDD/3
RESCTRL
2
A/D 轉(zhuǎn)換器分辨率:
00:6 位        01:8 位
10:10 位       11:12 位
DIFFMODE
1
使能差分測(cè)量,AIN0 輸入一負(fù)電壓,AIN1~AIN3 作為放大輸入端,
ADC_RL_JUST
1
選擇向左或者向右數(shù)據(jù)存放格式
0:數(shù)據(jù)向左存放
1:數(shù)據(jù)向右存放

狀態(tài)寄存器說(shuō)明
參數(shù)
位寬
說(shuō)明
AM
1
地址匹配,接收到與本機(jī)地址匹配的地址數(shù)據(jù)。(見(jiàn) 9.8章)
CD
1
載波檢測(cè),接收到相同頻率的載波.詳細(xì)說(shuō)明見(jiàn)9.7 章.
DR
1
數(shù)據(jù)就緒,接收到一包有效數(shù)據(jù)(地址和 CRC 校驗(yàn)正確)(見(jiàn) 9.9章)
EOC
1
轉(zhuǎn)換結(jié)束,表明 AD 轉(zhuǎn)換已經(jīng)完成,數(shù)據(jù)存儲(chǔ)在ADC_DATA_REG 里.
ADC_RFLAG
3
ADC 溢出標(biāo)志:
RFLAG[2]:未溢出(ADCDATA=0)RFLAG[1]:溢出(ADCDATA=2n-1)
RFLAG[0]:溢出部分=RFLAG[1]或者RFLAG[2]
EXIF 特殊功能寄存器控制字

功能
EXIF.7
IE5-中斷5 標(biāo)志位。IE5=1 則探測(cè)AM 信號(hào)上升沿(見(jiàn)P2)。IE5必須由軟件清0。使能后軟件
設(shè)置產(chǎn)生中斷
EXIF.6
IE4-中斷4 標(biāo)志位。IE4=1則探測(cè) DR 信號(hào)上升沿.(見(jiàn)P2)。.IE4必須由軟件清 0。使能后軟件
設(shè)置產(chǎn)生中斷
EXIF.5
IE3-中斷3 標(biāo)志位。IE3=1表明內(nèi)部SPI 模塊已發(fā)射或接收了 8 位數(shù)據(jù),等待新指令。.IE3必
須由軟件清 0。使能后軟件設(shè)置產(chǎn)生中斷
EXIF.4
IE2-中斷2 標(biāo)志位。IE2=1則探測(cè) ADC’s 的EOC 信號(hào)上升沿(見(jiàn)第10章)。IE2必須由軟件清
0。使能后軟件設(shè)置產(chǎn)生中斷
EXIF.3
保留位 為 1
EXIF.2-0
保留位 為 0

(四)、nRF9E5芯片用戶程序
      nRF9E5的主程序存放在外部的串行EEPROM中,當(dāng)芯片開(kāi)始上電時(shí),其內(nèi)部固化的廠家引導(dǎo)程序通過(guò)SPI接口,將外部EEPROM中的主程序?qū)?/font>nRF9E5RAM(4K字節(jié)空間,沒(méi)有被主程序占用的可作為片內(nèi)RAM使用),接著執(zhí)行跳轉(zhuǎn)指令,開(kāi)始主程序的運(yùn)行。主程序需要按照下表所示的規(guī)則寫(xiě)入EEPROM中,其中SPEED(bit3)EEPROM的最大讀寫(xiě)速度,01MHz,10.5MHz。XO_FREQ(bit2,1,0)nRF9E5的外接晶振的頻率,000=4MHz,001=8MHz,010=12MHz,011=16MHz100=20MHz。

在用編程器寫(xiě)程序時(shí),前3個(gè)單元是0B0302,后面是主程序。其中0BH=00001011代表speed=1,XO_FREQ =011表示外接晶振是16MHz,03代表應(yīng)用程序起始偏移量,02代表主程序的256字節(jié)區(qū),見(jiàn)下圖。


                        

nRF9E5發(fā)送數(shù)據(jù)程序

;開(kāi)機(jī)進(jìn)行鍵掃描,有按鍵按下,就把該鍵值(10h,20h,40h)送出20個(gè),然后等待接收20個(gè)字符;接收到20個(gè)字符后,把這些數(shù)據(jù)送串口發(fā)送到微機(jī)里,用串口調(diào)試助手可以檢查接收情況。
          PWMCON      EQU    0A9h
             PWMDUTY     EQU    0AAh
             REGX_MSB    EQU    0ABh
             REGX_LSB    EQU    0ACh
            REGX_CTRL   EQU    0ADh
             RSTREAS     EQU     0B1h
            SPI_DATA    EQU      0B2h
            SPI_CTRL    EQU  0B3h
             SPICLK      EQU  0B4h
             TICK_DV     EQU 0B5h
             CK_CTRL     EQU     0B6h
             CKLFCON     EQU      0BFh
              EXIF        EQU 91h
              EIE         EQU0E8h
           CKCON      EQU  8EH
           SPI_SCK    EQU   P2.0
            SPI_MOSI   EQU   P2.1
            RACSN      EQU  P2.3
            TXEN       EQU P2.4
            TRX_CE     EQU   P2.5
          SPI_MISO   EQU   P2.2
            EOC        EQU   P2.4
             DR         EQU   P2.5
            CD         EQU   P2.6
             AM         EQU P2.7
              P0_DRV   EQU93H
              P0_DIR   EQU  94H
              P0_ALT  EQU  95H
             P1_DIR  EQU  96H
             P1_ALT  EQU  97H
             KeyValue  EQU 20H
            L0  EQU  KeyValue.4     ;L0=1,(20H)=10H
            L1  EQU  KeyValue.5     ;L1=1,(20H)=20H
            L2  EQU  KeyValue.6     ;L2=1,(20H)=40H
             S0 EQU    P0.5
             S1 EQU    P0.6
             S2 EQU    P0.7
          LED0   EQU    P0.0
             LED1   EQU    P0.3
             LED2   EQU    P0.4
           BZW    EQU   12H          ;設(shè)一個(gè)標(biāo)志位
                  ORG 0000H
                    LJMP    MAIN
                ORG 000BH
                  RETI
                ORG 0013H
                RETI
                ORG 001BH
                RETI
                ORG 0023H
                RETI
                  ORG004BH
                RETI
                ORG 0050H
;串口發(fā)送數(shù)據(jù)到pc
PutChar:        CLR   ES
                MOV     SBUF ,R7
                JNB     TI,  $       ;串口發(fā)送無(wú)線收到的R7鍵值(10H,20H,40H)
                      CLR     TI
                SETB ES
                           RET
;初始化子程序
Init:     MOV     SP,#60H        ;設(shè)堆棧指針
        MOV     TH1,#0F3h            ;波特率19200,N,8,1
        MOV     TL1,#0F3h            ;波特率19200,N,8,1 ;;;;;;
              ORL     CKCON,#10H          ;T1M=1,1/4時(shí)鐘
              MOV     PCON,#80H           ;SMOD=1,波特率加倍
              MOV     SCON,# 50h        ; Timer1 8bit auto reload ,方式1,REN=1,TI=1
             MOV     TMOD,#21h           ;
            SETB    TR1                  ;啟動(dòng)定時(shí)器1
            ORL     P0_ALT,#06h          ; P0.0 out,P0.1 input(RXD),P0.2(TXD) P0.3P0.4輸出,,P0.5 P0.6 P0.7輸入
            MOV     P0_DIR,#0E2h
            MOV     SPICLK,#01h        ; Connect internal SPI controller toRadio
            MOV     SPI_CTRL,#02h
           SETB    LED0                 ;燈滅
           SETB    LED1
           SETB    LED2
        MOV     BZW,#00H
           CLR     RACSN                 ;SPI片選有效
            MOV     R7,#19h               ;RF配置寄存器10-19為讀命令
          LCALL   SpiReadWrite
             CLR     A
           MOV     R7,A
           LCALL   SpiReadWrite
           MOV     A,R7
           ORL     A,#0CH                ;讀結(jié)果送R6也就是送到06H單元
           MOV     R6,A
           SETB    RACSN
            CLR     RACSN
            MOV     R7,#09h               ;00-09寫(xiě)RF配置寄存器命令
            LCALL   SpiReadWrite
          MOV     R7,06h
            LCALL   SpiReadWrite          ;把讀出的結(jié)果寫(xiě)回
            SETB    RACSN
            CLR     RACSN                       ; Write to RF config address 3 (RX payload)
             MOV     R7,#03H    ;配置RX_PWR,初值20H,32個(gè)字節(jié)03h3個(gè)字節(jié)
            LCALL   SpiReadWrite
            MOV     R7,# 01h
            LCALL   SpiReadWrite
          MOV     R7,# 01h
            LCALL   SpiReadWrite
         SETB    RACSN
         CLR     RACSN
            MOV     R7,#11h         ;Read RF config address 1
             LCALL   SpiReadWrite  ;讀配置寄存器。0001aaaa,aaaa指出讀操作的開(kāi)始字節(jié),
         CLR     A                     ;字節(jié)數(shù)量取決于aaaa指出的開(kāi)始地址。
         MOV     R7,A
             LCALL   SpiReadWrite  ;寫(xiě)配置寄存器。0000aaaa,aaaa指出寫(xiě)操作的開(kāi)始字節(jié),
            MOV     A,R7                  ; 字節(jié)數(shù)量取決于aaaa指出的開(kāi)始地址.
            ANL     A,#0F0H
          MOV     R6,A
          SETB    RACSN
          CLR     RACSN                  ; Write RF config address 0
         CLR     A
          MOV     R7,A
             LCALL   SpiReadWrite
           MOV     R7,#05Fh
            LCALL   SpiReadWrite
           MOV     A,R6
          ORL     A,#0Dh
         MOV     R7,A
           LCALL   SpiReadWrite
           MOV     R7,#44h             ;44接收、發(fā)送地址長(zhǎng)度
             LCALL   SpiReadWrite
           MOV     R7,#01H              ;01h1字節(jié)有效20h32字節(jié)有效
           LCALL   SpiReadWrite
          MOV     R7,#01h
            LCALL   C0185
           SETB    RACSN
              SETB    EA
          SETB  ES       ;
            RET
;掃描鍵盤(pán)子程序
ScanKey:     CLR     A                    ;掃描鍵盤(pán)即掃描3個(gè)按鈕,獲取鍵值
                 MOV     KeyValue,A           ;沒(méi)有鍵盤(pán)按下轉(zhuǎn)c00b1
            JB      S0,C00B1
           SETB    L0                   ;L0按下Keyvalue=10h,L0=Keyvalue.4
           CLR     LED0                 ;1鍵盤(pán)按下LED0燈亮延時(shí)后熄滅
           MOV     R7,#1AH
             LCALL   Delayms
            SETB    LED0
  C00B1:JB      S1,C00BF             ;L1按下Keyvalue=20h,L0=Keyvalue.5
           SETB    L1
           CLR     LED1
           MOV     R7,#1AH
           LCALL   Delayms
            SETB    LED1
C00BF:JB      S2 ,C00CD
           SETB    L2                   ;L2按下Keyvalue=40h,L0=Keyvalue.6
          CLR     LED2
          MOV     R7,#1AH
           LCALL   Delayms
           SETB    LED2
C00CD:  MOV     A,KeyValue
           JZ      C00D9
FS:     MOV  R2,#20H                 ;發(fā)送20個(gè)字節(jié)
FS1:    MOV     A,KeyValue
        MOV     R7,A                 ;獲取的鍵值送R7
        SETB    TXEN                 ;發(fā)送使能
            LCALL   TransmitPacket       ;調(diào)用發(fā)射程序包
          CLR     TXEN
          MOV     R7,#2AH
           LCALL   Delay100us
        DJNZ  R2,FS1
C00D9:        RET
;無(wú)線接收子程序
ReceivePacket:      SETB    TRX_CE                ;等待接收完畢
                   JNB     TRX_CE,C010E
                      CLR     RACSN
                       MOV     R7,#24H               ;讀接收數(shù)據(jù)命令
                        LCALL   SpiReadWrite
                     CLR     A
                      MOV     R7,A
                        LCALL   SpiReadWrite
                      SETB    RACSN
                       CLR     TRX_CE
                       MOV     KeyValue,R7
               INC  BZW
                       JNB     L0,C00F9              ;對(duì)接收數(shù)據(jù)進(jìn)行計(jì)數(shù)
          CLR     LED0
C00F9:              JNB     L1,C00FE
                       CLR     LED1
C00FE:             JNB     L2,C0103
                      CLR     LED2
C0103:              MOV     R7,#0AH
                       LCALL   Delayms
                      SETB    LED0
                       SETB    LED1
                       SETB    LED2
C010E:           RET
;無(wú)線發(fā)送子程序
TransmitPacket:   MOV     R5,07H          ; Spi enable for write a spi command
                     CLR     RACSN                 ;Writeaddress command
                          MOV     R7,#22H           ;寫(xiě)發(fā)送地址命令22H
                          LCALL   C0185             ;E7,E7,E7,E7 TX_ADDRESS
                       SETB    RACSN
                        MOV     R7,#01H           ;延時(shí)100微秒
                          LCALL   Delay100us
                       CLR     RACSN
                     MOV     R7,#20H           ;寫(xiě)發(fā)送數(shù)據(jù)命令20H
                        LCALL   SpiReadWrite
                       MOV     R7,05H            ;保存在R5中的鍵值送R7發(fā)送
                         LCALL   SpiReadWrite
                       SETB    RACSN
                      SETB    TRX_CE
                       MOV     R7,#0AH           ;發(fā)送后延時(shí)
                        LCALL   Delay100us
                       CLR     TRX_CE
C0136:                JNB     TRX_CE,C0136      ;等待發(fā)送完畢
                       RET
;主程序
main:          LCALL   Init              ;主程序,現(xiàn)調(diào)用初始化程序
                CLR     LED0              ;3個(gè)燈陸續(xù)點(diǎn)亮后熄滅
                MOV     R7,#0AH
                 LCALL   Delayms
                CLR     LED1
                MOV     R7,#0AH
                 LCALL   Delayms
                CLR     LED2
                MOV     R7,#0AH
                 LCALL   Delayms
                 SETB    LED0
                SETB    LED1
                SETB    LED2
Q:           MOVA,#20H
             MOVR2,#60D     ;清數(shù)據(jù)區(qū)
             MOV R0,#13H
QING:    MOV@R0,A      ;清數(shù)據(jù)區(qū)
              INC R0
              DJNZ R2,QING
C0158:      LCALL   ScanKey           ;掃描鍵盤(pán)等待接受數(shù)據(jù)
                 MOV     A,KeyValue
            JZ C0158
            MOV R0,#30H
            AJMPFH                      ;等待接收數(shù)據(jù)
            CLR     A                    ;掃描鍵盤(pán)即掃描3個(gè)按鈕,獲取鍵值
                 MOV     KeyValue,A           ;沒(méi)有鍵盤(pán)按下轉(zhuǎn)c00b1
                JB      S0,C0158
               SETB    L0                   ;L0按下Keyvalue=10h,L0=Keyvalue.4
                CLR     LED0                 ;1鍵盤(pán)按下LED0燈亮延時(shí)后熄滅
                MOV     R7,#0AH
                 LCALL   Delayms
                 SETB    LED0
                   MOV     A,KeyValue
                JZ      C0158

FH:           SETB    TRX_CE                ; nRF905 發(fā)器使能,接收器功能
                    JNB     TRX_CE,FH
                       CLR     RACSN
                       MOV     R7,#24H               ;讀接收數(shù)據(jù)命令
                        LCALL   SpiReadWrite
                     CLR     A
                      MOV     R7,A
                        LCALL   SpiReadWrite
                      SETB    RACSN                          ;SPI片選有效
                       CLR     TRX_CE
               MOV     A,R7
                        MOV @R0,A
               MOV     R7,#05H           ;延時(shí)100微秒
                          LCALL   Delay100us
               INC  BZW
               INC R0
               MOV A,BZW
               XRL  A,#20D
               JZ  FH0
               AJMP FH
FH0:           MOVR2,#20D                ;  OK
               MOV R0,#30H
               CLR     LED0
FH1:           MOV A,@R0
               MOV R7,A
               LCALL   PutChar
               INC R0
               DJNZ R2,FH1
               LCALL Delay
               MOV BZW,#0
               SETB LED0
               LCALL Delay
                  LJMP    C0158
C0185:       LCALL   SpiReadWrite       ;寫(xiě)發(fā)送數(shù)據(jù)地址
                MOV     R7,#0E7H
                LCALL   SpiReadWrite
                MOV     R7,#0E7H
                 LCALL   SpiReadWrite
                MOV     R7,#0E7H
                LCALL   SpiReadWrite
               MOV     R7,#0E7H

SpiReadWrite:  ANL     EXIF,#0DFH     ;Move byte to send to SPI data register
                MOV     SPI_DATA,R7   ;讀寫(xiě)SPI數(shù)據(jù)
C019E:        MOV     A,EXIF
                 JNB     0E0H.5,C019E
                MOV     R7,SPI_DATA
               RET

Delayms:    MOV     10H,R7          ;延時(shí)子程序
C01A8:       MOV     R7, 10H
                DEC     10H
                MOV     A,R7
                JZ      C01BF
               CLR     A
               MOV     R5,A
C01B1:        MOV     A,R5
               CLR     C
                SUBB    A,#0AH
                JNC     C01A8
                MOV     R7,#0AH
                 LCALL   Delay100us
               INC     R5
                SJMP    C01B1
C01BF:       RET
Delay100us:   MOV     11H,R7
Delay100us1:  MOV     R7, 11H
               DEC    11H
               MOV     A,R7
                   JZ      C021D
               CLR     A
               MOV     R6,A
Delay100us2:   MOV     A,R6
                CLR     C
                SUBB    A,#23H
                JNC     Delay100us1
               INC     R6
                   SJMP    Delay100us2
C021D:    RET
DELAY:         MOV 70H,#0FFH
DELAY1:        LCALL DELAY2
               DJNZ 70H,DELAY1
               RET
DELAY2:        MOV 71H,#0FFH
DELAY3:        NOP
               DJNZ 71H,DELAY3
               RET

END



                        
nRF9E5接收數(shù)據(jù)程序示例
;開(kāi)機(jī)等待接收20個(gè)字符,送到30h起始的單元中,然后再把這些數(shù)據(jù)發(fā)送出去
           PWMCON      EQU    0A9h
             PWMDUTY     EQU    0AAh
             REGX_MSB    EQU    0ABh
             REGX_LSB    EQU    0ACh
            REGX_CTRL   EQU    0ADh
             RSTREAS     EQU     0B1h
            SPI_DATA    EQU      0B2h
            SPI_CTRL    EQU  0B3h
             SPICLK      EQU  0B4h
             TICK_DV     EQU 0B5h
             CK_CTRL     EQU     0B6h
             CKLFCON     EQU      0BFh
              EXIF        EQU 91h
              EIE         EQU 0E8h
          CKCON      EQU  8EH
           SPI_SCK    EQU   P2.0
            SPI_MOSI   EQU   P2.1
            RACSN      EQU  P2.3
            TXEN       EQU P2.4
            TRX_CE     EQU   P2.5
          SPI_MISO   EQU   P2.2
            EOC        EQU   P2.4
             DR         EQU   P2.5
            CD         EQU   P2.6
             AM         EQU P2.7
              P0_DRV   EQU93H
              P0_DIR   EQU  94H
              P0_ALT  EQU  95H
             P1_DIR  EQU  96H
             P1_ALT  EQU  97H
             KeyValue  EQU 20H
            L0  EQU  KeyValue.4     ;L0=1,(20H)=10H
            L1  EQU  KeyValue.5     ;L1=1,(20H)=20H
            L2  EQU  KeyValue.6     ;L2=1,(20H)=40H
             S0 EQU    P0.5
             S1 EQU    P0.6
             S2 EQU    P0.7
        LED0   EQU    P0.0
             LED1   EQU    P0.3
             LED2   EQU    P0.4
          BZW    EQU   12H          ;設(shè)一個(gè)標(biāo)志位
                ORG0000H
                 LJMP    MAIN
                ORG 000BH
                RETI
                ORG 0013H
                RETI
                ORG 001BH
                RETI
                ORG 0023H
                RETI
              ORG 004BH
                RETI
                ORG 0050H
PutChar:        CLR   ES
                MOV     SBUF ,R7
                JNB     TI,  $   ;串口發(fā)送無(wú)線收到的R7鍵值(10H,20H,40H)
                          CLR     TI
                SETB ES
                          RET

Init:           MOV     SP,#60H           ;設(shè)堆棧指針
               MOV     TH1,#0F3h            ;波特率19200N,8,1
               MOV     TL1,#0F3h            ;波特率19200N,8,1 ;;;;;;
                       ORL     CKCON,#10H          ;T1M=1,1/4時(shí)鐘
                         MOV     PCON,#80H           ;SMOD=1,波特率加倍
                         MOV     SCON,# 50h          ; Timer1 8bit auto reload ,方式1,10UART波特率可變,波特率受MSOD影響,REN=1,TI=1
             MOV     TMOD,#21h           ; Timer1 8bit auto reload  20---21;;;;;;
            SETB    TR1                  ;啟動(dòng)定時(shí)器1
            ORL     P0_ALT,#06h          ; P0.0 out,P0.1 input(RXD),P0.2(TXD) P0.3 P0.4輸出,,P0.5 P0.6P0.7輸入
            MOV     P0_DIR,#0E2h
            MOV     SPICLK,#01h        ; Connect internal SPI controller to Radio
            MOV     SPI_CTRL,#02h
           SETB    LED0                 ;燈滅
           SETB    LED1
           SETB    LED2
        MOV     BZW,#00H
           CLR     RACSN                 ;SPI片選有效
            MOV     R7,#19h               ;RF配置寄存器10-19為讀命令
          LCALL   SpiReadWrite
             CLR     A
           MOV     R7,A
           LCALL   SpiReadWrite
           MOV     A,R7
           ORL     A,#0CH                ;讀結(jié)果送R6也就是送到06H單元
           MOV     R6,A
           SETB    RACSN
            CLR     RACSN
            MOV     R7,#09h               ;00-09寫(xiě)RF配置寄存器命令
            LCALL   SpiReadWrite
          MOV     R7,06h
            LCALL   SpiReadWrite          ;把讀出的結(jié)果寫(xiě)回
            SETB    RACSN
            CLR     RACSN                  ; Write to RF config address 3 (RX payload)
             MOV     R7,#03H      ;配置RX_PWR,初值20H,32個(gè)字節(jié)01h1個(gè)字節(jié)
            LCALL   SpiReadWrite
            MOV     R7,# 01h
            LCALL   SpiReadWrite
          MOV     R7,# 01h
            LCALL   SpiReadWrite
         SETB    RACSN
         CLR     RACSN
            MOV     R7,#11h         ;Read RF config address 1
             LCALL   SpiReadWrite ;讀配置寄存器。0001aaaa,aaaa指出讀操作的開(kāi)始字節(jié),
         CLR     A      ;字節(jié)數(shù)量取決于aaaa指出的開(kāi)始地址。
         MOV     R7,A
            LCALL   SpiReadWrite  ;寫(xiě)配置寄存器。0000aaaa,aaaa指出寫(xiě)操作的開(kāi)始字節(jié),
            MOV     A,R7                  ;字節(jié)數(shù)量取決于aaaa指出的開(kāi)始地址.
            ANL     A,#0F0H
          MOV     R6,A
          SETB    RACSN
          CLR     RACSN                  ; Write RF config address 0
         CLR     A
          MOV     R7,A
             LCALL   SpiReadWrite
           MOV     R7,#05Fh
            LCALL   SpiReadWrite
           MOV     A,R6
          ORL     A,#0Dh
         MOV     R7,A
           LCALL   SpiReadWrite
           MOV     R7,#44h             ;44接收、發(fā)送地址長(zhǎng)度
             LCALL   SpiReadWrite
           MOV     R7,#01H              ;01h1字節(jié)有效20h32字節(jié)有效
           LCALL   SpiReadWrite
          MOV     R7,#01h
            LCALL   C0185
           SETB    RACSN
              SETB    EA
           SETB  ES       ;
            RET
ScanKey:     CLR     A                    ;掃描鍵盤(pán)即掃描3個(gè)按鈕,獲取鍵值
                 MOV     KeyValue,A           ;沒(méi)有鍵盤(pán)按下轉(zhuǎn)c00b1
                  JB      S0,C00B1
                SETB    L0                   ;L0按下Keyvalue=10h,L0=Keyvalue.4
                CLR     LED0                 ;1鍵盤(pán)按下LED0燈亮延時(shí)后熄滅
                 MOV     R7,#0AH
                   LCALL   Delayms
                 SETB    LED0
C00B1:      JB      S1,C00BF             ;L1按下Keyvalue=20h,L0=Keyvalue.5
                 SETB    L1
                 CLR     LED1
                 MOV     R7,#0AH
                 LCALL   Delayms
                  SETB    LED1
C00BF:    JB      S2 ,C00CD
                SETB    L2                   ;L2按下Keyvalue=40h,L0=Keyvalue.6
                 CLR     LED2
                 MOV     R7,#0AH
               LCALL   Delayms
               SETB    LED2
C00CD:         MOV     A,KeyValue
               JZ      C00D9
FS:            SETB    TXEN                 ;發(fā)送使能
                 MOV     R7,A                 ;獲取的鍵值送R7
            MOV  R2,#20H                 ;發(fā)送20個(gè)字節(jié)
FS1:            LCALL   TransmitPacket       ;調(diào)用發(fā)射程序包
             DJNZ  R2,FS1
                 CLR     TXEN
C00D9:        RET

ReceivePacket:      SETB    TRX_CE                ;等待接收完畢
                 JNB     TRX_CE,C010E
               CLR     RACSN
                 MOV     R7,#24H               ;讀接收數(shù)據(jù)命令
                 LCALL   SpiReadWrite
               CLR     A
                MOV     R7,A
                 LCALL   SpiReadWrite
                SETB    RACSN
                CLR     TRX_CE
                MOV     KeyValue,R7
           INC  BZW
                 JNB     L0,C00F9              ;對(duì)接收數(shù)據(jù)進(jìn)行計(jì)數(shù)
          CLR     LED0
C00F9:        JNB     L1,C00FE
                CLR     LED1
C00FE:       JNB     L2,C0103
                CLR     LED2
C0103:        MOV     R7,#0AH
                LCALL   Delayms
                SETB    LED0
                SETB    LED1
                SETB    LED2
C010E:      RET

TransmitPacket:MOV     R5,07H          ; Spi enable for write a spi command
               CLR     RACSN                 ;Writeaddress command
                    MOV     R7,#22H           ;寫(xiě)發(fā)送地址命令22H
                   LCALL   C0185             ;E7,E7,E7,E7 TX_ADDRESS
                SETB    RACSN
                  MOV     R7,#01H           ;延時(shí)100微秒
                   LCALL   Delay100us
                CLR     RACSN
                MOV     R7,#20H           ;寫(xiě)發(fā)送數(shù)據(jù)命令20H
                 LCALL   SpiReadWrite
                 MOV     R7,05H            ;保存在R5中的鍵值送R7發(fā)送
                  LCALL   SpiReadWrite
                SETB    RACSN
                SETB    TRX_CE
                 MOV     R7,#0AH           ;發(fā)送后延時(shí)
                 LCALL   Delay100us
                CLR     TRX_CE
C0136:          JNB     TRX_CE,C0136      ;等待發(fā)送完畢
                RET

main:          LCALL   Init              ;主程序,現(xiàn)調(diào)用初始化程序
                CLR     LED0              ;3個(gè)燈陸續(xù)點(diǎn)亮后熄滅
                MOV     R7,#0AH
                 LCALL   Delayms
                CLR     LED1
                MOV     R7,#0AH
                 LCALL   Delayms
                CLR     LED2
                MOV     R7,#0AH
                 LCALL   Delayms
                 SETB    LED0
                SETB    LED1
                SETB    LED2
C0158:     LCALL   ScanKey           ;掃描鍵盤(pán)等待接受數(shù)據(jù)
Q:           MOVA,#20H
             MOVR2,#60D     ;清數(shù)據(jù)區(qū)
             MOV R0,#13H
QING:    MOV@R0,A      ;清數(shù)據(jù)區(qū)
             INC R0
             DJNZ R2,QING
            MOV R0,#30H
            MOV R2,#20D
            AJMPFH                      ;等待接收數(shù)據(jù)

FCBQ1:      MOV R0,#30H
             MOV R2,#20D
FCBQ2:      MOV     A,@R0
                  SETB    TXEN                 ;發(fā)送使能
                  MOV     R7,A                 ;獲取的鍵值送R7
                  LCALL   TransmitPacket       ;調(diào)用發(fā)射程序包
                  CLR     TXEN
             MOV     R7,#0AH              ;必須加延時(shí),否則收不到
                    LCALL   Delay100us
             INC R0
             DJNZ R2,FCBQ2
              CLR LED0
              LCALL Delay
              SETB  LED0
              MOV BZW,#0
              LJMP C0158

FH:           MOV R0,#30H
JS0:           SETB    TRX_CE                ;等待接收完畢
                        JNB     TRX_CE,JS0
                       CLR     RACSN
                        MOV     R7,#24H               ;讀接收數(shù)據(jù)命令
                        LCALL   SpiReadWrite
                     CLR     A
                      MOV     R7,A
                        LCALL   SpiReadWrite
                      SETB    RACSN
                       CLR     TRX_CE
               MOV     A,R7
               MOV     @R0,A
               XRL A,#10H
               JNZ JS1
               CLR     LED0              ;;;;;;
               AJMP  JS3
JS1:           MOV A,R7
               XRLA,#20H
               JNZ JS2
               CLR     LED1              ;;;;;;
JS2:           MOV A,R7
               XRL A,#40H
               JNZ JS3
               CLR     LED2              ;;;;;;
JS3:           MOV     R7,#0AH           ;延時(shí)100微秒
                          LCALL   Delay100us
               INC  BZW
               INC  R0
               MOV A,BZW
               XRL  A,#20D
               JZ  FH2
               AJMP JS0
FH0:           MOV R2,#20D
               MOV R0,#30H
FH1:           MOV A,@R0
               MOV R7,A
               LCALL   PutChar
               INC R0
               DJNZ R2,FH1
               LCALL Delay
               MOV BZW,#0
               SETB LED0
FH2:           LCALL Delay
               LCALL Delay
               LCALL Delay
               LCALL Delay
               SETB LED0
               SETB LED1
               SETB LED2
                       LJMP    FCBQ1

C0185:             LCALL   SpiReadWrite       ;寫(xiě)發(fā)送數(shù)據(jù)地址
                      MOV     R7,#0E7H
                       LCALL   SpiReadWrite
                       MOV     R7,#0E7H
                        LCALL   SpiReadWrite
                       MOV     R7,#0E7H
                       LCALL   SpiReadWrite
                    MOV     R7,#0E7H
SpiReadWrite:  ANL     EXIF,#0DFH     ;Move byte to send to SPI data register
                       MOV     SPI_DATA,R7   ;讀寫(xiě)SPI數(shù)據(jù)
C019E:              MOV     A,EXIF
                        JNB     0E0H.5,C019E
                       MOV     R7,SPI_DATA
                    RET
Delayms:    MOV     10H,R7          ;延時(shí)子程序
C01A8:       MOV     R7, 10H
                DEC     10H
                MOV     A,R7
                JZ      C01BF
               CLR     A
               MOV     R5,A
C01B1:        MOV     A,R5
               CLR     C
                SUBB    A,#0AH
                JNC     C01A8
                MOV     R7,#0AH
                 LCALL   Delay100us
               INC     R5
                SJMP    C01B1
C01BF:       RET


Delay100us:   MOV     11H,R7
Delay100us1:  MOV     R7, 11H
                 DEC    11H
                 MOV     A,R7
                  JZ      C021D
                 CLR     A
                 MOV     R6,A
Delay100us2:  MOV     A,R6
                  CLR     C
                  SUBB    A,#23H
                  JNC     Delay100us1
                 INC     R6
                  SJMP    Delay100us2
C021D:       RET
DELAY:         MOV70H,#0FFH
DELAY1:        LCALL DELAY2
                     DJNZ70H,DELAY1
                    RET
DELAY2:        MOV 71H,#0FFH
DELAY3:        NOP
                    DJNZ71H,DELAY3
                  RET
END







                        nRF9E5A/D轉(zhuǎn)換程序(無(wú)線溫度計(jì)程序)
;開(kāi)機(jī)定時(shí)器工作35h0時(shí),a/d轉(zhuǎn)換采集20個(gè)數(shù)據(jù)后,無(wú)線發(fā)送40h單元開(kāi)始的20個(gè)數(shù)據(jù)。
          PWMCON      EQU    0A9h
             PWMDUTY     EQU    0AAh
             REGX_MSB    EQU    0ABh
             REGX_LSB    EQU    0ACh
            REGX_CTRL   EQU    0ADh
             RSTREAS     EQU     0B1h
            SPI_DATA    EQU      0B2h
            SPI_CTRL    EQU  0B3h
             SPICLK      EQU  0B4h
             TICK_DV     EQU 0B5h
             CK_CTRL     EQU     0B6h
             CKLFCON     EQU      0BFh
              EXIF        EQU 91h
              EIE         EQU 0E8h
           CKCON      EQU  8EH
           SPI_SCK    EQU   P2.0
            SPI_MOSI   EQU   P2.1
            RACSN      EQU  P2.3
            TXEN       EQU P2.4
            TRX_CE     EQU   P2.5
          SPI_MISO   EQU   P2.2
            EOC        EQU   P2.4
             DR         EQU   P2.5
            CD         EQU   P2.6
             AM         EQU P2.7
              P0_DRV   EQU93H
              P0_DIR   EQU  94H
              P0_ALT  EQU  95H
             P1_DIR  EQU  96H
             P1_ALT  EQU  97H
             KeyValue  EQU 20H
            L0  EQU  KeyValue.4     ;L0=1,(20H)=10H
            L1  EQU  KeyValue.5     ;L1=1,(20H)=20H
            L2  EQU  KeyValue.6     ;L2=1,(20H)=40H
             S0 EQU    P0.5
             S1 EQU    P0.6
             S2 EQU    P0.7
           LED0   EQU    P0.0
             LED1   EQU    P0.3
             LED2   EQU    P0.4
           BZW    EQU   12H          ;設(shè)一個(gè)標(biāo)志位
             ORG 0000H
             LJMP    MAIN
               ORG 000BH
               LJMP C1
               ORG 0013H
               RETI
             ORG 001BH
               RETI
            ORG 0023H
            RETI
             ORG 004BH
             RETI
       ORG 0050H
C1:     CPLLED0
        MOV   TH0,#0BH
        MOV   TL0, #06H
         INC   2FH
        MOV   A,2FH
        CJNE  A, #32H, C2
        MOV   2FH, #00H
        INC  35H              ;秒個(gè)位加1
        MOV   A,35H
        CJNE  A, #0AH, C2
        MOV   35H, #00H
        INC  34H          ;秒十位加1
        MOV   A,34H;
C2:        RETI

PutChar:   PUSH ACC
                CLR   ES
                MOV     SBUF ,R7
                JNB     TI,  $         ;串口發(fā)送無(wú)線收到的R7鍵值(10H,20H,40H)
              CLR     TI
                SETB ES
                POP ACC
              RET
JSSJ:           CLR  EIE.1                      ;INT3中斷使能位,禁止中斷
                CLR LED1
                INCBZW
                MOVA,EXIF                    ;EXIF.5INT3中斷標(biāo)志位
                JNB     ACC.5 ,$            ;串口發(fā)送無(wú)線收到的R7鍵值(10H,20H,40H)
             SETB    ACC.5
                MOV EXIF,A
                SETBEIE.1                    ;INT3中斷使能,即允許中斷
              RETI
Init:           MOV     SP,#60H           ;設(shè)堆棧指針
                MOV     TH1,#0F3h            ;波特率19200,N,8,1
            ;   MOV     TL1,#0F3h            ;波特率19200,N,8,1 ;;;;;;
                MOV     TH0, #3CH
             MOV     TL0, #0c0h;
              ORL     CKCON,#10H          ;T1M=1,1/4時(shí)鐘
              MOV     PCON,#80H           ;SMOD=1,波特率加倍
              MOV     SCON,# 50h        ; Timer1 8bit auto reload ,方式1,10UART波特率可變,波特率受MSOD影響,REN=1,TI=1
             MOV     TMOD,#21h           ; Timer1 8bit auto reload  20---21;;;;;;
            SETB    TR1                  ;啟動(dòng)定時(shí)器1
            ORL     P0_ALT,#06h          ; P0.0 out,P0.1 input(RXD),P0.2(TXD) P0.3 P0.4輸出,,P0.5 P0.6P0.7輸入
            MOV     P0_DIR,#0E2h
            MOV     SPICLK,#01h        ; Connect internal SPI controller to Radio
            MOV     SPI_CTRL,#02H;02h
           SETB    LED0                 ;燈滅
           SETB    LED1
           SETB    LED2
           MOV     BZW,#00H
           CLR     RACSN                 ;SPI片選有效
            MOV     R7,#19h               ;RF配置寄存器10-19為讀命令
          LCALL   SpiReadWrite
             CLR     A
           MOV     R7,A
           LCALL   SpiReadWrite
           MOV     A,R7
           ORL     A,#0CH                ;讀結(jié)果送R6也就是送到06H單元
           MOV     R6,A
           SETB    RACSN
            CLR     RACSN
            MOV     R7,#09h               ;00-09寫(xiě)RF配置寄存器命令
            LCALL   SpiReadWrite
          MOV     R7,06h
            LCALL   SpiReadWrite          ;把讀出的結(jié)果寫(xiě)回
            SETB    RACSN
            CLR     RACSN                  ; Write to RF config address 3 (RX payload)
             MOV     R7,#03H              ;配置RX_PWR,初值20H,32個(gè)字節(jié)01h1個(gè)字節(jié)
            LCALL   SpiReadWrite
            MOV     R7,# 01h
            LCALL   SpiReadWrite
              MOV     R7,# 01h
            LCALL   SpiReadWrite
             SETB    RACSN
              CLR     RACSN
            MOV     R7,#11h         ;Read RF config address 1
             LCALL   SpiReadWrite          ;讀配置寄存器。0001aaaa,aaaa指出讀操作的開(kāi)始字節(jié),
             CLR     A                     ;字節(jié)數(shù)量取決于aaaa指出的開(kāi)始地址。
              MOV     R7,A
            LCALL   SpiReadWrite          ;寫(xiě)配置寄存器。0000aaaa,aaaa指出寫(xiě)操作的開(kāi)始字節(jié),
            MOV     A,R7                  ; 字節(jié)數(shù)量取決于aaaa指出的開(kāi)始地址.
            ANL     A,#0F0H
              MOV     R6,A
           SETB    RACSN
              CLR     RACSN                  ; Write RF config address 0
             CLR     A
          MOV     R7,A
             LCALL   SpiReadWrite
           MOV     R7,#05Fh
            LCALL   SpiReadWrite
           MOV     A,R6
           ORL     A,#0Dh
           MOV     R7,A
           LCALL   SpiReadWrite
           MOV     R7,#44h             ;44接收、發(fā)送地址長(zhǎng)度
             LCALL   SpiReadWrite
           MOV     R7,#01H              ;01h1字節(jié)有效20h32字節(jié)有效
           LCALL   SpiReadWrite
           MOV     R7,#01h
            LCALL   C0185
           SETB    RACSN
InitADC:       CLR     RACSN        ;Configure and turn on ADC
                MOV     R7,#44h
                LCALL   SpiReadWrite
                MOV     R7,#35H      ;Select AIN3, PWR_UP = 1, VFSEL=0;
                LCALL   SpiReadWrite
                MOV     R7,#09H;0BH      ;Set RES_CTRL = 3, 11,Rightjustified
                LCALL   SpiReadWrite
                SETB    RACSN
                SETB    EA
              SETB  ES       ;EA,     ES,   EX1,   ET0,    EX0;;;;;;
                SETB   ET0
                SETB 0BCH ;通信中斷優(yōu)先,IPPS1
                RET
ScanKey:     CLR     A                    ;掃描鍵盤(pán)即掃描3個(gè)按鈕,獲取鍵值
                 MOV     KeyValue,A           ;沒(méi)有鍵盤(pán)按下轉(zhuǎn)c00b1
               JB      S0,C00B1
           SETB    L0                   ;L0按下Keyvalue=10h,L0=Keyvalue.4
           CLR     LED0                 ;1鍵盤(pán)按下LED0燈亮延時(shí)后熄滅
           MOV     R7,#1AH
             LCALL   Delayms
            SETB    LED0
C00B1:      JB      S1,C00BF             ;L1按下Keyvalue=20h,L0=Keyvalue.5
           SETB    L1
           CLR     LED1
           MOV     R7,#1AH
          LCALL   Delayms
            SETB    LED1
C00BF:    JB      S2 ,C00CD
           SETB    L2                   ;L2按下Keyvalue=40h,L0=Keyvalue.6
                 CLR     LED2
                 MOV     R7,#1AH
           LCALL   Delayms
           SETB    LED2
C00CD:         MOV     A,KeyValue
           JZ      C00D9
FS:            MOV  R2,#20H                 ;發(fā)送20個(gè)字節(jié)
FS1:            MOV     A,KeyValue
                MOV     R7,A                 ;獲取的鍵值送R7
                SETB    TXEN                 ;發(fā)送使能
            LCALL   TransmitPacket       ;調(diào)用發(fā)射程序包
                 CLR     TXEN
                 MOV     R7,#2AH
           LCALL   Delay100us
                DJNZ  R2,FS1
C00D9:        RET

ReceivePacket:      SETB    TRX_CE                ;等待接收完畢
           JNB     TRX_CE,C010E
           CLR     RACSN
          MOV     R7,#24H               ;讀接收數(shù)據(jù)命令
           LCALL   SpiReadWrite
                    CLR     A
                MOV     R7,A
           LCALL   SpiReadWrite
                   SETB    RACSN
          CLR     TRX_CE
          MOV     KeyValue,R7
                 INC  BZW
          JNB     L0,C00F9              ;對(duì)接收數(shù)據(jù)進(jìn)行計(jì)數(shù)
          CLR     LED0
C00F9:        JNB     L1,C00FE
          CLR     LED1
C00FE:       JNB     L2,C0103
                CLR     LED2
C0103:        MOV     R7,#0AH
            LCALL   Delayms
                SETB    LED0
          SETB    LED1
          SETB    LED2
C010E:       RET

TransmitPacket:MOV     R5,07H          ; Spi enable for write a spi command
               CLR     RACSN                 ;Writeaddress command
             MOV     R7,#22H           ;寫(xiě)發(fā)送地址命令22H
             LCALL   C0185             ;E7,E7,E7,E7 TX_ADDRESS
          SETB    RACSN
           MOV     R7,#01H           ;延時(shí)100微秒
             LCALL   Delay100us
          CLR     RACSN
                    MOV     R7,#20H           ;寫(xiě)發(fā)送數(shù)據(jù)命令20H
           LCALL   SpiReadWrite
          MOV     R7,05H            ;保存在R5中的鍵值送R7發(fā)送
            LCALL   SpiReadWrite
          SETB    RACSN
          SETB    TRX_CE
          MOV     R7,#0AH           ;發(fā)送后延時(shí)
           LCALL   Delay100us
          CLR     TRX_CE
C0136:          JNB     TRX_CE,C0136      ;等待發(fā)送完畢
          RET

main:          LCALL   Init              ;主程序,現(xiàn)調(diào)用初始化程序
                CLR     LED0              ;3個(gè)燈陸續(xù)點(diǎn)亮后熄滅
          MOV     R7,#0AH
           LCALL   Delayms
          CLR     LED1
          MOV     R7,#0AH
           LCALL   Delayms
            CLR     LED2
                MOV     R7,#0AH
           LCALL   Delayms
           SETB    LED0
          SETB    LED1
          SETB    LED2
Q:               MOV A,#0H
              MOVR2,#60D     ;清數(shù)據(jù)區(qū)
              MOV R0,#12H
QING:        MOV@R0,A      ;清數(shù)據(jù)區(qū)
             INC R0
             DJNZ R2,QING
                SETB TR0
C0158:           SETB TR0;
                MOV   A,35H
             CJNE  A, #0AH, C0158
                 CLR TR0
                LCALL   StartADC
                     MOV A,40H
                  MOV R7,A
                     CPL  LED1
                  CLR TR0
FCBQ1:           MOV R0,#40H
                 MOV R2,#20D
FCBQ2:           MOV     A,@R0
                     SETB    TXEN                 ;發(fā)送使能
                     MOV     R7,A                 ;獲取的鍵值送R7
                    LCALL   TransmitPacket       ;調(diào)用發(fā)射程序包
                     CLR     TXEN
                MOV     R7,#0AH              ;必須加延時(shí),否則收不到
             LCALL   Delay100us
                 INC R0
                 DJNZ R2, FCBQ2
                 LCALL Delay
                  MOV BZW,#0
                 SETB TR0
                LJMP C0158

FH:            SETB    TRX_CE                ;等待接收完畢 OK
           JNB     TRX_CE,FH
          CLR     RACSN
          MOV     R7,#24H               ;讀接收數(shù)據(jù)命令
           LCALL   SpiReadWrite
                 CLR     A
                MOV     R7,A
            LCALL   SpiReadWrite
                      SETB    RACSN
            CLR     TRX_CE
                    MOV     A,R7
           MOV @R0,A
               MOV     R7,#05H           ;延時(shí)100微秒
             LCALL   Delay100us
                INC BZW
                INC R0
                 MOV A,BZW
                XRL A,#20D
                JZ FH0
                AJMP FH
FH0:           MOVR2,#20D                ;  OK
                MOV R0,#30H
               CLR     LED0
FH1:            MOV A,@R0
                 MOV R7,A
               LCALL   PutChar
               INC R0
                DJNZ R2,FH1
                LCALL Delay
                MOV BZW,#0
                SETB LED0
FH2:           ;    LCALLDelay
                LCALL Delay
          LJMP    C0158
StartADC:       MOV R2,#20
                MOV    R0,#40H;PUSH ACC
ADC20:          CLR     RACSN
                MOV     R7,#0C3h    ;START_ADC_CONV(SAV)1100-SSSS=CHSEL=3通道
                LCALL   SpiReadWrite
                SETB    RACSN
                JNB     EOC, $
                CLR     RACSN
                MOV     R7,#40h
                LCALL   SpiReadWrite
                MOV     R7,#0FFH
                LCALL   SpiReadWrite
                MOV     A,R7;07H   ;
                MOV     @R0,A    ;
                INC R0
                DJNZ R2,ADC20
                cpl led2
                RET
C0185:       LCALL   SpiReadWrite       ;寫(xiě)發(fā)送數(shù)據(jù)地址
                MOV     R7,#0E7H
          LCALL   SpiReadWrite
          MOV     R7,#0E7H
           LCALL   SpiReadWrite
          MOV     R7,#0E7H
          LCALL   SpiReadWrite
               MOV     R7,#0E7H

SpiReadWrite:  ANL     EXIF,#0DFH     ;Move byte to send to SPI data register
          MOV     SPI_DATA,R7   ;讀寫(xiě)SPI數(shù)據(jù)
C019E:        MOV     A,EXIF
           JNB     0E0H.5,C019E
          MOV     R7,SPI_DATA
               RET

Delayms:    MOV     10H,R7          ;延時(shí)子程序
C01A8:       MOV     R7, 10H
                DEC     10H
                MOV     A,R7
                JZ      C01BF
               CLR     A
               MOV     R5,A
C01B1:        MOV     A,R5
               CLR     C
                SUBB    A,#0AH
                 JNC     C01A8
            MOV     R7,#0AH
           LCALL   Delay100us
             INC     R5
              SJMP    C01B1
C01BF:        RET
Delay100us:   MOV     11H,R7
Delay100us1:  MOV     R7, 11H
               DEC    11H
               MOV     A,R7
             JZ      C021D
               CLR     A
               MOV     R6,A
Delay100us2:   MOV     A,R6
                CLR     C
                SUBB    A,#23H
                JNC     Delay100us1
               INC     R6
             SJMP    Delay100us2
C021D:    RET
DELAY:         MOV 70H,#0FFH
DELAY1:        LCALL DELAY2
               DJNZ 70H,DELAY1
                RET
DELAY2:         MOV 71H,#0FFH
DELAY3:        NOP
                DJNZ 71H,DELAY3
               RET
END



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 视频一区 国产精品 | 久久久av一区| 中文字幕在线一区 | 日日夜夜免费精品 | 亚洲成人自拍 | 午夜不卡一区二区 | 欧美国产激情 | 国产1区在线 | 天天爱天天操 | 中国三级黄色录像 | 欧美一区二区免费视频 | 96国产精品久久久久aⅴ四区 | av免费看在线 | 日本亚洲精品成人欧美一区 | 精品久久久久久久久久久久久久 | 99色综合| 99精品视频一区二区三区 | 中文字幕一区二区三区在线观看 | 一区二区三区在线免费观看 | 午夜三级在线观看 | 午夜在线视频 | 国产精品中文在线 | 99热都是精品 | 欧美无乱码久久久免费午夜一区 | 久在线精品视频 | 亚洲三级在线观看 | 日韩一二区 | 国产专区视频 | 日韩成人在线观看 | 青青久视频 | 国产农村妇女毛片精品久久麻豆 | av电影一区| 无码日韩精品一区二区免费 | 日本精品一区二区三区视频 | 国产精品一区二区在线 | 日日骚av | 日本天堂视频在线观看 | 做a视频 | 国产福利视频 | 黄色网址av| 久久午夜精品 |