main.lss

来自「avr当中的一个简单的温度测试程序和学习avr中的一些笔记」· LSS 代码 · 共 975 行 · 第 1/3 页

LSS
975
字号
 116:	80 93 8e 00 	sts	0x008E, r24
 11a:	25 ea       	ldi	r18, 0xA5	; 165
 11c:	31 e0       	ldi	r19, 0x01	; 1
 11e:	e3 e0       	ldi	r30, 0x03	; 3
 120:	f0 e0       	ldi	r31, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 122:	cf 01       	movw	r24, r30
 124:	01 97       	sbiw	r24, 0x01	; 1
 126:	f1 f7       	brne	.-4      	; 0x124 <DS18B20_Init+0x52>
 128:	21 50       	subi	r18, 0x01	; 1
 12a:	30 40       	sbci	r19, 0x00	; 0
 12c:	8f ef       	ldi	r24, 0xFF	; 255
 12e:	2f 3f       	cpi	r18, 0xFF	; 255
 130:	38 07       	cpc	r19, r24
 132:	b9 f7       	brne	.-18     	; 0x122 <DS18B20_Init+0x50>
 134:	80 91 8e 00 	lds	r24, 0x008E
 138:	99 27       	eor	r25, r25
 13a:	08 95       	ret

0000013c <Read_DS18B20>:
 13c:	50 e0       	ldi	r21, 0x00	; 0
 13e:	40 e0       	ldi	r20, 0x00	; 0
 140:	e3 e0       	ldi	r30, 0x03	; 3
 142:	f0 e0       	ldi	r31, 0x00	; 0
 144:	d2 9a       	sbi	0x1a, 2	; 26
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 146:	cf 01       	movw	r24, r30
 148:	01 97       	sbiw	r24, 0x01	; 1
 14a:	f1 f7       	brne	.-4      	; 0x148 <Read_DS18B20+0xc>
 14c:	cf 01       	movw	r24, r30
 14e:	01 97       	sbiw	r24, 0x01	; 1
 150:	f1 f7       	brne	.-4      	; 0x14e <Read_DS18B20+0x12>
 152:	d2 98       	cbi	0x1a, 2	; 26
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 154:	cf 01       	movw	r24, r30
 156:	01 97       	sbiw	r24, 0x01	; 1
 158:	f1 f7       	brne	.-4      	; 0x156 <Read_DS18B20+0x1a>
 15a:	cf 01       	movw	r24, r30
 15c:	01 97       	sbiw	r24, 0x01	; 1
 15e:	f1 f7       	brne	.-4      	; 0x15c <Read_DS18B20+0x20>
 160:	cf 01       	movw	r24, r30
 162:	01 97       	sbiw	r24, 0x01	; 1
 164:	f1 f7       	brne	.-4      	; 0x162 <Read_DS18B20+0x26>
 166:	cf 01       	movw	r24, r30
 168:	01 97       	sbiw	r24, 0x01	; 1
 16a:	f1 f7       	brne	.-4      	; 0x168 <Read_DS18B20+0x2c>
 16c:	46 95       	lsr	r20
 16e:	ca 99       	sbic	0x19, 2	; 25
 170:	40 68       	ori	r20, 0x80	; 128
 172:	2d e3       	ldi	r18, 0x3D	; 61
 174:	30 e0       	ldi	r19, 0x00	; 0
 176:	a3 e0       	ldi	r26, 0x03	; 3
 178:	b0 e0       	ldi	r27, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 17a:	cd 01       	movw	r24, r26
 17c:	01 97       	sbiw	r24, 0x01	; 1
 17e:	f1 f7       	brne	.-4      	; 0x17c <Read_DS18B20+0x40>
 180:	21 50       	subi	r18, 0x01	; 1
 182:	30 40       	sbci	r19, 0x00	; 0
 184:	8f ef       	ldi	r24, 0xFF	; 255
 186:	2f 3f       	cpi	r18, 0xFF	; 255
 188:	38 07       	cpc	r19, r24
 18a:	b9 f7       	brne	.-18     	; 0x17a <Read_DS18B20+0x3e>
 18c:	5f 5f       	subi	r21, 0xFF	; 255
 18e:	58 30       	cpi	r21, 0x08	; 8
 190:	c9 f6       	brne	.-78     	; 0x144 <Read_DS18B20+0x8>
 192:	84 2f       	mov	r24, r20
 194:	99 27       	eor	r25, r25
 196:	08 95       	ret

00000198 <Write_DS18B20>:
 198:	48 2f       	mov	r20, r24
 19a:	50 e0       	ldi	r21, 0x00	; 0
 19c:	a3 e0       	ldi	r26, 0x03	; 3
 19e:	b0 e0       	ldi	r27, 0x00	; 0
 1a0:	d2 9a       	sbi	0x1a, 2	; 26
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 1a2:	cd 01       	movw	r24, r26
 1a4:	01 97       	sbiw	r24, 0x01	; 1
 1a6:	f1 f7       	brne	.-4      	; 0x1a4 <Write_DS18B20+0xc>
 1a8:	cd 01       	movw	r24, r26
 1aa:	01 97       	sbiw	r24, 0x01	; 1
 1ac:	f1 f7       	brne	.-4      	; 0x1aa <Write_DS18B20+0x12>
 1ae:	40 ff       	sbrs	r20, 0
 1b0:	02 c0       	rjmp	.+4      	; 0x1b6 <Write_DS18B20+0x1e>
 1b2:	d2 98       	cbi	0x1a, 2	; 26
 1b4:	01 c0       	rjmp	.+2      	; 0x1b8 <Write_DS18B20+0x20>
 1b6:	d2 9a       	sbi	0x1a, 2	; 26
 1b8:	2d e3       	ldi	r18, 0x3D	; 61
 1ba:	30 e0       	ldi	r19, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 1bc:	e3 e0       	ldi	r30, 0x03	; 3
 1be:	f0 e0       	ldi	r31, 0x00	; 0
 1c0:	cf 01       	movw	r24, r30
 1c2:	01 97       	sbiw	r24, 0x01	; 1
 1c4:	f1 f7       	brne	.-4      	; 0x1c2 <Write_DS18B20+0x2a>
 1c6:	21 50       	subi	r18, 0x01	; 1
 1c8:	30 40       	sbci	r19, 0x00	; 0
 1ca:	8f ef       	ldi	r24, 0xFF	; 255
 1cc:	2f 3f       	cpi	r18, 0xFF	; 255
 1ce:	38 07       	cpc	r19, r24
 1d0:	a9 f7       	brne	.-22     	; 0x1bc <Write_DS18B20+0x24>
 1d2:	d2 98       	cbi	0x1a, 2	; 26
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 1d4:	cf 01       	movw	r24, r30
 1d6:	01 97       	sbiw	r24, 0x01	; 1
 1d8:	f1 f7       	brne	.-4      	; 0x1d6 <Write_DS18B20+0x3e>
 1da:	31 97       	sbiw	r30, 0x01	; 1
 1dc:	f1 f7       	brne	.-4      	; 0x1da <Write_DS18B20+0x42>
 1de:	5f 5f       	subi	r21, 0xFF	; 255
 1e0:	58 30       	cpi	r21, 0x08	; 8
 1e2:	11 f0       	breq	.+4      	; 0x1e8 <Write_DS18B20+0x50>
 1e4:	46 95       	lsr	r20
 1e6:	dc cf       	rjmp	.-72     	; 0x1a0 <Write_DS18B20+0x8>
 1e8:	08 95       	ret

000001ea <Delayus>:
 1ea:	9c 01       	movw	r18, r24
 1ec:	e3 e0       	ldi	r30, 0x03	; 3
 1ee:	f0 e0       	ldi	r31, 0x00	; 0
 1f0:	03 c0       	rjmp	.+6      	; 0x1f8 <Delayus+0xe>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 1f2:	cf 01       	movw	r24, r30
 1f4:	01 97       	sbiw	r24, 0x01	; 1
 1f6:	f1 f7       	brne	.-4      	; 0x1f4 <Delayus+0xa>
 1f8:	21 50       	subi	r18, 0x01	; 1
 1fa:	30 40       	sbci	r19, 0x00	; 0
 1fc:	8f ef       	ldi	r24, 0xFF	; 255
 1fe:	2f 3f       	cpi	r18, 0xFF	; 255
 200:	38 07       	cpc	r19, r24
 202:	b9 f7       	brne	.-18     	; 0x1f2 <Delayus+0x8>
 204:	08 95       	ret

