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

📄 main.lss

📁 16位的AD芯片的ADS1158的驱动程序。
💻 LSS
📖 第 1 页 / 共 3 页
字号:
 1be:	0f 90       	pop	r0
 1c0:	0f 90       	pop	r0
 1c2:	cf 91       	pop	r28
 1c4:	df 91       	pop	r29
 1c6:	08 95       	ret

000001c8 <ads_senddata>:

/*************************************************************************************/
//ads126发送一字节的数据 
unsigned char ads_senddata(unsigned char data)  //SPI发送数据,要在外部保证SS = 0 
{
 1c8:	df 93       	push	r29
 1ca:	cf 93       	push	r28
 1cc:	0f 92       	push	r0
 1ce:	cd b7       	in	r28, 0x3d	; 61
 1d0:	de b7       	in	r29, 0x3e	; 62
 1d2:	89 83       	std	Y+1, r24	; 0x01
SPDR = data;                //启动数据传输 
 1d4:	ef e2       	ldi	r30, 0x2F	; 47
 1d6:	f0 e0       	ldi	r31, 0x00	; 0
 1d8:	89 81       	ldd	r24, Y+1	; 0x01
 1da:	80 83       	st	Z, r24
while((SPSR & 0x80) == 0); // 等待传输结束 
 1dc:	ee e2       	ldi	r30, 0x2E	; 46
 1de:	f0 e0       	ldi	r31, 0x00	; 0
 1e0:	80 81       	ld	r24, Z
 1e2:	88 23       	and	r24, r24
 1e4:	dc f7       	brge	.-10     	; 0x1dc <ads_senddata+0x14>
data = SPDR; 
 1e6:	ef e2       	ldi	r30, 0x2F	; 47
 1e8:	f0 e0       	ldi	r31, 0x00	; 0
 1ea:	80 81       	ld	r24, Z
 1ec:	89 83       	std	Y+1, r24	; 0x01
return data; 
 1ee:	89 81       	ldd	r24, Y+1	; 0x01
}
 1f0:	0f 90       	pop	r0
 1f2:	cf 91       	pop	r28
 1f4:	df 91       	pop	r29
 1f6:	08 95       	ret

000001f8 <ad_write>:
/*************************************************************************************/



void ad_write(unsigned char reg,unsigned char data)//写寄存器。选择寄存器地址,写入的数据。
{   
 1f8:	df 93       	push	r29
 1fa:	cf 93       	push	r28
 1fc:	00 d0       	rcall	.+0      	; 0x1fe <ad_write+0x6>
 1fe:	cd b7       	in	r28, 0x3d	; 61
 200:	de b7       	in	r29, 0x3e	; 62
 202:	89 83       	std	Y+1, r24	; 0x01
 204:	6a 83       	std	Y+2, r22	; 0x02
     delay_us(1);           //挺时1uS          
 206:	81 e0       	ldi	r24, 0x01	; 1
 208:	ae df       	rcall	.-164    	; 0x166 <delay_us>
     PORTB&=~(1<<PB1);      //SPI的CS=0使能
 20a:	a8 e3       	ldi	r26, 0x38	; 56
 20c:	b0 e0       	ldi	r27, 0x00	; 0
 20e:	e8 e3       	ldi	r30, 0x38	; 56
 210:	f0 e0       	ldi	r31, 0x00	; 0
 212:	80 81       	ld	r24, Z
 214:	8d 7f       	andi	r24, 0xFD	; 253
 216:	8c 93       	st	X, r24
     ads_senddata(0x60+reg);//选择写入寄存器      
 218:	89 81       	ldd	r24, Y+1	; 0x01
 21a:	80 5a       	subi	r24, 0xA0	; 160
 21c:	d5 df       	rcall	.-86     	; 0x1c8 <ads_senddata>
     ads_senddata(data);    //写入寄存器数据
 21e:	8a 81       	ldd	r24, Y+2	; 0x02
 220:	d3 df       	rcall	.-90     	; 0x1c8 <ads_senddata>
     PORTB|=(1<<PB1);       //SPI的CS=1,停止
 222:	a8 e3       	ldi	r26, 0x38	; 56
 224:	b0 e0       	ldi	r27, 0x00	; 0
 226:	e8 e3       	ldi	r30, 0x38	; 56
 228:	f0 e0       	ldi	r31, 0x00	; 0
 22a:	80 81       	ld	r24, Z
 22c:	82 60       	ori	r24, 0x02	; 2
 22e:	8c 93       	st	X, r24
     delay_us(1);           //挺时1uS     
 230:	81 e0       	ldi	r24, 0x01	; 1
 232:	99 df       	rcall	.-206    	; 0x166 <delay_us>
}
 234:	0f 90       	pop	r0
 236:	0f 90       	pop	r0
 238:	cf 91       	pop	r28
 23a:	df 91       	pop	r29
 23c:	08 95       	ret

