欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3830|回復: 0
打印 上一主題 下一主題
收起左側

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

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

(二)、nRF9E5芯片I/O口設置
nRF9E5有一8 位的通用雙向口(P0口)。另外,4個SPI 也可以用作通用IO口(P1 口)。大部分通用 I/O 口都可以通過編程設置為第二功能,第二功能包括:RXD、TXD,SPI、3個定時器/計數、PWM輸出等。
nRF9E5的P0 口通過 P0_ALT 和 P0_DIR 進行設置。若 P0_ALT.n = 1,則引腳P0.n 具有UART、外部中斷、定時器輸入或脈寬調制輸出功能; RXD方向取決于 P0_DIR.1 的值。若要使用 INT0_N  或INT1_N作為中斷,則必須使用 P0_ALT.3 / P0_ALT.4 的第二功能。若未置 P0_ALT.n=1,則相應的 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 口功能設置表
P1 口有4 個引腳,當SPI_CTRL=01時是作SPI 口用。。引腳EECSN作為EEPROM 的片選信號,MOSI作為SPI輸出,MISO作為SPI輸入,SCK作為SPI時鐘。將SPI_CTRL設為不等于01時,若P1_ALT.n 設為0則P1.0--P1.3為通用 IO 口,此時 P1_DIR.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.時鐘
Out
T2
In
P1.0
In
P1.0
Out
MOSI
SPI 數據輸出
Out
P1.1
I/O
P1.1
In
P1.1
Out
MISO
SPI 數據輸入
In
P1.2
In
P1.2
In
P1.2
In
EECSN
P1.3
Out
P1.3
I/O
P1.3
In
P1.3
Out
無線收發器是由 P2 口來控制的,P2口的地址與 8051相同。但是因無線收發器集成在片內,P2口不再是雙向口。為了匹配無線電收發器子系統的需要,P2 口鎖存電壓值與標準8051也有所不同。無線收發器是通過 P2 口特殊功能寄存器的SPI_CTRL 來控制的,如下表所示:
SFR 地址
R/W
位數
初始值
名稱
功能
A0
R/W
8
04
P2
NRF905 無線電收發器和AD 轉換器子系統的 IO
接口
B3
R/W
2
0
SPI_CTRL
00->不用SPI
01->SPI 與端口P1 相連接
1x->SPI 與nRF905/AD相連接

P2 寄存器位:功能
相應的 nRF905 收發器引腳名稱
讀:
7: nRF905 收發器地址匹配
AM
6: nRF905 收發器載波檢測
CD
5: nRF905 收發器數據就緒
DR
4:ADC  轉換結束
EOC
3:0   (未使用)

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

0:0(未使用)

:
7: (未使用)

6: (未使用)

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

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

溢出狀態保存在STATUS_REGISTER寄存器中的 ADC_RFLAG 中。當 ADC_PWR_UP=0時,AD轉換器功能被禁止。

使用內部參考電壓時的測量值:當VFSSEL=0,CHSEL選擇一個輸入AINi(AIN0到 AIN3),AD轉換的結果 ADCDATA 與 VAINi/1.22成正比:

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

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

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

(四)、nRF9E5芯片用戶程序
      nRF9E5的主程序存放在外部的串行EEPROM中,當芯片開始上電時,其內部固化的廠家引導程序通過SPI接口,將外部EEPROM中的主程序導入nRF9E5RAM(4K字節空間,沒有被主程序占用的可作為片內RAM使用),接著執行跳轉指令,開始主程序的運行。主程序需要按照下表所示的規則寫入EEPROM中,其中SPEED(bit3)EEPROM的最大讀寫速度,01MHz10.5MHz。XO_FREQ(bit2,1,0)nRF9E5的外接晶振的頻率,000=4MHz001=8MHz010=12MHz,011=16MHz,100=20MHz。

在用編程器寫程序時,前3個單元是0B0302,后面是主程序。其中0BH=00001011代表speed=1,XO_FREQ =011表示外接晶振是16MHz,03代表應用程序起始偏移量,02代表主程序的256字節區,見下圖。


                        

nRF9E5發送數據程序

;開機進行鍵掃描,有按鍵按下,就把該鍵值(10h,20h,40h)送出20個,然后等待接收20個字符;接收到20個字符后,把這些數據送串口發送到微機里,用串口調試助手可以檢查接收情況。
          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          ;設一個標志位
                  ORG 0000H
                    LJMP    MAIN
                ORG 000BH
                  RETI
                ORG 0013H
                RETI
                ORG 001BH
                RETI
                ORG 0023H
                RETI
                  ORG004BH
                RETI
                ORG 0050H
;串口發送數據到pc
PutChar:        CLR   ES
                MOV     SBUF ,R7
                JNB     TI,  $       ;串口發送無線收到的R7鍵值(10H,20H,40H)
                      CLR     TI
                SETB ES
                           RET
;初始化子程序
Init:     MOV     SP,#60H        ;設堆棧指針
        MOV     TH1,#0F3h            ;波特率19200,N,8,1
        MOV     TL1,#0F3h            ;波特率19200N,8,1 ;;;;;;
              ORL     CKCON,#10H          ;T1M=1,1/4時鐘
              MOV     PCON,#80H           ;SMOD=1,波特率加倍
              MOV     SCON,# 50h        ; Timer1 8bit auto reload ,方式1,REN=1,TI=1
             MOV     TMOD,#21h           ;
            SETB    TR1                  ;啟動定時器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                ;讀結果送R6也就是送到06H單元
           MOV     R6,A
           SETB    RACSN
            CLR     RACSN
            MOV     R7,#09h               ;00-09RF配置寄存器命令
            LCALL   SpiReadWrite
          MOV     R7,06h
            LCALL   SpiReadWrite          ;把讀出的結果寫回
            SETB    RACSN
            CLR     RACSN                       ; Write to RF config address 3 (RX payload)
             MOV     R7,#03H    ;配置RX_PWR,初值20H,32個字節03h3個字節
            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指出讀操作的開始字節,
         CLR     A                     ;字節數量取決于aaaa指出的開始地址。
         MOV     R7,A
             LCALL   SpiReadWrite  ;寫配置寄存器。0000aaaa,aaaa指出寫操作的開始字節,
            MOV     A,R7                  ; 字節數量取決于aaaa指出的開始地址.
            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接收、發送地址長度
             LCALL   SpiReadWrite
           MOV     R7,#01H              ;01h1字節有效20h32字節有效
           LCALL   SpiReadWrite
          MOV     R7,#01h
            LCALL   C0185
           SETB    RACSN
              SETB    EA
          SETB  ES       ;
            RET
;掃描鍵盤子程序
ScanKey:     CLR     A                    ;掃描鍵盤即掃描3個按鈕,獲取鍵值
                 MOV     KeyValue,A           ;沒有鍵盤按下轉c00b1
            JB      S0,C00B1
           SETB    L0                   ;L0按下Keyvalue=10h,L0=Keyvalue.4
           CLR     LED0                 ;1鍵盤按下LED0燈亮延時后熄滅
           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                 ;發送20個字節
FS1:    MOV     A,KeyValue
        MOV     R7,A                 ;獲取的鍵值送R7
        SETB    TXEN                 ;發送使能
            LCALL   TransmitPacket       ;調用發射程序包
          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               ;讀接收數據命令
                        LCALL   SpiReadWrite
                     CLR     A
                      MOV     R7,A
                        LCALL   SpiReadWrite
                      SETB    RACSN
                       CLR     TRX_CE
                       MOV     KeyValue,R7
               INC  BZW
                       JNB     L0,C00F9              ;對接收數據進行計數
          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           ;寫發送地址命令22H
                          LCALL   C0185             ;E7,E7,E7,E7 TX_ADDRESS
                       SETB    RACSN
                        MOV     R7,#01H           ;延時100微秒
                          LCALL   Delay100us
                       CLR     RACSN
                     MOV     R7,#20H           ;寫發送數據命令20H
                        LCALL   SpiReadWrite
                       MOV     R7,05H            ;保存在R5中的鍵值送R7發送
                         LCALL   SpiReadWrite
                       SETB    RACSN
                      SETB    TRX_CE
                       MOV     R7,#0AH           ;發送后延時
                        LCALL   Delay100us
                       CLR     TRX_CE
