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

📄 main.lss

📁 avr NRF驱动 编程.里面有NRF驱动说明.新手可以参考.
💻 LSS
📖 第 1 页 / 共 4 页
字号:
		
	//		初始化PWM		//
	//==============================================================//
	//TCCR1A 	7	6	5	4	3	2	1	0//
	//			7:6通道A比较输出模式	快速PWM模式 00普通断口 01取反 10匹配清零输出TOP恢复 11。。。
	//			5:4通道B比较输出模式
	//			3:2AB通道强制匹配输出
	//			1:0 WGM11 WGM10	控制序列与TCCR1B中的 3:2 组合
	
	//模式	WGM13	WGM12	WGM11	WGM10	定时器/计数器工作模式	计数器上限TOP	//
	//0		0		0		0		0		普通模式				0XFFFF
	//1		0		0		0		1		8位相位修正PWM			0XFF
	//2		0		1		0		0		TCT						OCR1A
	//		0		1		0		1		8位快速PWM				0XFF
	//		1		1		1		0		快速PWM					ICR1
	TCCR1A=226;//242; //AB输出方式为匹配拉高  非匹配强制方式  快速PWM方式ICR1定义方式
 18a:	82 ee       	ldi	r24, 0xE2	; 226
 18c:	80 93 80 00 	sts	0x0080, r24
	TCCR1B=25;	//AB输出工作于快速PWM方式ICR1定义 时钟源S/1
 190:	89 e1       	ldi	r24, 0x19	; 25
 192:	80 93 81 00 	sts	0x0081, r24
	ICR1=80;			//定义TOP数值 80=100KHZ 效率达到98%
 196:	80 e5       	ldi	r24, 0x50	; 80
 198:	90 e0       	ldi	r25, 0x00	; 0
 19a:	90 93 87 00 	sts	0x0087, r25
 19e:	80 93 86 00 	sts	0x0086, r24
	OCR1A=80;//l40 80=0
 1a2:	90 93 89 00 	sts	0x0089, r25
 1a6:	80 93 88 00 	sts	0x0088, r24
	OCR1B=0;//h38	0=0
 1aa:	10 92 8b 00 	sts	0x008B, r1
 1ae:	10 92 8a 00 	sts	0x008A, r1
	
	
	
	//===================//初始化AD转换器
	
	ADMUX=0B11000000;	//AD工作于1.1V基准电压状态 同时设定AD0状态 数据是右对齐方式
 1b2:	80 ec       	ldi	r24, 0xC0	; 192
 1b4:	80 93 7c 00 	sts	0x007C, r24
	//BIT 4-0 决定选择的AD位 0-7 代表AD0-AD7
	
	ADCSRA=0B11000010;	//启动AD,进入转换方式 工作于非中断方式 分频为S/4
 1b8:	82 ec       	ldi	r24, 0xC2	; 194
 1ba:	80 93 7a 00 	sts	0x007A, r24
	//BIT6为转换完成标志 通过查询而进行读取 写1开始进行转换 变成0标志完成转变
	//BIT4为转换完成标志 通过查询而进行读取  变成1表示完成变换 须用软件写1来完成清除标志
	
	
	//初始化定时器T2
	//=======================================================//
//	TCCR2=7;     //T2 1024分频
//	TCNT0=55;  		// 1/20s
//	TIMSK=1<<6;   //准许T2中断bit6
	

	
/*
	//初始化
	UCSRB=216; //允许串口发送和接收,并响应接收完成中断
	UBRRL= 103; //设置串口波特率为4800 
	UCSRC= ((1<<URSEL)+(1<<UCSZ1)+(1<<UCSZ0)); //帧结构为8位数据+1位stop位
*/
    //初始化T0
	TCCR0B=5;     //TO 1024分频
 1be:	85 e0       	ldi	r24, 0x05	; 5
 1c0:	85 bd       	out	0x25, r24	; 37
	TCNT0=78;  // 
 1c2:	8e e4       	ldi	r24, 0x4E	; 78
 1c4:	86 bd       	out	0x26, r24	; 38
	TIMSK0|=1;   //准许TO中断
 1c6:	80 91 6e 00 	lds	r24, 0x006E
 1ca:	81 60       	ori	r24, 0x01	; 1
 1cc:	80 93 6e 00 	sts	0x006E, r24
	
	SREG|=1<<7;
 1d0:	8f b7       	in	r24, 0x3f	; 63
 1d2:	80 68       	ori	r24, 0x80	; 128
 1d4:	8f bf       	out	0x3f, r24	; 63
 1d6:	08 95       	ret

