📄 003t_a7105.asm
字号:
;***************************************************************************************************************************;*** 公司 :;*** 文件名 : 003R_A7105.ASM;*** 编写者 :;*** 创建日期 : 2008年06月13日;*** 修改日期 : 2008年06月13日;*** 说明 :;*** 版本 : 1.0;************************************************************************************************************************** INCLUDE "SH69P48.H" ;***************************************************************************************************************************;*** RAM定义;*** 30H~EFH;***************************************************************************************************************************;RF_CH_RX_H EQU 57H;RF_CH_RX_L EQU 56HRF_HOOP_FLAG_H EQU 57HRF_HOOP_FLAG_L EQU 56HIDCODE_H EQU 55HIDCODE_L EQU 54HRF_CH_NOW_H EQU 53HRF_CH_NOW_L EQU 52HRF_CH_NEXT_H EQU 51HRF_CH_NEXT_L EQU 50HCH1_H EQU 4FHCH1_L EQU 4EHCH2_H EQU 4DHCH2_L EQU 4CHCH3_H EQU 4BHCH3_L EQU 4AHCH4_H EQU 49HCH4_L EQU 48HDELAY_TMPH EQU 3FHDELAY_TMPL EQU 3EHTMP_DATA EQU 36HREG_ADR_H EQU 35HREG_ADR_L EQU 34HREG_DATA_H EQU 33HREG_DATA_L EQU 32H SPI_DATAH EQU 31HSPI_DATAL EQU 30H;***************************************************************************************************************************;*** 参数定义;***************************************************************************************************************************RF_CH_MAX_H EQU 0AH ; 162X0.5=81 2400~2483RF_CH_MAX_L EQU 02HRSSI_LEVEL_H EQU 06HRSSI_LEVEL_L EQU 08HRF_CH_JUMP_H EQU 03H ; 50 RF_CH_JUMP_L EQU 02HRF_HOOP_H EQU 0AHRF_HOOP_L EQU 03H;***************************************************************************************************************************;*** 主程序;*************************************************************************************************************************** ORG 0000H JMP RESET RTNI JMP T0_INT_SUB RTNI RTNI ;***************************************************************************************************************************RESET: CALL MCU_INIT CALL RAM_INT MAIN: CALL RF_INIT LDI TM0, 01H ; TIMER0-> 1:512 LDI TL0, 0AH ; 97.6 LDI TH0, 0DH LDI IE, 0100B ; TIMER0 IE ENABLE;*************************************************************************************************************************** ;** 应用主程序;*************************************************************************************************************************** JMP $;*************************************************************************************************************************** ;***************************************************************************************************************************;*** T0中断服务程序;***************************************************************************************************************************T0_INT_SUB: LDI IRQ,00H ; LDI REG_ADR_H,1010B ; 进入STANDBY; CALL STROBE_SUB ;***************************************************************************************************************************;*** RSSI NOW CH 测量并判断;*************************************************************************************************************************** LDI REG_ADR_H, 00H ; ADDR:0F LDI REG_ADR_L, 0FH SBI RF_CH_NOW_L, 01H ; RX=RF_CH_NOW-1 STA REG_DATA_L LDI TMP_DATA, 00H SBC RF_CH_NOW_H STA REG_DATA_H CALL WR_REG_SUB ; 设置RF通道 LDI REG_ADR_H, 1100B ; 进入RX CALL STROBE_SUB CALL DELAY_200US LDI REG_ADR_H, 01H ; ADDR:1D LDI REG_ADR_L, 0DH ; CALL RD_REG_SUB ; 读RSSI LDA REG_DATA_H LDA REG_DATA_L SBI REG_DATA_H, RSSI_LEVEL_H ; 判断RSSSI BNC RSSI_NOW_FAIL BNZ RSSI_NOW_PASS SBI REG_DATA_L, RSSI_LEVEL_L BC RSSI_NOW_PASS RSSI_NOW_FAIL: ; 如果判断RSSI<RSSI LEVEL ADIM RF_CH_NEXT_L, RF_CH_JUMP_L ; 就要 NOW+JUMP=NEXT LDI TMP_DATA, RF_CH_JUMP_H ADCM RF_CH_NEXT_H SBI RF_CH_NEXT_H, RF_CH_MAX_H BNC RSSI_NEXT_DECT BNZ RSSI_FAIL_ADD SBI RF_CH_NEXT_L, RF_CH_MAX_L BC RSSI_FAIL_ADD JMP RSSI_NEXT_DECTRSSI_FAIL_ADD: SBIM RF_CH_NEXT_L, RF_CH_MAX_L LDI TMP_DATA, RF_CH_MAX_H SBCM RF_CH_NEXT_H ;***************************************************************************************************************************;*** RSSI NEXT CH 测量并判断;***************************************************************************************************************************RSSI_NEXT_DECT: LDI REG_ADR_H, 00H ; ADDR:0F LDI REG_ADR_L, 0FH SBI RF_CH_NEXT_L, 01H STA REG_DATA_L LDI TMP_DATA, 00H SBC RF_CH_NEXT_H STA REG_DATA_H CALL WR_REG_SUB ; 设置RF通道 LDI REG_ADR_H, 1100B ; 进入RX CALL STROBE_SUB CALL DELAY_200US LDI REG_ADR_H, 01H ; ADDR:1D LDI REG_ADR_L, 0DH ; CALL RD_REG_SUB ; 读RSSI LDA REG_DATA_H LDA REG_DATA_L SBI REG_DATA_H, RSSI_LEVEL_H ; 判断RSSSI BNC RSSI_NOW_FAIL BNZ $+3 SBI REG_DATA_L, RSSI_LEVEL_L BNC RSSI_NOW_FAIL LDI RF_HOOP_FLAG_H, RF_HOOP_H LDI RF_HOOP_FLAG_L, RF_HOOP_L JMP T0_TX RSSI_NOW_PASS: ;; LDA RF_CH_NOW_H; STA RF_CH_NEXT_H; LDA RF_CH_NOW_L; STA RF_CH_NEXT_L LDI RF_HOOP_FLAG_H, 00H LDI RF_HOOP_FLAG_L, 00H ;***************************************************************************************************************************;*** 采样发射;***************************************************************************************************************************T0_TX: CALL AD_SUB ; 采样数据 LDI REG_ADR_H, 1010B ; 进入STANDBY CALL STROBE_SUB CALL WR_FIFO_SUB LDI REG_ADR_H, 00H ; ADDR:0F LDI REG_ADR_L, 0FH LDA RF_CH_NOW_H STA REG_DATA_H LDA RF_CH_NOW_L STA REG_DATA_L CALL WR_REG_SUB ; 设置RF通道 LDI REG_ADR_H, 1101B ; 进入TX CALL STROBE_SUB LDA PORTD BA3 $-1T0_RX: LDI REG_ADR_H, 00H ; ADDR:0F LDI REG_ADR_L, 0FH SBI RF_CH_NOW_L, 01H STA REG_DATA_L LDI TMP_DATA, 00H SBC RF_CH_NOW_H STA REG_DATA_H CALL WR_REG_SUB ; 设置RF通道 LDI REG_ADR_H, 1100B ; 进入RX CALL STROBE_SUB LDI IRQ, 00H LDI TM1, 01H ; TIMER1-> 1:512 LDI TL1, 05H ; 97.6 LDI TH1, 0EH LDI T1SET, 08H LDA IRQ ; 在发射完后5MS能否收到对方的ACK BA1 $+8 LDA PORTD BA3 $-3 LDI WDT, 01H LDA RF_CH_NEXT_H STA RF_CH_NOW_H LDA RF_CH_NEXT_L STA RF_CH_NOW_L LDI T1SET, 00H LDI IRQ, 00H LDI IE, 0100B ;TIMER0 IE ENABLE RTNI ;***************************************************************************************************************************;*** 子程序;***************************************************************************************************************************;***************************************************************************************************************************;*** 69P48 初始化子程序;***************************************************************************************************************************MCU_INIT: LDI IRQ, 00H ; 保证程序可靠。 LDI IE, 00H ; 保证程序可靠。 LDI PAOUT, 1100B ; 2通道ADC输入(.0,.1),其它输出以防悬空(.2,.3)。 LDI PBOUT, 0011B ; 2通道ADC输入(.2,.3),其它输出以防悬空(.0,.1)。 LDI PCOUT, 1111B ; 输出以防悬空。 LDI PDOUT, 0111B ; LDI PEOUT, 0011B ; 输出以防悬空。 LDI PORTA, 00H LDI PORTB, 00H LDI PORTC, 00H LDI PORTD, 1101B LDI PORTE, 00H LDI ADMODE, 1000B ; AN7,AN6,AN1,AN0有效 RTNIRAM_INIT: LDI TMP_DATA, 00H LDI RF_CH_NOW_H, 05H ; 初始化 LDI RF_CH_NOW_L, 00H LDI RF_CH_NEXT_H, 05H ; 初始化 LDI RF_CH_NEXT_L, 00H LDI RF_HOOP_FLAG_H, 00H LDI RF_HOOP_FLAG_L, 00H LDI WDT, 01H RTNI ;***************************************************************************************************************************;*** 7105 初始化子程序;***************************************************************************************************************************RF_INIT: LDI REG_ADR_H, 00H ; ADDR:00 LDI REG_ADR_L, 00H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB ; LDI REG_ADR_H,00H ; ADDR:00 ; LDI REG_ADR_L,00H ; CALL RD_REG_SUB CALL WR_REG_IDCODE_06 LDI REG_ADR_H, 00H ; ADDR:01 LDI REG_ADR_L, 01H LDI REG_DATA_H, 04H ; DATA:42 LDI REG_DATA_L, 02H ; RSSI自动测量打开 CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:02 LDI REG_ADR_L, 02H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:03 LDI REG_ADR_L, 03H LDI REG_DATA_H, 00H ; DATA:07 LDI REG_DATA_L, 07H CALL WR_REG_SUB ; FIFO总共8个数据为了节约时间 LDI REG_ADR_H, 00H ; ADDR:04 LDI REG_ADR_L, 04H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:07 LDI REG_ADR_L, 07H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:08 LDI REG_ADR_L, 08H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:09 LDI REG_ADR_L, 09H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:0A LDI REG_ADR_L, 0AH LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:0B LDI REG_ADR_L, 0BH LDI REG_DATA_H, 00H ; DATA:01 LDI REG_DATA_L, 01H CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:0C LDI REG_ADR_L, 0CH LDI REG_DATA_H, 02H ; DATA:21 LDI REG_DATA_L, 01H CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:0D LDI REG_ADR_L, 0DH LDI REG_DATA_H, 00H ; DATA:05 LDI REG_DATA_L, 05H CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:0E LDI REG_ADR_L, 0EH LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H ; SDR CALL WR_REG_SUB LDI REG_ADR_H, 00H ; ADDR:0F LDI REG_ADR_L, 0FH LDI REG_DATA_H, 05H ; DATA:50 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:10 LDI REG_ADR_L, 00H LDI REG_DATA_H, 09H ; DATA:9E LDI REG_DATA_L, 0EH CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:11 LDI REG_ADR_L, 01H LDI REG_DATA_H, 04H ; DATA:4B LDI REG_DATA_L, 0BH CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:12 LDI REG_ADR_L, 02H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:13 LDI REG_ADR_L, 03H LDI REG_DATA_H, 00H ; DATA:02 LDI REG_DATA_L, 02H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:14 LDI REG_ADR_L, 04H LDI REG_DATA_H, 01H ; DATA:16 LDI REG_DATA_L, 06H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:15 LDI REG_ADR_L, 05H LDI REG_DATA_H, 02H ; DATA:2B LDI REG_DATA_L, 0BH CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:16 LDI REG_ADR_L, 06H LDI REG_DATA_H, 01H ; DATA:12 LDI REG_DATA_L, 02H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:17 LDI REG_ADR_L, 07H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:18 LDI REG_ADR_L, 08H LDI REG_DATA_H, 06H ; DATA:62 LDI REG_DATA_L, 02H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:19 LDI REG_ADR_L, 09H LDI REG_DATA_H, 08H ; DATA:80 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:1A LDI REG_ADR_L, 0AH LDI REG_DATA_H, 08H ; DATA:80 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:1B LDI REG_ADR_L, 0BH LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:1C LDI REG_ADR_L, 0CH LDI REG_DATA_H, 00H ; DATA:0A LDI REG_DATA_L, 0AH CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:1D LDI REG_ADR_L, 0DH LDI REG_DATA_H, 03H ; DATA:32 LDI REG_DATA_L, 02H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:1E LDI REG_ADR_L, 0EH LDI REG_DATA_H, 0CH ; DATA:C3 LDI REG_DATA_L, 03H CALL WR_REG_SUB LDI REG_ADR_H, 01H ; ADDR:1F LDI REG_ADR_L, 0FH LDI REG_DATA_H, 00H ; DATA:07 LDI REG_DATA_L, 07H CALL WR_REG_SUB LDI REG_ADR_H, 02H ; ADDR:20 LDI REG_ADR_L, 00H LDI REG_DATA_H, 01H ; DATA:16 LDI REG_DATA_L, 06H CALL WR_REG_SUB LDI REG_ADR_H, 02H ; ADDR:21 LDI REG_ADR_L, 01H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 02H ; ADDR:22 LDI REG_ADR_L, 02H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 02H ; ADDR:24 LDI REG_ADR_L, 04H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 02H ; ADDR:25 LDI REG_ADR_L, 05H LDI REG_DATA_H, 00H ; DATA:00 LDI REG_DATA_L, 00H CALL WR_REG_SUB LDI REG_ADR_H, 02H ; ADDR:26 LDI REG_ADR_L, 06H LDI REG_DATA_H, 03H ; DATA:3A LDI REG_DATA_L, 0AH CALL WR_REG_SUB LDI REG_ADR_H, 02H ; ADDR:27
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -