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

📄 test.s

📁 a good program for battery charge,only for reference
💻 S
📖 第 1 页 / 共 5 页
字号:
;   _nop_();         
	nop
	.dbline 164
;   PORTC &= ~(1<<SCL);   
	cbi 0x8,5
	.dbline 165
;   _nop_();
	nop
	.dbline 166
;   _nop_();     
	nop
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Stop_I2c _Stop_I2c fV
	.even
_Stop_I2c::
	.dbline -1
	.dbline 175
; }
; /*******************************************************************
;                       结束总线函数               
; 函数原型: void  Stop_I2c();  
; 功能:       结束I2C总线,即发送I2C结束条件.
;   
; ********************************************************************/
; void Stop_I2c()
; {
	.dbline 176
;   PORTC &= ~(1<<SDA);  		/*发送结束条件的数据信号*/
	cbi 0x8,4
	.dbline 177
;   _nop_();   				/*发送结束条件的时钟信号*/
	nop
	.dbline 178
;   PORTC |= (1<<SCL);  		/*结束条件建立时间大于4μs*/
	sbi 0x8,5
	.dbline 179
;   _nop_();
	nop
	.dbline 180
;   _nop_();
	nop
	.dbline 181
;   _nop_();
	nop
	.dbline 182
;   _nop_();
	nop
	.dbline 183
;   _nop_();
	nop
	.dbline 184
;   PORTC |= (1<<SDA);  		/*发送I2C总线结束信号*/
	sbi 0x8,4
	.dbline 185
;   _nop_();
	nop
	.dbline 186
;   _nop_();
	nop
	.dbline 187
;   _nop_();
	nop
	.dbline 188
;   _nop_(); 
	nop
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SendByte _SendByte fV
;         BitCnt -> R20
;              c -> R22
	.even
_SendByte::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 198
; }
; /*******************************************************************
;                  字节数据传送函数               
; 函数原型: void  SendByte(unsigned char c);
; 功能:  将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
;      此状态位进行操作.(不应答或非应答都使ack=0 假)     
;      发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
; ********************************************************************/
; void  SendByte(unsigned char c)
; {
	.dbline 200
;  unsigned char BitCnt;
;  for(BitCnt=0;BitCnt<8;BitCnt++)  				/*要传送的数据长度为8位*/
	clr R20
	rjmp L22
L19:
	.dbline 201
;     {
	.dbline 202
;      if((c<<BitCnt)&0x80){PORTC |= (1<<SDA);}   /*判断发送位*/
	mov R16,R22
	mov R17,R20
	rcall lsl8
	mov R24,R16
	andi R24,128
	breq L23
	.dbline 202
	.dbline 202
	sbi 0x8,4
	.dbline 202
	rjmp L24
L23:
	.dbline 203
;        else  {PORTC &= ~(1<<SDA);}                
	.dbline 203
	cbi 0x8,4
	.dbline 203
L24:
	.dbline 204
	nop
	.dbline 205
	sbi 0x8,5
	.dbline 206
	nop
	.dbline 207
	nop
	.dbline 208
	nop
	.dbline 209
	nop
	.dbline 210
	nop
	.dbline 211
	nop
	.dbline 212
	cbi 0x8,5
	.dbline 213
L20:
	.dbline 200
	inc R20
L22:
	.dbline 200
	cpi R20,8
	brlo L19
	.dbline 215
;      _nop_();
;      PORTC |= (1<<SCL);               			/*置时钟线为高,通知被控器开始接收数据位*/
;       _nop_(); 
;       _nop_();               		  			/*保证时钟高电平周期大于4μs*/
;       _nop_();
;       _nop_();
;       _nop_(); 
; 	  _nop_();     
;      PORTC &= ~(1<<SCL); 
;     }
; 
; 	_nop_();
	nop
	.dbline 216
;     _nop_();
	nop
	.dbline 217
;     _nop_();	
	nop
	.dbline 218
;     PORTC |= (1<<SDA);               			/*8位发送完后释放数据线,准备接收应答位*/
	sbi 0x8,4
	.dbline 219
; 	 _nop_();
	nop
	.dbline 220
;     _nop_(); 
	nop
	.dbline 221
; 	_nop_();
	nop
	.dbline 222
;     PORTC |= (1<<SCL);
	sbi 0x8,5
	.dbline 223
;     _nop_();
	nop
	.dbline 224
;     _nop_();
	nop
	.dbline 225
;     _nop_();
	nop
	.dbline 226
; 	_nop_();
	nop
	.dbline 227
; 	_nop_();
	nop
	.dbline 228
;  if((PINC&(1<<SDA))==1){temp &= ~(1<<ack);}     
	in R24,0x6
	andi R24,16
	cpi R24,1
	brne L25
	.dbline 228
	.dbline 228
	lds R24,_temp
	andi R24,254
	sts _temp,R24
	.dbline 228
	rjmp L26
L25:
	.dbline 229
;        else {temp |= (1<<ack);}        			/*判断是否接收到应答信号*/
	.dbline 229
	lds R24,_temp
	ori R24,1
	sts _temp,R24
	.dbline 229
L26:
	.dbline 230
;     PORTC &= ~(1<<SCL);
	cbi 0x8,5
	.dbline 231
;     _nop_();
	nop
	.dbline 232
;     _nop_();
	nop
	.dbline 233
; 	_nop_();
	nop
	.dbline 234
; 	_nop_();   	
	nop
	.dbline -2
L18:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r BitCnt 20 c
	.dbsym r c 22 c
	.dbend
	.dbfunc e TC1321_SET _TC1321_SET fI
;            tem -> y+0
;              i -> R20
;         DA_SET -> R20,R21
	.even
_TC1321_SET::
	rcall push_gset1
	movw R20,R16
	sbiw R28,4
	.dbline -1
	.dbline 243
; }
; /*******************************************************************
;                     向有子地址器件发送多字节数据函数               
; 函数原型: bit TC1321_SET(unsigned int DA_SET);  
; 功能:     设定TC1321的DATA寄存器,从而控制输出所设定的电压值:(DA_SET/1024)*VREF.
; 注意:    																		  
; ****************************14.3V时候的D/A输出值*******************************/
; TC1321_SET(unsigned int DA_SET)
; {
	.dbline 246
;    unsigned char i;
;    unsigned char tem[4];
;    temp_det();
	rcall _temp_det
	.dbline 247
;     _nop_();     
	nop
	.dbline 248
;   temp_det();
	rcall _temp_det
	.dbline 249
;     _nop_();  
	nop
	.dbline 250
; 	xxyy=now_temp-5;
	lds R24,_now_temp
	lds R25,_now_temp+1
	sbiw R24,5
	sts _xxyy+1,R25
	sts _xxyy,R24
	.dbline 251
; 	DA_SET=ABC[xxyy];
	movw R18,R24
	ldi R16,2
	ldi R17,0
	rcall empy16s
	movw R30,R16
	ldi R24,<_ABC
	ldi R25,>_ABC
	add R30,R24
	adc R31,R25
	lpm R20,Z+
	lpm R21,Z
	.dbline 253
; 
; 	if(now_temp <6)	  
	lds R24,_now_temp
	lds R25,_now_temp+1
	cpi R24,6
	ldi R30,0
	cpc R25,R30
	brge L28
	.dbline 254
; 		{
	.dbline 255
; 		DA_SET=735;
	ldi R20,735
	ldi R21,2
	.dbline 256
; 		}			
L28:
	.dbline 258
;    
;    tem[0]=0x90;	 		
	ldi R24,144
	std y+0,R24
	.dbline 259
;    tem[1]=0x00;			  
	clr R2
	std y+1,R2
	.dbline 260
;    tem[2]=DA_SET/4;		
	movw R2,R20
	lsr R3
	ror R2
	lsr R3
	ror R2
	std y+2,R2
	.dbline 261
;    tem[3]=DA_SET%4;		  
	movw R24,R20
	andi R24,3
	andi R25,0
	std y+3,R24
	.dbline 262
;    tem[3]=tem[3]<<6;	
	mov R2,R24
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	std y+3,R2
	.dbline 264
; 
;    Start_I2c();             
	rcall _Start_I2c
	.dbline 265
;      for(i=0;i<4;i++)
	clr R20
	rjmp L38
L35:
	.dbline 266
;     {   
	.dbline 267
;      SendByte(tem[i]);            
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _SendByte
	.dbline 268
; 	   if((temp&(1<<ack))==0)return(0);  
	lds R2,_temp
	sbrc R2,0
	rjmp L39
	.dbline 268
	clr R16
	clr R17
	rjmp L27
L39:
	.dbline 269
L36:
	.dbline 265
	inc R20
L38:
	.dbline 265
	cpi R20,4
	brlo L35
	.dbline 270
;      } 
;   Stop_I2c();               
	rcall _Stop_I2c
	.dbline 271
;   return(1);   
	ldi R16,1
	ldi R17,0
	.dbline -2
L27:
	adiw R28,4
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l tem 0 A[4:4]c
	.dbsym r i 20 c
	.dbsym r DA_SET 20 i
	.dbend
	.dbfunc e TC1321_SET_138 _TC1321_SET_138 fI
;            tem -> y+0
;              i -> R20
;         DA_SET -> R20,R21
	.even
_TC1321_SET_138::
	rcall push_gset1
	movw R20,R16
	sbiw R28,4
	.dbline -1
	.dbline 275
; }
; /**********************13.8V时候的D/A输出值  ***************************/
; TC1321_SET_138(unsigned int DA_SET)
; {
	.dbline 278
;    unsigned char i;
;    unsigned char tem[4];
;    temp_det();
	rcall _temp_det
	.dbline 279
;     _nop_();     
	nop
	.dbline 280
;   temp_det();
	rcall _temp_det
	.dbline 281
;     _nop_();  
	nop
	.dbline 283
;  
; 	xxyy=now_temp+5;
	lds R24,_now_temp
	lds R25,_now_temp+1
	adiw R24,5
	sts _xxyy+1,R25
	sts _xxyy,R24
	.dbline 284
; 	DA_SET=ABC_2[xxyy];
	movw R18,R24
	ldi R16,2
	ldi R17,0
	rcall empy16s
	movw R30,R16
	ldi R24,<_ABC_2
	ldi R25,>_ABC_2
	add R30,R24
	adc R31,R25
	lpm R20,Z+
	lpm R21,Z
	.dbline 286
; 
; 	if(now_temp <-4 )	  		   //温度小于-30°时候输出15.3V
	lds R24,_now_temp
	lds R25,_now_temp+1
	cpi R24,252
	ldi R30,255
	cpc R25,R30
	brge L42
	.dbline 287
; 		{
	.dbline 288
; 		DA_SET=752;
	ldi R20,752
	ldi R21,2
	.dbline 289
; 		}			   
L42:
	.dbline 291
;    
;    tem[0]=0x90;	 		
	ldi R24,144
	std y+0,R24
	.dbline 292
;    tem[1]=0x00;			  
	clr R2
	std y+1,R2
	.dbline 293
;    tem[2]=DA_SET/4;		
	movw R2,R20
	lsr R3
	ror R2
	lsr R3
	ror R2
	std y+2,R2
	.dbline 294
;    tem[3]=DA_SET%4;		  
	movw R24,R20
	andi R24,3
	andi R25,0
	std y+3,R24
	.dbline 295
;    tem[3]=tem[3]<<6;	
	mov R2,R24
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	std y+3,R2
	.dbline 297
; 
;    Start_I2c();             
	rcall _Start_I2c
	.dbline 298
;      for(i=0;i<4;i++)
	clr R20
	rjmp L52
L49:
	.dbline 299
;     {   
	.dbline 300
;      SendByte(tem[i]);            
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _SendByte
	.dbline 301
; 	   if((temp&(1<<ack))==0)return(0);  
	lds R2,_temp
	sbrc R2,0
	rjmp L53
	.dbline 301
	clr R16
	clr R17
	rjmp L41
L53:
	.dbline 302
L50:
	.dbline 298
	inc R20
L52:
	.dbline 298
	cpi R20,4
	brlo L49
	.dbline 303
;      } 
;   Stop_I2c();               
	rcall _Stop_I2c
	.dbline 304
;   return(1);   
	ldi R16,1
	ldi R17,0
	.dbline -2
L41:
	adiw R28,4
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l tem 0 A[4:4]c
	.dbsym r i 20 c
	.dbsym r DA_SET 20 i
	.dbend
	.dbfunc e TC1321_SET_1 _TC1321_SET_1 fI
;            tem -> y+0
;              i -> R20
;         DA_SET -> R20,R21
	.even
_TC1321_SET_1::
	rcall push_gset1
	movw R20,R16
	sbiw R28,4
	.dbline -1
	.dbline 308
; }
; /********************************************************************/
; TC1321_SET_1(unsigned int DA_SET)
; {
	.dbline 311
;    unsigned char i;
;    unsigned char tem[4];
;    tem[0]=0x90;	 		
	ldi R24,144
	std y+0,R24
	.dbline 312
;    tem[1]=0x00;			 
	clr R2
	std y+1,R2
	.dbline 313
;    tem[2]=DA_SET/4;		
	movw R2,R20
	lsr R3
	ror R2
	lsr R3
	ror R2
	std y+2,R2
	.dbline 314
;    tem[3]=DA_SET%4;		
	movw R24,R20
	andi R24,3
	andi R25,0
	std y+3,R24
	.dbline 315
;    tem[3]=tem[3]<<6;	
	mov R2,R24
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	lsl R2
	std y+3,R2
	.dbline 317
; 
;    Start_I2c();             
	rcall _Start_I2c
	.dbline 318
;      for(i=0;i<4;i++)
	clr R20
	rjmp L64
L61:
	.dbline 319
;     {   
	.dbline 320
;      SendByte(tem[i]);            
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _SendByte
	.dbline 321
; 	   if((temp&(1<<ack))==0)return(0);  
	lds R2,_temp
	sbrc R2,0
	rjmp L65
	.dbline 321
	clr R16
	clr R17
	rjmp L55
L65:
	.dbline 322
L62:
	.dbline 318
	inc R20
L64:
	.dbline 318
	cpi R20,4
	brlo L61
	.dbline 323
;      } 
;   Stop_I2c();               
	rcall _Stop_I2c
	.dbline 324
;   return(1);   
	ldi R16,1
	ldi R17,0
	.dbline -2
L55:
	adiw R28,4
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l tem 0 A[4:4]c
	.dbsym r i 20 c
	.dbsym r DA_SET 20 i
	.dbend
	.dbfunc e Delay _Delay fV

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -