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

📄 2808.asm

📁 台湾凌阳单片机SPCE061A单芯片做的一个带按健LCD显示
💻 ASM
字号:
.include hardware.inc; 
.CONST 		C_Program_Time			 	= 40		//50*10=500us
.CONST 		C_blockErase_Time		 	= 6   		//500*6 =3ms
.CONST      C_read_Time                 =8        //10us  Data Transfer form Cell to Register
.CODE

.DEFINE     SM_RE    0X0800   //  ==IOB11
.DEFINE     SM_CE    0X1000   //  ==IOB12
.DEFINE     SM_CLE   0X2000   //  ==IOB13
.DEFINE     SM_ALE   0X4000   //  ==IOB14
.DEFINE     SM_WE    0X8000   //  ==IOB15


.public _SP_WriteCmd;
_SP_WriteCmd: .PROC
        push bp to [sp] 
        bp = sp + 1 
        push r1 to [sp]
        r1 = [bp+3]             //cmd
        call	F_SP_WriteCmd
        pop r1 from [sp]
        pop bp from [sp] 
        retf 
        .ENDP
.public F_SP_WriteCmd;
F_SP_WriteCmd:.proc
         push r1,r3 to [sp]
       
         setbit(SM_CLE);
         clrbit((~SM_ALE)&(~SM_CE));
         NOP;
        [P_IOA_Data]=r1
        clrbit(~SM_WE);
        NOP;
         
         setbit(SM_WE);
         nop;
         clrbit(~SM_CLE);
         setbit(SM_CE);
        
        pop r1,r3 from [sp]
        retf 
 .ENDP
 .public _SP_WriteAddr;
_SP_WriteAddr: .PROC
        push bp to [sp] 
        bp = sp + 1 
        push r1 to [sp]
        r1 = [bp+3]             //addr
        call	F_SP_WriteAddr
        pop r1 from [sp]
        pop bp from [sp] 
        retf 
        .ENDP
.public F_SP_WriteAddr;
F_SP_WriteAddr:.proc
         push r1,r3 to [sp]
         
         clrbit(~SM_CE);
         clrbit(~SM_CLE);
         setbit(SM_ALE);
         NOP;
         [P_IOA_Data]=r1
         NOP;
         clrbit(~SM_WE);
         NOP;
         setbit(SM_WE);
         clrbit(~SM_ALE);
                 
        pop r1,r3 from [sp]
        retf 
 .ENDP
 .public _SP_WriteData;
_SP_WriteData: .PROC
        push bp to [sp] 
        bp = sp + 1 
        push r1 to [sp]
        r1 = [bp+3]             //Data
        call	F_SP_WriteData
        pop r1 from [sp]
        pop bp from [sp] 
        retf 
        .ENDP
.public F_SP_WriteData;
F_SP_WriteData:.proc
         push r1,r3 to [sp]
         
         clrbit((~SM_CE)&(~SM_ALE)&(~SM_CLE));
         NOP;
         clrbit(~SM_WE);
         [P_IOA_Data]=r1
         NOP;

         setbit(SM_WE);
                
        pop r1,r3 from [sp]
        retf 
 .ENDP
 .public _SP_WriteData_Eoc;
_SP_WriteData_Eoc: .PROC
        push bp to [sp] 
        bp = sp + 1 
        push r1 to [sp]
        r1 = [bp+3]             //cmd
        call	F_SP_WriteData_Eoc
        pop r1 from [sp]
        pop bp from [sp] 
        retf 
        .ENDP
.public F_SP_WriteData_Eoc;
F_SP_WriteData_Eoc:.proc
         push r1,r3 to [sp]
        
         setbit(SM_WE);
         
         pop r1,r3 from [sp]
         retf 
 .ENDP
 .public _SP_Read_Init
 _SP_Read_Init: .proc
   push r2,r2 to [sp]
   
   clrbit((~SM_CE)&(~SM_ALE)&(~SM_CLE));
   
   setbit(SM_WE);
   
   R2 = [P_IOA_Dir];	   //数据线IOA0~IOA7设为输入
   R2 &=0xFF00;
   [P_IOA_Dir] = R2;
   
   pop r2,r2 from [sp] 
   RETF    
 .endp    
 .public _SP_Read_Over
 _SP_Read_Over: .proc
   push r3,r3 to [sp]
   
   R3 = [P_IOA_Dir];	   //数据线IOA0~IOA7设为输出
   R3 |=0xffff;
   [P_IOA_Dir] = R3;
   
   pop r3,r3 from [sp] 
   RETF    
 .endp    
 
 .public _SP_serial_Read
_SP_serial_Read:      .PROC
        call	F_SP_serial_Read   // R1: return value
        retf 
        .ENDP
.public      F_SP_serial_Read      
F_SP_serial_Read:.proc
        push r2,r2 to [sp]
        
        clrbit(~SM_RE);
        nop;
        R1 = [P_IOA_Data] 

        setbit(SM_RE);
                
        pop r2,r2 from [sp]     // don't pop r1(return value)   
        retf 
 .endp      
.public _SP_serial_Read1_Eoc
_SP_serial_Read1_Eoc:      .PROC
        call	F_SP_serial_Read1_Eoc   // R1: return value
        retf 
 .ENDP
.public  F_SP_serial_Read1_Eoc      
F_SP_serial_Read1_Eoc:.proc
        push r2,r2 to [sp]
        
        setbit(SM_CE);
        
        pop r2,r2 from [sp]     //
        retf 
 .endp      
 
 
//块察除时间3MS//
.PUBLIC _F_Delay_blockErase_Time;
_F_Delay_blockErase_Time: .PROC
			r2 = C_blockErase_Time;				//6	
?L_Wait_blockErase_Time_Over:							       
			call	F_Delay_Program_Time;
			r2- = 1;								//3					
			jnz ?L_Wait_blockErase_Time_Over;		//5	
			retf;						
.ENDP
//写入延时500US//
.PUBLIC _F_Delay_Program_Time;
 _F_Delay_Program_Time:.proc
         call F_Delay_Program_Time
       retf
 .endp
.public F_Delay_Program_Time;
  F_Delay_Program_Time: .PROC
			r1 = C_Program_Time;				//6	
?L_Wait_Program_Time_Over:							       
			call	F_Delay_read_Time;
			r1- = 1;								//3					
			jnz ?L_Wait_Program_Time_Over;		//5	
			retf;						
.ENDP
//数据建立时间10US/////////Data Transfer form Cell to Register
.PUBLIC _F_Delay_read_Time;
_F_Delay_read_Time: .PROC
        call F_Delay_read_Time;
        retf
   .endp
.PUBLIC F_Delay_read_Time;
F_Delay_read_Time: .PROC
			r3 = C_read_Time;					//6
?L_Wait_read_Time_Over:							//52cycle,1us @ 49Mhz       
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			nop;									//4
			r3- = 1;								//3
			jnz ?L_Wait_read_Time_Over;			//5
			retf;									//12
.endp

⌨️ 快捷键说明

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