C0136:                JNB     TRX_CE,C0136      ;等待發送完畢
                       RET
;主程序
main:          LCALL   Init              ;主程序,現調用初始化程序
                CLR     LED0              ;3個燈陸續點亮后熄滅
                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     ;清數據區
             MOV R0,#13H
QING:    MOV@R0,A      ;清數據區
              INC R0
              DJNZ R2,QING
C0158:      LCALL   ScanKey           ;掃描鍵盤等待接受數據
                 MOV     A,KeyValue
            JZ C0158
            MOV R0,#30H
            AJMPFH                      ;等待接收數據
            CLR     A                    ;掃描鍵盤即掃描3個按鈕,獲取鍵值
                 MOV     KeyValue,A           ;沒有鍵盤按下轉c00b1
                JB      S0,C0158
               SETB    L0                   ;L0按下Keyvalue=10h,L0=Keyvalue.4
                CLR     LED0                 ;1鍵盤按下LED0燈亮延時后熄滅
                MOV     R7,#0AH
                 LCALL   Delayms
                 SETB    LED0
                   MOV     A,KeyValue
                JZ      C0158

FH:           SETB    TRX_CE                ; nRF905 發器使能,接收器功能
                    JNB     TRX_CE,FH
                       CLR     RACSN
                       MOV     R7,#24H               ;讀接收數據命令
                        LCALL   SpiReadWrite
                     CLR     A
                      MOV     R7,A
                        LCALL   SpiReadWrite
                      SETB    RACSN                          ;SPI片選有效
                       CLR     TRX_CE
               MOV     A,R7
                        MOV @R0,A
               MOV     R7,#05H           ;延時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       ;寫發送數據地址
                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   ;讀寫SPI數據
C019E:        MOV     A,EXIF
                 JNB     0E0H.5,C019E
                MOV     R7,SPI_DATA
               RET

Delayms:    MOV     10H,R7          ;延時子程序
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接收數據程序示例
;開機等待接收20個字符,送到30h起始的單元中,然后再把這些數據發送出去
           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          ;設一個標志位
                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,  $   ;串口發送無線收到的R7鍵值(10H,20H,40H)
                          CLR     TI
                SETB ES
                          RET

Init:           MOV     SP,#60H           ;設堆棧指針
               MOV     TH1,#0F3h            ;波特率19200N,8,1
               MOV     TL1,#0F3h            ;波特率19200,N,8,1 ;;;;;;
                       ORL     CKCON,#10H          ;T1M=1,1/4時鐘
                         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                  ;啟動定時器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                ;讀結果送R6也就是送到06H單元
           MOV     R6,A
           SETB    RACSN
            CLR     RACSN
            MOV     R7,#09h               ;00-09RF配置寄存器命令
            LCALL   SpiReadWrite
          MOV     R7,06h
            LCALL   SpiReadWrite          ;把讀出的結果寫回
            SETB    RACSN
            CLR     RACSN                  ; Write to RF config address 3 (RX payload)
             MOV     R7,#03H      ;配置RX_PWR,初值20H,32個字節01h1個字節
            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指出讀操作的開始字節,
         CLR     A      ;字節數量取決于aaaa指出的開始地址。
         MOV     R7,A
            LCALL   SpiReadWrite  ;寫配置寄存器。0000aaaa,aaaa指出寫操作的開始字節,
            MOV     A,R7                  ;字節數量取決于aaaa指出的開始地址.
            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接收、發送地址長度
             LCALL   SpiReadWrite
           MOV     R7,#01H              ;01h1字節有效20h32字節有效
           LCALL   SpiReadWrite
          MOV     R7,#01h
            LCALL   C0185
           SETB    RACSN
              SETB    EA
           SETB  ES       ;
            RET
ScanKey:     CLR     A                    ;掃描鍵盤即掃描3個按鈕,獲取鍵值
                 MOV     KeyValue,A           ;沒有鍵盤按下轉c00b1
                  JB      S0,C00B1
                SETB    L0                   ;L0按下Keyvalue=10h,L0=Keyvalue.4
                CLR     LED0                 ;1鍵盤按下LED0燈亮延時后熄滅
                 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                 ;發送使能
                 MOV     R7,A                 ;獲取的鍵值送R7
            MOV  R2,#20H                 ;發送20個字節
FS1:            LCALL   TransmitPacket       ;調用發射程序包
             DJNZ  R2,FS1
                 CLR     TXEN
C00D9:        RET

ReceivePacket:      SETB    TRX_CE                ;等待接收完畢
                 JNB     TRX_CE,C010E
               CLR     RACSN
                 MOV     R7,#24H               ;讀接收數據命令
                 LCALL   SpiReadWrite
               CLR     A
                MOV     R7,A
                 LCALL   SpiReadWrite
                SETB    RACSN
                CLR     TRX_CE
                MOV     KeyValue,R7
           INC  BZW
                 JNB     L0,C00F9              ;對接收數據進行計數
          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           ;寫發送地址命令22H
                   LCALL   C0185             ;E7,E7,E7,E7 TX_ADDRESS
                SETB    RACSN
                  MOV     R7,#01H           ;延時100微秒
                   LCALL   Delay100us
                CLR     RACSN
                MOV     R7,#20H           ;寫發送數據命令20H
                 LCALL   SpiReadWrite
                 MOV     R7,05H            ;保存在R5中的鍵值送R7發送
                  LCALL   SpiReadWrite
                SETB    RACSN
                SETB    TRX_CE
                 MOV     R7,#0AH           ;發送后延時
                 LCALL   Delay100us
                CLR     TRX_CE
C0136:          JNB     TRX_CE,C0136      ;等待發送完畢
                RET

main:          LCALL   Init              ;主程序,現調用初始化程序
                CLR     LED0              ;3個燈陸續點亮后熄滅
                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           ;掃描鍵盤等待接受數據
Q:           MOVA,#20H
             MOVR2,#60D     ;清數據區
             MOV R0,#13H
QING:    MOV@R0,A      ;清數據區
             INC R0
             DJNZ R2,QING
            MOV R0,#30H
            MOV R2,#20D
            AJMPFH                      ;等待接收數據

FCBQ1:      MOV R0,#30H
             MOV R2,#20D
FCBQ2:      MOV     A,@R0
                  SETB    TXEN                 ;發送使能
                  MOV     R7,A                 ;獲取的鍵值送R7
                  LCALL   TransmitPacket       ;調用發射程序包
                  CLR     TXEN
             MOV     R7,#0AH              ;必須加延時,否則收不到
                    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               ;讀接收數據命令
                        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           ;延時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       ;寫發送數據地址
                      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   ;讀寫SPI數據
C019E:              MOV     A,EXIF
                        JNB     0E0H.5,C019E
                       MOV     R7,SPI_DATA
                    RET
Delayms:    MOV     10H,R7          ;延時子程序
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轉換程序(無線溫度計程序)
;開機定時器工作35h0時,a/d轉換采集20個數據后,無線發送40h單元開始的20個數據。
          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          ;設一個標志位
             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              ;秒個位加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,  $         ;串口發送無線收到的R7鍵值(10H,20H,40H)
              CLR     TI
                SETB ES
                POP ACC
              RET
JSSJ:           CLR  EIE.1                      ;INT3中斷使能位,禁止中斷
                CLR LED1
                INCBZW
                MOVA,EXIF                    ;EXIF.5INT3中斷標志位
                JNB     ACC.5 ,$            ;串口發送無線收到的R7鍵值(10H,20H,40H)
             SETB    ACC.5
                MOV EXIF,A
                SETBEIE.1                    ;INT3中斷使能,即允許中斷
              RETI
Init:           MOV     SP,#60H           ;設堆棧指針
                MOV     TH1,#0F3h            ;波特率19200N,8,1
            ;   MOV     TL1,#0F3h            ;波特率19200,N,8,1 ;;;;;;
                MOV     TH0, #3CH
             MOV     TL0, #0c0h;
              ORL     CKCON,#10H          ;T1M=1,1/4時鐘
              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                  ;啟動定時器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                ;讀結果送R6也就是送到06H單元
           MOV     R6,A
           SETB    RACSN
            CLR     RACSN
            MOV     R7,#09h               ;00-09RF配置寄存器命令
            LCALL   SpiReadWrite
          MOV     R7,06h
            LCALL   SpiReadWrite          ;把讀出的結果寫回
            SETB    RACSN
            CLR     RACSN                  ; Write to RF config address 3 (RX payload)
             MOV     R7,#03H              ;配置RX_PWR,初值20H,32個字節01h1個字節
            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指出讀操作的開始字節,
             CLR     A                     ;字節數量取決于aaaa指出的開始地址。
              MOV     R7,A
            LCALL   SpiReadWrite          ;寫配置寄存器。0000aaaa,aaaa指出寫操作的開始字節,
            MOV     A,R7                  ; 字節數量取決于aaaa指出的開始地址.
            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接收、發送地址長度
             LCALL   SpiReadWrite
           MOV     R7,#01H              ;01h1字節有效20h32字節有效
           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 ;通信中斷優先,IPPS1
                RET
ScanKey:     CLR     A                    ;掃描鍵盤即掃描3個按鈕,獲取鍵值
                 MOV     KeyValue,A           ;沒有鍵盤按下轉c00b1
               JB      S0,C00B1
           SETB    L0                   ;L0按下Keyvalue=10h,L0=Keyvalue.4
           CLR     LED0                 ;1鍵盤按下LED0燈亮延時后熄滅
           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                 ;發送20個字節
FS1:            MOV     A,KeyValue
                MOV     R7,A                 ;獲取的鍵值送R7
                SETB    TXEN                 ;發送使能
            LCALL   TransmitPacket       ;調用發射程序包
                 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               ;讀接收數據命令
           LCALL   SpiReadWrite
                    CLR     A
                MOV     R7,A
           LCALL   SpiReadWrite
                   SETB    RACSN
          CLR     TRX_CE
          MOV     KeyValue,R7
                 INC  BZW
          JNB     L0,C00F9              ;對接收數據進行計數
          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           ;寫發送地址命令22H
             LCALL   C0185             ;E7,E7,E7,E7 TX_ADDRESS
          SETB    RACSN
           MOV     R7,#01H           ;延時100微秒
             LCALL   Delay100us
          CLR     RACSN
                    MOV     R7,#20H           ;寫發送數據命令20H
           LCALL   SpiReadWrite
          MOV     R7,05H            ;保存在R5中的鍵值送R7發送
            LCALL   SpiReadWrite
          SETB    RACSN
          SETB    TRX_CE
          MOV     R7,#0AH           ;發送后延時
           LCALL   Delay100us
          CLR     TRX_CE
C0136:          JNB     TRX_CE,C0136      ;等待發送完畢
          RET

main:          LCALL   Init              ;主程序,現調用初始化程序
                CLR     LED0              ;3個燈陸續點亮后熄滅
          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     ;清數據區
              MOV R0,#12H
QING:        MOV@R0,A      ;清數據區
             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                 ;發送使能
                     MOV     R7,A                 ;獲取的鍵值送R7
                    LCALL   TransmitPacket       ;調用發射程序包
                     CLR     TXEN
                MOV     R7,#0AH              ;必須加延時,否則收不到
             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               ;讀接收數據命令
           LCALL   SpiReadWrite
                 CLR     A
                MOV     R7,A
            LCALL   SpiReadWrite
                      SETB    RACSN
            CLR     TRX_CE
                    MOV     A,R7
           MOV @R0,A
               MOV     R7,#05H           ;延時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       ;寫發送數據地址
                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   ;讀寫SPI數據
C019E:        MOV     A,EXIF
           JNB     0E0H.5,C019E
          MOV     R7,SPI_DATA
               RET

Delayms:    MOV     10H,R7          ;延時子程序
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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表