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

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

?? pcplay.asm

?? 超聲波測距模組使用說明書 電路圖 程序 絕對有參考價值
?? ASM
字號:
//========================================================================================
// Progarm: Function definition for PC play data transmition
// Writen by: Andy
//
// Last modified date: 
// 		2000/06/23: first definition
//		2000/07/15: modify
//		2000/11/07: eliminate file head(103)
// Functions:
//  (Assembly view)
//  F_PcPlay_Initial							// PcPlay service initialization
//	F_PcPlay_ServiceLoop						// PcPlay service loop
//	F_PcPlay_GetQueue							// Get data from queue 

//  (C language view)
//	_PcPlay_Initial							// PcPlay service initialization called by C
//	_PcPlay_ServiceLoop 						// PcPlay service loop called by C
//	_PcPlay_GetQueue							// Get data from queue

//	F_CheckLPT1DataIn						
//		-F_DataGet0							// call by F_CheckLPT1DataIn:
//========================================================================================

.include hardware.inc;

//.define	CutFileHead	1;					// (103)

.define D_Q_Buffer  0x100;				// for PC play
.define D_BufferTail  D_Q_Buffer;
.public	R_ReadIndex;
.public R_WriteIndex;
.public	R_BufferHead;

//.RAM
PcPlay_Section:	.SECTION	.RAM
.VAR    R_PCPlayFlag;					// for PC play
.VAR    R_ReadIndex;
.VAR    R_WriteIndex;
.VAR    R_ResetCount;
.VAR    R_DataTemp;
.VAR    R_CommandTemp;
.VAR    R_Temp;
.VAR    R_Addr;
.VAR    R_Bank;


.VAR    R_BufferHead;
.DW		D_Q_Buffer-1 DUP(0);

.var	R_ByteCount;
.var	R_HeadCounter;
.var 	R_Lpt1TimeOutCnt;
.var	R_Lpt1TimeOutCnt1;


.CODE
//****************************************************************
// Function: Initialization of LPT1
// Input: None
// Output: None
//****************************************************************
.public	_PcPlay_Initial;
.public F_PcPlay_Initial;
_PcPlay_Initial: .PROC
F_PcPlay_Initial: 		
	 	r1 = 0;
	 	[R_WriteIndex] = r1;
        [R_ReadIndex] = r1;
        r1 = [P_IOB_Data];
        [R_PCPlayFlag] = r1;

		//...............................
		r1 = 0;		
		[R_Lpt1TimeOutCnt] = r1;
		r1 = 20;
		[R_Lpt1TimeOutCnt1] = r1;
		
L_NonPChaveData:
		r1 = [R_Lpt1TimeOutCnt];
		r1 -= 1;
		[R_Lpt1TimeOutCnt] = r1;
		jnz	L_NoCarry;	
		r1 = [R_Lpt1TimeOutCnt1];
		r1 -= 1;
		[R_Lpt1TimeOutCnt1] = r1;
L_NoCarry:	
	
		r1 = [R_Lpt1TimeOutCnt1];

		r1 = [R_Lpt1TimeOutCnt];
		r1 |= [R_Lpt1TimeOutCnt1];
		jnz	L_Lpt1NotTimeOut;
		goto	L_Lpt1TimeOut
		
L_Lpt1NotTimeOut:
		R1=0x0001;                      //clear watch dog
        [P_Watchdog_Clear]=R1;       //
  		r1 = [P_IOB_Data];				//
	  	r2 = r1;
		r3 = [R_PCPlayFlag];
        r1 = r1 xor r3;
        r1 = r1 and 0x0100;
        jz  L_NonPChaveData;
        

                
		//.................................        
        
        
        r3 = r3 xor 0x0300;
        [R_PCPlayFlag] = r3;
        r3 = r3 or 0x01ff;
        [P_IOB_Data] = r3;


		call F_CheckLPT1DataIn;
//		cmp r4, 0xf001;						// 0xf001: SACM-A2000
//		je		L_GoNextInit				// 0xf004: SACM-S480/S720
//		PC = L_Reset;						// 0xf002: SACM-S240/S120
//L_GoNextInit:								// 0xf008: FM4
											// 0xf009: FM6	

		cmp	r4, 0xf001;						//
		je	L_DataIsSACM_A2000				//		
		cmp	r4, 0xf004;						//
		je	L_DataIsSACM_S480				//
		cmp	r4, 0xf002;						//
		je	L_DataIsSACM_S240				//	
		cmp	r4, 0xf008;						//
		je	L_DataIsSACM_MS01				//

		PC = L_WrongData;

L_DataIsSACM_A2000:
		r4 = 256;
		jmp	L_PcPlayTypeSetReady;			//
L_DataIsSACM_S480:
		r4 = 257;
		jmp	L_PcPlayTypeSetReady;			//
L_DataIsSACM_S240:
		r4 = 258;
		jmp	L_PcPlayTypeSetReady;			//
L_DataIsSACM_MS01:
		r4 = 259;
	
L_PcPlayTypeSetReady:
		push	r4 to [sp];					// save return value
	
        r1 = 0;
        [R_CommandTemp] = r1;
        [R_ByteCount] = r1;
        [R_DataTemp] = r1;
        [R_ResetCount] = r1;

		
		r1 = 0;							// reset R_EndCounter
		[R_HeadCounter] = r1;			// (103)	
	
		//...... fill queue up ............		        
        r5 = 0x00;
        [R_Temp] = r5;
L_GetDataLoop0:
        
        call F_PcPlay_ServiceLoop;			//F_CheckDataInAndSave;
        
        //r5 = R_BufferHead; // for test
        	
        r5 = [R_Temp];
        r5 += 0x01;
        [R_Temp] = r5;
        cmp r5, D_BufferTail*100; // use 10 because several times to fill one byte
        //cmp	r5, D_BufferTail-1;
        jcc L_GetDataLoop0;
		//................................

		
		
		//r1 = R_BufferHead;			//for test

		pop r1 from [sp];				// return value
		
L_Lpt1TimeOut:		
		retf;	
		
L_WrongData:
		R1=0x0001;                      //clear watch dog
        [P_Watchdog_Clear]=R1;       //
		nop;
		nop;
		nop;
		retf;	
 		.ENDP;
		
//****************************************************************
// Function: Get data from printer port and put the data to the queue
// Input: Port IOA
// Output: Queue (see [R_QueueHead],[R_ReadIndex] and [R_WriteIndex] in detail
//****************************************************************
.public _PcPlay_ServiceLoop;				// original F_CheckDataInAndSave:
.public F_PcPlay_ServiceLoop;
_PcPlay_ServiceLoop: .PROC
F_PcPlay_ServiceLoop:
		
		R1=0x0001;                      //clear watch dog
        [P_Watchdog_Clear]=R1;       //
        
        r1 = [R_WriteIndex];  			//check buffer Tail 
        r2 = [R_ReadIndex];  			//
        r1 = r1 - r2;
        jpl L_QueueNonFullAndSave;
        cmp  r1, 0xffff;
        jne  L_FillDataAndSave;
L_QueueFullAndSave:
        retf;
L_QueueNonFullAndSave:
        cmp r1, D_BufferTail-1;
        jne  L_FillDataAndSave;
        retf;							// queue full
L_FillDataAndSave:
//----------------------------------------
                			
        r1 = [P_IOB_Data];			//r2 = low byte, r3= high byte
        r2 = r1;
        r3 = [R_PCPlayFlag];
        r1 = r1 xor r3;
        r1 = r1 and 0x0100;
        jne L_PChaveData;
        retf;
L_PChaveData:
		
        r1 = 0x00; //889
        [R_ResetCount] = r1;
        
        r3 = r3 xor 0x0300;
        [R_PCPlayFlag] = r3;
        r3 = r3 or 0x01ff;
        
        [P_IOB_Data] = r3;
        r3 = r2 lsl 4;
        r3 = r3 lsl 4;
        r2 = r2 and 0x00ff;
        r1 = [R_ByteCount];
        r4 = r1 + 1;
        cmp     r4, 0x04;
        jcc     L_UpDataCount;
        r4 = 0;
L_UpDataCount:
		
        [R_ByteCount] = r4;
        cmp r1, 0;
        je L_CommandCheck;
        cmp r1, 1;
        je L_DataCheck;
        cmp r1, 2;
        je L_CommandCheck1;
        r1 = [R_CommandTemp];
        jne L_IsCommand;
        r4 = [R_DataTemp];
        r4 = r4 or r3;
        pc = F_SaveDataToBuffer;

L_DataCheck:
		r4 = [R_CommandTemp];
        jne  L_IsCm2;
        [R_DataTemp] = r2;
        pc = L_ZeroData;
L_IsCm2:
        r4 = r4 or r3;
        pc = F_CommandSet;

L_CommandCheck1:
		
        cmp r3, 0;
        je   L_ZeroData;
        [R_CommandTemp] = r3;
        pc = L_ZeroData;
L_CommandCheck:
		
        cmp r3, 0;
        je  L_ZeroData;
L_IsCommand:
		
        r3 = [R_CommandTemp];
        r3 = r3 or r2;
        [R_CommandTemp] = r3;
        pc = F_CommandSet;
L_ZeroData:
        retf;

F_CommandSet:
        r1 = 0;
        [R_CommandTemp] = r1;
        [R_ByteCount] = r1;
        [R_DataTemp] = r1;
        [R_ResetCount] = r1;
        retf;
//--------------------------------  
F_SaveDataToBuffer:				// Save data to buffer

		//... Check File Head ....(103)
.ifdef CutFileHead;	
        push r1 to [sp];
        
        r1 = [R_HeadCounter];	// 
        cmp	r1, 24;				//
        jcs	L_NotFileHead;		//
        
        r1 = [R_HeadCounter];	//
        r1 += 1;				// counter ++
        [R_HeadCounter] = r1;	//
        
    	pop	r1 from [sp];		//    
		retf;					//
    
L_NotFileHead:        
    	pop	r1 from [sp];    	//	
.endif	    
        //........................
		
	


		r1 = [R_WriteIndex];  
        r3 = r1 + R_BufferHead;
        [r3] = r4;
        r1 += 0x01;
        cmp  r1, D_BufferTail;
        jcc L_NonOverTail;
        r1 = 0x00;
L_NonOverTail:
        [R_WriteIndex] = r1;
        
        
        
        r1 = 0;
        [R_CommandTemp] = r1;
        [R_ByteCount] = r1;
        [R_DataTemp] = r1;
        [R_ResetCount] = r1;
        
        retf;
		.ENDP
	


/////////////////////////////////////////////////////////
// Function: Get data from queue 
// Input: queue
// Output: R4
/////////////////////////////////////////////////////////
.public	_PcPlay_GetQueue;        
.public F_PcPlay_GetQueue;
_PcPlay_GetQueue:
F_PcPlay_GetQueue:
        r3 = [R_ReadIndex];
        r4 = [R_WriteIndex];  		//check buffer Tail
        cmp r3, r4;
        jne L_Bufferhasdata_;
        
        r4 = 0xffff;				// output 0xffff for speech end if queue is no data
        
        retf;
L_Bufferhasdata_:
        r4 = r3 + R_BufferHead;
        r4 = [r4];
        r3 += 0x01;
        cmp  r3, D_BufferTail;
        jcc L_RNonOverTail_;
        r3 = 0x00;
L_RNonOverTail_:
        [R_ReadIndex] = r3;
        retf;        
        

//============================================================================
// Function: 
// Input:
// Output:
// using: 
//  call F_CheckLPT1DataIn;
//  if z=0 data not comming yet, if z=1 data comming.
//============================================================================
F_CheckLPT1DataIn:
        r1 = [R_WriteIndex];  			//check buffer Tail 
        r2 = [R_ReadIndex];  			//
        r1 = r1 - r2;
        jpl L_QueueNonFull;
        cmp  r1, 0xffff;
        jne  L_FillData;
L_QueueFull:
        retf;
L_QueueNonFull:
        cmp r1, D_BufferTail-1;
        je  L_QueueFull;
L_FillData:
        call F_DataGet0;       //get one byte data from PC
        r4 = r3;
        call F_DataGet0;
        r4 = r4 or r2;
               
//        cmp	r4, 0xf001;
//        jne	L_DataNotComming;
//        sr |= 0x0010;			// set z flag
//L_DataNotComming:
//		sr &= 0xFFEF;			// clear z flag        
       	retf;
	   

///////////////////////////////////////////////////////
// get one byte data from LPT1
///////////////////////////////////////////////////////
F_DataGet0:                				//r2 = low byte, r3= high byte
        r5 = 0x00;						// clear time out counter
        [R_ResetCount] = r5;			//889
L_GetDataLoop1:
		R1=0x0001;                      //clear watch dog
        [P_Watchdog_Clear]=R1;       //

        r1 = [P_IOB_Data];
        //call F_STD_GetIOA;
        r2 = r1;
        r3 = [R_PCPlayFlag];
        r1 = r1 xor r3;
        r1 = r1 and 0x0100;
        jne L_PChaveData1;
        
        r1 = [R_ResetCount];			// time out counter++
        r1 += 0x01;						//889	
        [R_ResetCount] = r1;			//
        jne  L_GetDataLoop1;
        r5 += 0x01;
        cmp     r5, 0x0f;
        jcc  L_GetDataLoop1;
        
        //jmp	L_GetDataLoop1;
      	PC = L_WrongData;
        retf;
        
L_PChaveData1:
        r3 = r3 xor 0x0300;
        [R_PCPlayFlag] = r3;
        r3 = r3 or 0x01ff;
        [P_IOB_Data] = r3;
    
    	//push r1,r1 to [sp];	
        //r1 = r3;
        //call F_STD_PutIOA;	
		//pop	r1,r1 from [sp];
        
        r3 = r2 lsl 4;
        r3 = r3 lsl 4;
        r2 = r2 and 0x00ff;
		retf;


		//... For MS01 only .........................
.public F_GetQueueNoChangeAddr;		
F_GetQueueNoChangeAddr:
        r3 = [R_ReadIndex];
        r4 = [R_WriteIndex];  		//check buffer Tail
        cmp r3, r4;
        jne L_Bufferhasdata_1;
        retf;
L_Bufferhasdata_1:
        r4 = r3 + R_BufferHead;
        r4 = [r4];
        retf;
        
.public	F_QueueAddrAdd1;        
F_QueueAddrAdd1:
		r3 = [R_ReadIndex];        
        r3 += 0x01;
        cmp  r3, D_BufferTail;
        jcc L_RNonOverTail_1;
        r3 = 0x00;
L_RNonOverTail_1:
        [R_ReadIndex] = r3;
        retf;               
        //.............................................
        

//============================================================================
// Function: 3 Byte R_Lpt1TimeOutCnt ++
// Input: None
// Output: None
// Used variable: R3
//============================================================================
F_Lpt1TimeOutCntAdd1:
        R3=[R_Lpt1TimeOutCnt];
        R3 +=1;
        [R_Lpt1TimeOutCnt]=R3;
        jz      L_LT_Carry1;
        retf;
L_LT_Carry1:
        R3=[R_Lpt1TimeOutCnt+1];
        R3 +=1;
        [R_Lpt1TimeOutCnt+1]=R3;
        jz      L_LT_Carry2;
        retf;
L_LT_Carry2:
        R3=[R_Lpt1TimeOutCnt+2];
        R3 +=1;
        [R_Lpt1TimeOutCnt+2]=R3;
        retf;