0000023e <ad_read>:
/*************************************************************************************/
unsigned long int ad_read()//读A/D数据。
{    
 23e:	df 93       	push	r29
 240:	cf 93       	push	r28
 242:	00 d0       	rcall	.+0      	; 0x244 <ad_read+0x6>
 244:	00 d0       	rcall	.+0      	; 0x246 <ad_read+0x8>
 246:	00 d0       	rcall	.+0      	; 0x248 <ad_read+0xa>
 248:	cd b7       	in	r28, 0x3d	; 61
 24a:	de b7       	in	r29, 0x3e	; 62
     unsigned long int  sum=0;
 24c:	1b 82       	std	Y+3, r1	; 0x03
 24e:	1c 82       	std	Y+4, r1	; 0x04
 250:	1d 82       	std	Y+5, r1	; 0x05
 252:	1e 82       	std	Y+6, r1	; 0x06
     unsigned char r=0,a=0;     
 254:	1a 82       	std	Y+2, r1	; 0x02
 256:	19 82       	std	Y+1, r1	; 0x01
     PORTB&=~(1<<PB1);        //SPI的CS=0使能
 258:	a8 e3       	ldi	r26, 0x38	; 56
 25a:	b0 e0       	ldi	r27, 0x00	; 0
 25c:	e8 e3       	ldi	r30, 0x38	; 56
 25e:	f0 e0       	ldi	r31, 0x00	; 0
 260:	80 81       	ld	r24, Z
 262:	8d 7f       	andi	r24, 0xFD	; 253
 264:	8c 93       	st	X, r24
	 ads_senddata(0x80);       //启动英雄模范1158的ad转换
 266:	80 e8       	ldi	r24, 0x80	; 128
 268:	af df       	rcall	.-162    	; 0x1c8 <ads_senddata>
    // while((PIND&0X8)!=0);    //DRDY信号低时才能写寄存器   ,等待转换完毕
        {
		 delay_us(10);         //挺时1uS
 26a:	8a e0       	ldi	r24, 0x0A	; 10
 26c:	7c df       	rcall	.-264    	; 0x166 <delay_us>
         for (r=0;r<3;r++)   //读取16位数据   前8位是通道信息,后16位是转换数据结果
 26e:	1a 82       	std	Y+2, r1	; 0x02
 270:	23 c0       	rjmp	.+70     	; 0x2b8 <ad_read+0x7a>
           {
		   a=ads_senddata(0x00); //发送读取数据命令,读取数据,先高位,后低位
 272:	80 e0       	ldi	r24, 0x00	; 0
 274:	a9 df       	rcall	.-174    	; 0x1c8 <ads_senddata>
 276:	89 83       	std	Y+1, r24	; 0x01
		   sum|=a;
 278:	89 81       	ldd	r24, Y+1	; 0x01
 27a:	28 2f       	mov	r18, r24
 27c:	30 e0       	ldi	r19, 0x00	; 0
 27e:	40 e0       	ldi	r20, 0x00	; 0
 280:	50 e0       	ldi	r21, 0x00	; 0
 282:	8b 81       	ldd	r24, Y+3	; 0x03
 284:	9c 81       	ldd	r25, Y+4	; 0x04
 286:	ad 81       	ldd	r26, Y+5	; 0x05
 288:	be 81       	ldd	r27, Y+6	; 0x06
 28a:	82 2b       	or	r24, r18
 28c:	93 2b       	or	r25, r19
 28e:	a4 2b       	or	r26, r20
 290:	b5 2b       	or	r27, r21
 292:	8b 83       	std	Y+3, r24	; 0x03
 294:	9c 83       	std	Y+4, r25	; 0x04
 296:	ad 83       	std	Y+5, r26	; 0x05
 298:	be 83       	std	Y+6, r27	; 0x06
		   sum=sum<<8;
 29a:	8b 81       	ldd	r24, Y+3	; 0x03
 29c:	9c 81       	ldd	r25, Y+4	; 0x04
 29e:	ad 81       	ldd	r26, Y+5	; 0x05
 2a0:	be 81       	ldd	r27, Y+6	; 0x06
 2a2:	ba 2f       	mov	r27, r26
 2a4:	a9 2f       	mov	r26, r25
 2a6:	98 2f       	mov	r25, r24
 2a8:	88 27       	eor	r24, r24
 2aa:	8b 83       	std	Y+3, r24	; 0x03
 2ac:	9c 83       	std	Y+4, r25	; 0x04
 2ae:	ad 83       	std	Y+5, r26	; 0x05
 2b0:	be 83       	std	Y+6, r27	; 0x06
     PORTB&=~(1<<PB1);        //SPI的CS=0使能
	 ads_senddata(0x80);       //启动英雄模范1158的ad转换
    // while((PIND&0X8)!=0);    //DRDY信号低时才能写寄存器   ,等待转换完毕
        {
		 delay_us(10);         //挺时1uS
         for (r=0;r<3;r++)   //读取16位数据   前8位是通道信息,后16位是转换数据结果
 2b2:	8a 81       	ldd	r24, Y+2	; 0x02
 2b4:	8f 5f       	subi	r24, 0xFF	; 255
 2b6:	8a 83       	std	Y+2, r24	; 0x02
 2b8:	8a 81       	ldd	r24, Y+2	; 0x02
 2ba:	83 30       	cpi	r24, 0x03	; 3
 2bc:	d0 f2       	brcs	.-76     	; 0x272 <ad_read+0x34>
           {
		   a=ads_senddata(0x00); //发送读取数据命令,读取数据,先高位,后低位
		   sum|=a;
		   sum=sum<<8;
            }
		 sum=sum>>8;
 2be:	8b 81       	ldd	r24, Y+3	; 0x03
 2c0:	9c 81       	ldd	r25, Y+4	; 0x04
 2c2:	ad 81       	ldd	r26, Y+5	; 0x05
 2c4:	be 81       	ldd	r27, Y+6	; 0x06
 2c6:	89 2f       	mov	r24, r25
 2c8:	9a 2f       	mov	r25, r26
 2ca:	ab 2f       	mov	r26, r27
 2cc:	bb 27       	eor	r27, r27
 2ce:	8b 83       	std	Y+3, r24	; 0x03
 2d0:	9c 83       	std	Y+4, r25	; 0x04
 2d2:	ad 83       	std	Y+5, r26	; 0x05
 2d4:	be 83       	std	Y+6, r27	; 0x06
		}
     PORTB|=(1<<PB1);     //SPI的CS=1,停止
 2d6:	a8 e3       	ldi	r26, 0x38	; 56
 2d8:	b0 e0       	ldi	r27, 0x00	; 0
 2da:	e8 e3       	ldi	r30, 0x38	; 56
 2dc:	f0 e0       	ldi	r31, 0x00	; 0
 2de:	80 81       	ld	r24, Z
 2e0:	82 60       	ori	r24, 0x02	; 2
 2e2:	8c 93       	st	X, r24
	 return  sum;
 2e4:	8b 81       	ldd	r24, Y+3	; 0x03
 2e6:	9c 81       	ldd	r25, Y+4	; 0x04
 2e8:	ad 81       	ldd	r26, Y+5	; 0x05
 2ea:	be 81       	ldd	r27, Y+6	; 0x06
}
 2ec:	bc 01       	movw	r22, r24
 2ee:	cd 01       	movw	r24, r26
 2f0:	26 96       	adiw	r28, 0x06	; 6
 2f2:	0f b6       	in	r0, 0x3f	; 63
 2f4:	f8 94       	cli
 2f6:	de bf       	out	0x3e, r29	; 62
 2f8:	0f be       	out	0x3f, r0	; 63
 2fa:	cd bf       	out	0x3d, r28	; 61
 2fc:	cf 91       	pop	r28
 2fe:	df 91       	pop	r29
 300:	08 95       	ret

00000302 <ads_sum>:

/*************************************************************************************/
unsigned long int ads_sum(unsigned char data)//读A/D数据。
  {  
 302:	df 93       	push	r29
 304:	cf 93       	push	r28
 306:	cd b7       	in	r28, 0x3d	; 61
 308:	de b7       	in	r29, 0x3e	; 62
 30a:	27 97       	sbiw	r28, 0x07	; 7
 30c:	0f b6       	in	r0, 0x3f	; 63
 30e:	f8 94       	cli
 310:	de bf       	out	0x3e, r29	; 62
 312:	0f be       	out	0x3f, r0	; 63
 314:	cd bf       	out	0x3d, r28	; 61
 316:	8f 83       	std	Y+7, r24	; 0x07
     unsigned long int aa=0;
 318:	1b 82       	std	Y+3, r1	; 0x03
 31a:	1c 82       	std	Y+4, r1	; 0x04
 31c:	1d 82       	std	Y+5, r1	; 0x05
 31e:	1e 82       	std	Y+6, r1	; 0x06
	 unsigned char  a=1,i=0;
 320:	81 e0       	ldi	r24, 0x01	; 1
 322:	8a 83       	std	Y+2, r24	; 0x02
 324:	19 82       	std	Y+1, r1	; 0x01
	 if((0<=data)&&(data<=7))
 326:	8f 81       	ldd	r24, Y+7	; 0x07
 328:	88 30       	cpi	r24, 0x08	; 8
 32a:	c0 f4       	brcc	.+48     	; 0x35c <ads_sum+0x5a>
	    {for(i=0;i<data;i++)
 32c:	19 82       	std	Y+1, r1	; 0x01
 32e:	09 c0       	rjmp	.+18     	; 0x342 <ads_sum+0x40>
	        a=a*2;
 330:	8a 81       	ldd	r24, Y+2	; 0x02
 332:	88 2f       	mov	r24, r24
 334:	90 e0       	ldi	r25, 0x00	; 0
 336:	88 0f       	add	r24, r24
 338:	99 1f       	adc	r25, r25
 33a:	8a 83       	std	Y+2, r24	; 0x02
unsigned long int ads_sum(unsigned char data)//读A/D数据。
  {  
     unsigned long int aa=0;
	 unsigned char  a=1,i=0;
	 if((0<=data)&&(data<=7))
	    {for(i=0;i<data;i++)
 33c:	89 81       	ldd	r24, Y+1	; 0x01
 33e:	8f 5f       	subi	r24, 0xFF	; 255
 340:	89 83       	std	Y+1, r24	; 0x01
 342:	99 81       	ldd	r25, Y+1	; 0x01
 344:	8f 81       	ldd	r24, Y+7	; 0x07
 346:	98 17       	cp	r25, r24
 348:	98 f3       	brcs	.-26     	; 0x330 <ads_sum+0x2e>
	        a=a*2;
         //ad_write(03,a);     //第几通道为选通
	     aa=ad_read();       //读24位A/D数据。
 34a:	79 df       	rcall	.-270    	; 0x23e <ad_read>
 34c:	dc 01       	movw	r26, r24
 34e:	cb 01       	movw	r24, r22
 350:	8b 83       	std	Y+3, r24	; 0x03
 352:	9c 83       	std	Y+4, r25	; 0x04
 354:	ad 83       	std	Y+5, r26	; 0x05
 356:	be 83       	std	Y+6, r27	; 0x06
         USART_Transmit(0x88);
 358:	88 e8       	ldi	r24, 0x88	; 136
 35a:	9c de       	rcall	.-712    	; 0x94 <USART_Transmit>
		}
	 return aa;
 35c:	8b 81       	ldd	r24, Y+3	; 0x03
 35e:	9c 81       	ldd	r25, Y+4	; 0x04
 360:	ad 81       	ldd	r26, Y+5	; 0x05
 362:	be 81       	ldd	r27, Y+6	; 0x06
  }
 364:	bc 01       	movw	r22, r24
 366:	cd 01       	movw	r24, r26
 368:	27 96       	adiw	r28, 0x07	; 7
 36a:	0f b6       	in	r0, 0x3f	; 63
 36c:	f8 94       	cli
 36e:	de bf       	out	0x3e, r29	; 62
 370:	0f be       	out	0x3f, r0	; 63
 372:	cd bf       	out	0x3d, r28	; 61
 374:	cf 91       	pop	r28
 376:	df 91       	pop	r29
 378:	08 95       	ret

0000037a <ADS1158>:

/*************************************************************************************/
void  ADS1158(void)    //初始化ADS1256
{
 37a:	df 93       	push	r29
 37c:	cf 93       	push	r28
 37e:	cd b7       	in	r28, 0x3d	; 61
 380:	de b7       	in	r29, 0x3e	; 62
 DDRD&=~(1<<PD3);   //DRDY
 382:	a1 e3       	ldi	r26, 0x31	; 49
 384:	b0 e0       	ldi	r27, 0x00	; 0
 386:	e1 e3       	ldi	r30, 0x31	; 49
 388:	f0 e0       	ldi	r31, 0x00	; 0
 38a:	80 81       	ld	r24, Z
 38c:	87 7f       	andi	r24, 0xF7	; 247
 38e:	8c 93       	st	X, r24
 PORTD|=(1<<PD3);  
 390:	a2 e3       	ldi	r26, 0x32	; 50
 392:	b0 e0       	ldi	r27, 0x00	; 0
 394:	e2 e3       	ldi	r30, 0x32	; 50
 396:	f0 e0       	ldi	r31, 0x00	; 0
 398:	80 81       	ld	r24, Z
 39a:	88 60       	ori	r24, 0x08	; 8
 39c:	8c 93       	st	X, r24
 DDRD|=(1<<PD4);    //START
 39e:	a1 e3       	ldi	r26, 0x31	; 49
 3a0:	b0 e0       	ldi	r27, 0x00	; 0
 3a2:	e1 e3       	ldi	r30, 0x31	; 49
 3a4:	f0 e0       	ldi	r31, 0x00	; 0

⌨️ 快捷键说明

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