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

📄 measure.s

📁 ATmega128单片机对SHT7x温湿度传感器的驱动程序。编译环境:ICC AVR
💻 S
📖 第 1 页 / 共 3 页
字号:
	andi R20,2
	.dbline 161
;   error=merror;
	mov R10,R20
	.dbline 162
;   PORTF |=0x04;//SCK=1;  
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 163
;   _NOP();_NOP();_NOP();                     //check ack (DATA will be pulled down by SHT11)
	nop
	.dbline 163
	nop
	.dbline 163
	nop
	.dbline 164
;   PORTF &=0xfb;//SCK=0; 
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 165
;   DATA_TO_1(); 
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 166
;   if(error >0)
	ldi R24,0
	cp R24,R20
	brsh L20
X8:
	.dbline 167
;   PORTA |=0x04;     
	sbi 0x1b,2
L20:
	.dbline 168
;   return error;                   //error=1 in case of no acknowledge
	mov R16,R10
	.dbline -2
L3:
	xcall pop_xgset5
	.dbline 0 ; func end
	ret
	.dbsym r merror 20 c
	.dbsym r error 10 c
	.dbsym r i 22 c
	.dbsym r value 16 c
	.dbend
	.dbfunc e s_read_byte _s_read_byte fc
;            val -> R10
;              i -> R20
;            ack -> R16
	.even
_s_read_byte::
	xcall push_xgsetx
	.dbline -1
	.dbline 173
; }
; char s_read_byte(unsigned char ack)
; //----------------------------------------------------------------------------------
; // reads a byte form the Sensibus and gives an acknowledge in case of "ack=1" 
; { 
	.dbline 174
;   unsigned char i,val=0;
	clr R10
	.dbline 177
;   //DDRF |=0x04;
;   //DDRF &=0xfd;
;   PORTF |=0x02;//DATA=1;
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 178
;   _NOP();_NOP();_NOP();
	nop
	.dbline 178
	nop
	.dbline 178
	nop
	.dbline 181
;                                //release DATA-line
;   //for (i=0x80;i>0;i/=2) 
;    i=0x80;            //shift bit for masking
	ldi R20,128
	.dbline 182
;   { PORTF |=0x04;//SCK=1;
	.dbline 182
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 183
;   	_NOP();                          //clk for SENSI-BUS
	nop
	.dbline 184
	in R24,0x0
	andi R24,2
	breq L23
X9:
	.dbline 184
;     if (PINF&0x02) val=(val | i);        //read bit  
	or R10,R20
L23:
	.dbline 185
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 186
;     	_NOP();			 
	nop
	.dbline 187
;   }
	.dbline 188
;   i=0x40;
	ldi R20,64
	.dbline 189
;   { PORTF |=0x04;//SCK=1; 
	.dbline 189
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 190
;   	_NOP();                         //clk for SENSI-BUS
	nop
	.dbline 191
	in R24,0x0
	andi R24,2
	breq L25
X10:
	.dbline 191
;     if (PINF&0x02) val=(val | i);        //read bit  
	or R10,R20
L25:
	.dbline 192
;     PORTF &=0xfb;//SCK=0;  
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 193
;     _NOP();			 
	nop
	.dbline 194
;   }
	.dbline 195
;   i=0x20;
	ldi R20,32
	.dbline 196
;   { PORTF |=0x04;//SCK=1; 
	.dbline 196
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 197
;   	_NOP();                         //clk for SENSI-BUS
	nop
	.dbline 198
	in R24,0x0
	andi R24,2
	breq L27
X11:
	.dbline 198
;     if (PINF&0x02) val=(val | i);        //read bit  
	or R10,R20
L27:
	.dbline 199
;     PORTF &=0xfb;//SCK=0; 
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 200
;     _NOP(); 					 
	nop
	.dbline 201
;   }
	.dbline 202
;   i=0x10;
	ldi R20,16
	.dbline 203
;   { PORTF |=0x04;//SCK=1;
	.dbline 203
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 204
;   	_NOP();                          //clk for SENSI-BUS
	nop
	.dbline 205
	in R24,0x0
	andi R24,2
	breq L29
X12:
	.dbline 205
;     if (PINF&0x02) val=(val | i);        //read bit  
	or R10,R20
L29:
	.dbline 206
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 207
;     _NOP();					 
	nop
	.dbline 208
;   }
	.dbline 209
;   i=0x08;
	ldi R20,8
	.dbline 210
;   { PORTF |=0x04;//SCK=1; 
	.dbline 210
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 211
;   	_NOP();                         //clk for SENSI-BUS
	nop
	.dbline 212
	in R24,0x0
	andi R24,2
	breq L31
X13:
	.dbline 212
;     if (PINF&0x02) val=(val | i);        //read bit  
	or R10,R20
L31:
	.dbline 213
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 214
;     _NOP();  					 
	nop
	.dbline 215
;   }
	.dbline 216
;   i=0x04;
	ldi R20,4
	.dbline 217
;   { PORTF |=0x04;//SCK=1; 
	.dbline 217
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 218
;   	_NOP();                         //clk for SENSI-BUS
	nop
	.dbline 219
	in R24,0x0
	andi R24,2
	breq L33
X14:
	.dbline 219
;     if (PINF&0x02) val=(val | i);        //read bit  
	or R10,R20
L33:
	.dbline 220
;     PORTF &=0xfb;//SCK=0; 
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 221
;     _NOP();					 
	nop
	.dbline 222
;   }
	.dbline 223
;   i=0x02;
	ldi R20,2
	.dbline 224
;   { PORTF |=0x04;//SCK=1; 
	.dbline 224
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 225
;   	_NOP();                         //clk for SENSI-BUS
	nop
	.dbline 226
	in R24,0x0
	andi R24,2
	breq L35
X15:
	.dbline 226
;     if (PINF&0x02) val=(val | i);        //read bit  
	or R10,R20
L35:
	.dbline 227
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 228
;     _NOP(); 					 
	nop
	.dbline 229
;   }
	.dbline 230
;   i=0x01;
	ldi R20,1
	.dbline 231
;   { PORTF |=0x04;//SCK=1;
	.dbline 231
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 232
;   	_NOP();                         //clk for SENSI-BUS
	nop
	.dbline 233
	in R24,0x0
	andi R24,2
	breq L37
X16:
	.dbline 233
;     if (PINF&0x02) val=(val | i);        //read bit  
	or R10,R20
L37:
	.dbline 234
;     PORTF &=0xfb;//SCK=0;
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 235
;     _NOP();					 
	nop
	.dbline 236
;   }
	.dbline 237
;   DDRF |=0x02;
	lds R24,97
	ori R24,2
	sts 97,R24
	.dbline 238
;   if(ack==0)
	tst R16
	brne L39
X17:
	.dbline 239
;   {PORTF |=0x02;
	.dbline 239
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 240
;   _NOP();
	nop
	.dbline 241
; }
	xjmp L40
L39:
	.dbline 243
;   else
;   {PORTF &=0xfd;
	.dbline 243
	lds R24,98
	andi R24,253
	sts 98,R24
	.dbline 244
;   _NOP();
	nop
	.dbline 245
; }
L40:
	.dbline 247
;   //DATA=!ack;                        //in case of "ack==1" pull down DATA-Line
;   PORTF |=0x04;//SCK=1;                            //clk #9 for ack
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 248
;    _NOP();_NOP();_NOP();
	nop
	.dbline 248
	nop
	.dbline 248
	nop
	.dbline 250
;             //pulswith approx. 5 us 
;   PORTF &=0xfb;//SCK=0;	
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 251
;   _NOP();_NOP();_NOP();
	nop
	.dbline 251
	nop
	.dbline 251
	nop
	.dbline 253
;   					    
;   PORTF |=0x02;//DATA=1; 
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 254
;   DDRF &=0xfd; 
	lds R24,97
	andi R24,253
	sts 97,R24
	.dbline 255
;   _NOP();                      //release DATA-line
	nop
	.dbline 256
;   return val;
	mov R16,R10
	.dbline -2
L22:
	xcall pop_xgsetx
	.dbline 0 ; func end
	ret
	.dbsym r val 10 c
	.dbsym r i 20 c
	.dbsym r ack 16 c
	.dbend
	.dbfunc e s_transstart _s_transstart fV
	.even
_s_transstart::
	.dbline -1
	.dbline 266
; }
; 
; void s_transstart(void)
; //----------------------------------------------------------------------------------
; // generates a transmission start 
; //       _____         ________
; // DATA:      |_______|
; //           ___     ___
; // SCK : ___|   |___|   |______
; {  
	.dbline 267
;    DATA_TO_1(); 
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 268
;    _NOP();
	nop
	.dbline 269
;    SCK_TO_0();                   //Initial state
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 270
;    _NOP();
	nop
	.dbline 271
;    SCK_TO_1();
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 272
;    _NOP(); 
	nop
	.dbline 273
;    DATA_TO_0();
	lds R24,98
	andi R24,253
	sts 98,R24
	.dbline 274
;    _NOP(); 
	nop
	.dbline 275
;    SCK_TO_0();  
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 277
;    //delay_us(5);  	              //pulswith approx. 5 us  
;    _NOP();
	nop
	.dbline 278
;    _NOP();
	nop
	.dbline 279
;    _NOP();
	nop
	.dbline 280
;    _NOP();
	nop
	.dbline 281
;    _NOP();
	nop
	.dbline 282
;    SCK_TO_1();
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 283
;    _NOP(); 
	nop
	.dbline 284
;    DATA_TO_1();		   
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 285
;    _NOP(); 
	nop
	.dbline 286
;    SCK_TO_0();	
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 287
;    _NOP();	   
	nop
	.dbline -2
L41:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e s_connectionreset _s_connectionreset fV
;              i -> R20
	.even
_s_connectionreset::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 298
; } 
; 
; 
; void s_connectionreset(void)
; //----------------------------------------------------------------------------------
; // communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart
; //       _____________________________________________________         ________
; // DATA:                                                      |_______|
; //          _    _    _    _    _    _    _    _    _        ___     ___
; // SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______|   |___|   |______
; {  
	.dbline 300
;   unsigned char i; 
;   DATA_TO_1();     
	lds R24,98
	ori R24,2
	sts 98,R24
	.dbline 301
;   _NOP();
	nop
	.dbline 302
;   SCK_TO_0();                    //Initial state   
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 303
;   _NOP();
	nop
	.dbline 304
;   for(i=0;i<9;i++)                  //9 SCK cycles
	clr R20
	xjmp L46
L43:
	.dbline 305
	.dbline 305
	lds R24,98
	ori R24,4
	sts 98,R24
	.dbline 306
	nop
	.dbline 307
	lds R24,98
	andi R24,251
	sts 98,R24
	.dbline 308
	nop
	.dbline 309
L44:
	.dbline 304
	inc R20
L46:
	.dbline 304

⌨️ 快捷键说明

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