000001d8 <pwmjia>:
}


unsigned int ADDATA[5];

void pwmjia(void)
{

if(OCR1B<75)
 1d8:	80 91 8a 00 	lds	r24, 0x008A
 1dc:	90 91 8b 00 	lds	r25, 0x008B
 1e0:	8b 34       	cpi	r24, 0x4B	; 75
 1e2:	91 05       	cpc	r25, r1
 1e4:	30 f4       	brcc	.+12     	; 0x1f2 <pwmjia+0x1a>
OCR1B+=1;
 1e6:	80 91 8a 00 	lds	r24, 0x008A
 1ea:	90 91 8b 00 	lds	r25, 0x008B
 1ee:	01 96       	adiw	r24, 0x01	; 1
 1f0:	02 c0       	rjmp	.+4      	; 0x1f6 <pwmjia+0x1e>
else
OCR1B=75;
 1f2:	8b e4       	ldi	r24, 0x4B	; 75
 1f4:	90 e0       	ldi	r25, 0x00	; 0
 1f6:	90 93 8b 00 	sts	0x008B, r25
 1fa:	80 93 8a 00 	sts	0x008A, r24

if(OCR1B>10)
 1fe:	80 91 8a 00 	lds	r24, 0x008A
 202:	90 91 8b 00 	lds	r25, 0x008B
 206:	0b 97       	sbiw	r24, 0x0b	; 11
 208:	30 f0       	brcs	.+12     	; 0x216 <pwmjia+0x3e>
OCR1A=OCR1B+2;
 20a:	80 91 8a 00 	lds	r24, 0x008A
 20e:	90 91 8b 00 	lds	r25, 0x008B
 212:	02 96       	adiw	r24, 0x02	; 2
 214:	02 c0       	rjmp	.+4      	; 0x21a <pwmjia+0x42>
else
OCR1A=80;//禁止同步整流
 216:	80 e5       	ldi	r24, 0x50	; 80
 218:	90 e0       	ldi	r25, 0x00	; 0
 21a:	90 93 89 00 	sts	0x0089, r25
 21e:	80 93 88 00 	sts	0x0088, r24
 222:	08 95       	ret

00000224 <pwmjian>:

}



void pwmjian(void)
{

if(OCR1B>4)
 224:	80 91 8a 00 	lds	r24, 0x008A
 228:	90 91 8b 00 	lds	r25, 0x008B
 22c:	05 97       	sbiw	r24, 0x05	; 5
 22e:	50 f0       	brcs	.+20     	; 0x244 <pwmjian+0x20>
OCR1B-=1;
 230:	80 91 8a 00 	lds	r24, 0x008A
 234:	90 91 8b 00 	lds	r25, 0x008B
 238:	01 97       	sbiw	r24, 0x01	; 1
 23a:	90 93 8b 00 	sts	0x008B, r25
 23e:	80 93 8a 00 	sts	0x008A, r24
 242:	04 c0       	rjmp	.+8      	; 0x24c <pwmjian+0x28>
else
OCR1B=0;
 244:	10 92 8b 00 	sts	0x008B, r1
 248:	10 92 8a 00 	sts	0x008A, r1

if(OCR1B>10)
 24c:	80 91 8a 00 	lds	r24, 0x008A
 250:	90 91 8b 00 	lds	r25, 0x008B
 254:	0b 97       	sbiw	r24, 0x0b	; 11
 256:	30 f0       	brcs	.+12     	; 0x264 <pwmjian+0x40>
OCR1A=OCR1B+2;
 258:	80 91 8a 00 	lds	r24, 0x008A
 25c:	90 91 8b 00 	lds	r25, 0x008B
 260:	02 96       	adiw	r24, 0x02	; 2
 262:	02 c0       	rjmp	.+4      	; 0x268 <pwmjian+0x44>
else
OCR1A=80;//禁止同步整流
 264:	80 e5       	ldi	r24, 0x50	; 80
 266:	90 e0       	ldi	r25, 0x00	; 0
 268:	90 93 89 00 	sts	0x0089, r25
 26c:	80 93 88 00 	sts	0x0088, r24
 270:	08 95       	ret

00000272 <shan>:

}


unsigned char shan1=0;
void shan(unsigned char x1,unsigned char x2)//闪烁次数  闪烁间隔总长度
{
 272:	28 2f       	mov	r18, r24
shan1+=1;
 274:	80 91 14 01 	lds	r24, 0x0114
 278:	8f 5f       	subi	r24, 0xFF	; 255
 27a:	80 93 14 01 	sts	0x0114, r24
	if(shan1>=x2)
 27e:	86 17       	cp	r24, r22
 280:	10 f0       	brcs	.+4      	; 0x286 <shan+0x14>
	{shan1=0;
 282:	10 92 14 01 	sts	0x0114, r1
 286:	80 91 14 01 	lds	r24, 0x0114
	}
	
	if(x1==1)	//闪烁一次
 28a:	21 30       	cpi	r18, 0x01	; 1
 28c:	19 f4       	brne	.+6      	; 0x294 <shan+0x22>
	{
		if(shan1==2)
 28e:	82 30       	cpi	r24, 0x02	; 2
 290:	29 f0       	breq	.+10     	; 0x29c <shan+0x2a>
 292:	06 c0       	rjmp	.+12     	; 0x2a0 <shan+0x2e>
		PORTD|=16;
		else
		PORTD&=255-16;
	}
	else
	{
	
		
		if(shan1==2||shan1==4)
 294:	82 30       	cpi	r24, 0x02	; 2
 296:	11 f0       	breq	.+4      	; 0x29c <shan+0x2a>
 298:	84 30       	cpi	r24, 0x04	; 4
 29a:	11 f4       	brne	.+4      	; 0x2a0 <shan+0x2e>
		{
		PORTD|=16;
 29c:	5c 9a       	sbi	0x0b, 4	; 11
 29e:	08 95       	ret
		}
		else
		{
		PORTD&=255-16;
 2a0:	5c 98       	cbi	0x0b, 4	; 11
 2a2:	08 95       	ret

000002a4 <fudian>:
		}
	}

}


int fudian(unsigned int x)
{
 2a4:	0f 93       	push	r16
 2a6:	1f 93       	push	r17
 2a8:	8c 01       	movw	r16, r24
return x*37.236;
 2aa:	c8 01       	movw	r24, r16
 2ac:	aa 27       	eor	r26, r26
 2ae:	97 fd       	sbrc	r25, 7
 2b0:	a0 95       	com	r26
 2b2:	ba 2f       	mov	r27, r26
 2b4:	bc 01       	movw	r22, r24
 2b6:	cd 01       	movw	r24, r26
 2b8:	09 d2       	rcall	.+1042   	; 0x6cc <__floatsisf>
 2ba:	17 ff       	sbrs	r17, 7
 2bc:	05 c0       	rjmp	.+10     	; 0x2c8 <fudian+0x24>
 2be:	20 e0       	ldi	r18, 0x00	; 0
 2c0:	30 e0       	ldi	r19, 0x00	; 0
 2c2:	40 e8       	ldi	r20, 0x80	; 128
 2c4:	57 e4       	ldi	r21, 0x47	; 71
 2c6:	a3 d1       	rcall	.+838    	; 0x60e <__addsf3>
 2c8:	2a ea       	ldi	r18, 0xAA	; 170
 2ca:	31 ef       	ldi	r19, 0xF1	; 241
 2cc:	44 e1       	ldi	r20, 0x14	; 20
 2ce:	52 e4       	ldi	r21, 0x42	; 66
 2d0:	52 d2       	rcall	.+1188   	; 0x776 <__mulsf3>
 2d2:	dc 01       	movw	r26, r24
 2d4:	cb 01       	movw	r24, r22
 2d6:	bc 01       	movw	r22, r24
 2d8:	cd 01       	movw	r24, r26
 2da:	db d1       	rcall	.+950    	; 0x692 <__fixsfsi>
 2dc:	dc 01       	movw	r26, r24
 2de:	cb 01       	movw	r24, r22
 2e0:	1f 91       	pop	r17
 2e2:	0f 91       	pop	r16
 2e4:	08 95       	ret

000002e6 <fuwei>:
}

unsigned int  setvin=210;//原始电压点 从EEPROM中来数据
unsigned int dianyain=210;//跟踪电压点

unsigned int jiange=0,yuandian1i=0,jianhoui=0,jiahoui=0,yuandian2i=0;
		//采样总时间控制 原点电流 -。5电流 加0。5V电压后的电流  原点2电流
		
		unsigned char jieduan=0,jieduan1=0,jieduan2=0,jieduan3=0,jieduan4=0;
		//先采样原点电流  然后采样减电压后的电流 然后采样加电压后的电流 然后再采样原点电流 处理这些电流数据



//复位函数 功能恢复间隔跟踪 间隔一定时间后再次启动跟踪
void fuwei(void)
{
jiange=0;
 2e6:	10 92 13 01 	sts	0x0113, r1
 2ea:	10 92 12 01 	sts	0x0112, r1
jieduan=0;
 2ee:	10 92 09 01 	sts	0x0109, r1
yuandian1i=0;
 2f2:	10 92 11 01 	sts	0x0111, r1
 2f6:	10 92 10 01 	sts	0x0110, r1
yuandian2i=0;
 2fa:	10 92 0b 01 	sts	0x010B, r1
 2fe:	10 92 0a 01 	sts	0x010A, r1
jiahoui=0;
 302:	10 92 0d 01 	sts	0x010D, r1
 306:	10 92 0c 01 	sts	0x010C, r1
jianhoui=0;
 30a:	10 92 0f 01 	sts	0x010F, r1
 30e:	10 92 0e 01 	sts	0x010E, r1
jieduan4=0;
 312:	10 92 05 01 	sts	0x0105, r1
 316:	08 95       	ret

00000318 <chuligz>:


}




//处理跟踪得到的结果  跟踪数据得到最终处理
void chuligz(void)
{
	
	if((jiahoui>jianhoui)&&(jiahoui>yuandian1i))
 318:	20 91 0c 01 	lds	r18, 0x010C
 31c:	30 91 0d 01 	lds	r19, 0x010D
 320:	40 91 0e 01 	lds	r20, 0x010E
 324:	50 91 0f 01 	lds	r21, 0x010F
 328:	42 17       	cp	r20, r18
 32a:	53 07       	cpc	r21, r19
 32c:	68 f4       	brcc	.+26     	; 0x348 <chuligz+0x30>
 32e:	80 91 10 01 	lds	r24, 0x0110
 332:	90 91 11 01 	lds	r25, 0x0111
 336:	82 17       	cp	r24, r18
 338:	93 07       	cpc	r25, r19
 33a:	30 f4       	brcc	.+12     	; 0x348 <chuligz+0x30>
	{//加跟踪成功
	dianyain+=8;
 33c:	80 91 00 01 	lds	r24, 0x0100
 340:	90 91 01 01 	lds	r25, 0x0101
 344:	08 96       	adiw	r24, 0x08	; 8
 346:	0f c0       	rjmp	.+30     	; 0x366 <chuligz+0x4e>
	fuwei();
	jiange=300;//直接等待1S后再次启动跟踪
	
	}
	else
	{
		if((jianhoui>jiahoui)&&(jianhoui>yuandian1i))
 348:	24 17       	cp	r18, r20
 34a:	35 07       	cpc	r19, r21
 34c:	c0 f4       	brcc	.+48     	; 0x37e <chuligz+0x66>
 34e:	80 91 10 01 	lds	r24, 0x0110
 352:	90 91 11 01 	lds	r25, 0x0111
 356:	84 17       	cp	r24, r20
 358:	95 07       	cpc	r25, r21
 35a:	88 f4       	brcc	.+34     	; 0x37e <chuligz+0x66>
		{//减跟踪成功
		dianyain-=8;
 35c:	80 91 00 01 	lds	r24, 0x0100
 360:	90 91 01 01 	lds	r25, 0x0101
 364:	08 97       	sbiw	r24, 0x08	; 8
 366:	90 93 01 01 	sts	0x0101, r25
 36a:	80 93 00 01 	sts	0x0100, r24
		fuwei();
 36e:	bb df       	rcall	.-138    	; 0x2e6 <fuwei>
		jiange=300;//直接等待1S后再次启动跟踪
 370:	8c e2       	ldi	r24, 0x2C	; 44
 372:	91 e0       	ldi	r25, 0x01	; 1
 374:	90 93 13 01 	sts	0x0113, r25
 378:	80 93 12 01 	sts	0x0112, r24
 37c:	08 95       	ret
		}
		else
		{//跟踪都没有成功 等待下次跟踪
		fuwei();
 37e:	b3 df       	rcall	.-154    	; 0x2e6 <fuwei>
 380:	08 95       	ret

00000382 <genzong>:
		}
	
	}




}


//跟踪主 程序  跟踪最大功率点功能
void genzong(void)
{

		jiange+=1;
 382:	80 91 12 01 	lds	r24, 0x0112
 386:	90 91 13 01 	lds	r25, 0x0113
 38a:	01 96       	adiw	r24, 0x01	; 1
 38c:	90 93 13 01 	sts	0x0113, r25
 390:	80 93 12 01 	sts	0x0112, r24
		if(jiange>600)

⌨️ 快捷键说明

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