cycle.lst

来自「ATmega16应用例子」· LST 代码 · 共 2,013 行 · 第 1/5 页

LST
2,013
字号
(0250) 	uint8 i;
(0251) 	write(0,0x40+adr*8);
    0349 E088      LDI	R24,0x8
    034A 9F84      MUL	R24,R20
    034B 2D20      MOV	R18,R0
    034C 5C20      SUBI	R18,0xC0
    034D 2700      CLR	R16
    034E DF6A      RCALL	_write
(0252) 	for(i=0;i<8;i++)
    034F 2744      CLR	R20
    0350 C008      RJMP	0x0359
(0253) 		write(1,buf[i]);
    0351 2FE4      MOV	R30,R20
    0352 27FF      CLR	R31
    0353 0FE6      ADD	R30,R22
    0354 1FF7      ADC	R31,R23
    0355 9124      LPM	R18,0(Z)
    0356 E001      LDI	R16,1
    0357 DF61      RCALL	_write
    0358 9543      INC	R20
    0359 3048      CPI	R20,0x8
    035A F3B0      BCS	0x0351
    035B 940E07C8  CALL	pop_gset2
    035D 9508      RET
_LCD1602_setCmd:
  str                  --> R20
    035E 940E07D9  CALL	push_gset1
    0360 01A8      MOVW	R20,R16
(0254) /* 不得采样下面写法,因为传入的是数组,最后一个不是'\0' */
(0255) 	//while(*buf)
(0256) 		//write(1,*buf++);
(0257) }
(0258) /*--------------------------------------------------------------------
(0259) 函数名称:LCD1602命令设置
(0260) 函数功能:
(0261) 注意事项:对于高速CPU,应加延时,好像是废话~
(0262) 提示说明:
(0263) 输    入:"CLR_SCR"/"GO_HOME"/"AC_INC"/"AC_DEC"...
(0264) 返    回:无
(0265) --------------------------------------------------------------------*/
(0266) //----	function  ------  1  --------  0  ----LcdWordPos--
(0267) //		dispEn		|   Enable	|  Disable	|	bit2
(0268) //		cursorEn	|   Enable	|  Disable	|	bit1
(0269) //		blinkEn		|   Enable	|  Disable	|	bit0
(0270) //------------------------------------------------------
(0271) //		isACinc		|	INC_AC  |  DEC_AC	|	bit1
(0272) //		shiftEn		|   Enable	|  Disable	|	bit0
(0273) //------------------------------------------------------
(0274) void LCD1602_setCmd(uint8  *str)
(0275) {
(0276) 	static bool dispEn  =0;
(0277) 	static bool cursorEn=0;
(0278) 	static bool blinkEn =0;
(0279) 	static bool shiftEn =0;
(0280) 	static bool isACinc =0;
(0281) 	
(0282) 	if(!strcmp(str,"CLR_SCR"))			//clear screen
    0361 E025      LDI	R18,5
    0362 E031      LDI	R19,1
    0363 018A      MOVW	R16,R20
    0364 940E0715  CALL	_strcmp
    0366 3000      CPI	R16,0
    0367 0701      CPC	R16,R17
    0368 F421      BNE	0x036D
(0283) 		write(0,0x01);
    0369 E021      LDI	R18,1
    036A 2700      CLR	R16
    036B DF4D      RCALL	_write
    036C C181      RJMP	0x04EE
(0284) 
(0285) 	else if(!strcmp(str,"GO_HOME"))		//set AC go home
    036D EF2D      LDI	R18,0xFD
    036E E030      LDI	R19,0
    036F 018A      MOVW	R16,R20
    0370 940E0715  CALL	_strcmp
    0372 3000      CPI	R16,0
    0373 0701      CPC	R16,R17
    0374 F421      BNE	0x0379
(0286) 		write(0,0x02);
    0375 E022      LDI	R18,2
    0376 2700      CLR	R16
    0377 DF41      RCALL	_write
    0378 C175      RJMP	0x04EE
(0287) /*--------------------------------------------------
(0288) isACinc & shiftEn 共用一个命令设置
(0289) --------------------------------------------------*/
(0290) 	else if(!strcmp(str,"INC_AC"))		//set AC as inc mode
    0379 EF26      LDI	R18,0xF6
    037A E030      LDI	R19,0
    037B 018A      MOVW	R16,R20
    037C 940E0715  CALL	_strcmp
    037E 3000      CPI	R16,0
    037F 0701      CPC	R16,R17
    0380 F479      BNE	0x0390
(0291) 	{
(0292) 		isACinc=1;
    0381 E081      LDI	R24,1
    0382 93800065  STS	isACinc,R24
(0293) 		if(shiftEn)
    0384 90200064  LDS	R2,shiftEn
    0386 2022      TST	R2
    0387 F021      BEQ	0x038C
(0294) 			write(0,0x07);
    0388 E027      LDI	R18,7
    0389 2700      CLR	R16
    038A DF2E      RCALL	_write
    038B C162      RJMP	0x04EE
(0295) 		else 
(0296) 			write(0,0x06);
    038C E026      LDI	R18,6
    038D 2700      CLR	R16
    038E DF2A      RCALL	_write
(0297) 	}		
    038F C15E      RJMP	0x04EE
(0298) 	else if(!strcmp(str,"DEC_AC"))		//set AC as dec mode
    0390 EE2F      LDI	R18,0xEF
    0391 E030      LDI	R19,0
    0392 018A      MOVW	R16,R20
    0393 940E0715  CALL	_strcmp
    0395 3000      CPI	R16,0
    0396 0701      CPC	R16,R17
    0397 F479      BNE	0x03A7
(0299) 	{	
(0300) 		isACinc=0;
    0398 2422      CLR	R2
    0399 92200065  STS	isACinc,R2
(0301) 		if(shiftEn)
    039B 90200064  LDS	R2,shiftEn
    039D 2022      TST	R2
    039E F021      BEQ	0x03A3
(0302) 			write(0,0x05);
    039F E025      LDI	R18,5
    03A0 2700      CLR	R16
    03A1 DF17      RCALL	_write
    03A2 C14B      RJMP	0x04EE
(0303) 		else
(0304) 			write(0,0x04);
    03A3 E024      LDI	R18,4
    03A4 2700      CLR	R16
    03A5 DF13      RCALL	_write
(0305) 	}		
    03A6 C147      RJMP	0x04EE
(0306) 	else if(!strcmp(str,"EN_SHIFT"))	//enable shift
    03A7 EE26      LDI	R18,0xE6
    03A8 E030      LDI	R19,0
    03A9 018A      MOVW	R16,R20
    03AA 940E0715  CALL	_strcmp
    03AC 3000      CPI	R16,0
    03AD 0701      CPC	R16,R17
    03AE F479      BNE	0x03BE
(0307) 	{
(0308) 		shiftEn=1;
    03AF E081      LDI	R24,1
    03B0 93800064  STS	shiftEn,R24
(0309) 		if(isACinc)
    03B2 90200065  LDS	R2,isACinc
    03B4 2022      TST	R2
    03B5 F021      BEQ	0x03BA
(0310) 			write(0,0x07);
    03B6 E027      LDI	R18,7
    03B7 2700      CLR	R16
    03B8 DF00      RCALL	_write
    03B9 C134      RJMP	0x04EE
(0311) 		else
(0312) 			write(0,0x06);
    03BA E026      LDI	R18,6
    03BB 2700      CLR	R16
    03BC DEFC      RCALL	_write
(0313) 	}
    03BD C130      RJMP	0x04EE
(0314) 	else if(!strcmp(str,"DIS_SHIFT"))	//disable shift
    03BE ED2C      LDI	R18,0xDC
    03BF E030      LDI	R19,0
    03C0 018A      MOVW	R16,R20
    03C1 940E0715  CALL	_strcmp
    03C3 3000      CPI	R16,0
    03C4 0701      CPC	R16,R17
    03C5 F479      BNE	0x03D5
(0315) 	{
(0316) 		shiftEn=0;
    03C6 2422      CLR	R2
    03C7 92200064  STS	shiftEn,R2
(0317) 		if(isACinc)
    03C9 90200065  LDS	R2,isACinc
    03CB 2022      TST	R2
    03CC F021      BEQ	0x03D1
(0318) 			write(0,0x05);
    03CD E025      LDI	R18,5
    03CE 2700      CLR	R16
    03CF DEE9      RCALL	_write
    03D0 C11D      RJMP	0x04EE
(0319) 		else
(0320) 			write(0,0x04);
    03D1 E024      LDI	R18,4
    03D2 2700      CLR	R16
    03D3 DEE5      RCALL	_write
(0321) 	}	
    03D4 C119      RJMP	0x04EE
(0322) /*--------------------------------------------------
(0323) dispEn & cursorEn & blinkEn共用一个命令设置
(0324) --------------------------------------------------*/
(0325) 	else if(!strcmp(str,"OPEN_LCD"))	//opern lcd
    03D5 ED23      LDI	R18,0xD3
    03D6 E030      LDI	R19,0
    03D7 018A      MOVW	R16,R20
    03D8 940E0715  CALL	_strcmp
    03DA 3000      CPI	R16,0
    03DB 0701      CPC	R16,R17
    03DC F4F9      BNE	0x03FC
(0326) 	{
(0327) 		dispEn=1;
    03DD E081      LDI	R24,1
    03DE 93800061  STS	dispEn,R24
(0328) 		if(cursorEn)
    03E0 90200062  LDS	R2,cursorEn
    03E2 2022      TST	R2
    03E3 F061      BEQ	0x03F0
(0329) 			if(blinkEn)
    03E4 90200063  LDS	R2,blinkEn
    03E6 2022      TST	R2
    03E7 F021      BEQ	0x03EC
(0330) 				write(0,0x0F);
    03E8 E02F      LDI	R18,0xF
    03E9 2700      CLR	R16
    03EA DECE      RCALL	_write
    03EB C102      RJMP	0x04EE
(0331) 			else
(0332) 				write(0,0x0E);
    03EC E02E      LDI	R18,0xE
    03ED 2700      CLR	R16
    03EE DECA      RCALL	_write
    03EF C0FE      RJMP	0x04EE
(0333) 		else
(0334) 			if(blinkEn)
    03F0 90200063  LDS	R2,blinkEn
    03F2 2022      TST	R2
    03F3 F021      BEQ	0x03F8
(0335) 				write(0,0x0D);
    03F4 E02D      LDI	R18,0xD
    03F5 2700      CLR	R16
    03F6 DEC2      RCALL	_write
    03F7 C0F6      RJMP	0x04EE
(0336) 			else
(0337) 				write(0,0x0C);
    03F8 E02C      LDI	R18,0xC
    03F9 2700      CLR	R16
    03FA DEBE      RCALL	_write
(0338) 	}		
    03FB C0F2      RJMP	0x04EE
(0339) 	else if(!strcmp(str,"CLOSE_LCD"))	//close lcd
    03FC EC29      LDI	R18,0xC9
    03FD E030      LDI	R19,0
    03FE 018A      MOVW	R16,R20
    03FF 940E0715  CALL	_strcmp
    0401 3000      CPI	R16,0
    0402 0701      CPC	R16,R17
    0403 F4F9      BNE	0x0423
(0340) 	{
(0341) 		dispEn=0;
    0404 2422      CLR	R2
    0405 92200061  STS	dispEn,R2
(0342) 		if(cursorEn)
    0407 90200062  LDS	R2,cursorEn
    0409 2022      TST	R2
    040A F061      BEQ	0x0417
(0343) 			if(blinkEn)
    040B 90200063  LDS	R2,blinkEn
    040D 2022      TST	R2
    040E F021      BEQ	0x0413
(0344) 				write(0,0x0B);
    040F E02B      LDI	R18,0xB
    0410 2700      CLR	R16
    0411 DEA7      RCALL	_write
    0412 C0DB      RJMP	0x04EE
(0345) 			else
(0346) 				write(0,0x0A);
    0413 E02A      LDI	R18,0xA
    0414 2700      CLR	R16
    0415 DEA3      RCALL	_write
    0416 C0D7      RJMP	0x04EE
(0347) 		else
(0348) 			if(blinkEn)
    0417 90200063  LDS	R2,blinkEn
    0419 2022      TST	R2
    041A F021      BEQ	0x041F
(0349) 				write(0,0x09);
    041B E029      LDI	R18,0x9
    041C 2700      CLR	R16
    041D DE9B      RCALL	_write
    041E C0CF      RJMP	0x04EE
(0350) 			else
(0351) 				write(0,0x08);
    041F E028      LDI	R18,0x8
    0420 2700      CLR	R16
    0421 DE97      RCALL	_write
(0352) 	}	
    0422 C0CB      RJMP	0x04EE
(0353) 	else if(!strcmp(str,"OPEN_CURS"))	//open cursor	
    0423 EB2F      LDI	R18,0xBF
    0424 E030      LDI	R19,0
    0425 018A      MOVW	R16,R20
    0426 940E0715  CALL	_strcmp
    0428 3000      CPI	R16,0
    0429 0701      CPC	R16,R17
    042A F4F9      BNE	0x044A
(0354) 	{
(0355) 		cursorEn=1;
    042B E081      LDI	R24,1
    042C 93800062  STS	cursorEn,R24
(0356) 		if(dispEn)
    042E 90200061  LDS	R2,dispEn
    0430 2022      TST	R2
    0431 F061      BEQ	0x043E
(0357) 			if(blinkEn)
    0432 90200063  LDS	R2,blinkEn
    0434 2022      TST	R2
    0435 F021      BEQ	0x043A
(0358) 				write(0,0x0F);
    0436 E02F      LDI	R18,0xF
    0437 2700      CLR	R16
    0438 DE80      RCALL	_write
    0439 C0B4      RJMP	0x04EE
(0359) 			else
(0360) 				write(0,0x0E);
    043A E02E      LDI	R18,0xE
    043B 2700      CLR	R16
    043C DE7C      RCALL	_write
    043D C0B0      RJMP	0x04EE
(0361) 		else
(0362) 			if(blinkEn)
    043E 90200063  LDS	R2,blinkEn
    0440 2022      TST	R2
    0441 F021      BEQ	0x0446
(0363) 				write(0,0x0B);
    0442 E02B      LDI	R18,0xB
    0443 2700      CLR	R16
    0444 DE74      RCALL	_write
    0445 C0A8      RJMP	0x04EE
(0364) 			else
(0365) 				write(0,0x0A);
    0446 E02A      LDI	R18,0xA
    0447 2700      CLR	R16
    0448 DE70      RCALL	_write
(0366) 	}	
    0449 C0A4      RJMP	0x04EE
(0367) 	else if(!strcmp(str,"CLOSE_CURS"))	//close cursor
    044A EB24      LDI	R18,0xB4
    044B E030      LDI	R19,0
    044C 018A      MOVW	R16,R20
    044D 940E0715  CALL	_strcmp
    044F 3000      CPI	R16,0
    0450 0701      CPC	R16,R17
    0451 F4F9      BNE	0x0471
(0368) 	{
(0369) 		cursorEn=0;
    0452 2422      CLR	R2
    0453 92200062  STS	cursorEn,R2
(0370) 		if(dispEn)
    0455 90200061  LDS	R2,dispEn
    0457 2022      TST	R2
    0458 F061      BEQ	0x0465
(0371) 			if(blinkEn)
    0459 90200063  LDS	R2,blinkEn
    045B 2022      TST	R2
    045C F021      BEQ	0x0461
(0372) 				write(0,0x0D);
    045D E02D      LDI	R18,0xD
    045E 2700      CLR	R16
    045F DE59      RCALL	_write
    0460 C08D      RJMP	0x04EE
(0373) 			else
(0374) 				write(0,0x0C);
    0461 E02C      LDI	R18,0xC
    0462 2700      CLR	R16
    0463 DE55      RCALL	_write
    0464 C089      RJMP	0x04EE
(0375) 		else
(0376) 			if(blinkEn)
    0465 90200063  LDS	R2,blinkEn
    0467 2022      TST	R2
    0468 F021      BEQ	0x046D
(0377) 				write(0,0x09);
    0469 E029      LDI	R18,0x9
    046A 2700      CLR	R16
    046B DE4D      RCALL	_write
    046C C081      RJMP	0x04EE
(0378) 			else
(0379) 				write(0,0x08);
    046D E028      LDI	R18,0x8
    046E 2700      CLR	R16
    046F DE49      RCALL	_write
(0380) 	}
    0470 C07D      RJMP	0x04EE
(0381) 	else if(!strcmp(str,"EN_BLINK"))	//enable blink cursor
    0471 EA2B      LDI	R18,0xAB
    0472 E030      LDI	R19,0
    0473 018A      MOVW	R16,R20
    0474 940E0715  CALL	_strcmp
    0476 3000      CPI	R16,0
    0477 0701      CPC	R16,R17
    0

⌨️ 快捷键说明

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