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

📄 main.lss

📁 16位的AD芯片的ADS1158的驱动程序。
💻 LSS
📖 第 1 页 / 共 3 页
字号:
 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
     PORTB&=~(1<<PB1);      //SPI的CS=0使能
 206:	a8 e3       	ldi	r26, 0x38	; 56
 208:	b0 e0       	ldi	r27, 0x00	; 0
 20a:	e8 e3       	ldi	r30, 0x38	; 56
 20c:	f0 e0       	ldi	r31, 0x00	; 0
 20e:	80 81       	ld	r24, Z
 210:	8d 7f       	andi	r24, 0xFD	; 253
 212:	8c 93       	st	X, r24
     //while((PIND&0X8)!=0); //DRDY信号高时才能写寄存器   
     ads_senddata(0x60+reg);//选择写入寄存器      
 214:	89 81       	ldd	r24, Y+1	; 0x01
 216:	80 5a       	subi	r24, 0xA0	; 160
 218:	d7 df       	rcall	.-82     	; 0x1c8 <ads_senddata>
     ads_senddata(data);    //写入1个寄存器数据
 21a:	8a 81       	ldd	r24, Y+2	; 0x02
 21c:	d5 df       	rcall	.-86     	; 0x1c8 <ads_senddata>
     PORTB|=(1<<PB1);       //SPI的CS=1,停止
 21e:	a8 e3       	ldi	r26, 0x38	; 56
 220:	b0 e0       	ldi	r27, 0x00	; 0
 222:	e8 e3       	ldi	r30, 0x38	; 56
 224:	f0 e0       	ldi	r31, 0x00	; 0
 226:	80 81       	ld	r24, Z
 228:	82 60       	ori	r24, 0x02	; 2
 22a:	8c 93       	st	X, r24
     delay_us(100);          //挺时1uS     
 22c:	84 e6       	ldi	r24, 0x64	; 100
 22e:	9b df       	rcall	.-202    	; 0x166 <delay_us>
}
 230:	0f 90       	pop	r0
 232:	0f 90       	pop	r0
 234:	cf 91       	pop	r28
 236:	df 91       	pop	r29
 238:	08 95       	ret

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

00000318 <ads_sum>:

/*************************************************************************************/
unsigned long int ads_sum(unsigned char data)//读A/D数据。
  {  
 318:	df 93       	push	r29
 31a:	cf 93       	push	r28
 31c:	00 d0       	rcall	.+0      	; 0x31e <ads_sum+0x6>
 31e:	00 d0       	rcall	.+0      	; 0x320 <ads_sum+0x8>
 320:	0f 92       	push	r0
 322:	cd b7       	in	r28, 0x3d	; 61
 324:	de b7       	in	r29, 0x3e	; 62
 326:	8d 83       	std	Y+5, r24	; 0x05
     unsigned long int aa=0;
 328:	19 82       	std	Y+1, r1	; 0x01
 32a:	1a 82       	std	Y+2, r1	; 0x02
 32c:	1b 82       	std	Y+3, r1	; 0x03
 32e:	1c 82       	std	Y+4, r1	; 0x04
     ad_write(01,0x80+data);     //第几通道为选通
 330:	8d 81       	ldd	r24, Y+5	; 0x05
 332:	80 58       	subi	r24, 0x80	; 128
 334:	68 2f       	mov	r22, r24
 336:	81 e0       	ldi	r24, 0x01	; 1
 338:	5f df       	rcall	.-322    	; 0x1f8 <ad_write>
	 ads_senddata(0xf0);         //自校准
 33a:	80 ef       	ldi	r24, 0xF0	; 240
 33c:	45 df       	rcall	.-374    	; 0x1c8 <ads_senddata>
	 aa=ad_read();               //读24位A/D数据。
 33e:	7d df       	rcall	.-262    	; 0x23a <ad_read>
 340:	dc 01       	movw	r26, r24
 342:	cb 01       	movw	r24, r22
 344:	89 83       	std	Y+1, r24	; 0x01
 346:	9a 83       	std	Y+2, r25	; 0x02
 348:	ab 83       	std	Y+3, r26	; 0x03
 34a:	bc 83       	std	Y+4, r27	; 0x04
	 return aa;
 34c:	89 81       	ldd	r24, Y+1	; 0x01
 34e:	9a 81       	ldd	r25, Y+2	; 0x02
 350:	ab 81       	ldd	r26, Y+3	; 0x03
 352:	bc 81       	ldd	r27, Y+4	; 0x04
  }
 354:	bc 01       	movw	r22, r24
 356:	cd 01       	movw	r24, r26
 358:	0f 90       	pop	r0
 35a:	0f 90       	pop	r0
 35c:	0f 90       	pop	r0
 35e:	0f 90       	pop	r0
 360:	0f 90       	pop	r0
 362:	cf 91       	pop	r28
 364:	df 91       	pop	r29
 366:	08 95       	ret

00000368 <ADS1158>:

/*************************************************************************************/
void  ADS1158(void)    //初始化ADS1256
{
 368:	df 93       	push	r29
 36a:	cf 93       	push	r28
 36c:	cd b7       	in	r28, 0x3d	; 61
 36e:	de b7       	in	r29, 0x3e	; 62
 DDRD&=~(1<<PD3);   //DRDY
 370:	a1 e3       	ldi	r26, 0x31	; 49
 372:	b0 e0       	ldi	r27, 0x00	; 0
 374:	e1 e3       	ldi	r30, 0x31	; 49
 376:	f0 e0       	ldi	r31, 0x00	; 0
 378:	80 81       	ld	r24, Z
 37a:	87 7f       	andi	r24, 0xF7	; 247
 37c:	8c 93       	st	X, r24
 PORTD|=(1<<PD3);  
 37e:	a2 e3       	ldi	r26, 0x32	; 50
 380:	b0 e0       	ldi	r27, 0x00	; 0
 382:	e2 e3       	ldi	r30, 0x32	; 50
 384:	f0 e0       	ldi	r31, 0x00	; 0
 386:	80 81       	ld	r24, Z
 388:	88 60       	ori	r24, 0x08	; 8
 38a:	8c 93       	st	X, r24
 DDRD|=(1<<PD4);    //START
 38c:	a1 e3       	ldi	r26, 0x31	; 49
 38e:	b0 e0       	ldi	r27, 0x00	; 0
 390:	e1 e3       	ldi	r30, 0x31	; 49
 392:	f0 e0       	ldi	r31, 0x00	; 0
 394:	80 81       	ld	r24, Z
 396:	80 61       	ori	r24, 0x10	; 16
 398:	8c 93       	st	X, r24
 PORTD&=~(1<<PD4);  
 39a:	a2 e3       	ldi	r26, 0x32	; 50
 39c:	b0 e0       	ldi	r27, 0x00	; 0
 39e:	e2 e3       	ldi	r30, 0x32	; 50
 3a0:	f0 e0       	ldi	r31, 0x00	; 0
 3a2:	80 81       	ld	r24, Z
 3a4:	8f 7e       	andi	r24, 0xEF	; 239
 3a6:	8c 93       	st	X, r24
 PORTB&=~(1<<PB2);     //复位ADS1256
 3a8:	a8 e3       	ldi	r26, 0x38	; 56
 3aa:	b0 e0       	ldi	r27, 0x00	; 0
 3ac:	e8 e3       	ldi	r30, 0x38	; 56
 3ae:	f0 e0       	ldi	r31, 0x00	; 0
 3b0:	80 81       	ld	r24, Z
 3b2:	8b 7f       	andi	r24, 0xFB	; 251
 3b4:	8c 93       	st	X, r24
 PORTB|=1<<PB2;
 3b6:	a8 e3       	ldi	r26, 0x38	; 56
 3b8:	b0 e0       	ldi	r27, 0x00	; 0
 3ba:	e8 e3       	ldi	r30, 0x38	; 56
 3bc:	f0 e0       	ldi	r31, 0x00	; 0
 3be:	80 81       	ld	r24, Z
 3c0:	84 60       	ori	r24, 0x04	; 4
 3c2:	8c 93       	st	X, r24
 ad_write(0,0x02);     
 3c4:	62 e0       	ldi	r22, 0x02	; 2
 3c6:	80 e0       	ldi	r24, 0x00	; 0
 3c8:	17 df       	rcall	.-466    	; 0x1f8 <ad_write>
 ad_write(1,0x03);     
 3ca:	63 e0       	ldi	r22, 0x03	; 3
 3cc:	81 e0       	ldi	r24, 0x01	; 1
 3ce:	14 df       	rcall	.-472    	; 0x1f8 <ad_write>
 ad_write(2,0x00);     
 3d0:	60 e0       	ldi	r22, 0x00	; 0
 3d2:	82 e0       	ldi	r24, 0x02	; 2
 3d4:	11 df       	rcall	.-478    	; 0x1f8 <ad_write>

⌨️ 快捷键说明

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