📄 nrf905_jinju.s
字号:
cpc R21,R13
brlt L213
X58:
.dbline -2
L212:
.dbline 0 ; func end
rjmp pop_xgset303C
.dbsym r len 12 I
.dbsym r i 20 I
.dbsym r str 10 pc
.dbend
.dbfunc e put_str_CRLF _put_str_CRLF fV
; str -> R10,R11
.even
_put_str_CRLF::
st -y,R10
st -y,R11
movw R10,R16
.dbline -1
.dbline 745
; }
;
; /////////////////////////////////////////////////////////////////////////////////
; void put_str_CRLF(char *str)
; {
.dbline 746
; put_str(str);
movw R16,R10
rcall _put_str
.dbline 747
; uart_TxChar(0x0d);
ldi R16,13
rcall _uart_TxChar
.dbline 748
; uart_TxChar(0x0a);
ldi R16,10
rcall _uart_TxChar
.dbline -2
L217:
.dbline 0 ; func end
ld R11,y+
ld R10,y+
ret
.dbsym r str 10 pc
.dbend
.dbfunc e wdt_init _wdt_init fV
.even
_wdt_init::
.dbline -1
.dbline 753
; }
;
; /////////////////////////////////////////////////////////////////////////////////
; void wdt_init(void)
; {
.dbline 754
; WDR();//喂狗
wdr
.dbline 755
; WDTCR|=(BIT(WDCE)|BIT(WDE));
in R24,0x21
ori R24,24
out 0x21,R24
.dbline 756
; WDTCR=BIT(WDP2)|BIT(WDP1)|BIT(WDP0)|BIT(WDE);
ldi R24,15
out 0x21,R24
.dbline -2
L218:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 22
rjmp _uart_Rx_isr
.area text(rom, con, rel)
.dbfile E:\变电站测温\测温主控\nrf905_JinJu.c
.dbfunc e uart_Rx_isr _uart_Rx_isr fV
.even
_uart_Rx_isr::
st -y,R2
st -y,R24
st -y,R25
st -y,R30
st -y,R31
in R2,0x3f
st -y,R2
.dbline -1
.dbline 762
; }
; /////////////////////////////////////////////////////////////////////////////////
; //uart完成中断
; #pragma interrupt_handler uart_Rx_isr:iv_USART_RXC
; void uart_Rx_isr(void)
; {
.dbline 763
; rxbuf[rxpt] = UDR;
ldi R24,<_rxbuf
ldi R25,>_rxbuf
lds R30,_rxpt
clr R31
add R30,R24
adc R31,R25
in R2,0xc
std z+0,R2
.dbline 765
; // uart_TxChar(rxbuf[rxpt]);
; rxpt++;
lds R24,_rxpt
subi R24,255 ; addi 1
sts _rxpt,R24
.dbline 766
; rxpt &= RXBUF_LEN1;
andi R24,31
sts _rxpt,R24
.dbline -2
L219:
.dbline 0 ; func end
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R2,y+
reti
.dbend
.dbfunc e Spi_InitRegister _Spi_InitRegister fV
.even
_Spi_InitRegister::
.dbline -1
.dbline 772
;
; }
;
; /////////////////////////////////////////////////////////////////////////////////
; void Spi_InitRegister(void)
; {
.dbline 775
; // Register[0] = 0x6c; // 433.2MHZ
; // Register[1] = 0x0c; //不重发,正常模式,输出+10dBm,433M频段
; Register[0] = CH_NO_BYTE; // 433.2MHZ
ldi R24,76
sts _Register,R24
.dbline 776
; Register[1] = PA_PWR_10dBm | HFREQ_PLL_433MHz; //不重发,正常模式,输出+10dBm,433M频段
ldi R24,12
sts _Register+1,R24
.dbline 777
; Register[2] = 0x44; //TX、RX地址宽度为4
ldi R24,68
sts _Register+2,R24
.dbline 778
; Register[3] = 0x10; //收为16个有效数据
ldi R24,16
sts _Register+3,R24
.dbline 779
; Register[4] = 0x10; //发为16个有效数据
sts _Register+4,R24
.dbline 780
; Register[5] = ADDR_1; //本机收地址
ldi R24,71
sts _Register+5,R24
.dbline 781
; Register[6] = ADDR_2;
ldi R24,87
sts _Register+6,R24
.dbline 782
; Register[7] = ADDR_3;
ldi R24,90
sts _Register+7,R24
.dbline 783
; Register[8] = ADDR_4;
ldi R24,68
sts _Register+8,R24
.dbline 784
; Register[9] = 0xD8; //CRC校验16位,16M晶振
ldi R24,216
sts _Register+9,R24
.dbline 786
;
; tx_addr[0] = ADDR_1;
ldi R24,71
sts _tx_addr,R24
.dbline 787
; tx_addr[1] = ADDR_2;
ldi R24,87
sts _tx_addr+1,R24
.dbline 788
; tx_addr[2] = ADDR_3;
ldi R24,90
sts _tx_addr+2,R24
.dbline 789
; tx_addr[3] = ADDR_4;
ldi R24,68
sts _tx_addr+3,R24
.dbline 791
;
; TxFlag[0] = 0;
clr R2
sts _TxFlag,R2
.dbline 792
; TxFlag[1] = 0;
sts _TxFlag+1,R2
.dbline 793
; TxFlag[2] = 0;
sts _TxFlag+2,R2
.dbline 794
; TxFlag[3] = 0;
sts _TxFlag+3,R2
.dbline 795
; TxFlag[4] = 0;
sts _TxFlag+4,R2
.dbline 796
; TxFlag[5] = 0;
sts _TxFlag+5,R2
.dbline -2
L220:
.dbline 0 ; func end
ret
.dbend
.dbfunc e InitSPI _InitSPI fV
.even
_InitSPI::
.dbline -1
.dbline 801
; }
;
; /////////////////////////////////////////////////////////////
; void InitSPI(void)
; {
.dbline 802
; Spi_InitRegister();
rcall _Spi_InitRegister
.dbline 803
; SPI_MasterInit();
rcall _SPI_MasterInit
.dbline 804
; SPI_W_CONFIG();
rcall _SPI_W_CONFIG
.dbline -2
L238:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart_handle _uart_handle fV
; lpc -> R22
; cmd -> R12
; len -> R10,R11
; len1 -> R20,R21
; i -> R22,R23
.even
_uart_handle::
rcall push_xgsetF03C
.dbline -1
.dbline 808
; }
; /////////////////////////////////////////////////////////////
; void uart_handle(void)
; {
.dbline 810
; int len,len1,i;
; BYTE cmd,lpc=0xff;
ldi R22,255
.dbline 812
;
; if ( handlept == rxpt ) return;
lds R2,_rxpt
lds R3,_handlept
cp R3,R2
brne L240
X59:
.dbline 812
rjmp L239
L240:
.dbline 813
; len = (rxpt - handlept) & RXBUF_LEN1;
lds R2,_handlept
clr R3
lds R24,_rxpt
clr R25
sub R24,R2
sbc R25,R3
andi R24,31
andi R25,0
movw R10,R24
.dbline 815
;
; if ( len < 4 ) return;
cpi R24,4
ldi R30,0
cpc R25,R30
brge L242
X60:
.dbline 815
rjmp L239
L242:
.dbline 817
;
; for ( i=0; i<len; i++ ) buf[i] = rxbuf[(handlept+i) & RXBUF_LEN1];
clr R22
clr R23
rjmp L247
L244:
.dbline 817
lds R30,_handlept
clr R31
add R30,R22
adc R31,R23
andi R30,31
andi R31,0
ldi R24,<_rxbuf
ldi R25,>_rxbuf
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_buf
ldi R25,>_buf
movw R30,R22
add R30,R24
adc R31,R25
std z+0,R2
L245:
.dbline 817
subi R22,255 ; offset = 1
sbci R23,255
L247:
.dbline 817
cp R22,R10
cpc R23,R11
brlt L244
X61:
.dbline 821
;
;
;
; if ( buf[0] != 0xeb ) {
lds R24,_buf
cpi R24,235
breq L248
X62:
.dbline 821
.dbline 822
; handlept = (handlept + 1) & RXBUF_LEN1;
lds R24,_handlept
subi R24,255 ; addi 1
andi R24,31
sts _handlept,R24
.dbline 823
; return;
rjmp L239
L248:
.dbline 826
; }
;
; if ( buf[1] != 0x90 ) {
lds R24,_buf+1
cpi R24,144
breq L250
X63:
.dbline 826
.dbline 827
; handlept = (handlept + 2) & RXBUF_LEN1;
lds R24,_handlept
subi R24,254 ; addi 2
andi R24,31
sts _handlept,R24
.dbline 828
; return;
rjmp L239
L250:
.dbline 831
; }
;
; cmd = buf[2];
lds R12,_buf+2
.dbline 832
; if ( (cmd != CMD_ASKDATA)&&(cmd != CMD_DOWNPARA)&&(cmd != CMD_SETID)&&(cmd != CMD_READID) ) {
tst R12
breq L254
X64:
mov R24,R12
cpi R24,2
breq L254
X65:
cpi R24,5
breq L254
X66:
cpi R24,7
breq L254
X67:
.dbline 832
.dbline 833
; handlept = (handlept + 3) & RXBUF_LEN1;
lds R24,_handlept
subi R24,253 ; addi 3
andi R24,31
sts _handlept,R24
.dbline 834
; return;
rjmp L239
L254:
.dbline 837
; }
;
; switch(cmd) {
clr R13
tst R12
brne X68
tst R13
breq L259
X68:
movw R24,R12
cpi R24,2
ldi R30,0
cpc R25,R30
breq L260
X69:
cpi R24,5
ldi R30,0
cpc R25,R30
breq L261
X70:
cpi R24,7
ldi R30,0
cpc R25,R30
breq L262
X71:
rjmp L256
L259:
.dbline 839
; case CMD_ASKDATA:
; len1 = 7;
ldi R20,7
ldi R21,0
.dbline 840
; break;
rjmp L257
L260:
.dbline 842
; case CMD_DOWNPARA:
; len1 = 14;
ldi R20,14
ldi R21,0
.dbline 843
; break;
rjmp L257
L261:
.dbline 845
; case CMD_SETID:
; len1 = 6;
ldi R20,6
ldi R21,0
.dbline 846
; break;
rjmp L257
L262:
.dbline 848
; case CMD_READID:
; len1 = 4;
ldi R20,4
ldi R21,0
.dbline 849
; break;
L256:
L257:
.dbline 852
; }
;
; if ( len < len1 ) return;
cp R10,R20
cpc R11,R21
brge L263
X72:
.dbline 852
rjmp L239
L263:
.dbline 860
; /*
; lpc = GetLPC(buf,len1);
; if ( lpc ) {
; handlept = (handlept + len1) & RXBUF_LEN1;
; return;
; }
; */
; for ( i=0; i<len1;i++ )
clr R22
clr R23
rjmp L268
L265:
.dbline 861
; tx_buf[i] = rxbuf[(handlept+i) & RXBUF_LEN1];
lds R30,_handlept
clr R31
add R30,R22
adc R31,R23
andi R30,31
andi R31,0
ldi R24,<_rxbuf
ldi R25,>_rxbuf
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_tx_buf
ldi R25,>_tx_buf
movw R30,R22
add R30,R24
adc R31,R25
std z+0,R2
L266:
.dbline 860
subi R22,255 ; offset = 1
sbci R23,255
L268:
.dbline 860
cp R22,R20
cpc R23,R21
brlt L265
X73:
.dbline 863
;
; tx_len = len1;
sts _tx_len,R20
.dbline 864
; for ( i=tx_len; i<16; i++ ) tx_buf[i] = 0;
mov R22,R20
clr R23
rjmp L272
L269:
.dbline 864
ldi R24,<_tx_buf
ldi R25,>_tx_buf
movw R30,R22
add R30,R24
adc R31,R25
clr R2
std z+0,R2
L270:
.dbline 864
subi R22,255 ; offset = 1
sbci R23,255
L272:
.dbline 864
cpi R22,16
ldi R30,0
cpc R23,R30
brlt L269
X74:
.dbline 868
;
; // put_bytes(tx_buf,len1);
;
; SendGram();
rcall _SendGram
.dbline 869
; handlept = (handlept + len1) & RXBUF_LEN1;
lds R24,_handlept
clr R25
add R24,R20
adc R25,R21
andi R24,31
andi R25,0
sts _handlept,R24
.dbline -2
L239:
.dbline 0 ; func end
rjmp pop_xgsetF03C
.dbsym r lpc 22 c
.dbsym r cmd 12 c
.dbsym r len 10 I
.dbsym r len1 20 I
.dbsym r i 22 I
.dbend
.dbfunc e SendData _SendData fV
.even
_SendData::
.dbline -1
.dbline 874
; }
;
; /////////////////////////////////////////////////////////////
; void SendData()
; {
.dbline 875
; tx_buf[0] = 0xeb;
ldi R24,235
sts _tx_buf,R24
.dbline 876
; tx_buf[1] = 0x90;
ldi R24,144
sts _tx_buf+1,R24
.dbline 877
; tx_buf[2] = 0x02;
ldi R24,2
sts _tx_buf+2,R24
.dbline 878
; tx_buf[3] = 0x00;
clr R2
sts _tx_buf+3,R2
.dbline 879
; tx_buf[4] = 0x00;
sts _tx_buf+4,R2
.dbline 880
; tx_buf[5] = 0x08;
ldi R24,8
sts _tx_buf+5,R24
.dbline 881
; tx_buf[6] = 0x00;
sts _tx_buf+6,R2
.dbline 882
; tx_buf[7] = 0x0c;
ldi R24,12
sts _tx_buf+7,R24
.dbline 883
; tx_buf[8] = 0x02;
ldi R24,2
sts _tx_buf+8,R24
.dbline 884
; tx_buf[9] = 0x0b;
ldi R24,11
sts _tx_buf+9,R24
.dbline 885
; tx_buf[10] = 0x02;
ldi R24,2
sts _tx_buf+10,R24
.dbline 886
; tx_buf[11] = 0x0b;
ldi R24,11
sts _tx_buf+11,R24
.dbline 887
; tx_buf[12] = 0x02;
ldi R24,2
sts _tx_buf+12,R24
.dbline 888
; tx_buf[13] = 0x87;
ldi R24,135
sts _tx_buf+13,R24
.dbline 889
; tx_len = 14;
ldi R24,14
sts _tx_len,R24
.dbline -2
L273:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; portb -> <dead>
; i -> <dead>
; count -> R10,R11
.even
_main::
.dbline -1
.dbline 893
; }
; /////////////////////////////////////////////////////////////
; void main(void)
; {
.dbline 894
; int count=0,i;
clr R10
clr R11
.dbline 899
; BYTE portb;
;
; // wdt_init();
;
; spi_rxpt = 0;
clr R2
sts _spi_rxpt,R2
.dbline 900
; spi_handlept = spi_rxpt;
sts _spi_handlept,R2
.dbline 902
;
; uart_init();
rcall _uart_init
.dbline 903
; timer1_init();
rcall _timer1_init
.dbline 905
;
; InitSPI();
rcall _InitSPI
.dbline 906
; SEI();//开中断
sei
.dbline 907
; Mode = 0;
clr R2
sts _Mode,R2
rjmp L289
L288:
.dbline 910
;
; // uart_TxChar('0');
; while(1) {
.dbline 912
; // uart_TxChar('1');
; Count = 0;
clr R2
clr R3
sts _Count+1,R3
sts _Count,R2
.dbline 913
; ReceiveGram();
rcall _ReceiveGram
.dbline 915
;
; if ( NoDataCount > NODATALIMIT ) {
ldi R24,1000
ldi R25,3
lds R2,_NoDataCount
lds R3,_NoDataCount+1
cp R24,R2
cpc R25,R3
brsh L291
X75:
.dbline 915
.dbline 916
; NoDataCount = 0;
clr R2
clr R3
sts _NoDataCount+1,R3
sts _NoDataCount,R2
.dbline 917
; InitSPI();
rcall _InitSPI
.dbline 919
; // put_str_CRLF("Reset");
; }
L291:
.dbline 921
;
; uart_handle();
rcall _uart_handle
.dbline 922
; /* if ( Mode ) {
L289:
.dbline 910
rjmp L288
X76:
.dbline -2
L287:
.dbline 0 ; func end
ret
.dbsym l portb 1 c
.dbsym l i 1 I
.dbsym r count 10 I
.dbend
.area bss(ram, con, rel)
.dbfile E:\变电站测温\测温主控\nrf905_JinJu.c
_temperature::
.blkb 2
.dbsym e temperature _temperature i
_NoDataCount::
.blkb 2
.dbsym e NoDataCount _NoDataCount i
_SendDataFlag::
.blkb 1
.dbsym e SendDataFlag _SendDataFlag c
_FlashFlag::
.blkb 1
.dbsym e FlashFlag _FlashFlag c
_TCNTData::
.blkb 2
.dbsym e TCNTData _TCNTData i
_spi_handlept:
.blkb 1
.dbsym s spi_handlept _spi_handlept c
_spi_rxpt:
.blkb 1
.dbsym s spi_rxpt _spi_rxpt c
_spi_rxbuf:
.blkb 16
.dbsym s spi_rxbuf _spi_rxbuf A[16:16]c
_tx_len:
.blkb 1
.dbsym s tx_len _tx_len c
_buf:
.blkb 32
.dbsym s buf _buf A[32:32]c
_tx_buf:
.blkb 32
.dbsym s tx_buf _tx_buf A[32:32]c
_tx_addr:
.blkb 4
.dbsym s tx_addr _tx_addr A[4:4]c
_handlept:
.blkb 1
.dbsym s handlept _handlept c
_rxpt:
.blkb 1
.dbsym s rxpt _rxpt c
_rxbuf:
.blkb 32
.dbsym s rxbuf _rxbuf A[32:32]c
_Register::
.blkb 10
.dbsym e Register _Register A[10:10]c
_SPI_Received::
.blkb 1
.dbsym e SPI_Received _SPI_Received c
_num::
.blkb 1
.dbsym e num _num c
_ID::
.blkb 2
.dbsym e ID _ID i
_Mode::
.blkb 1
.dbsym e Mode _Mode c
_TxFlag::
.blkb 6
.dbsym e TxFlag _TxFlag A[6:6]c
; if ( SendDataFlag ) {
; SendDataFlag = 0;
; SendData();
; put_bytes(tx_buf,tx_len);
; // SendGram(CMD_CALLDATA);
; }
; }
; */ }
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -