📄 nrf905_temperature.s
字号:
out 0xa,R24
.dbline -2
L63:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart_RxChar _uart_RxChar fc
.even
_uart_RxChar::
.dbline -1
.dbline 309
; }
;
; /////////////////////////////////////////////////////////////
; //URAT口
; BYTE uart_RxChar(void)
; {
L65:
.dbline 310
; while(!(UCSRA& (1<<RXC)));//判断是否接收到数据
L66:
.dbline 310
sbis 0xb,7
rjmp L65
X14:
.dbline 311
; return UDR; //接收数据
in R16,0xc
.dbline -2
L64:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart_TxChar _uart_TxChar fV
; c -> R16
.even
_uart_TxChar::
.dbline -1
.dbline 316
; }
;
; /////////////////////////////////////////////////////////////
; void uart_TxChar(BYTE c)
; {
L69:
.dbline 317
; while (!(UCSRA&(1<<UDRE)));//判断上次发送是否完成
L70:
.dbline 317
sbis 0xb,5
rjmp L69
X15:
.dbline 318
; UDR=c; //发送数据
out 0xc,R16
.dbline -2
L68:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e put_bytes _put_bytes fV
; i -> R20,R21
; len -> R10,R11
; buf -> R12,R13
.even
_put_bytes::
rcall push_xgset303C
movw R10,R18
movw R12,R16
.dbline -1
.dbline 323
; }
;
; /////////////////////////////////////////////////////////////////////////////////
; void put_bytes(BYTE *buf,int len)
; {
.dbline 325
; int i;
; for ( i=0; i<len; i++ ) uart_TxChar(buf[i]);
clr R20
clr R21
rjmp L76
L73:
.dbline 325
movw R30,R20
add R30,R12
adc R31,R13
ldd R16,z+0
rcall _uart_TxChar
L74:
.dbline 325
subi R20,255 ; offset = 1
sbci R21,255
L76:
.dbline 325
cp R20,R10
cpc R21,R11
brlt L73
X16:
.dbline -2
L72:
.dbline 0 ; func end
rjmp pop_xgset303C
.dbsym r i 20 I
.dbsym r len 10 I
.dbsym r buf 12 pc
.dbend
.dbfunc e adc_init _adc_init fV
.even
_adc_init::
.dbline -1
.dbline 331
; }
;
; /////////////////////////////////////////////////////////////////////////////////
; //ADC初始化
; void adc_init(void)
; {
.dbline 332
; ADCSRA = 0x00;
clr R2
out 0x6,R2
.dbline 334
;
; ADMUX =(1<<REFS0)|(adc_mux&0x0F);
lds R24,_adc_mux
lds R25,_adc_mux+1
andi R24,15
andi R25,0
ori R24,64
out 0x7,R24
.dbline 336
;
; ACSR =(1<<ACD);//关闭模拟比较器
ldi R24,128
out 0x8,R24
.dbline 338
;
; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) ;//128分频
ldi R24,199
out 0x6,R24
.dbline 340
;
; us(2);
ldi R16,2
ldi R17,0
rcall _us
.dbline 342
;
; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) ;//128分频
ldi R24,207
out 0x6,R24
.dbline -2
L77:
.dbline 0 ; func end
ret
.dbend
.dbfunc e AlarmPro _AlarmPro fV
; j -> <dead>
; temp -> R10,R11
; i -> R20
.even
_AlarmPro::
rcall push_xgset300C
.dbline -1
.dbline 347
;
; }
;
; void AlarmPro(void)
; {
.dbline 351
; BYTE i,j;
; WORD temp;
;
; for(i=0;i<num;i++){
clr R20
rjmp L82
L79:
.dbline 351
.dbline 353
;
; if(i == 4) i=i+2;
cpi R20,4
brne L83
X17:
.dbline 353
subi R20,254 ; addi 2
L83:
.dbline 354
; temp = data[i]+(data[i+1]<<8);
ldi R24,<_data+1
ldi R25,>_data+1
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
mov R3,R2
clr R2
ldi R24,<_data
ldi R25,>_data
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R10,z+0
clr R11
add R10,R2
adc R11,R3
.dbline 356
;
; alarmno = i;
sts _alarmno,R20
.dbline 358
;
; if(temp < limit[i][2]) {
ldi R24,6
mul R24,R20
movw R30,R0
ldi R24,<_limit+4
ldi R25,>_limit+4
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
cp R10,R2
cpc R11,R3
brsh L86
X18:
.dbline 358
.dbline 360
;
; alarm_flag[i] = 3;
ldi R24,<_alarm_flag
ldi R25,>_alarm_flag
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldi R24,3
std z+0,R24
.dbline 361
; }
rjmp L87
L86:
.dbline 362
; else {
.dbline 363
; if(temp < limit[i][1]) {
ldi R24,6
mul R24,R20
movw R30,R0
ldi R24,<_limit+2
ldi R25,>_limit+2
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
cp R10,R2
cpc R11,R3
brsh L89
X19:
.dbline 363
.dbline 365
;
; alarm_flag[i] = 2;
ldi R24,<_alarm_flag
ldi R25,>_alarm_flag
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldi R24,2
std z+0,R24
.dbline 366
; }
rjmp L90
L89:
.dbline 367
; else {
.dbline 368
; if(temp < limit[i][0]) {
ldi R24,6
mul R24,R20
movw R30,R0
ldi R24,<_limit
ldi R25,>_limit
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
cp R10,R2
cpc R11,R3
brsh L92
X20:
.dbline 368
.dbline 370
;
; alarm_flag[i] = 1;
ldi R24,<_alarm_flag
ldi R25,>_alarm_flag
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldi R24,1
std z+0,R24
.dbline 371
; }
rjmp L93
L92:
.dbline 372
; else{
.dbline 373
; alarm_flag[i] = 0;
ldi R24,<_alarm_flag
ldi R25,>_alarm_flag
mov R30,R20
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 374
; }
L93:
.dbline 375
; }
L90:
.dbline 376
; }
L87:
.dbline 378
;
; if(alarm_flag[i] != Alarm_flag_prev[i]) {
ldi R24,<_Alarm_flag_prev
ldi R25,>_Alarm_flag_prev
mov R30,R20
clr R31
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
ldi R24,<_alarm_flag
ldi R25,>_alarm_flag
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
cp R4,R2
cpc R5,R3
breq L94
X21:
.dbline 378
.dbline 379
; SendGram(CMD_RETDATA);
ldi R16,1
rcall _SendGram
.dbline 380
; Alarm_flag_prev[i] = alarm_flag[i];
ldi R24,<_alarm_flag
ldi R25,>_alarm_flag
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
ldi R24,<_Alarm_flag_prev
ldi R25,>_Alarm_flag_prev
mov R30,R20
clr R31
lsl R30
rol R31
add R30,R24
adc R31,R25
std z+1,R3
std z+0,R2
.dbline 381
; return ;
rjmp L78
L94:
.dbline 383
; }
; }
L80:
.dbline 351
inc R20
L82:
.dbline 351
lds R2,_num
cp R20,R2
brsh X23
rjmp L79
X23:
X22:
.dbline -2
L78:
.dbline 0 ; func end
rjmp pop_xgset300C
.dbsym l j 1 c
.dbsym r temp 10 i
.dbsym r i 20 c
.dbend
.area vector(rom, abs)
.org 28
rjmp _adc_isr
.area text(rom, con, rel)
.dbfile E:\变电站测温\测温模块\nrf905_temperature.c
.dbfunc e adc_isr _adc_isr fV
.even
_adc_isr::
st -y,R1
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R24
st -y,R25
st -y,R26
st -y,R30
st -y,R31
in R1,0x3f
st -y,R1
.dbline -1
.dbline 389
; }
; /////////////////////////////////////////////////////////////////////////////////
; //ADC完成中断
; #pragma interrupt_handler adc_isr:iv_ADC
; void adc_isr(void)
; {
.dbline 399
;
; /*
; uart_TxChar(0xeb);
; uart_TxChar(0x90);
; uart_TxChar(adc_mul);
; uart_TxChar(ADMUX);
; uart_TxChar(ADCL);
; uart_TxChar(ADCH);
; */
; data[adc_mux*2] = ADCL;
ldi R24,<_data
ldi R25,>_data
lds R30,_adc_mux
lds R31,_adc_mux+1
lsl R30
rol R31
add R30,R24
adc R31,R25
in R2,0x4
std z+0,R2
.dbline 400
; data[adc_mux*2+1] = ADCH;
lds R30,_adc_mux
lds R31,_adc_mux+1
lsl R30
rol R31
adiw R30,1
add R30,R24
adc R31,R25
in R2,0x5
std z+0,R2
.dbline 402
;
; adc_val = (data[adc_mux*2+1]<<8)|data[adc_mux*2];
lds R2,_adc_mux
lds R3,_adc_mux+1
lsl R2
rol R3
movw R4,R2
movw R30,R2
add R30,R24
adc R31,R25
ldd R2,z+0
movw R30,R4
adiw R30,1
add R30,R24
adc R31,R25
ldd R3,z+0
sts _adc_val+1,R3
sts _adc_val,R2
.dbline 404
;
; ++adc_mux;
lds R24,_adc_mux
lds R25,_adc_mux+1
adiw R24,1
sts _adc_mux+1,R25
sts _adc_mux,R24
.dbline 406
;
; if(num > 4) {
ldi R24,4
lds R2,_num
cp R24,R2
brsh L97
X24:
.dbline 406
.dbline 407
; if(adc_mux == 4) adc_mux = adc_mux+2;
lds R24,_adc_mux
lds R25,_adc_mux+1
cpi R24,4
ldi R30,0
cpc R25,R30
brne L99
X25:
.dbline 407
adiw R24,2
sts _adc_mux+1,R25
sts _adc_mux,R24
L99:
.dbline 408
; if(adc_mux > (num+1)) adc_mux = 0;
lds R24,_num
clr R25
adiw R24,1
lds R2,_adc_mux
lds R3,_adc_mux+1
cp R24,R2
cpc R25,R3
brsh L98
X26:
.dbline 408
clr R2
clr R3
sts _adc_mux+1,R3
sts _adc_mux,R2
.dbline 409
; }
rjmp L98
L97:
.dbline 410
; else if(adc_mux > (num-1)) adc_mux = 0;
lds R24,_num
clr R25
sbiw R24,1
lds R2,_adc_mux
lds R3,_adc_mux+1
cp R24,R2
cpc R25,R3
brsh L103
X27:
.dbline 410
clr R2
clr R3
sts _adc_mux+1,R3
sts _adc_mux,R2
L103:
L98:
.dbline -2
L96:
.dbline 0 ; func end
ld R1,y+
out 0x3f,R1
ld R31,y+
ld R30,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
ld R1,y+
reti
.dbend
.dbfunc e GetLPC _GetLPC fc
; c -> R20
; i -> R22,R23
; len -> R18,R19
; buf -> R16,R17
.even
_GetLPC::
rcall push_xgsetF000
.dbline -1
.dbline 415
; }
;
; /////////////////////////////////////////////////////////////////////////////////
; BYTE GetLPC(BYTE *buf,short len)
; {
.dbline 417
; short i;
; BYTE c = 0xff;
ldi R20,255
.dbline 419
;
; for ( i=0; i<len; i++ ) c ^= buf[i];
clr R22
clr R23
rjmp L109
L106:
.dbline 419
movw R30,R22
add R30,R16
adc R31,R17
ldd R2,z+0
eor R20,R2
L107:
.dbline 419
subi R22,255 ; offset = 1
sbci R23,255
L109:
.dbline 419
cp R22,R18
cpc R23,R19
brlt L106
X28:
.dbline 420
; return c;
mov R16,R20
.dbline -2
L105:
.dbline 0 ; func end
rjmp pop_xgsetF000
.dbsym r c 20 c
.dbsym r i 22 S
.dbsym r len 18 S
.dbsym r buf 16 pc
.dbend
.dbfunc e CallData _CallData fV
.even
_CallData::
.dbline -1
.dbline 425
; }
;
; /////////////////////////////////////////////////////////////////////////////////
; void CallData(void)
; {
.dbline 426
; tx_buf[0] = 0xeb;
ldi R24,235
sts _tx_buf,R24
.dbline 427
; tx_buf[1] = 0x90;
ldi R24,144
sts _tx_buf+1,R24
.dbline 428
; tx_buf[2] = CMD_ASKDATA;
clr R2
sts _tx_buf+2,R2
.dbline 429
; tx_buf[3] = ID_L;
lds R2,_ID_L
sts _tx_buf+3,R2
.dbline 430
; tx_buf[4] = ID_H;
lds R2,_ID_H
sts _tx_buf+4,R2
.dbline 431
; tx_buf[5] = num;
lds R2,_num
sts _tx_buf+5,R2
.dbline 432
; tx_buf[6] = GetLPC(tx_buf,7);
ldi R18,7
ldi R19,0
ldi R16,<_tx_buf
ldi R17,>_tx_buf
rcall _GetLPC
sts _tx_buf+6,R16
.dbline 433
; tx_len = 7;
ldi R24,7
sts _tx_len,R24
.dbline -2
L110:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RetData _RetData fV
; i -> R20
.even
_RetData::
rcall push_xgset300C
.dbline -1
.dbline 437
; }
;
; void RetData(void)
; {
.dbline 440
; BYTE i;
;
; tx_buf[0] = 0xeb;
ldi R24,235
sts _tx_buf,R24
.dbline 441
; tx_buf[1] = 0x90;
ldi R24,144
sts _tx_buf+1,R24
.dbline 442
; tx_buf[2] = CMD_RETDATA;
ldi R24,1
sts _tx_buf+2,R24
.dbline 443
; tx_buf[3] = ID_L;
lds R2,_ID_L
sts _tx_buf+3,R2
.dbline 444
; tx_buf[4] = ID_H;
lds R2,_ID_H
sts _tx_buf+4,R2
.dbline 445
; tx_buf[5] = num;
lds R2,_num
sts _tx_buf+5,R2
.dbline 446
; tx_buf[6] = startnum;
lds R2,_startnum
sts _tx_buf+6,R2
.dbline 447
; if(num <4){
lds R24,_num
cpi R24,4
brlo X35
rjmp L124
X35:
X29:
.dbline 447
.dbline 448
; for(i=7;i<num*2+7;i++){
ldi R20,7
rjmp L129
L126:
.dbline 448
.dbline 449
; tx_buf[i] = data[startnum*2+i-7];
mov R2,R20
clr R3
lds R30,_startnum
clr R31
lsl R30
rol R31
add R30,R2
adc R31,R3
ldi R24,<_data-7
ldi R25,>_data-7
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_tx_buf
ldi R25,>_tx_buf
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 450
; }
L127:
.dbline 448
inc R20
L129:
.dbline 448
lds R24,_num
lsl R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -