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

📄 main.lss

📁 用超声波来测量距离
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     2ca:	ff 1f       	adc	r31, r31
     2cc:	eb 5f       	subi	r30, 0xFB	; 251
     2ce:	fe 4f       	sbci	r31, 0xFE	; 254
     2d0:	82 81       	ldd	r24, Z+2	; 0x02
     2d2:	93 81       	ldd	r25, Z+3	; 0x03
     2d4:	00 97       	sbiw	r24, 0x00	; 0
     2d6:	11 f0       	breq	.+4      	; 0x2dc <OSTaskSemPend+0x78>
    return 0;         
  } 
  return 1; 
     2d8:	81 e0       	ldi	r24, 0x01	; 1
     2da:	90 e0       	ldi	r25, 0x00	; 0
     2dc:	df 91       	pop	r29
     2de:	cf 91       	pop	r28
     2e0:	08 95       	ret

000002e2 <OSSemPost>:
} 


/***********************************************************************
** 函数名: OSSemPost() 
** 子函数: 无
** 输  入: Index任务ID
** 输  出: 无
** 功  能: 发送一个信号量,可以从任务或中断发送 
------------------------------------------------------------------------
************************************************************************/
void OSSemPost(unsigned char Index)
{ 
     2e2:	cf 93       	push	r28
     2e4:	df 93       	push	r29
     2e6:	e8 2f       	mov	r30, r24
if(Sem[Index].OSEventType)                  //当要求的信号量是共享型 
     2e8:	99 27       	eor	r25, r25
     2ea:	dc 01       	movw	r26, r24
     2ec:	aa 0f       	add	r26, r26
     2ee:	bb 1f       	adc	r27, r27
     2f0:	a8 0f       	add	r26, r24
     2f2:	b9 1f       	adc	r27, r25
     2f4:	a3 55       	subi	r26, 0x53	; 83
     2f6:	bd 4f       	sbci	r27, 0xFD	; 253
     2f8:	8c 91       	ld	r24, X
     2fa:	ed 01       	movw	r28, r26
     2fc:	9a 81       	ldd	r25, Y+2	; 0x02
     2fe:	88 23       	and	r24, r24
     300:	29 f0       	breq	.+10     	; 0x30c <OSSemPost+0x2a>
  { 
    Sem[Index].OSEventState=0x01;           //使信号量有效 
     302:	81 e0       	ldi	r24, 0x01	; 1
     304:	89 83       	std	Y+1, r24	; 0x01
    OSRdyTbl |=Sem [Index].OSTaskPendTbl;   //使在等待该信号的所有任务就绪 
     306:	29 2a       	or	r2, r25
    Sem[Index].OSTaskPendTbl=0;             //清空所有等待该信号的等待任务 
     308:	1a 82       	std	Y+2, r1	; 0x02
     30a:	33 c0       	rjmp	.+102    	; 0x372 <OSSemPost+0x90>
  }   
  else                                       //当要求的信号量为独占型 
  {       
    unsigned char i; 
    for (i = 0; i < OS_TASKS && !(Sem[Index].OSTaskPendTbl & (0x01<<i));  i++); 
     30c:	48 2f       	mov	r20, r24
     30e:	90 fd       	sbrc	r25, 0
     310:	0e c0       	rjmp	.+28     	; 0x32e <OSSemPost+0x4c>
     312:	4f 5f       	subi	r20, 0xFF	; 255
     314:	44 30       	cpi	r20, 0x04	; 4
     316:	58 f4       	brcc	.+22     	; 0x32e <OSSemPost+0x4c>
     318:	ed 01       	movw	r28, r26
     31a:	8a 81       	ldd	r24, Y+2	; 0x02
     31c:	99 27       	eor	r25, r25
     31e:	04 2e       	mov	r0, r20
     320:	02 c0       	rjmp	.+4      	; 0x326 <OSSemPost+0x44>
     322:	95 95       	asr	r25
     324:	87 95       	ror	r24
     326:	0a 94       	dec	r0
     328:	e2 f7       	brpl	.-8      	; 0x322 <OSSemPost+0x40>
     32a:	80 ff       	sbrs	r24, 0
     32c:	f2 cf       	rjmp	.-28     	; 0x312 <OSSemPost+0x30>
     32e:	8e 2f       	mov	r24, r30
     330:	99 27       	eor	r25, r25
    if(i < OS_TASKS)                          //如果有任务需要 
     332:	44 30       	cpi	r20, 0x04	; 4
     334:	a8 f4       	brcc	.+42     	; 0x360 <OSSemPost+0x7e>
    { 
      Sem[Index].OSTaskPendTbl &= ~(0x01<<i);//从等待表中去除 
     336:	fc 01       	movw	r30, r24
     338:	ee 0f       	add	r30, r30
     33a:	ff 1f       	adc	r31, r31
     33c:	e8 0f       	add	r30, r24
     33e:	f9 1f       	adc	r31, r25
     340:	e3 55       	subi	r30, 0x53	; 83
     342:	fd 4f       	sbci	r31, 0xFD	; 253
     344:	21 e0       	ldi	r18, 0x01	; 1
     346:	30 e0       	ldi	r19, 0x00	; 0
     348:	02 c0       	rjmp	.+4      	; 0x34e <OSSemPost+0x6c>
     34a:	22 0f       	add	r18, r18
     34c:	33 1f       	adc	r19, r19
     34e:	4a 95       	dec	r20
     350:	e2 f7       	brpl	.-8      	; 0x34a <OSSemPost+0x68>
     352:	92 2f       	mov	r25, r18
     354:	90 95       	com	r25
     356:	82 81       	ldd	r24, Z+2	; 0x02
     358:	89 23       	and	r24, r25
     35a:	82 83       	std	Z+2, r24	; 0x02
      OSRdyTbl |= 0x01<<i;                   //任务就绪 
     35c:	22 2a       	or	r2, r18
     35e:	09 c0       	rjmp	.+18     	; 0x372 <OSSemPost+0x90>
    } 
    else 
    { 
      Sem[Index].OSEventState =1;            //使信号量有效
     360:	fc 01       	movw	r30, r24
     362:	ee 0f       	add	r30, r30
     364:	ff 1f       	adc	r31, r31
     366:	e8 0f       	add	r30, r24
     368:	f9 1f       	adc	r31, r25
     36a:	e3 55       	subi	r30, 0x53	; 83
     36c:	fd 4f       	sbci	r31, 0xFD	; 253
     36e:	81 e0       	ldi	r24, 0x01	; 1
     370:	81 83       	std	Z+1, r24	; 0x01
     372:	df 91       	pop	r29
     374:	cf 91       	pop	r28
     376:	08 95       	ret

00000378 <OSTaskSemPost>:
    } 
  } 
} 

/***********************************************************************
** 函数名: OSTaskSemPost() 
** 子函数: 无
** 输  入: Index任务ID
** 输  出: 无
** 功  能: 从任务发送一个信号量,并进行调度
------------------------------------------------------------------------
************************************************************************/
void OSTaskSemPost(unsigned char Index)  
{ 
  OSSemPost(Index); 
     378:	0e 94 71 01 	call	0x2e2 <OSSemPost>
  OSSched();
     37c:	0e 94 76 00 	call	0xec <OSSched>
     380:	08 95       	ret

00000382 <OSSemClean>:
} 

//
//
/***********************************************************************
** 函数名: OSSemClean() 
** 子函数: 无
** 输  入: Index任务ID
** 输  出: 无
** 功  能: 清除一个信号量,只对共享型的有用。 
**         对于独占型的信号量,在任务占用后,就交得不可以用了。  
------------------------------------------------------------------------
************************************************************************/
void OSSemClean(unsigned char Index)
{ 
  Sem[Index].OSEventState =0;          //要求的信号量无效 
     382:	99 27       	eor	r25, r25
     384:	fc 01       	movw	r30, r24
     386:	ee 0f       	add	r30, r30
     388:	ff 1f       	adc	r31, r31
     38a:	e8 0f       	add	r30, r24
     38c:	f9 1f       	adc	r31, r25
     38e:	e3 55       	subi	r30, 0x53	; 83
     390:	fd 4f       	sbci	r31, 0xFD	; 253
     392:	11 82       	std	Z+1, r1	; 0x01
     394:	08 95       	ret

00000396 <TCN0Init>:
} 


/***********************************************
** 函数名: TCN0Init
** 功  能: 初始化定时器0作为时钟节拍 5ms
** 输  入: 无
** 输  出: 无
------------------------------------------------
***********************************************/
void TCN0Init(void)    // 计时器0 
{ 
  TCCR0 = 0; 
     396:	13 be       	out	0x33, r1	; 51
  TCCR0 |= (1<<CS02);  // 256预分频 
     398:	83 b7       	in	r24, 0x33	; 51
     39a:	84 60       	ori	r24, 0x04	; 4
     39c:	83 bf       	out	0x33, r24	; 51
  TIMSK |= (1<<TOIE0); // T0溢出中断允许                   
     39e:	89 b7       	in	r24, 0x39	; 57
     3a0:	81 60       	ori	r24, 0x01	; 1
     3a2:	89 bf       	out	0x39, r24	; 57
  TCNT0 = 100;         // 置计数起始值 
     3a4:	84 e6       	ldi	r24, 0x64	; 100
     3a6:	82 bf       	out	0x32, r24	; 50
     3a8:	08 95       	ret

000003aa <__vector_11>:
} 

/***********************************************
** 函数名: SIGNAL
** 功  能: 时钟节拍中断 5ms
** 输  入: 无
** 输  出: 无
------------------------------------------------
***********************************************/
SIGNAL(SIG_OVERFLOW0) 
{ 
     3aa:	1f 92       	push	r1
     3ac:	0f 92       	push	r0
     3ae:	0f b6       	in	r0, 0x3f	; 63
     3b0:	0f 92       	push	r0
     3b2:	11 24       	eor	r1, r1
     3b4:	2f 93       	push	r18
     3b6:	3f 93       	push	r19
     3b8:	4f 93       	push	r20
     3ba:	5f 93       	push	r21
     3bc:	6f 93       	push	r22
     3be:	7f 93       	push	r23
     3c0:	8f 93       	push	r24
     3c2:	9f 93       	push	r25
     3c4:	af 93       	push	r26
     3c6:	bf 93       	push	r27
     3c8:	ef 93       	push	r30
     3ca:	ff 93       	push	r31
  IntNum++;     //中断嵌套+1 
     3cc:	43 94       	inc	r4
  sei();  //在中断中,重开中断 
     3ce:	78 94       	sei
     3d0:	61 e0       	ldi	r22, 0x01	; 1
     3d2:	70 e0       	ldi	r23, 0x00	; 0
     3d4:	e5 e0       	ldi	r30, 0x05	; 5
     3d6:	f1 e0       	ldi	r31, 0x01	; 1
     3d8:	20 e0       	ldi	r18, 0x00	; 0
     3da:	30 e0       	ldi	r19, 0x00	; 0
     3dc:	43 e0       	ldi	r20, 0x03	; 3
     
  unsigned char i; 
  for(i=0;i<OS_TASKS;i++)        //任务时钟 
  { 
    if(TCB[i].OSWaitTick && TCB[i].OSWaitTick!=0xffff)  
     3de:	82 81       	ldd	r24, Z+2	; 0x02
     3e0:	93 81       	ldd	r25, Z+3	; 0x03
     3e2:	00 97       	sbiw	r24, 0x00	; 0
     3e4:	91 f0       	breq	.+36     	; 0x40a <__vector_11+0x60>
     3e6:	5f ef       	ldi	r21, 0xFF	; 255
     3e8:	8f 3f       	cpi	r24, 0xFF	; 255
     3ea:	95 07       	cpc	r25, r21
     3ec:	71 f0       	breq	.+28     	; 0x40a <__vector_11+0x60>
    { 
      TCB[i].OSWaitTick--; 
     3ee:	01 97       	sbiw	r24, 0x01	; 1
     3f0:	93 83       	std	Z+3, r25	; 0x03
     3f2:	82 83       	std	Z+2, r24	; 0x02
      if(TCB[i].OSWaitTick==0)         //当任务时钟到时,必须是由定时器减时的才行 
     3f4:	89 2b       	or	r24, r25
     3f6:	49 f4       	brne	.+18     	; 0x40a <__vector_11+0x60>
      {   
        OSRdyTbl |= (0x01<<i);     //使任务可以重新运行 
     3f8:	cb 01       	movw	r24, r22
     3fa:	02 2e       	mov	r0, r18
     3fc:	02 c0       	rjmp	.+4      	; 0x402 <__vector_11+0x58>
     3fe:	88 0f       	add	r24, r24
     400:	99 1f       	adc	r25, r25
     402:	0a 94       	dec	r0
     404:	e2 f7       	brpl	.-8      	; 0x3fe <__vector_11+0x54>
     406:	28 2a       	or	r2, r24
        OSCoreState|=0x02;         //要求任务切换的标志位 
     408:	02 60       	ori	r16, 0x02	; 2
     40a:	41 50       	subi	r20, 0x01	; 1
     40c:	2f 5f       	subi	r18, 0xFF	; 255
     40e:	3f 4f       	sbci	r19, 0xFF	; 255
     410:	34 96       	adiw	r30, 0x04	; 4
     412:	47 ff       	sbrs	r20, 7
     414:	e4 cf       	rjmp	.-56     	; 0x3de <__vector_11+0x34>
      } 
    } 
  } 
  TCNT0=100; 
     416:	84 e6       	ldi	r24, 0x64	; 100
     418:	82 bf       	out	0x32, r24	; 50
  cli(); 
     41a:	f8 94       	cli
  IntNum--;               //中断嵌套-1 
     41c:	4a 94       	dec	r4
  IntSwitch();         //进行任务调度 
     41e:	0e 94 d0 00 	call	0x1a0 <IntSwitch>
     422:	ff 91       	pop	r31
     424:	ef 91       	pop	r30
     426:	bf 91       	pop	r27
     428:	af 91       	pop	r26
     42a:	9f 91       	pop	r25
     42c:	8f 91       	pop	r24
     42e:	7f 91       	pop	r23
     430:	6f 91       	pop	r22
     432:	5f 91       	pop	r21
     434:	4f 91       	pop	r20
     436:	3f 91       	pop	r19
     438:	2f 91       	pop	r18
     43a:	0f 90       	pop	r0
     43c:	0f be       	out	0x3f, r0	; 63
     43e:	0f 90       	pop	r0
     440:	1f 90       	pop	r1
     442:	18 95       	reti

00000444 <RT12864delay_ms>:
------------------------------------------------
************************************************/
void RT12864delay_ms(unsigned int n)
{
    unsigned int i=2280;
     444:	28 ee       	ldi	r18, 0xE8	; 232
     446:	38 e0       	ldi	r19, 0x08	; 8
	for(;n>0;n--)
     448:	00 97       	sbiw	r24, 0x00	; 0
     44a:	51 f0       	breq	.+20     	; 0x460 <RT12864delay_ms+0x1c>
	{
	    while(i--);
     44c:	21 50       	subi	r18, 0x01	; 1
     44e:	30 40       	sbci	r19, 0x00	; 0
     450:	4f ef       	ldi	r20, 0xFF	; 255
     452:	2f 3f       	cpi	r18, 0xFF	; 255
     454:	34 07       	cpc	r19, r20
     456:	d1 f7       	brne	.-12     	; 0x44c <RT12864delay_ms+0x8>
		i=2280;
     458:	28 ee       	ldi	r18, 0xE8	; 232
     45a:	38 e0       	ldi	r19, 0x08	; 8
     45c:	01 97       	sbiw	r24, 0x01	; 1
     45e:	f4 cf       	rjmp	.-24     	; 0x448 <RT12864delay_ms+0x4>
     460:	08 95       	ret

00000462 <sentbyte_12864>:
	}
}
//*************函数部分***************/
/* 名字:sentbyte_12864()            */
/* 功能:把一字节送到RT12864M        */
/* 局部变量:sentbyte                */

⌨️ 快捷键说明

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