亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 4096.asm

?? 凌陽單片機擴展sram 1.了解SPCE061A串行口(SIO)的結構 2.掌握SPCEE061A擴展串行存儲器的方法
?? ASM
字號:


.DEFINE C_SIOCLOCK           	0x0010;     // CPUCLOCK/8
.define	B_Busy					0x80

.const C_Program_Time			=60			//60us
.const C_SectorErase_Time		=400		//60us*400=24ms
.const C_MassErase_Time			=1166		//60us*1166=70ms

.include SPCE061.INC	
.CODE
.PUBLIC		_SP_SIOInitial;
_SP_SIOInitial:	.PROC

		 	//系統時鐘設定
		 	r1 = 0x0098;    		 		//Fosc=49mHz 
		 	[P_SystemClock] = r1;
	 	
			r1 = [P_IOB_Dir];
			r1 |= 1;						//set bit0 output for sck
			[P_IOB_Dir] = r1;
			
			r1 = [P_IOB_Attrib];
			r1 |= 1;						//buffer output
			[P_IOB_Attrib] = r1;
			
			r1 = [P_IOB_Buffer];
			r1 |= 1;						//output high
			[P_IOB_Data] = r1;
		 	retf
.ENDP
//////////////////////////////////////////////////////////////////
// Function: Send A Byte to Serial Flash
// Syntax: SP_SIOSendAByte(AddressLow,AddressHigh,  data)
// c level public
// Used register: r1,r2,r3
//////////////////////////////////////////////////////////////////
.public _SP_SIOSendAByte;
_SP_SIOSendAByte: .PROC
F_SIOSendAByte:
	    PUSH BP,BP TO [SP];
	    BP = SP + 1;
		R1 = [BP+3];
	    [P_SIO_Addr_Low]=r1;        // input SFLASH low address
	    r1=r1 lsr 4;         		// right shift 8
	    r1=r1 lsr 4;
	    [P_SIO_Addr_Mid]=r1; 		// input SFLASH mid address
	    R1 = [BP+4];                // Port direction
	    r1=r1&0x0007;  				// input SFLASH hi address
	    [P_SIO_Addr_High]=r1;
        r1=0x00C3+C_SIOCLOCK;
        [P_SIO_Ctrl]=r1;        	// clk=CPUclk/8, 24 bit address  ;write
        [P_SIO_Start]=r1;       	// enable write mode
        R1 = [BP+5];
        [P_SIO_Data]=r1;        	// state to transmit data
L_WaitSIOSendReady:
        r1=[P_SIO_Start];
        test    r1,0x0080
        jnz     L_WaitSIOSendReady
        [P_SIO_Stop]=r1;            //disable write mode
        call  F_Delay_Program_Time
        POP BP,BP FROM [SP];
        retf;
        .ENDP;


//////////////////////////////////////////////////////////////////
// Function: Read A Byte to Serial Flash
// Syntax: SP_SIOReadAByte(AddressLow, AddressHigh)
// c level public
// Used register: r1,r2,r3
// Return register: r1
//////////////////////////////////////////////////////////////////         

.public _SP_SIOReadAByte;
_SP_SIOReadAByte: .PROC
F_SIOReadAByte:
                PUSH BP,BP TO [SP];
        BP = SP + 1;
        R1 = [BP+3];
        [P_SIO_Addr_Low]=r1; 		// input SFLASH low address
        r1=r1 lsr 4;
        r1=r1 lsr 4;
        [P_SIO_Addr_Mid]=r1; 		// input SFLASH mid address
        R1 = [BP+4];                // Port direction
        r1=r1&0x0007;  				// input SFLASH hi address
        [P_SIO_Addr_High]=r1;
        r1=0x0083+C_SIOCLOCK;
        [P_SIO_Ctrl]=r1;            // clk=CPUclk/16, 24 bit address  ;read
        [P_SIO_Start]=r1;           // enable read mode
        r2=[P_SIO_Data];            // Clear SFLASH buffer
L_WaitSIOReadReady1:
        r1=[P_SIO_Start];
        test    r1,0x0080
        jnz     L_WaitSIOReadReady1
        r1=[P_SIO_Data];          	// Read exact Data
L_WaitSIOReadReady2:                // Wait read stop
        r2=[P_SIO_Start];
        test    r2,0x0080
        jnz     L_WaitSIOReadReady2
        [P_SIO_Stop]=r2;            // disable read mode
        POP BP,BP FROM [SP];
        retf;
        .ENDP;
//////////////////////////////////////////////////////////////////
// Function: Send A Word to Serial Flash
// Syntax: SP_SIOSendAData(AddressLow,AddressHigh,  data) Address must be even
// c level public
// Used register: r1,r2,r3
//////////////////////////////////////////////////////////////////
.public _SP_SIOSendAWord;
_SP_SIOSendAWord: .PROC
F_SIOSendAWord:
        PUSH BP,BP TO [SP];
        BP = SP + 1;
        r1=0x00C3+C_SIOCLOCK;
        [P_SIO_Ctrl]=r1;            // clk=CPUclk/8, 24 bit address  ;write
        R1 = [BP+3];
        [P_SIO_Addr_Low]=r1;  		// input Sflash low address
        r1=r1 lsr 4;          		// right shift 8
        r1=r1 lsr 4;
        [P_SIO_Addr_Mid]=r1;  		// input SFLASH mid address
        R1 = [BP+4];                // Port direction
        r1=r1&0x0007;  				// input SFLASH hi address
        [P_SIO_Addr_High]=r1;
        
        [P_SIO_Start]=r1;           // enable write mode
        R1 = [BP+5];
        [P_SIO_Data]=r1;            //start to transmit low byte
L_WaitSIOSendReadyLB:
        r1=[P_SIO_Start];
        test    r1,0x0080
        jnz     L_WaitSIOSendReadyLB
      
        [P_SIO_Stop]=r1;            // disable write mode
        call  F_Delay_Program_Time 

         R1 = [BP+3];
         r1+=1;
        [P_SIO_Addr_Low]=r1; 		// input SFLASH low address
             
        [P_SIO_Start]=r1;           //enable write mode
        r1=[BP+5]; 
        r1=r1 lsr 4;         		// right shift 8
        r1=r1 lsr 4;
        [P_SIO_Data]=r1;            //start to transmit high byte
L_WaitSIOSendReadyHB:
        r1=[P_SIO_Start];
        test    r1,0x0080
        jnz     L_WaitSIOSendReadyHB
        [P_SIO_Stop]=r1;            //disable write mode
		call  F_Delay_Program_Time 
		POP BP,BP FROM [SP];
        retf;
        .ENDP;


//////////////////////////////////////////////////////////////////
// Function: Read A Word from Serial Flash
// Syntax: SP_SIOReadAWord(AddressLow, AddressHigh)
// c level public
// Used register: r1,r2,r3,r4
// Return register: r1
//////////////////////////////////////////////////////////////////         

.public _SP_SIOReadAWord;
_SP_SIOReadAWord: .PROC
F_SIOReadAWord:
        PUSH BP,BP TO [SP];
        BP = SP + 1;
        r4=0x00FF;
        R1 = [BP+3];
        [P_SIO_Addr_Low]=r1; 		// input SFLASH low address
        r1=r1 lsr 4;
        r1=r1 lsr 4;
        [P_SIO_Addr_Mid]=r1; 		// input SFLASH mid address
        R1 = [BP+4];                // Port direction
        r1=r1&0x0007;  				// input SFLASH hi address
        [P_SIO_Addr_High]=r1;
        r1=0x0083;  				// C_SIOCLOCK 0x0010
        [P_SIO_Ctrl]=r1;           	// clk=CPUclk/16, 24 bit address  ;read
        [P_SIO_Start]=r1;       	// enable read mode
        r2=[P_SIO_Data];          	// Clear SFLASH buffer
L_WaitSIOReadReady1LB:
        r1=[P_SIO_Start];
        test    r1,0x0080
        jnz     L_WaitSIOReadReady1LB
        
        r2=r4&[P_SIO_Data];          // Read exact Low Byte
L_WaitSIOReadReady2LB:               // Wait read stop
        r1=[P_SIO_Start];
        test    r1,0x0080
        jnz     L_WaitSIOReadReady2LB
        
        r3=r4&[P_SIO_Data];          // Read exact High Byte

L_WaitSIOReadReady2HB:               // Wait read stop
        r1=[P_SIO_Start];
        test    r1,0x0080
        jnz     L_WaitSIOReadReady2HB
       
        [P_SIO_Stop]=r1;             // disable read mode
 
        r3=r3 lsl 4;     			 //shift left 8
        r1=r3 lsl 4;
        r1|=r2;         			 //return data
        POP BP,BP FROM [SP];
        retf;
        .ENDP;




///////////////////////////////////////////////////////////////
//Function : Mass Erase for S_Flash
// Syntax: SIOMassErase()
// Used register: r1,r2
///////////////////////////////////////////////////////////////

.public _SP_SIOMassErase;
_SP_SIOMassErase: .PROC
F_SIOMassErase:
        push r1,r2 to [sp];
        r1=0x00C0+C_SIOCLOCK;
        [P_SIO_Ctrl]=r1;            // clk=CPUclk/8, 16 bit address  ;write
        r2=0x0000;
        [P_SIO_Addr_Low]=r2; 		// input SFLASH low address
        r2=0x00C0;
        [P_SIO_Addr_Mid]=r2; 		// input SFLASH mid address
        r2=0x00C0;
       [P_SIO_Addr_High]=r2; 
        [P_SIO_Start]=r1;           // enable write mode
        r1=0;                       // A7~A0 = 0
        [P_SIO_Data]=r1;            // state to transmit data

L_WaitSIOSendReadyMass:
        r1=[P_SIO_Start];
        test    r1,0x0080
        jnz     L_WaitSIOSendReadyMass
		[P_SIO_Stop]=r1;
        call    F_Delay_MassErase_Time
        pop r1,r2 from [sp];
        retf;
        .ENDP;

///////////////////////////////////////////////////////////////
//Function : Sector Erase for S_Flash (Page Size 1K)
// Syntax: SP_SIOSectorErase(Sector)
// Used register: r1,r2
///////////////////////////////////////////////////////////////
.public _SP_SIOSectorErase;
_SP_SIOSectorErase: .PROC
SP_SIOSectorErase:
        PUSH BP,BP TO [SP];
        BP = SP + 1;
 
        R1 = [BP+3];
        r1=r1&0x00ff;
        r1=r1 lsl 3;
        r1=r1|0x8000;
        [P_SIO_Addr_Low]=r1; 	// input SFLASH low address ;for A15 and A10
        r1=r1 lsr 4;
        r1=r1 lsr 4;
        [P_SIO_Addr_Mid]=r1; 	// input SFLASH mid address ;for A16
        r1=0x00C0+C_SIOCLOCK;
        [P_SIO_Ctrl]=r1;        // clk=CPUclk/8, 16 bit address  ;write
        [P_SIO_Start]=r1;       // enable write mode
        r1=0;                   // A7~A0 = 0
        [P_SIO_Data]=r1;        // state to transmit data

L_WaitSIOSendReadyPage1:
        r1=[P_SIO_Start];
        test    r1,0x0080
        jnz     L_WaitSIOSendReadyPage1
        [P_SIO_Stop]=r1;        
        call    F_Delay_SectorErase_Time
        POP BP,BP FROM [SP];
        retf;
        .ENDP;



//=======================================================================================
//FunctionName:F_Delay_MassErase_Time
//Description:
//Author:
//Date:
//Destroy:
//Input:
//Return:
//========================================================================================
.public F_Delay_MassErase_Time;
F_Delay_MassErase_Time:
		r2=C_MassErase_Time;		
