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

📄 adcurrent.lss

📁 ADC差分算法
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 15e:	e0 91 67 00 	lds	r30, 0x0067
 162:	f0 91 68 00 	lds	r31, 0x0068
 166:	31 83       	std	Z+1, r19	; 0x01
 168:	20 83       	st	Z, r18
 16a:	0e 94 67 00 	call	0xce <SetADC>
 16e:	06 c0       	rjmp	.+12     	; 0x17c <__vector_14+0x62>
 170:	36 9a       	sbi	0x06, 6	; 6
 172:	80 91 60 00 	lds	r24, 0x0060
 176:	80 5f       	subi	r24, 0xF0	; 240
 178:	80 93 60 00 	sts	0x0060, r24
 17c:	ff 91       	pop	r31
 17e:	ef 91       	pop	r30
 180:	bf 91       	pop	r27
 182:	af 91       	pop	r26
 184:	9f 91       	pop	r25
 186:	8f 91       	pop	r24
 188:	7f 91       	pop	r23
 18a:	6f 91       	pop	r22
 18c:	5f 91       	pop	r21
 18e:	4f 91       	pop	r20
 190:	3f 91       	pop	r19
 192:	2f 91       	pop	r18
 194:	0f 90       	pop	r0
 196:	0f be       	out	0x3f, r0	; 63
 198:	0f 90       	pop	r0
 19a:	1f 90       	pop	r1
 19c:	18 95       	reti

0000019e <PortInit>:
影响的全局变量:无
***************************************************/
void PortInit(void)
{
	PORTA  = 0x00;			//关闭上拉电阻
 19e:	1b ba       	out	0x1b, r1	; 27
	DDRA   = 0x00;			//AD输入
 1a0:	1a ba       	out	0x1a, r1	; 26
	PORTB  = 0x00;
 1a2:	18 ba       	out	0x18, r1	; 24
	DDRB   = 0x00;
 1a4:	17 ba       	out	0x17, r1	; 23
	PORTC  = 0x00;
 1a6:	15 ba       	out	0x15, r1	; 21
	DDRC   = 0xFF;
 1a8:	8f ef       	ldi	r24, 0xFF	; 255
 1aa:	84 bb       	out	0x14, r24	; 20
	PORTD  = 0x00;
 1ac:	12 ba       	out	0x12, r1	; 18
	DDRD   = 0x00;
 1ae:	11 ba       	out	0x11, r1	; 17
	TIMSK  = 0x00;			//清中断允许寄存器
 1b0:	19 be       	out	0x39, r1	; 57
 1b2:	08 95       	ret

000001b4 <TimerInit>:
}

/***************************************************
函数名称:void TimerInit(void)
函数功能:初始化定时时钟,T2,CTC模式,5ms自动重载
输入参数:无
返回参数:无
影响的全局变量:无
***************************************************/
void TimerInit(void)
{
	TCNT2  = 0x00; 
 1b4:	14 bc       	out	0x24, r1	; 36
	OCR2   = 77; 
 1b6:	8d e4       	ldi	r24, 0x4D	; 77
 1b8:	83 bd       	out	0x23, r24	; 35
	TIFR  |= (1<<OCF2);							//清匹配中断标志位
 1ba:	88 b7       	in	r24, 0x38	; 56
 1bc:	80 68       	ori	r24, 0x80	; 128
 1be:	88 bf       	out	0x38, r24	; 56
	TIMSK |= (1<<OCIE2);						//允许匹配中断
 1c0:	89 b7       	in	r24, 0x39	; 57
 1c2:	80 68       	ori	r24, 0x80	; 128
 1c4:	89 bf       	out	0x39, r24	; 57
	TCCR2  = (1<<WGM21)|(1<<CS20)|(1<<CS21)|(1<<CS22);	//1024分频,CTC模式
 1c6:	8f e0       	ldi	r24, 0x0F	; 15
 1c8:	85 bd       	out	0x25, r24	; 37
 1ca:	08 95       	ret

000001cc <__vector_3>:
	/*
		Fi = F_CPU(16000) / (OCR0(77+1) * n(1024) ) = 0.2KHz
		Ti = 1/Fi = 1/0.2 = 5ms
	*/
}

