⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nrf905_temperature.s

📁 ADC采集温度数据通过nrf905发送出去
💻 S
📖 第 1 页 / 共 5 页
字号:
	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 + -