?? main.asm
字號:
?
+
;*******************************************************************************
#include <STC12_PCA_SFR.ASM>
#include <NRF24L01.ASM>
;*******************************************************************************
;24L01相關定義
TX_ADR_WIDTH EQU 05H ;TX地址寬度,5字節
MAX_DATA_LEN EQU 12H ;有效數據最大長度 18字節(每個數據包長度固定為18+2字節)
BUFF_LEN EQU MAX_DATA_LEN+2 ;緩沖區長度
SELF_ADDRESS EQU 10H ;本機地址,10H-14H,5字節
REMOTE_ADDRESS EQU 15H ;目標地址,15H-19H,5字節
;24L01 狀態標志
RF_STATUS EQU 20H
MAX_RT EQU RF_STATUS.4
TX_DS EQU RF_STATUS.5
RX_DR EQU RF_STATUS.6
INT_STATUS EQU 21H
NRF24L01_DATA_READY EQU INT_STATUS.0
BUFF_FREE EQU 027H
BUFF0_FREE EQU BUFF_FREE.0;
BUFF1_FREE EQU BUFF_FREE.1;
BUFF2_FREE EQU BUFF_FREE.2;
BUFF3_FREE EQU BUFF_FREE.3;
BUFF4_FREE EQU BUFF_FREE.4;
BUFF5_FREE EQU BUFF_FREE.5;
BUFF6_FREE EQU BUFF_FREE.6;
BUFF7_FREE EQU BUFF_FREE.7;
BUFF_FULL EQU 028H
BUFF0_FULL EQU BUFF_FULL.0;
BUFF1_FULL EQU BUFF_FULL.1;
BUFF2_FULL EQU BUFF_FULL.2;
BUFF3_FULL EQU BUFF_FULL.3;
BUFF4_FULL EQU BUFF_FULL.4;
BUFF5_FULL EQU BUFF_FULL.5;
BUFF6_FULL EQU BUFF_FULL.6;
BUFF7_FULL EQU BUFF_FULL.7;
BUFF_EMPTY EQU 029H ;
BUFF0_EMPTY EQU BUFF_EMPTY.0;
BUFF1_EMPTY EQU BUFF_EMPTY.1;
BUFF2_EMPTY EQU BUFF_EMPTY.2;
BUFF3_EMPTY EQU BUFF_EMPTY.3;
BUFF4_EMPTY EQU BUFF_EMPTY.4;
BUFF5_EMPTY EQU BUFF_EMPTY.5;
BUFF6_EMPTY EQU BUFF_EMPTY.6;
BUFF7_EMPTY EQU BUFF_EMPTY.7;
/*
PBUFF0_W EQU 30H ;
PBUFF1_W EQU 31H ;
PBUFF2_W EQU 32H ;
PBUFF3_W EQU 33H ;
PBUFF4_W EQU 34H ;
PBUFF5_W EQU 35H ;
PBUFF6_W EQU 36H ;
PBUFF7_W EQU 37H ;
PBUFF0_R EQU 38H ;
PBUFF1_R EQU 39H ;
PBUFF2_R EQU 3AH ;
PBUFF3_R EQU 3BH ;
PBUFF4_R EQU 3CH ;
PBUFF5_R EQU 3DH ;
PBUFF6_R EQU 3EH ;
PBUFF7_R EQU 3FH ;
ACTIVE_S_S_BUFF EQU 2CH ;ACTIVE SERIAL SEND BUF
ACTIVE_S_R_BUFF EQU 2DH ;ACTIVE SERIAL RECEIVE BUFF
ACTIVE_N_S_BUFF EQU 2EH ;ACTIVE NRF24L01 SEND BUFF
ACTIVE_N_R_BUFF EQU 2FH ;ACTIVE NRF24L01 RECEIVE BUFF
*/
BUFF0_DATA_COUNT EQU 30H
BUFF1_DATA_COUNT EQU 31H
BUFF2_DATA_COUNT EQU 32H
BUFF3_DATA_COUNT EQU 33H
BUFF4_DATA_COUNT EQU 34H
BUFF5_DATA_COUNT EQU 35H
BUFF6_DATA_COUNT EQU 36H
BUFF7_DATA_COUNT EQU 37H
SOFT_PWM0_L EQU 38H ;軟件PWM0占空比低位
SOFT_PWM0_H EQU 39H ;軟件PWM0占空比高位
SOFT_PWM1_L EQU 3AH ;軟件PWM1占空比低位
SOFT_PWM1_H EQU 3BH ;軟件PWM1占空比高位
SOFT_PWM2_L EQU 3CH ;軟件PWM2占空比低位
SOFT_PWM2_H EQU 3DH ;軟件PWM2占空比高位
SOFT_PWM3_L EQU 3EH ;軟件PWM3占空比低位
SOFT_PWM3_H EQU 3FH ;軟件PWM3占空比高位
SOFT_PWM_MAX_L EQU 40H ;軟件PWM占空比最大值低位
SOFT_PWM_MAX_H EQU 41H ;軟件PWM占空比最大值高位
SOFT_PWM_FREQ_L EQU 42H ;軟件PWM周期低位
SOFT_PWM_FREQ_H EQU 43H ;軟件PWM周期高位
HARD_PWM0_L EQU 44H ;硬件PWM0占空比
HARD_PWM0_H EQU 45H ;硬件PWM0占空比自動重裝值
HARD_PWM1_L EQU 46H ;硬件PWM1占空比
HARD_PWM1_H EQU 47H ;硬件PWM1占空比自動重裝值
HARD_PWM_FREQ_L EQU 48H ;硬件PWM周期低位
HARD_PWM_FREQ_H EQU 49H ;硬件PWM周期高位
NODE_ID EQU 4AH ;本節點ID
;PWM引腳定義
SOFT_PWM0 EQU P1.0
SOFT_PWM1 EQU P1.1
SOFT_PWM2 EQU P1.2
SOFT_PWM3 EQU P1.3
;24L01引腳定義
RF_CSN EQU P1.4 ;24L01片選,低電平有效
RF_MOSI EQU P1.5 ;24L01 SPI 數據輸入
RF_MISO EQU P1.6 ;24L01 SPI 數據輸出
RF_SCK EQU P1.7 ;24L01 SPI 時鐘
RF_IRQ EQU P3.2 ;24L01 中斷
RF_CE EQU P3.7 ;24L01 使能
;RF_CE EQU P3.4 ;24L01 使能,Tiny board is 3.4
BUFF0 EQU 080H ;80H~8FH,16 BYTE,DATA RECEIFE FROM SERIAL
BUFF1 EQU 090H ;90H~9FH
BUFF2 EQU 0A0H ;A0H~AFH,16 BYTE,DATA WILL SEND TO SERIAL
BUFF3 EQU 0B0H ;B0H~BFH
BUFF4 EQU 0C0H ;C0H~CFH,16 BYTE,DATA RECEIVE FROM NRF24L01
BUFF5 EQU 0D0H ;D0H~DFH
BUFF6 EQU 0E0H ;E0H~EFH,16 BYTE,DATA WILL SEND TO NRF24L01
BUFF7 EQU 0F0H ;F0H~FFH
;*******************************************************************************
;LED DEFINE
LED1 EQU P3.4
LED2 EQU P3.5
;*******************************************************************************
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT_0
ORG 000BH
AJMP INT_TIMER0
ORG 0023H
AJMP INT_SERIAL
ORG 0040H
MAIN: MOV SP,#0E0H
ACALL INIT
;*******************************************************************************
MAIN_LOOP:
JNB NRF24L01_DATA_READY,FLASH_LED
;從24L01讀出16字節數據
MOV R0,#BUFF4
MOV R1,#16H
ACALL NRF24L01_READ_BYTES
ACALL TRANSACT_SERIAL_DATA
FLASH_LED:
MOV A,#READ_REG + TX_ADDR
MOV R1,#REMOTE_ADDRESS
MOV R0,#TX_ADR_WIDTH
ACALL SPI_READ_BUF ;設置發送目標地址
CPL LED1
ACALL DELAY1
SJMP MAIN_LOOP
;*******************************************************************************
NRF24L01_READ_BYTES:
RET
;*******************************************************************************
TRANSACT_SERIAL_DATA:
MOV C,BUFF0_FULL
JNC TRANSACT_EXIT
PUSH 00H
;判斷接收的數據第一字節是否為5AH
MOV R0,#BUFF0
MOV A,@R0
CJNE A,#5AH,CLR_BUFF0 ;判斷數據包頭是否為5A,不是則忽略此包
MOV R0,#BUFF0+15
MOV A,@R0
CJNE A,#5AH,CLR_BUFF0 ;判斷數據包尾是否為5A,不是則忽略此包
MOV R0,#BUFF0+1
MOV A,@R0
CJNE A,NODE_ID,CLR_BUFF0 ;判斷節點ID是否為本機ID,不是則忽略此包
MOV R0,#BUFF0+2
MOV A,@R0 ;取得操作命令保存在ACC
TEST_CMD_10H:
CJNE A,#10H,TEST_CMD_11H
ACALL SET_SOFT_PWM0 ;CMD=10H,WRITE SOFT PWM0
SJMP CLR_BUFF0
TEST_CMD_11H:
CJNE A,#11H,TEST_CMD_12H
ACALL SET_SOFT_PWM1 ;CMD=11H,WRITE SOFT PWM1
SJMP CLR_BUFF0
TEST_CMD_12H:
CJNE A,#12H,TEST_CMD_13H
ACALL SET_SOFT_PWM2 ;CMD=12H,WRITE SOFT PWM2
SJMP CLR_BUFF0
TEST_CMD_13H:
CJNE A,#13H,TEST_CMD_14H
ACALL SET_SOFT_PWM3 ;CMD=13H,WRITE SOFT PWM3
SJMP CLR_BUFF0
TEST_CMD_14H:
CJNE A,#14H,TEST_CMD_15H
ACALL SET_SOFT_PWM_MAX ;CMD=14H,WRITE SOFT PWM MAX
SJMP CLR_BUFF0
TEST_CMD_15H:
CJNE A,#15H,TEST_CMD_1FH
ACALL SET_SOFT_PWM_FREQ ;CMD=15H,WRITE SOFT PWM FREQ
SJMP CLR_BUFF0
TEST_CMD_1FH:
CJNE A,#1FH,TEST_CMD_20H
ACALL SET_SOFT_PWM_ALL ;CMD=1FH,WRITE SOFT PWM ALL
SJMP CLR_BUFF0
TEST_CMD_20H:
CJNE A,#20H,TEST_CMD_21H
ACALL SET_HARD_PWM0 ;CMD=20H,WRITE HARDWARE PWM0
SJMP CLR_BUFF0
TEST_CMD_21H:
CJNE A,#21H,TEST_CMD_22H
ACALL SET_HARD_PWM1 ;CMD=21H,WRITE HARDWARE PWM1
SJMP CLR_BUFF0
TEST_CMD_22H:
CJNE A,#22H,TEST_CMD_2FH
ACALL SET_HARD_PWM_FREQ ;CMD=2EH,WRITE HARDWARE PWM FREQ
SJMP CLR_BUFF0
TEST_CMD_2FH:
CJNE A,#2EH,CLR_BUFF0
ACALL SET_HARD_PWM_ALL ;CMD=2FH,WRITE HARDWARE PWM ALL
SJMP CLR_BUFF0
CLR_BUFF0:
; MOV R0,#BUFF0
; MOV R1,#10H
;; ACALL TX_DATAS
CLR BUFF0_FULL
SETB BUFF0_FREE
SETB BUFF0_EMPTY
MOV BUFF0_DATA_COUNT,#00H
POP 00H
TRANSACT_EXIT:
RET
;*******************************************************************************
TX_DATAS:
MOV SBUF,@R0
JNB TI,$
CLR TI
INC R0
DJNZ R1,TX_DATAS
RET
;*******************************************************************************
SET_SOFT_PWM0:
MOV R0,#BUFF0+3
MOV SOFT_PWM0_L,@R0
INC R0
MOV SOFT_PWM0_H,@R0
RET
;*******************************************************************************
SET_SOFT_PWM1:
MOV R0,#BUFF0+5
MOV SOFT_PWM1_L,@R0
INC R0
MOV SOFT_PWM1_H,@R0
RET
;*******************************************************************************
SET_SOFT_PWM2:
MOV R0,#BUFF0+7
MOV SOFT_PWM2_L,@R0
INC R0
MOV SOFT_PWM2_H,@R0
RET
;*******************************************************************************
SET_SOFT_PWM3:
MOV R0,#BUFF0+9
MOV SOFT_PWM3_L,@R0
INC R0
MOV SOFT_PWM3_H,@R0
RET
;*******************************************************************************
SET_SOFT_PWM_MAX:
MOV R0,#BUFF0+11
MOV SOFT_PWM_MAX_L,@R0
INC R0
MOV SOFT_PWM_MAX_H,@R0
RET
;*******************************************************************************
SET_SOFT_PWM_FREQ:
MOV R0,#BUFF0+13
MOV SOFT_PWM_FREQ_L,@R0
INC R0
MOV SOFT_PWM_FREQ_H,@R0
RET
;*******************************************************************************
SET_SOFT_PWM_ALL:
MOV R0,#BUFF0+3
MOV SOFT_PWM0_L,@R0
INC R0
MOV SOFT_PWM0_H,@R0
INC R0
MOV SOFT_PWM1_L,@R0
INC R0
MOV SOFT_PWM1_H,@R0
INC R0
MOV SOFT_PWM2_L,@R0
INC R0
MOV SOFT_PWM2_H,@R0
INC R0
MOV SOFT_PWM3_L,@R0
INC R0
MOV SOFT_PWM3_H,@R0
INC R0
MOV SOFT_PWM_MAX_L,@R0
INC R0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -