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

📄 test.lss

📁 rtos 是atmega单片机用的实时系统
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 198:	81 2f       	mov	r24, r17
 19a:	80 7f       	andi	r24, 0xF0	; 240
 19c:	da df       	rcall	.-76     	; 0x152
   write_byte((command&0x0F)<<4); //发送L_data
 19e:	81 2f       	mov	r24, r17
 1a0:	82 95       	swap	r24
 1a2:	80 7f       	andi	r24, 0xF0	; 240
 1a4:	d6 df       	rcall	.-84     	; 0x152
   CLR_CS; 
 1a6:	ad 98       	cbi	0x15, 5	; 21
 1a8:	1f 91       	pop	r17
 1aa:	08 95       	ret

000001ac <write_data>:
  }
/************************数据写入函数***************************/
void write_data(unsigned char Data)			 //写数据
  {
 1ac:	1f 93       	push	r17
 1ae:	18 2f       	mov	r17, r24
   SET_CS;
 1b0:	ad 9a       	sbi	0x15, 5	; 21
   write_byte(0xFA);   //发送S_ID
 1b2:	8a ef       	ldi	r24, 0xFA	; 250
 1b4:	ce df       	rcall	.-100    	; 0x152
   write_byte(Data&0xF0); //发送H_data
 1b6:	81 2f       	mov	r24, r17
 1b8:	80 7f       	andi	r24, 0xF0	; 240
 1ba:	cb df       	rcall	.-106    	; 0x152
   write_byte((Data&0x0F)<<4); //发送L_data
 1bc:	81 2f       	mov	r24, r17
 1be:	82 95       	swap	r24
 1c0:	80 7f       	andi	r24, 0xF0	; 240
 1c2:	c7 df       	rcall	.-114    	; 0x152
   CLR_CS; 
 1c4:	ad 98       	cbi	0x15, 5	; 21
 1c6:	1f 91       	pop	r17
 1c8:	08 95       	ret

000001ca <LCD_Init>:
  }
/************************LCD初始化函数***************************/
void LCD_Init(void)						      //LCD初始化
  {
   delay(200);
 1ca:	88 ec       	ldi	r24, 0xC8	; 200
 1cc:	90 e0       	ldi	r25, 0x00	; 0
 1ce:	da df       	rcall	.-76     	; 0x184
   write_command(0x30);                         //功能设置 8位数据,基本指令集
 1d0:	80 e3       	ldi	r24, 0x30	; 48
 1d2:	dd df       	rcall	.-70     	; 0x18e
   delay(10);
 1d4:	8a e0       	ldi	r24, 0x0A	; 10
 1d6:	90 e0       	ldi	r25, 0x00	; 0
 1d8:	d5 df       	rcall	.-86     	; 0x184
   write_command(0x0C);                         //显示状态 ON,游标OFF,反白OFF
 1da:	8c e0       	ldi	r24, 0x0C	; 12
 1dc:	d8 df       	rcall	.-80     	; 0x18e
   delay(10);
 1de:	8a e0       	ldi	r24, 0x0A	; 10
 1e0:	90 e0       	ldi	r25, 0x00	; 0
 1e2:	d0 df       	rcall	.-96     	; 0x184
   write_command(0x01);                         //清除显示
 1e4:	81 e0       	ldi	r24, 0x01	; 1
 1e6:	d3 df       	rcall	.-90     	; 0x18e
   delay(500);
 1e8:	84 ef       	ldi	r24, 0xF4	; 244
 1ea:	91 e0       	ldi	r25, 0x01	; 1
 1ec:	cb df       	rcall	.-106    	; 0x184
   write_command(0x02); //地址归位
 1ee:	82 e0       	ldi	r24, 0x02	; 2
 1f0:	ce df       	rcall	.-100    	; 0x18e
   write_command(0x80); //设置DDRAM地址
 1f2:	80 e8       	ldi	r24, 0x80	; 128
 1f4:	cc df       	rcall	.-104    	; 0x18e
 1f6:	08 95       	ret

000001f8 <display_str>:
  }
