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

📄 lcd.asm

📁 TI公司的DSP(LF2407A)编写的有霍尔位置传感器的无刷直流电机控制程序,内含子程序说明
💻 ASM
📖 第 1 页 / 共 2 页
字号:
*******************************************************
* TMS320C24xx ANSI C Codegen Version 7.04       
*******************************************************
;	dspac -i../src -v2xx -iD:/CCStudio_v3.1/c2400/cgtools/include lcd.c C:\DOCUME~1\liuping\LOCALS~1\Temp\lcd.if 
;	dspopt NOT RUN
;	dspcg -o -v2xx -o C:\DOCUME~1\liuping\LOCALS~1\Temp\lcd.if C:\DOCUME~1\liuping\LOCALS~1\Temp\lcd.asm C:\DOCUME~1\liuping\LOCALS~1\Temp\lcd.tmp 
	.port
	.bss	_table2,80,1
	.bss	_table1,300
	.file	"lcd.c"
	.file	"../src\regs240x.h"
	.globl	_portffff
	.globl	_portff0f
	.globl	_port0
	.globl	_port1
	.globl	_port2
	.globl	_port3
	.globl	_port4
	.file	"lcd.c"

	.sect	".cinit"
	.word	IS1,_table1
	.word	0
	.word	129
	.word	129
	.word	255
	.word	129
	.word	129
	.word	0
	.word	0
	.word	1
	.word	15
	.word	48
	.word	192
	.word	48
	.word	15
	.word	1
	.word	0
	.word	0
	.word	130
	.word	130
	.word	252
	.word	130
	.word	130
	.word	4
	.word	0
	.word	0
	.word	60
	.word	74
	.word	74
	.word	74
	.word	74
	.word	44
	.word	0
	.word	0
	.word	8
	.word	136
	.word	254
	.word	137
	.word	137
	.word	3
	.word	0
	.word	0
	.word	1
	.word	255
	.word	136
	.word	136
	.word	136
	.word	112
	.word	0
	.word	129
	.word	255
	.word	129
	.word	129
	.word	129
	.word	66
	.word	60
	.word	0
	.word	0
	.word	129
	.word	255
	.word	145
	.word	17
	.word	17
	.word	14
	.word	0
	.word	0
	.word	62
	.word	194
	.word	48
	.word	14
	.word	48
	.word	194
	.word	62
	.word	0
	.word	254
	.word	2
	.word	2
	.word	254
	.word	2
	.word	2
	.word	252
	.word	129
	.word	255
	.word	137
	.word	8
	.word	8
	.word	137
	.word	255
	.word	129
	.word	0
	.word	76
	.word	146
	.word	146
	.word	146
	.word	146
	.word	100
	.word	0
	.word	0
	.word	8
	.word	8
	.word	126
	.word	136
	.word	136
	.word	0
	.word	0
	.word	50
	.word	73
	.word	69
	.word	69
	.word	69
	.word	126
	.word	64
	.word	0
	.word	0
	.word	129
	.word	255
	.word	145
	.word	17
	.word	17
	.word	14
	.word	0
IS1	.set	120

	.sym	_table1,_table1,50,2,4800,,300
	.globl	_table1
	.word	IS2,_table2
	.word	0
	.word	0
	.word	124
	.word	130
	.word	130
	.word	130
	.word	124
	.word	0
	.word	0
	.word	0
	.word	0
	.word	130
	.word	255
	.word	128
	.word	0
	.word	0
	.word	0
	.word	198
	.word	161
	.word	161
	.word	145
	.word	137
	.word	198
	.word	0
	.word	0
	.word	66
	.word	129
	.word	137
	.word	137
	.word	118
	.word	0
	.word	0
	.word	0
	.word	48
	.word	40
	.word	36
	.word	34
	.word	255
	.word	32
	.word	0
	.word	0
	.word	79
	.word	137
	.word	137
	.word	137
	.word	137
	.word	113
	.word	0
	.word	0
	.word	126
	.word	137
	.word	137
	.word	137
	.word	137
	.word	114
	.word	0
	.word	0
	.word	1
	.word	1
	.word	1
	.word	1
	.word	1
	.word	255
	.word	0
	.word	0
	.word	118
	.word	137
	.word	137
	.word	137
	.word	137
	.word	118
	.word	0
	.word	0
	.word	78
	.word	145
	.word	145
	.word	145
	.word	145
	.word	126
	.word	0
IS2	.set	80

	.sym	_table2,_table2,50,2,1280,,80
	.globl	_table2
	.text

	.sym	_LCDIOinit,_LCDIOinit,32,2,0
	.globl	_LCDIOinit

	.func	58
;>>>> 	void LCDIOinit()
******************************************************
* FUNCTION DEF : _LCDIOinit
******************************************************
_LCDIOinit:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+,AR3

	.line	3
;>>>> 		MCRC=MCRC&0x0c3FF;		    	          	  // IOPF2,F3,F4,F5端口配置为一般的I/O功能
	LARK	AR3,28820
	LACK	50175
	AND	* 
	SACL	* 
	.line	4
;>>>> 	    PFDATDIR=(PFDATDIR|0x03c00)&0x0ff23;	    // IOPF2,F3,F4,F5端口配置为输出
	LACK	15360
	ADRK	2
	OR	* 
	ANDK	65315
	SACL	* 
	.line	5
;>>>> 	    MCRA=MCRA&0x00c7;		    	              // 配置IOPA[3-5],IOPB[0-7]为一般I/O口功能
	LACK	199
	SBRK	6
	AND	* 
	SACL	* 
	.line	6
;>>>> 	    PADATDIR=0x0FF00;       					  // IOPA[3-4]为输出,且全部为0 
	ADRK	8
	SPLK	#-256,* ,AR1
EPI0_1:
	.line	7
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	64,000000000H,1

	.sym	_LCDSTA1,_LCDSTA1,32,2,0
	.globl	_LCDSTA1

	.func	67
;>>>> 	void LCDSTA1(E)              
;>>>> 	int E;
******************************************************
* FUNCTION DEF : _LCDSTA1
******************************************************
_LCDSTA1:

LF2	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,3
	LAR	AR0,*0+,AR2

	.sym	_E,-3+LF2,4,9,16
	.sym	_E1FLAG,1,4,1,16
	.sym	_i,2,4,1,16
	.line	3
	.line	4
;>>>> 	  int E1FLAG,i=0;
	LACK	0
	LARK	AR2,2
	MAR	*0+
	SACL	* ,AR4
	.line	5
;>>>> 	  PBDATDIR=PBDATDIR&0x0000;                    //IOPB口为输入
	LARK	AR3,28826
	LARK	AR4,28826
	LAC	* ,AR3
	LACK	0
	SACL	* ,AR2
	.line	6
;>>>> 	     if(E==1) 
	SSXM
	SBRK	5-LF2
	LAC	* 
	SUBK	1
	BNZ	L1
	.line	7
;>>>> 	     PADATDIR=0x0FF18;                         //E1=1
	MAR	* ,AR3
	SBRK	2
	SPLK	#-232,* 
	B	L2
L1:
	.line	8
;>>>> 	    else   PADATDIR=0x0FF20;                   //E2=1
	MAR	* ,AR3
	SBRK	2
	SPLK	#-224,* 
L2:
	.line	10
;>>>> 		PFDATDIR=(PFDATDIR|0x0008)&0xfffb;                          //	LCD_RW = 1;
;>>>> 		                                           //	LCD_DI = 0;
;>>>> 		while(1)
	LACK	8
	SBRK	2
	OR	* 
	ANDK	65531
	SACL	* ,AR2
	ADRK	5-LF2
	MAR	* ,AR3
L3:
	.line	14
;>>>> 			PFDATDIR=PFDATDIR|0x0010;			   //LCD_E = 1;
	LARK	AR3,28822
	LACK	16
	OR	* 
	SACL	* ,AR2
	.line	15
;>>>> 			for(i=0; i<2; i++){}
	LACK	0
	SACL	* 
	LAC	* 
	SUBK	2
	BGEZ	L6
L5:
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	* 
	SUBK	2
	BLZ	L5
L6:
	.line	16
;>>>> 			PFDATDIR=PFDATDIR&0x0FFef;			   //LCD_E = 0;
	LARK	AR3,28822
	LACK	65519
	MAR	* ,AR3
	AND	* 
	SACL	* 
	.line	17
;>>>> 			E1FLAG=PBDATDIR&0x0080;                // 读液晶状态
	LACK	128
	ADRK	4
	AND	* ,AR2
	MAR	*-
	SACL	* 
	.line	18
;>>>> 			if(E1FLAG==0x0000)break;			   //若液晶空闲,则停止等待
	LAC	* 
	BZ	L4
	.line	19
	MAR	*+,AR3
	B	L3
L4:
EPI0_2:
	.line	20
	MAR	* ,AR1
	SBRK	4
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	86,000000000H,3

	.sym	_TRANS1,_TRANS1,32,2,0
	.globl	_TRANS1

	.func	89
;>>>> 	void TRANS1(TRANS,E)   //该函数采用形参和实参的方式传递数值,TRANS为一个形参
;>>>> 	int TRANS,E;
******************************************************
* FUNCTION DEF : _TRANS1
******************************************************
_TRANS1:

LF3	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,2
	LAR	AR0,*0+,AR2

	.sym	_TRANS,-3+LF3,4,9,16
	.sym	_E,-4+LF3,4,9,16
	.sym	_i,1,4,1,16
	.line	4
;>>>> 	{  int i=0;
	LACK	0
	LARK	AR2,1
	MAR	*0+
	SACL	* 
	.line	5
;>>>> 	   LCDSTA1(E);							       //判断液晶是否为忙
	SBRK	5-LF3
	LAC	* ,AR1
	SACL	*+
	CALL	_LCDSTA1
	MAR	*-,AR3
	.line	6
;>>>> 	   PBDATDIR=PBDATDIR|0x0FF00;				   //IOPB口为输出
	LARK	AR3,28826
	LACK	65280
	OR	* 
	SACL	* ,AR2
	.line	7
;>>>> 	   if(E==1)   PADATDIR=0x0FF18;                //E1=1,
	LARK	AR2,-4+LF3
	MAR	*0+
	LAC	* 
	SUBK	1
	BNZ	L8
	MAR	* ,AR3
	SBRK	2
	SPLK	#-232,* 
	B	L9
L8:
	.line	8
;>>>> 	    else   PADATDIR=0x0FF20;                   //E2=1,
	MAR	* ,AR3
	SBRK	2
	SPLK	#-224,* 
L9:
	.line	9
;>>>> 	   PFDATDIR=(PFDATDIR&0x0FFf3)|0x0010;                           //LCD_RW = 0;
;>>>> 		                                           //LCD_DI = 0;
;>>>> 	                                               //LCD_E = 1;
	LACK	65523
	SBRK	2
	AND	* 
	ORK	16
	SACL	* 
	.line	12
;>>>> 	   PBDATDIR=(PBDATDIR&0x0FF00)|TRANS;		   //需要写入的命令字送入数据线
	LACK	65280
	ADRK	4
	AND	* ,AR2
	MAR	*+
	OR	* ,AR3
	SACL	* ,AR2
	.line	13
;>>>> 		for(i=0; i<2; i++){}	
	LACK	0
	ADRK	4-LF3
	SACL	* 
	LAC	* 
	SUBK	2
	BGEZ	L11
L10:
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	* 
	SUBK	2
	BLZ	L10
L11:
	.line	14
;>>>> 		PFDATDIR=PFDATDIR&0x0FFef; 				   //LCD_E = 0;
	LARK	AR3,28822
	LACK	65519
	MAR	* ,AR3
	AND	* 
	SACL	* ,AR1
EPI0_3:
	.line	15
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	103,000000000H,2

	.sym	_WRITE1,_WRITE1,32,2,0
	.globl	_WRITE1

	.func	106
;>>>> 	void WRITE1(WRITE,Yaddress,E)			       //WRITE代表需要写入的数据,Yaddress代表需要的列地址
;>>>> 	int WRITE,Yaddress,E;
******************************************************
* FUNCTION DEF : _WRITE1
******************************************************
_WRITE1:

LF4	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,2
	LAR	AR0,*0+,AR2

	.sym	_WRITE,-3+LF4,4,9,16
	.sym	_Yaddress,-4+LF4,4,9,16
	.sym	_E,-5+LF4,4,9,16
	.sym	_i,1,4,1,16
	.line	3
	.line	4
;>>>> 	int i=0;
	LACK	0
	LARK	AR2,1
	MAR	*0+
	SACL	* 
	.line	5
;>>>> 	TRANS1(Yaddress,E); 					        //设置列地址
	SBRK	6-LF4
	LAC	*+,AR1
	SACL	*+,AR2
	LAC	* ,AR1
	SACL	*+
	CALL	_TRANS1
	SBRK	2
	.line	6
;>>>> 	LCDSTA1(E);				   		                //查询液晶是否空闲
	MAR	* ,AR2
	LARK	AR2,-5+LF4
	MAR	*0+
	LAC	* ,AR1
	SACL	*+
	CALL	_LCDSTA1
	MAR	*-,AR3
	.line	7
;>>>> 	PBDATDIR=PBDATDIR|0x0FF00;					    //IOPB口为输出
	LARK	AR3,28826
	LACK	65280
	OR	* 
	SACL	* ,AR2
	.line	8
;>>>> 	if(E==1)  PADATDIR=0x0FF18;					    //E1=1
	LARK	AR2,-5+LF4
	MAR	*0+
	LAC	* 
	SUBK	1
	BNZ	L12
	MAR	* ,AR3
	SBRK	2
	SPLK	#-232,* 
	B	L13
L12:
	.line	9
;>>>> 	 else  PADATDIR=0x0FF20; 					    //E1=0,E2=1
	MAR	* ,AR3
	SBRK	2
	SPLK	#-224,* 
L13:
	.line	10
;>>>> 	   PFDATDIR=(PFDATDIR|0x0014)&0x0fff7;// LCD_RW = 0;
;>>>> 						//LCD_DI = 1;
;>>>> 						//LCD_E = 1;
	LACK	20
	SBRK	2
	OR	* 
	ANDK	65527
	SACL	* 
	.line	13
;>>>> 		PBDATDIR=(PBDATDIR&0x0FF00)|WRITE;		    //写入数据
	LACK	65280
	ADRK	4
	AND	* ,AR2
	ADRK	2
	OR	* ,AR3
	SACL	* ,AR2
	.line	14
;>>>> 		for(i=0; i<2; i++){}
	LACK	0
	ADRK	4-LF4
	SACL	* 
	LAC	* 
	SUBK	2
	BGEZ	L15
L14:
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	* 
	SUBK	2
	BLZ	L14
L15:
	.line	15
;>>>> 		PFDATDIR=PFDATDIR&0x0FFef; 				    //LCD_E = 0;
	LARK	AR3,28822
	LACK	65519
	MAR	* ,AR3
	AND	* 
	SACL	* ,AR1
EPI0_4:
	.line	17
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	122,000000000H,2

	.sym	_DISP1,_DISP1,32,2,0
	.globl	_DISP1

	.func	124
;>>>> 	void DISP1(E)
;>>>> 	int E;
******************************************************
* FUNCTION DEF : _DISP1
******************************************************
_DISP1:

LF5	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,3
	LAR	AR0,*0+,AR2

	.sym	_E,-3+LF5,4,9,16
	.sym	_E1FLAG,1,4,1,16
	.sym	_i,2,4,1,16
	.line	3
	.line	4
;>>>> 	    int E1FLAG,i=0;
;>>>> 	   while(1)
	LACK	0
	LARK	AR2,2
	MAR	*0+
	SACL	* 
	SBRK	5-LF5
L16:
	.line	7
;>>>> 	  TRANS1(0x03F,E);				              	//送出控制字
	LAC	* ,AR1
	SACL	*+
	LACK	63
	SACL	*+
	CALL	_TRANS1
	SBRK	2
	.line	8
;>>>> 	  LCDSTA1(E);			                        //判断液晶是否为忙
	MAR	* ,AR2
	LARK	AR2,-3+LF5
	MAR	*0+
	LAC	* ,AR1
	SACL	*+
	CALL	_LCDSTA1
	MAR	*-,AR3
	.line	9
;>>>> 	  PBDATDIR=PBDATDIR&0x00ff;					    //IOPB口为输入
	LARK	AR3,28826
	LACK	255
	AND	* 
	SACL	* ,AR2
	.line	10
;>>>> 	  if(E==1)   PADATDIR=0x0FF18;                  //E1=1
	LARK	AR2,-3+LF5
	MAR	*0+
	LAC	* 
	SUBK	1
	BNZ	L18
	MAR	* ,AR3
	SBRK	2
	SPLK	#-232,* 
	B	L19
L18:
	.line	11
;>>>> 	    else    PADATDIR=0x0FF20;     			    //E1=0,E2=1
	MAR	* ,AR3
	SBRK	2
	SPLK	#-224,* 
L19:
	.line	12
;>>>> 	   PFDATDIR=(PFDATDIR|0x0018)&0x0fffb;// LCD_RW = 1;
;>>>> 						//LCD_DI = 0;
;>>>> 						//LCD_E = 1;
	LACK	24
	SBRK	2
	OR	* 
	ANDK	65531
	SACL	* ,AR2
	.line	15
;>>>> 		for(i=0; i<2; i++){}
	LACK	0
	ADRK	5-LF5
	SACL	* 
	LAC	* 
	SUBK	2
	BGEZ	L21
L20:
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	* 
	SUBK	2
	BLZ	L20
L21:
	.line	16
;>>>> 		PFDATDIR=PFDATDIR&0x0ffef; 			     	//LCD_E = 0;
	LARK	AR3,28822
	LACK	65519
	MAR	* ,AR3
	AND	* 
	SACL	* 
	.line	17
;>>>> 	     E1FLAG=PBDATDIR&0x0020;				 	// 读液晶状态
	LACK	32
	ADRK	4
	AND	* ,AR2
	MAR	*-
	SACL	* 
	.line	18
;>>>> 	      if(E1FLAG==0x0000) break;  		        //如果液晶被打开,则退出循环
	LAC	* 
	BZ	L17
	.line	19
	SBRK	4-LF5
	B	L16
L17:
EPI0_5:
	.line	20
	MAR	* ,AR1
	SBRK	4
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	143,000000000H,3

	.sym	_CLEAR1,_CLEAR1,32,2,0
	.globl	_CLEAR1

	.func	146
;>>>> 	void CLEAR1(int E)
******************************************************
* FUNCTION DEF : _CLEAR1
******************************************************
_CLEAR1:

LF6	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,3
	LAR	AR0,*0+,AR2

	.sym	_E,-3+LF6,4,9,16
	.sym	_PAGENUM,1,4,1,16
	.sym	_Yaddress,2,4,1,16
	.line	2
;>>>> 	  int PAGENUM,Yaddress;		    				 //定义所需要的局部变量
	.line	4
;>>>> 	   for (PAGENUM=0x0B8; PAGENUM<=0x0BF; PAGENUM++)
	LACK	184
	LARK	AR2,1
	MAR	*0+
	SACL	* 
	SSXM
	LAC	* 
	SUBK	191
	BGZ	L24
	SBRK	4-LF6
L23:
	.line	6
;>>>> 	      TRANS1(PAGENUM,E);              			//设置相应的页地址
	LAC	* ,AR1
	SACL	*+,AR2
	ADRK	4-LF6
	LAC	* ,AR1
	SACL	*+
	CALL	_TRANS1
	SBRK	2
	.line	7
;>>>> 	     for(Yaddress=0x40; Yaddress<=0x7F; Yaddress++)
	LACK	64
	MAR	* ,AR2
	LARK	AR2,2
	MAR	*0+
	SACL	* 
	LAC	* 
	SUBK	127
	BGZ	L26
	SBRK	5-LF6
L25:
	.line	9
;>>>> 	       WRITE1(0x00,Yaddress,E);			         //向相应的列送0以清屏
	LAC	* ,AR1
	SACL	*+,AR2
	ADRK	5-LF6
	LAC	* ,AR1
	SACL	*+
	LACK	0
	SACL	*+
	CALL	_WRITE1
	SBRK	3
	.line	7
	MAR	* ,AR2
	LARK	AR2,2
	MAR	*0+
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	* 
	SUBK	127
	SBRK	5-LF6
	BLEZ	L25
L26:
	.line	4
	LARK	AR2,1
	MAR	*0+
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	* 
	SUBK	191
	SBRK	4-LF6
	BLEZ	L23
L24:
EPI0_6:
	.line	12
	MAR	* ,AR1
	SBRK	4
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	157,000000000H,3

	.sym	_DISOFF1,_DISOFF1,32,2,0
	.globl	_DISOFF1

	.func	160
;>>>> 	void DISOFF1(int E)
******************************************************
* FUNCTION DEF : _DISOFF1
******************************************************
_DISOFF1:

LF7	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,3
	LAR	AR0,*0+,AR2

	.sym	_E,-3+LF7,4,9,16
	.sym	_E1FLAG,1,4,1,16
	.sym	_i,2,4,1,16
	.line	2
	.line	4
;>>>> 	    int E1FLAG,i=0;
;>>>> 	   while(1)
	LACK	0
	LARK	AR2,2
	MAR	*0+
	SACL	* 
	SBRK	5-LF7
L27:
	.line	7
;>>>> 	  TRANS1(0x3E,E);					            //送出控制字
	LAC	* ,AR1
	SACL	*+
	LACK	62
	SACL	*+
	CALL	_TRANS1
	SBRK	2
	.line	8
;>>>> 	  LCDSTA1(E);			                        //判断液晶是否为空闲
	MAR	* ,AR2
	LARK	AR2,-3+LF7
	MAR	*0+
	LAC	* ,AR1
	SACL	*+
	CALL	_LCDSTA1
	MAR	*-,AR3

⌨️ 快捷键说明

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