/***************************************************
函数名称:SIGNAL(SIG_OUTPUT_COMPARE2) 
函数功能:定时器匹配中断,5ms定时中断
输入参数:无
返回参数:无
影响的全局变量:刷新各采样间隔和各任务延时以及系统时钟
***************************************************/
SIGNAL(SIG_OUTPUT_COMPARE2) 
{
 1cc:	1f 92       	push	r1
 1ce:	0f 92       	push	r0
 1d0:	0f b6       	in	r0, 0x3f	; 63
 1d2:	0f 92       	push	r0
 1d4:	11 24       	eor	r1, r1
 1d6:	8f 93       	push	r24
 1d8:	9f 93       	push	r25
	if (Timer > 0)				//如果电机运行
 1da:	80 91 69 00 	lds	r24, 0x0069
 1de:	90 91 6a 00 	lds	r25, 0x006A
 1e2:	89 2b       	or	r24, r25
 1e4:	49 f0       	breq	.+18     	; 0x1f8 <__vector_3+0x2c>
	{
		Timer --;				//电机运行时间减1
 1e6:	80 91 69 00 	lds	r24, 0x0069
 1ea:	90 91 6a 00 	lds	r25, 0x006A
 1ee:	01 97       	sbiw	r24, 0x01	; 1
 1f0:	90 93 6a 00 	sts	0x006A, r25
 1f4:	80 93 69 00 	sts	0x0069, r24
 1f8:	9f 91       	pop	r25
 1fa:	8f 91       	pop	r24
 1fc:	0f 90       	pop	r0
 1fe:	0f be       	out	0x3f, r0	; 63
 200:	0f 90       	pop	r0
 202:	1f 90       	pop	r1
 204:	18 95       	reti

00000206 <main>:
	}
}

/***************************************************
函数名称:main()
函数功能:主函数
输入参数:无
返回参数:无
影响的全局变量:无
***************************************************/
int main(void)
{
 206:	cf e5       	ldi	r28, 0x5F	; 95
 208:	d4 e0       	ldi	r29, 0x04	; 4
 20a:	de bf       	out	0x3e, r29	; 62
 20c:	cd bf       	out	0x3d, r28	; 61
    PortInit();
 20e:	0e 94 cf 00 	call	0x19e <PortInit>
    TimerInit();
 212:	0e 94 da 00 	call	0x1b4 <TimerInit>
    ADInit();
 216:	0e 94 47 00 	call	0x8e <ADInit>
    UARTInit();
 21a:	0e 94 63 01 	call	0x2c6 <UARTInit>
    
    PORTC      = (0x01<<4);                 //启动电机2
 21e:	80 e1       	ldi	r24, 0x10	; 16
 220:	85 bb       	out	0x15, r24	; 21
    
    SampleList = 0x02;                      //AD2作为正差分输入
 222:	82 e0       	ldi	r24, 0x02	; 2
 224:	80 93 60 00 	sts	0x0060, r24
/**以下两行是采用中断方式采样,如果采用查询方式进行则不需要这两行**/
	ADCSRA |= (1<<ADIE);				    //开ADC中断
 228:	33 9a       	sbi	0x06, 3	; 6
	SetADC();							    //第一次转换
 22a:	0e 94 67 00 	call	0xce <SetADC>
/******************************************************************/
	sei();
 22e:	78 94       	sei
	
	while(1)
	{
	    Timer = 200;                  //1秒定时,每一秒发送一次数据
 230:	88 ec       	ldi	r24, 0xC8	; 200
 232:	90 e0       	ldi	r25, 0x00	; 0
 234:	90 93 6a 00 	sts	0x006A, r25
 238:	80 93 69 00 	sts	0x0069, r24
	    
	    while (Timer != 0) ;
 23c:	80 91 69 00 	lds	r24, 0x0069
 240:	90 91 6a 00 	lds	r25, 0x006A
 244:	89 2b       	or	r24, r25
 246:	d1 f7       	brne	.-12     	; 0x23c <main+0x36>
/**以下三行是采用查询方式采样,如果采用中断方式进行则不需要这三行***/        
//        Current[2] = ReadVoltage(SampleList+2);
//        Current[1] = ReadVoltage(SampleList+1);
//        Current[0] = ReadVoltage(SampleList);
/*******************************************************************/
        cli();
 248:	f8 94       	cli
        PutByte((uint8_t)(Current[0]>>8));
 24a:	80 91 61 00 	lds	r24, 0x0061
 24e:	90 91 62 00 	lds	r25, 0x0062
 252:	89 2f       	mov	r24, r25
 254:	99 27       	eor	r25, r25
 256:	0e 94 6b 01 	call	0x2d6 <PutByte>
        PutByte((uint8_t)(Current[0]));
 25a:	80 91 61 00 	lds	r24, 0x0061
 25e:	90 91 62 00 	lds	r25, 0x0062
 262:	0e 94 6b 01 	call	0x2d6 <PutByte>
        PutByte((uint8_t)(Current[1]>>8));
 266:	80 91 63 00 	lds	r24, 0x0063
 26a:	90 91 64 00 	lds	r25, 0x0064
 26e:	89 2f       	mov	r24, r25
 270:	99 27       	eor	r25, r25
 272:	0e 94 6b 01 	call	0x2d6 <PutByte>
        PutByte((uint8_t)(Current[1]));
 276:	80 91 63 00 	lds	r24, 0x0063
 27a:	90 91 64 00 	lds	r25, 0x0064
 27e:	0e 94 6b 01 	call	0x2d6 <PutByte>
        PutByte((uint8_t)(Current[2]>>8));
 282:	80 91 65 00 	lds	r24, 0x0065
 286:	90 91 66 00 	lds	r25, 0x0066
 28a:	89 2f       	mov	r24, r25
 28c:	99 27       	eor	r25, r25
 28e:	0e 94 6b 01 	call	0x2d6 <PutByte>
        PutByte((uint8_t)(Current[2]));
 292:	80 91 65 00 	lds	r24, 0x0065
 296:	90 91 66 00 	lds	r25, 0x0066
 29a:	0e 94 6b 01 	call	0x2d6 <PutByte>
        PutByte('\r');
 29e:	8d e0       	ldi	r24, 0x0D	; 13
 2a0:	0e 94 6b 01 	call	0x2d6 <PutByte>
        PutByte('\n');
 2a4:	8a e0       	ldi	r24, 0x0A	; 10
 2a6:	0e 94 6b 01 	call	0x2d6 <PutByte>
        
        Current[0] = 0;
 2aa:	10 92 62 00 	sts	0x0062, r1
 2ae:	10 92 61 00 	sts	0x0061, r1
        Current[1] = 0;
 2b2:	10 92 64 00 	sts	0x0064, r1
 2b6:	10 92 63 00 	sts	0x0063, r1
        Current[2] = 0;
 2ba:	10 92 66 00 	sts	0x0066, r1
 2be:	10 92 65 00 	sts	0x0065, r1
        
        sei();
 2c2:	78 94       	sei
 2c4:	b5 cf       	rjmp	.-150    	; 0x230 <main+0x2a>

000002c6 <UARTInit>:
影响的全局变量:无
***************************************************/
void UARTInit(void)
{ 
	UBRRL  = 25;
 2c6:	89 e1       	ldi	r24, 0x19	; 25
 2c8:	89 b9       	out	0x09, r24	; 9
	UCSRA  = 0x00;
 2ca:	1b b8       	out	0x0b, r1	; 11
	UCSRC  = (1<<URSEL)|(1<<UPM1)|(1<<UPM0)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);		
 2cc:	8e eb       	ldi	r24, 0xBE	; 190
 2ce:	80 bd       	out	0x20, r24	; 32
	UCSRB  = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);      //收发允许,允许接收中断
 2d0:	88 e9       	ldi	r24, 0x98	; 152
 2d2:	8a b9       	out	0x0a, r24	; 10
 2d4:	08 95       	ret

000002d6 <PutByte>:
}
/***************************************************
函数名称:串口发送函数
函数功能:
输入参数:要发送的字节
返回参数:无
影响的全局变量:无
***************************************************/
void PutByte(uint8_t c)				//UART发送一个8位的数据
{
	while (!(UCSRA&(1<<UDRE)));
 2d6:	5d 9b       	sbis	0x0b, 5	; 11
 2d8:	fe cf       	rjmp	.-4      	; 0x2d6 <PutByte>
    UDR=c;
 2da:	8c b9       	out	0x0c, r24	; 12
 2dc:	08 95       	ret

000002de <GetByte>:
}
/***************************************************	
函数名称:串口接收函数
函数功能:
输入参数:无
返回参数:接收到的数据,一个byte
影响的全局变量:无
***************************************************/
uint8_t GetByte(void)				  //UART接收一个byte的数据
{
	while (!(UCSRA&(1<<RXC)));
 2de:	5f 9b       	sbis	0x0b, 7	; 11
 2e0:	fe cf       	rjmp	.-4      	; 0x2de <GetByte>
	return UDR;
 2e2:	8c b1       	in	r24, 0x0c	; 12
}
 2e4:	99 27       	eor	r25, r25
 2e6:	08 95       	ret

⌨️ 快捷键说明

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