/************************字符串打印函数***************************/
void display_str(unsigned char row,unsigned char column,unsigned char *p)
  {
 1f8:	0f 93       	push	r16
 1fa:	1f 93       	push	r17
 1fc:	cf 93       	push	r28
 1fe:	df 93       	push	r29
 200:	18 2f       	mov	r17, r24
 202:	06 2f       	mov	r16, r22
 204:	ea 01       	movw	r28, r20
    write_command(0x30);
 206:	80 e3       	ldi	r24, 0x30	; 48
 208:	c2 df       	rcall	.-124    	; 0x18e
	//write_command(adress_table[row*8+column]);
	write_command(pgm_read_byte(adress_table+row*8+column));
 20a:	e1 2f       	mov	r30, r17
 20c:	ff 27       	eor	r31, r31
 20e:	83 e0       	ldi	r24, 0x03	; 3
 210:	ee 0f       	add	r30, r30
 212:	ff 1f       	adc	r31, r31
 214:	8a 95       	dec	r24
 216:	e1 f7       	brne	.-8      	; 0x210
 218:	e0 0f       	add	r30, r16
 21a:	f1 1d       	adc	r31, r1
 21c:	ea 5d       	subi	r30, 0xDA	; 218
 21e:	ff 4f       	sbci	r31, 0xFF	; 255
 220:	84 91       	lpm	r24, Z
 222:	b5 df       	rcall	.-150    	; 0x18e
	while((*p)!='\0')
     {write_data(*p++);
      column++;
 224:	88 81       	ld	r24, Y
 226:	88 23       	and	r24, r24
 228:	29 f0       	breq	.+10     	; 0x234
 22a:	89 91       	ld	r24, Y+
 22c:	bf df       	rcall	.-130    	; 0x1ac
 22e:	88 81       	ld	r24, Y
 230:	88 23       	and	r24, r24
 232:	d9 f7       	brne	.-10     	; 0x22a
 234:	df 91       	pop	r29
 236:	cf 91       	pop	r28
 238:	1f 91       	pop	r17
 23a:	0f 91       	pop	r16
 23c:	08 95       	ret

0000023e <display_1str>:
     }
  }
void display_1str(unsigned char row,unsigned char column,unsigned char x)
  {
 23e:	ff 92       	push	r15
 240:	0f 93       	push	r16
 242:	1f 93       	push	r17
 244:	18 2f       	mov	r17, r24
 246:	06 2f       	mov	r16, r22
 248:	f4 2e       	mov	r15, r20
    write_command(0x30);
 24a:	80 e3       	ldi	r24, 0x30	; 48
 24c:	a0 df       	rcall	.-192    	; 0x18e
	write_command(pgm_read_byte(adress_table+row*8+column));
 24e:	e1 2f       	mov	r30, r17
 250:	ff 27       	eor	r31, r31
 252:	93 e0       	ldi	r25, 0x03	; 3
 254:	ee 0f       	add	r30, r30
 256:	ff 1f       	adc	r31, r31
 258:	9a 95       	dec	r25
 25a:	e1 f7       	brne	.-8      	; 0x254
 25c:	e0 0f       	add	r30, r16
 25e:	f1 1d       	adc	r31, r1
 260:	ea 5d       	subi	r30, 0xDA	; 218
 262:	ff 4f       	sbci	r31, 0xFF	; 255
 264:	84 91       	lpm	r24, Z
 266:	93 df       	rcall	.-218    	; 0x18e
    write_data((x/10)+48);
 268:	1a e0       	ldi	r17, 0x0A	; 10
 26a:	8f 2d       	mov	r24, r15
 26c:	61 2f       	mov	r22, r17
 26e:	cf d2       	rcall	.+1438   	; 0x80e
 270:	80 5d       	subi	r24, 0xD0	; 208
 272:	9c df       	rcall	.-200    	; 0x1ac
    write_data((x%10)+48);
 274:	8f 2d       	mov	r24, r15
 276:	61 2f       	mov	r22, r17
 278:	ca d2       	rcall	.+1428   	; 0x80e
 27a:	89 2f       	mov	r24, r25
 27c:	80 5d       	subi	r24, 0xD0	; 208
 27e:	96 df       	rcall	.-212    	; 0x1ac
	write_data('%');
 280:	85 e2       	ldi	r24, 0x25	; 37
 282:	94 df       	rcall	.-216    	; 0x1ac
 284:	1f 91       	pop	r17
 286:	0f 91       	pop	r16
 288:	ff 90       	pop	r15
 28a:	08 95       	ret

0000028c <display_str2>:
  }

void display_str2(unsigned char row,unsigned char column,char *p)
  {
 28c:	ff 92       	push	r15
 28e:	0f 93       	push	r16
 290:	1f 93       	push	r17
 292:	cf 93       	push	r28
 294:	df 93       	push	r29
 296:	18 2f       	mov	r17, r24
 298:	06 2f       	mov	r16, r22
 29a:	ea 01       	movw	r28, r20
    unsigned char j,i=0;
 29c:	ff 24       	eor	r15, r15
	j=1;
    write_command(0x30);
 29e:	80 e3       	ldi	r24, 0x30	; 48
 2a0:	76 df       	rcall	.-276    	; 0x18e
	//write_command(adress_table[row*8+column]);
	write_command(pgm_read_byte(adress_table+row*8+column));
 2a2:	e1 2f       	mov	r30, r17
 2a4:	ff 27       	eor	r31, r31
 2a6:	23 e0       	ldi	r18, 0x03	; 3
 2a8:	ee 0f       	add	r30, r30
 2aa:	ff 1f       	adc	r31, r31
 2ac:	2a 95       	dec	r18
 2ae:	e1 f7       	brne	.-8      	; 0x2a8
 2b0:	e0 0f       	add	r30, r16
 2b2:	f1 1d       	adc	r31, r1
 2b4:	ea 5d       	subi	r30, 0xDA	; 218
 2b6:	ff 4f       	sbci	r31, 0xFF	; 255
 2b8:	84 91       	lpm	r24, Z
 2ba:	69 df       	rcall	.-302    	; 0x18e
	while((j)!='\0')
     {j=pgm_read_byte(p+i);
 2bc:	fe 01       	movw	r30, r28
 2be:	ef 0d       	add	r30, r15
 2c0:	f1 1d       	adc	r31, r1
 2c2:	14 91       	lpm	r17, Z
	  write_data(j);
 2c4:	81 2f       	mov	r24, r17
 2c6:	72 df       	rcall	.-284    	; 0x1ac
      i++;
 2c8:	f3 94       	inc	r15
 2ca:	11 23       	and	r17, r17
 2cc:	b9 f7       	brne	.-18     	; 0x2bc
 2ce:	df 91       	pop	r29
 2d0:	cf 91       	pop	r28
 2d2:	1f 91       	pop	r17
 2d4:	0f 91       	pop	r16
 2d6:	ff 90       	pop	r15
 2d8:	08 95       	ret

000002da <settxt>:
     }
  }
/*void  setpic(void)
  {
  unsigned char  i,j;
  LCD_Init();
  write_command(0x34);
  write_command(0x3c);// RE=1  扩展指令选择  G=1  开图形显示 
      
     for(j=0;j<16;j++)
     for(i=0;i<32;i++)
 	  {
       write_command(0x80+i);
       write_command(0x80+j);
       write_data(0x00);
       write_data(0x00);
      }
       write_command(0x3e);   
  }*/
/************************开文本函数***************************/
void settxt(void)
  {
   write_command(0x30);                         //功能设置 8位数据,基本指令集
 2da:	80 e3       	ldi	r24, 0x30	; 48
 2dc:	58 df       	rcall	.-336    	; 0x18e
 2de:	08 95       	ret

000002e0 <OSTaskCreate>:
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void OSTaskCreate(void (*Task)(void),Uint_8bit *Stack,Uint_8bit TaskID)
{
 2e0:	db 01       	movw	r26, r22
	Uint_8bit i;
	*Stack--=(Uint_16bit)Task;				/*将任务的地址低位压入堆栈		*/
 2e2:	8c 93       	st	X, r24
	*Stack--=(Uint_16bit)Task>>8;			/*将任务的地址高位压入堆栈		*/
 2e4:	89 2f       	mov	r24, r25
 2e6:	99 27       	eor	r25, r25
 2e8:	8e 93       	st	-X, r24

	*Stack--=0x00;							/*R1 __zero_reg__				*/
 2ea:	1e 92       	st	-X, r1
	*Stack--=0x00;							/*R0 __tmp_reg__				*/
 2ec:	1e 92       	st	-X, r1
	*Stack--=0x80;							/*SREG 在任务中,开启全局中断	*/
 2ee:	80 e8       	ldi	r24, 0x80	; 128
 2f0:	8e 93       	st	-X, r24
 2f2:	11 97       	sbiw	r26, 0x01	; 1
	for(i=0;i<14;i++)
 2f4:	80 e0       	ldi	r24, 0x00	; 0
    *Stack--=i;
 2f6:	8c 93       	st	X, r24
 2f8:	11 97       	sbiw	r26, 0x01	; 1
 2fa:	8f 5f       	subi	r24, 0xFF	; 255
 2fc:	8e 30       	cpi	r24, 0x0E	; 14
 2fe:	d8 f3       	brcs	.-10     	; 0x2f6
	/*
		在 avr-libc 中的 FAQ中的 What registers are used by the C compiler?
		描述了寄存器的作用
	*/
	TCB[TaskID].OSTaskStackTop = (Uint_16bit)Stack;
 300:	84 2f       	mov	r24, r20
 302:	99 27       	eor	r25, r25
 304:	fc 01       	movw	r30, r24
 306:	ee 0f       	add	r30, r30
 308:	ff 1f       	adc	r31, r31
 30a:	ee 0f       	add	r30, r30
 30c:	ff 1f       	adc	r31, r31
 30e:	e8 0f       	add	r30, r24
 310:	f9 1f       	adc	r31, r25
 312:	eb 59       	subi	r30, 0x9B	; 155
 314:	ff 4f       	sbci	r31, 0xFF	; 255
 316:	a0 83       	st	Z, r26
 318:	b1 83       	std	Z+1, r27	; 0x01
	/*
		将人工堆栈的栈顶,保存到堆栈的数组中
	*/
	OSRdyTbl |= 0x01<<TaskID;      			/*任务就绪表已经准备好			*/
 31a:	21 e0       	ldi	r18, 0x01	; 1
 31c:	30 e0       	ldi	r19, 0x00	; 0
 31e:	02 c0       	rjmp	.+4      	; 0x324
 320:	22 0f       	add	r18, r18
 322:	33 1f       	adc	r19, r19
 324:	8a 95       	dec	r24
 326:	e2 f7       	brpl	.-8      	; 0x320
 328:	22 2a       	or	r2, r18
 32a:	08 95       	ret

0000032c <OSStartTask>:
}

/************************************************************************************************************************
函数名称:	OSStartTask
函数原型:	void OSStartTask(void)
函数功能:	开始任务调度,从空闲任务开始运行 
入口参数:	无
出口参数:	无
有关说明:	执行"reti"指令之后打开全局中断
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void OSStartTask(void)
{
	OSPrioCur = OS_TASKS;
 32c:	44 e0       	ldi	r20, 0x04	; 4
 32e:	34 2e       	mov	r3, r20
	OSPrioHighRdy = OS_TASKS;
 330:	53 2c       	mov	r5, r3
	SP=TCB[OS_TASKS].OSTaskStackTop+17;
 332:	80 91 79 00 	lds	r24, 0x0079
 336:	90 91 7a 00 	lds	r25, 0x007A
 33a:	41 96       	adiw	r24, 0x11	; 17
 33c:	9e bf       	out	0x3e, r25	; 62
 33e:	8d bf       	out	0x3d, r24	; 61
	__asm__ __volatile__(    "reti"       "\n\t"  );
 340:	18 95       	reti
 342:	08 95       	ret

00000344 <OS_TASK_SW>:
}

/************************************************************************************************************************
函数名称:	OS_TASK_SW
函数原型:	void OS_TASK_SW(void)
函数功能:	进行任务调度 
入口参数:	无
出口参数:	无
有关说明:	中断和任务都可以调用这个任务调度函数
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void OS_TASK_SW(void)
{

	__asm__ __volatile__("LDI  R16,0x01             \n\t");
 344:	01 e0       	ldi	r16, 0x01	; 1
	/*
		清除中断要求任务切换的标志位,设置正在任务切换标志位
	*/
	__asm__ __volatile__("SEI                       \n\t");
 346:	78 94       	sei
	/*
		开中断,因为如果因中断在任务调度中进行,要重新进行调度时,已经关中断
	*/
	/*  根据中断时保存寄存器的次序入栈,模拟一次中断后,入栈的情况*/
	__asm__ __volatile__("PUSH __zero_reg__         \n\t");	/*R1 					*/

⌨️ 快捷键说明

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