//============================================================================        

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级二级三级蜜桃| 久久精品亚洲乱码伦伦中文| 亚洲综合色区另类av| 成人激情小说网站| 国产精品美女久久久久av爽李琼| 国产精品一区专区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美精品xxxxbbbb| 亚洲大型综合色站| 欧美精品在线观看一区二区| 亚洲bt欧美bt精品777| 欧美电影一区二区| 视频一区中文字幕国产| 欧美精品九九99久久| 日韩国产成人精品| 日韩美女天天操| 久久99热这里只有精品| 久久这里只有精品视频网| 国产精品小仙女| 国产欧美久久久精品影院| 成人国产在线观看| 亚洲三级免费电影| 在线观看www91| 五月激情综合婷婷| 欧美一级欧美一级在线播放| 久久99精品国产麻豆婷婷| 欧美精品一区二区三区四区 | 美女在线视频一区| 日韩精品资源二区在线| 国产精品一线二线三线| 国产精品美女久久久久久久久| 99视频在线精品| 亚洲国产综合91精品麻豆| 91精品在线麻豆| 国内一区二区在线| 国产精品国产三级国产普通话99| 91久久精品日日躁夜夜躁欧美| 一区二区三区电影在线播| 欧美日本乱大交xxxxx| 日韩精品91亚洲二区在线观看| 精品欧美一区二区在线观看| 国产精品自拍网站| 成人免费一区二区三区在线观看| 欧美视频一区二区三区在线观看| 免费在线观看日韩欧美| 国产欧美日韩三区| 欧美亚洲动漫精品| 久草在线在线精品观看| 国产精品美女视频| 精品视频一区 二区 三区| 精品一区二区精品| 亚洲欧美日韩中文播放 | 91视频在线观看| 日本视频在线一区| 国产精品毛片高清在线完整版| 欧美亚洲国产一区二区三区va | 日本不卡免费在线视频| 国产色产综合色产在线视频| 在线观看日韩av先锋影音电影院| 日本vs亚洲vs韩国一区三区二区| 国产婷婷色一区二区三区四区| 色av成人天堂桃色av| 精品一区二区三区影院在线午夜| 国产精品女人毛片| 91精品国产91久久久久久最新毛片| 国产乱码一区二区三区| 亚洲综合色视频| 国产午夜精品美女毛片视频| 日本福利一区二区| 黄页视频在线91| 亚洲国产精品嫩草影院| 国产欧美一区二区精品性| 欧美特级限制片免费在线观看| 国产一区二区三区四| 一区二区三区产品免费精品久久75| 精品久久久久久久人人人人传媒| 91美女精品福利| 精品一区二区三区久久久| 亚洲综合另类小说| 国产欧美综合在线| 日韩午夜精品视频| 91黄色在线观看| 国产99久久精品| 六月婷婷色综合| 亚洲愉拍自拍另类高清精品| 欧美激情一区在线观看| 欧美一区二区在线免费观看| 91视视频在线直接观看在线看网页在线看| 美女mm1313爽爽久久久蜜臀| 亚洲午夜一二三区视频| 国产精品视频麻豆| 欧美不卡激情三级在线观看| 色偷偷久久人人79超碰人人澡 | 九一九一国产精品| 亚洲国产中文字幕在线视频综合| 国产精品久久久久一区| 精品久久人人做人人爱| 3d成人动漫网站| 91九色最新地址| 91丨porny丨最新| 成人丝袜视频网| 国产精品影视网| 极品少妇xxxx精品少妇| 日本不卡的三区四区五区| 一区二区三区波多野结衣在线观看| 国产精品无人区| 国产午夜亚洲精品羞羞网站| 日韩精品在线网站| 91麻豆精品国产91久久久使用方法 | 欧美日韩成人综合| 在线观看91视频| 在线免费亚洲电影| 91免费在线播放| 成人精品亚洲人成在线| 国产不卡在线视频| 国产电影一区二区三区| 国产真实乱偷精品视频免| 久久成人免费网| 蜜臀av性久久久久av蜜臀妖精 | 五月综合激情婷婷六月色窝| 艳妇臀荡乳欲伦亚洲一区| 亚洲欧美一区二区久久| 亚洲视频1区2区| 日韩毛片视频在线看| 亚洲色图在线看| 亚洲欧美日韩国产一区二区三区| 亚洲人成网站影音先锋播放| 亚洲欧美乱综合| 一区二区免费看| 午夜精品久久久久久| 亚洲成人先锋电影| 视频在线在亚洲| 美女视频免费一区| 精品一区二区三区免费观看| 激情都市一区二区| 国产麻豆精品95视频| 国产福利一区二区| 成人精品免费看| 99在线热播精品免费| 色老综合老女人久久久| 欧美视频第二页| 91精品国产福利| 2023国产精品| 国产精品久久久久久久久搜平片 | 国内精品第一页| 国产大陆精品国产| 国产高清不卡一区二区| 成人av电影在线网| 色综合天天做天天爱| 欧美亚洲精品一区| 日韩视频123| 欧美极品美女视频| 一区二区三区四区五区视频在线观看| 一区二区三区在线免费观看| 午夜免费久久看| 国产综合一区二区| 成人av先锋影音| 欧美日韩综合色| 日韩精品一区二区三区在线播放 | 久久久久久99精品| 国产精品久久二区二区| 亚洲综合色视频| 久久精品久久久精品美女| 国产福利一区在线观看| 91麻豆国产精品久久| 欧美自拍偷拍午夜视频| 欧美不卡一区二区三区四区| 国产精品国产馆在线真实露脸| 亚洲一区在线观看免费| 美女精品自拍一二三四| 成人高清免费观看| 欧美日韩一级大片网址| wwww国产精品欧美| 亚洲乱码中文字幕| 日本不卡视频在线观看| 成人午夜av电影| 欧美欧美欧美欧美| 国产偷国产偷亚洲高清人白洁| 夜夜亚洲天天久久| 经典三级视频一区| 日本韩国欧美一区| 精品国产一区二区三区久久久蜜月 | 久久精品国产999大香线蕉| 成人永久aaa| 69堂精品视频| 中文字幕亚洲欧美在线不卡| 日韩av一区二区三区四区| 成人18视频在线播放| 欧美剧情电影在线观看完整版免费励志电影| 久久丝袜美腿综合| 亚洲综合成人在线视频| 国产大片一区二区| 911精品国产一区二区在线| 日本一区二区三区四区| 五月激情综合婷婷| 99re这里只有精品首页| 日韩精品一区二区三区视频在线观看| 亚洲欧美日韩国产综合在线 | 国产91富婆露脸刺激对白| 欧美精品第一页|