?L_Wait_MassErase_Time_Over:							       
		call	F_Delay_Program_Time;
		r2-=1;						
		jnz ?L_Wait_MassErase_Time_Over;		
		retf;						
//=======================================================================================
//FunctionName:F_Delay_SectorErase_Time
//Description:
//Author:
//Date:
//Destroy:
//Input:
//Return:
//========================================================================================
.public F_Delay_SectorErase_Time;
F_Delay_SectorErase_Time:
		r2=C_SectorErase_Time;				//6	
?L_Wait_SectorErase_Time_Over:							       
		call	F_Delay_Program_Time;
		r2-=1;								//3					
		jnz ?L_Wait_SectorErase_Time_Over;	//5	
		retf;						
//=======================================================================================
//FunctionName:F_Delay_Program_Time
//Description:
//Author:
//Date:
//Destroy:
//Input:
//Return:
//========================================================================================
.public F_Delay_Program_Time;
F_Delay_Program_Time:
		r1=C_Program_Time;			//6
?L_Wait_Program_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
		r1-=1;						//3
		jnz ?L_Wait_Program_Time_Over;		//5
		retf;						//12

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡在线视频| 日韩欧美二区三区| 成人av动漫网站| 国产麻豆精品95视频| 秋霞av亚洲一区二区三| 午夜电影网一区| 亚洲一区二区三区四区的 | 国产精品欧美久久久久无广告| 欧美zozozo| 欧美成人欧美edvon| 日韩美一区二区三区| 精品国产青草久久久久福利| 精品日韩在线观看| 久久午夜国产精品| 中文字幕成人网| 亚洲视频免费在线| 亚洲精品国产a久久久久久| 洋洋av久久久久久久一区| 亚洲一区二区三区四区中文字幕| 亚洲一区av在线| 婷婷国产在线综合| 精品一区二区三区不卡| 国产精品一区专区| 99久久伊人精品| 欧美最猛黑人xxxxx猛交| 欧美美女一区二区| 精品美女一区二区三区| 国产午夜精品理论片a级大结局| 国产女人18水真多18精品一级做| 国产精品蜜臀在线观看| 国精产品一区一区三区mba视频| 奇米色777欧美一区二区| 激情图片小说一区| 成人福利视频在线看| 欧美伊人久久久久久午夜久久久久| 欧美日韩免费不卡视频一区二区三区| 337p亚洲精品色噜噜狠狠| 欧美大肚乱孕交hd孕妇| 国产精品理论片在线观看| 一级日本不卡的影视| 日本欧美肥老太交大片| 国产精品自拍在线| 色先锋久久av资源部| 欧美一区二区日韩一区二区| 久久精品日韩一区二区三区| 亚洲人成精品久久久久| 日韩国产精品久久久久久亚洲| 国产在线精品不卡| 日本高清成人免费播放| 日韩你懂的电影在线观看| 亚洲欧洲av色图| 日本va欧美va精品| av激情亚洲男人天堂| 欧美一区二区三区四区高清| 国产精品伦一区二区三级视频| 亚洲第一成人在线| 成人中文字幕合集| 欧美精品 国产精品| 国产精品乱码一区二区三区软件| 亚洲成a人片综合在线| 国产乱人伦精品一区二区在线观看 | ...xxx性欧美| 欧美aⅴ一区二区三区视频| www.成人网.com| 欧美电影免费观看高清完整版在线观看 | 捆绑调教美女网站视频一区| 99久久精品国产毛片| 日韩小视频在线观看专区| 亚洲人成电影网站色mp4| 国产美女娇喘av呻吟久久| 欧美日韩精品一区二区三区蜜桃 | 午夜精品久久久久久久99水蜜桃| 国产福利一区二区三区视频| 5858s免费视频成人| 亚洲欧美怡红院| 国产一区二区三区| 3d成人动漫网站| 一区二区三区精品视频在线| 粉嫩av亚洲一区二区图片| 日韩一级成人av| 五月婷婷欧美视频| 色综合久久99| 国产精品美女久久久久久久 | 国产综合久久久久影院| 欧美日本一道本| 一区二区在线看| 成人app网站| 国产日产欧美一区| 经典三级一区二区| 日韩欧美国产不卡| 日本在线播放一区二区三区| 欧美在线免费视屏| 一区二区三区四区在线免费观看 | 欧美精品777| 一区二区三区精品| 色屁屁一区二区| 久久er精品视频| 欧美伊人久久大香线蕉综合69| 国产精品国模大尺度视频| 国产成人午夜精品5599| 久久久久久久一区| 精品亚洲国产成人av制服丝袜 | 亚洲精品一二三区| 91麻豆文化传媒在线观看| 国产精品久久毛片a| 成人自拍视频在线观看| 亚洲国产成人一区二区三区| 国产乱码精品一区二区三区av| 精品国产成人系列| 久久精品国产精品青草| 日韩免费看网站| 精品一区二区久久| 久久久不卡网国产精品二区| 国产毛片精品视频| 国产欧美日韩麻豆91| 成人激情图片网| 亚洲婷婷综合久久一本伊一区| 成人黄页在线观看| 亚洲黄色免费电影| 欧美日韩精品三区| 久久国产综合精品| 国产午夜久久久久| 99热国产精品| 亚洲在线一区二区三区| 欧美日韩国产a| 美脚の诱脚舐め脚责91| 国产亚洲短视频| 成人黄色免费短视频| 亚洲精品亚洲人成人网| 欧美麻豆精品久久久久久| 男人的j进女人的j一区| 国产欧美日韩视频在线观看| 99久久精品99国产精品| 亚洲一区二区三区视频在线| 欧美一区二区在线不卡| 国产一区二区网址| 亚洲欧美一区二区三区极速播放| 欧美午夜在线观看| 紧缚捆绑精品一区二区| 亚洲天堂成人在线观看| 欧美男同性恋视频网站| 国产曰批免费观看久久久| 成人欧美一区二区三区黑人麻豆 | 亚洲一区在线观看视频| 欧美一区二区三区播放老司机| 国产精品一线二线三线| 亚洲黄色免费网站| 精品国产91乱码一区二区三区| 成人精品视频一区| 亚洲va欧美va人人爽| 久久久亚洲高清| 在线视频一区二区三区| 久久不见久久见中文字幕免费| 国产精品妹子av| 91精品国产91久久综合桃花 | 欧美一区二区三区四区高清| 国产成人aaa| 亚瑟在线精品视频| 中文字幕 久热精品 视频在线| 欧美日韩一区二区在线观看 | www.爱久久.com| 青椒成人免费视频| 成人欧美一区二区三区白人| 欧美一区二区三区公司| 99久久婷婷国产综合精品电影| 日韩高清不卡一区二区| 国产精品成人一区二区三区夜夜夜| 欧美福利视频导航| 99久久久无码国产精品| 精品一区二区免费看| 亚洲国产精品久久艾草纯爱| 国产女主播在线一区二区| 欧美一级高清片| 色播五月激情综合网| 国产成人aaa| 久久99国产精品久久99果冻传媒| 亚洲激情中文1区| 国产丝袜美腿一区二区三区| 91精品国产综合久久久久久漫画 | 欧美色网站导航| 成人黄动漫网站免费app| 久久国内精品视频| 天天操天天综合网| 亚洲精品午夜久久久| 国产精品欧美一区喷水| 久久综合国产精品| 欧美一级免费大片| 欧美午夜视频网站| 91老师国产黑色丝袜在线| 国产盗摄视频一区二区三区| 免费成人在线影院| 丝袜诱惑制服诱惑色一区在线观看 | 91小宝寻花一区二区三区| 国产剧情一区二区三区| 麻豆精品久久久| 日精品一区二区| 午夜久久久久久| 亚洲高清在线视频| 亚洲在线视频网站| 夜夜操天天操亚洲|