00000206 <Delayms>:
	{
		_delay_loop_2(3);      //_delay_loop_2(1)是延时4个时钟周期,参数为3则延时12
		           //个时钟周期,本实验用12M晶体,则12个时钟周期为12/12=1us
    }
}

//ms级别的延时函数
void Delayms(unsigned int lms)
{
 206:	9c 01       	movw	r18, r24
 208:	0d c0       	rjmp	.+26     	; 0x224 <Delayms+0x1e>
	while(lms--)
 20a:	47 ee       	ldi	r20, 0xE7	; 231
 20c:	53 e0       	ldi	r21, 0x03	; 3
 20e:	e3 e0       	ldi	r30, 0x03	; 3
 210:	f0 e0       	ldi	r31, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 212:	cf 01       	movw	r24, r30
 214:	01 97       	sbiw	r24, 0x01	; 1
 216:	f1 f7       	brne	.-4      	; 0x214 <Delayms+0xe>
 218:	41 50       	subi	r20, 0x01	; 1
 21a:	50 40       	sbci	r21, 0x00	; 0
 21c:	8f ef       	ldi	r24, 0xFF	; 255
 21e:	4f 3f       	cpi	r20, 0xFF	; 255
 220:	58 07       	cpc	r21, r24
 222:	b9 f7       	brne	.-18     	; 0x212 <Delayms+0xc>
 224:	21 50       	subi	r18, 0x01	; 1
 226:	30 40       	sbci	r19, 0x00	; 0
 228:	8f ef       	ldi	r24, 0xFF	; 255
 22a:	2f 3f       	cpi	r18, 0xFF	; 255
 22c:	38 07       	cpc	r19, r24
 22e:	69 f7       	brne	.-38     	; 0x20a <Delayms+0x4>
 230:	08 95       	ret

00000232 <DS18B20_StartConvert>:
	{
		Delayus(1000);        //延时1ms
    }
}

//启动温度转换
void DS18B20_StartConvert(void)   
{
 232:	1f 93       	push	r17
	unsigned char i;
	
	DS18B20_Init();     //初始化DS18B20
 234:	0e 94 69 00 	call	0xd2	; 0xd2 <DS18B20_Init>
		
	Write_DS18B20(DS18B20_SKIP_ROM);  //发送ROM指令,跳过ROM匹配
 238:	8c ec       	ldi	r24, 0xCC	; 204
 23a:	0e 94 cc 00 	call	0x198	; 0x198 <Write_DS18B20>
		
	Write_DS18B20(DS18B20_CONVERT_RAM);  //	发送温度转换命令	
 23e:	84 e4       	ldi	r24, 0x44	; 68
 240:	0e 94 cc 00 	call	0x198	; 0x198 <Write_DS18B20>
 244:	10 e0       	ldi	r17, 0x00	; 0
		
	for(i=0;i<50;i++)      //延时1S,等转换完成
	{
		Delayms(20);
 246:	84 e1       	ldi	r24, 0x14	; 20
 248:	90 e0       	ldi	r25, 0x00	; 0
 24a:	0e 94 03 01 	call	0x206	; 0x206 <Delayms>
 24e:	1f 5f       	subi	r17, 0xFF	; 255
 250:	12 33       	cpi	r17, 0x32	; 50
 252:	c9 f7       	brne	.-14     	; 0x246 <DS18B20_StartConvert+0x14>
 254:	1f 91       	pop	r17
 256:	08 95       	ret

00000258 <DS18B20_GetConvert>:
	}		
}

//获得温度转换结果
void DS18B20_GetConvert(void)
{
 258:	0e 94 69 00 	call	0xd2	; 0xd2 <DS18B20_Init>
	DS18B20_Init();    //初始化DSDS18B20
		
	Write_DS18B20(DS18B20_SKIP_ROM);  //发送ROM指令,跳过ROM匹配
 25c:	8c ec       	ldi	r24, 0xCC	; 204
 25e:	0e 94 cc 00 	call	0x198	; 0x198 <Write_DS18B20>
		
	Write_DS18B20(DS18B20_READ_RAM);  //发送读取暂存器指令
 262:	8e eb       	ldi	r24, 0xBE	; 190
 264:	0e 94 cc 00 	call	0x198	; 0x198 <Write_DS18B20>
		
	Temp_L = Read_DS18B20(); //获得温度的低位
 268:	0e 94 9e 00 	call	0x13c	; 0x13c <Read_DS18B20>
 26c:	80 93 86 00 	sts	0x0086, r24
	
	Temp_H = Read_DS18B20(); //获得温度的高位
 270:	0e 94 9e 00 	call	0x13c	; 0x13c <Read_DS18B20>
 274:	80 93 8d 00 	sts	0x008D, r24
 278:	08 95       	ret

0000027a <DS18B20_ReadRAM>:
}   

 // 读取RAM内容
void DS18B20_ReadRAM(void)       
{
 27a:	cf 93       	push	r28
 27c:	df 93       	push	r29
	unsigned char i;
	
	DS18B20_Init();     //初始化DSDS18B20
 27e:	0e 94 69 00 	call	0xd2	; 0xd2 <DS18B20_Init>
	
	Write_DS18B20(DS18B20_SKIP_ROM);  //发送ROM指令,跳过ROM匹配		
 282:	8c ec       	ldi	r24, 0xCC	; 204
 284:	0e 94 cc 00 	call	0x198	; 0x198 <Write_DS18B20>
		
	Write_DS18B20(DS18B20_READ_RAM);  //发送读取暂存器指令
 288:	8e eb       	ldi	r24, 0xBE	; 190
 28a:	0e 94 cc 00 	call	0x198	; 0x198 <Write_DS18B20>
 28e:	cf e8       	ldi	r28, 0x8F	; 143
 290:	d0 e0       	ldi	r29, 0x00	; 0
	
	for(i = 0;i < 9;i++)
	{
		ReadRAM_Buff[i] = Read_DS18B20();
 292:	0e 94 9e 00 	call	0x13c	; 0x13c <Read_DS18B20>
 296:	89 93       	st	Y+, r24
 298:	80 e0       	ldi	r24, 0x00	; 0
 29a:	c8 39       	cpi	r28, 0x98	; 152
 29c:	d8 07       	cpc	r29, r24
 29e:	c9 f7       	brne	.-14     	; 0x292 <DS18B20_ReadRAM+0x18>
 2a0:	df 91       	pop	r29
 2a2:	cf 91       	pop	r28
 2a4:	08 95       	ret

000002a6 <DS18B20_WriteRAM>:
	}	
}

//写温度上下限和配置寄存器到RAM
void DS18B20_WriteRAM(void)       
{
 2a6:	0e 94 69 00 	call	0xd2	; 0xd2 <DS18B20_Init>
	DS18B20_Init();     //初始化DSDS18B20
		
	Write_DS18B20(DS18B20_SKIP_ROM);  //发送ROM指令,跳过ROM匹配
 2aa:	8c ec       	ldi	r24, 0xCC	; 204
 2ac:	0e 94 cc 00 	call	0x198	; 0x198 <Write_DS18B20>
	
	Write_DS18B20(DS18B20_WRITE_RAM);  //	发送写RAM命令	
 2b0:	8e e4       	ldi	r24, 0x4E	; 78
 2b2:	0e 94 cc 00 	call	0x198	; 0x198 <Write_DS18B20>
		
	Write_DS18B20(ThrH);        //写温度报警上限值
 2b6:	80 91 88 00 	lds	r24, 0x0088
 2ba:	0e 94 cc 00 	call	0x198	; 0x198 <Write_DS18B20>
	Write_DS18B20(ThrL);        //写温度报警下限值

⌨️ 快捷键说明

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