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

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

?? mywinch.c

?? 一種深度和拉力測量系統
?? C
?? 第 1 頁 / 共 4 頁
字號:
//**********************************************************************************
//    File:              Mywinch.c for PPS66JC Depth Measure System
//    Written By:        YE ZHAOBO, R&D Center SPT.Inc. 2005.06	
//	  Last	Version 2005
//**********************************************************************************
// This code implements a PPS66JC surface interface box using the P18F6620 MCU;
// The code was compiled using the MC18 compliler ver. 8.01pl3;
// The device frequency should be 3.6864 MHz; 
// The PCB is PPS66JC
//
//關鍵更新信息
//...存貯功能
//...已經修正時間錯誤
//...realtime計時
//...用戶自定義時鐘
//...模式控制
//...采樣控制
//...支持USB數據傳輸(Beta)
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// The following files should be included in the MPLAB project:
//
//     mywinch.c      	   -- Main source code file
//	   winch.h
//                
// Use Bootloader tech
// Support Upgrade Online
// Support E-mail: yezhaobo@hotmail.com
// All Right Reserved 
//---------------------------------------------------------------------

#include <p18f6620.h>        		// Register definitions

#include "winch.h"


///-------------
void high_routine (void); 
void low_routine (void); 
void InitPorts();
void ADCone(void);
void Sample(void);
void Version(void);
void Dectime(void);
void SampleInit(void);
void ADNow(void);
//---------------------------------------------------------------------
// Interrupt routine	中斷處理程序
//---------------------------------------------------------------------
#pragma code high_ISR = 0x08
void high_ISR(void) 
{
_asm
	goto high_routine
_endasm
}
#pragma code  

#pragma code low_ISR=0x18
void low_ISR(void)
{
	_asm 
	goto low_routine
	_endasm 
}
#pragma code

#pragma interruptlow  low_routine save=PROD
void low_routine(void)
{	
//	INTCONbits.GIEL=1;
	if(PIR1bits.RCIF!=0){
	*in++=RCREG1;
	if((in-Buf)>=80) in=Buf;//超過緩沖則將指針復位(指向緩沖的第一個地址)
	}
} 
#pragma interrupt high_routine
void high_routine (void) 
{
	if(INTCON3bits.INT1IF) {
		if(PORTBbits.RB0)
			depth.u++;
		else 
			depth.u--;
		INTCON3bits.INT1IF = 0;
	}
	if(INTCONbits.TMR0IF) {
		d0 = d1;
		d1 = depth.u;
		speed = d1 - d0;
//		f0 = f1;
//		f1 = force;
//		delta = f1 - f0;
		TL++;
		if(TL==0x02){time.l++;TL=0;}
		INTCONbits.TMR0IF = 0;
	}
}
//---------------------------------------------------------------------
//           Functions
//---------------------------------------------------------------------

void Get_RealTimeClock(void);
void Init_RealTimeClock(void);

/**********************************************************************************/
void Get_RealTimeClock(void)
{

	IdleI2C();
	StartI2C();
	while (SSPCON2bits.SEN);     		// wait until start condition is over 
	WriteI2C(0b11010000);				// Write DS1307:D0H
	NotAckI2C();

	IdleI2C();							// ensure module is idle
	if ( !SSPCON2bits.ACKSTAT )   		// test for ACK condition, if received
	{
		WriteI2C(0x00);					// DS1307 : REG Addr.
		NotAckI2C();
	}
	IdleI2C();	
	StopI2C();
	while(SSPCON2bits.PEN);				// wait until stop condition is over

	//------------------------------------------------------------------------

	IdleI2C();
	StartI2C();
	while (SSPCON2bits.SEN);     		// wait until start condition is over 
	WriteI2C(0b11010001);				// Read DS1307:D1H
	NotAckI2C();

	IdleI2C();							// ensure module is idle
	if ( !SSPCON2bits.ACKSTAT )   		// test for ACK condition, if received
	{
		real_time.Seconds = ReadI2C();
		AckI2C();
		while(SSPCON2bits.ACKEN);

		real_time.Minutes = ReadI2C();
		AckI2C();
		while(SSPCON2bits.ACKEN);

		real_time.Hours = ReadI2C();
		AckI2C();
		while(SSPCON2bits.ACKEN);

		real_time.Day = ReadI2C();
		AckI2C();
		while(SSPCON2bits.ACKEN);

		real_time.Date = ReadI2C();
		AckI2C();
		while(SSPCON2bits.ACKEN);

		real_time.Month = ReadI2C();
		AckI2C();
		while(SSPCON2bits.ACKEN);

		real_time.Year = ReadI2C();
		NotAckI2C();
		while(SSPCON2bits.ACKEN);
	}

	IdleI2C();	
	StopI2C();
		while(SSPCON2bits.PEN);				// wait until stop condition is over

}
/*------------------------------------------------------------------------------------*/
void Init_RealTimeClock(void)
{
	IdleI2C();
	StartI2C();
	while (SSPCON2bits.SEN);     		// wait until start condition is over 
	WriteI2C(0b11010000);				// Write DS1307:D0H
	NotAckI2C();

	IdleI2C();							// ensure module is idle
	if ( !SSPCON2bits.ACKSTAT )   		// test for ACK condition, if received
	{
		WriteI2C(0x00);					// DS1307 : REG Addr.
		NotAckI2C();

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Seconds);	// Configuration data  
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Minutes);	// Configuration data
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Hours);		// Configuration data
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Day);		// Configuration data
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Date);		// Configuration data
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Month);		// Configuration data
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Year);		// Configuration data
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.ctr_reg);	// Control REG
			NotAckI2C();
		}
	}

	IdleI2C();	
	StopI2C();
	while(SSPCON2bits.PEN);					// wait until stop condition is over

}
///
void Init_RealTime(void)
{
	IdleI2C();
	StartI2C();
	while (SSPCON2bits.SEN);     		// wait until start condition is over 
	WriteI2C(0b11010000);				// Write DS1307:D0H
	NotAckI2C();

	IdleI2C();							// ensure module is idle
	if ( !SSPCON2bits.ACKSTAT )   		// test for ACK condition, if received
	{
		WriteI2C(0x00);					// DS1307 : REG Addr.
		NotAckI2C();

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Seconds);	// Configuration data  
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Minutes);	// Configuration data
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Hours);		// Configuration data
			NotAckI2C();
		}
	}

	IdleI2C();	
	StopI2C();
	while(SSPCON2bits.PEN);					// wait until stop condition is over

}
void Init_RealDate(void)
{
	IdleI2C();
	StartI2C();
	while (SSPCON2bits.SEN);     		// wait until start condition is over 
	WriteI2C(0b11010000);				// Write DS1307:D0H
	NotAckI2C();

	IdleI2C();							// ensure module is idle
	if ( !SSPCON2bits.ACKSTAT )   		// test for ACK condition, if received
	{
		WriteI2C(0x04);					// DS1307 : REG Addr.
		NotAckI2C();

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Date);	// Configuration data  
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Month);	// Configuration data
			NotAckI2C();
		}

		IdleI2C();			
		if ( !SSPCON2bits.ACKSTAT )   	
		{
			WriteI2C(real_time.Year);		// Configuration data
			NotAckI2C();
		}
	}

	IdleI2C();	
	StopI2C();
	while(SSPCON2bits.PEN);					// wait until stop condition is over

}
////
char hextodec(unsigned char temp)
{
	unsigned char a,b,c;
	a=(temp&0xf0)>>4;
	b=(temp&0x0f);
	c=10*a+b;
	return c;
}

void Recorddepth(void)
{
	IdleI2C();
	StartI2C();
	while (SSPCON2bits.SEN);     		// wait until start condition is over 
	WriteI2C(0b11010000);				// Write DS1307:D0H
	NotAckI2C();

	IdleI2C();							// ensure module is idle
	if ( !SSPCON2bits.ACKSTAT )   		// test for ACK condition, if received
	{
		WriteI2C(0b00010000);					// DS1307 : REG Addr.0x10
		NotAckI2C();

		for(i=0;i<4;i++){
			IdleI2C();			
			if ( !SSPCON2bits.ACKSTAT ){
				WriteI2C(depth.c[i]);	// Configuration data  
				NotAckI2C();
			}
		}
	}

	IdleI2C();	
	StopI2C();
	while(SSPCON2bits.PEN);					// wait until stop condition is over

}

void Readrecord(void)
{
char e,i;

	IdleI2C();
	StartI2C();
	while (SSPCON2bits.SEN);     		// wait until start condition is over 
	WriteI2C(0b11010000);				// Write DS1307:D0H
	NotAckI2C();

	IdleI2C();							// ensure module is idle
	if ( !SSPCON2bits.ACKSTAT )   		// test for ACK condition, if received
	{
		WriteI2C(0b00010000);					// DS1307 : REG Addr.0x10
		NotAckI2C();
	}
	IdleI2C();	
	StopI2C();
	while(SSPCON2bits.PEN);				// wait until stop condition is over

Nop();
Nop();
///------------------------------------------------------------------------

	IdleI2C();
	StartI2C();
	while (SSPCON2bits.SEN);     		// wait until start condition is over 
	WriteI2C(0b11010001);				// Read DS1307:D1H
	NotAckI2C();

	IdleI2C();							// ensure module is idle
	if ( !SSPCON2bits.ACKSTAT )   		// test for ACK condition, if received
	{

	for(i=0;i<4;i++){
			depth.c[i] = ReadI2C();
			AckI2C();
			while(SSPCON2bits.ACKEN);
		}

			e = ReadI2C();
			AckI2C();
			while(SSPCON2bits.ACKEN);
	}

	IdleI2C();	
	StopI2C();
	while(SSPCON2bits.PEN);				// wait until stop condition is over
}
/////
void Dectime(void)
{

	Get_RealTimeClock();

	sec=hextodec(real_time.Seconds);
	min=hextodec(real_time.Minutes);
	hour=hextodec(real_time.Hours);
	mday=hextodec(real_time.Date);
	mon=hextodec(real_time.Month);
	year=hextodec(real_time.Year)+2000;

}
unsigned int sleyear(unsigned int yr)
{
if(yr%4==0||(yr%4==0&&yr%100!=0)) return(366);
  else return(365);
}
//////
void DostoUnix(void)
{
	unsigned int i;
	unsigned  long j;

	j=0;
///從1970到現在的天數
	 for(i=2000; i<year; i++){
	  j=j+sleyear(i);///2000~2005
	 }
///計算本年到現在天數  
	 for(i=0; i<(mon-1); i++){
	  j+=moninit[i]; 
	 }
	j=j+mday;
///若本年為閏年則加1天
	 if(mon >= 2 && sleyear(year) == 366)  j++;
     j=j-1;
	 j=j*86400;
	 j=j+(hour*3600);
	 j=j+(min*60);
	 j=j+sec;
	 totalsec=j;
     time.l=totalsec;	///給計時賦初值
   	 Nop();
     Nop();
}
//-------------------------------------
//-------------串口接收與發送
//-------------------------------------
char getch(void)
{
	char c;
	while(in==out);//相等表示沒有新數據進來
	c = *out;
	out++;
	if((out-Buf)>=80) out=Buf;
	return c;
}
void SCISend(char c)
{
	while(TXSTA1bits.TRMT==0);
	TXREG1=c;
}
void putch(char c)
{
	while(TXSTA1bits.TRMT==0);
	TXREG1=c;
}
void ResetMem(void)
{
//MEM
	MEM_CE=0;
	MEM_CLE=0;
	MEM_WE=1;
	MEM_ALE=0;
	MEM_RE=1;
}
//======================
//-----存儲器代碼-------
//======================
void SCILoadAddr(void)
{
	MEM_sector = (Buf[5] & 0x0f);
	MEM_block  =  Buf[6];
	MEM_page   =  Buf[7];
	MEM_line   =  Buf[8];
}
//--------------
void MEM_COMD(char command)
{
	TRISD=0X00;
	PORTD=0X00;
	MEM_CLE=0;
//command
	MEM_CLE=1;
	MEM_CE=0;
	MEM_ALE=0;
	MEM_WE=0;
	PORTD=command;
	MEM_WE=1;
	MEM_CLE=0;
	TRISD = 0xFF;
}
//----存儲地址計算
void MEM_CalAddr(unsigned char sector_addr,
                 unsigned char block_addr,
                 unsigned char page_addr)
{
	second_addr = ((block_addr & 0x07)<<5) | page_addr;
	third_addr  = ((sector_addr & 0x07)<<5) | ((block_addr & 0xF8)>>3);
}

//--------------
void MEM_WeAddr(void)
{
//char first_addr,char second_addr,char third_addr
	TRISD=0X00;
	PORTD=0X00;
//address
	MEM_ALE=1;
	MEM_WE=0;
	PORTD=first_addr;
	MEM_WE=1;

	MEM_WE=0;
	PORTD= second_addr;
	MEM_WE=1;

	MEM_WE=0;	
	PORTD=third_addr;
	MEM_WE=1;
	MEM_ALE=0;

	Delay1TCY();
	Delay1TCY();
	Delay1TCY();
	Delay1TCY();
	Delay1TCY();
	Delay1TCY();
	Delay1TCY();
	Delay1TCY();
	Delay1TCY();
	Delay1TCY();			

	TRISD=0XFF;
}
//---------------------
unsigned char MEM_status(void)
{
	char stu;

	PORTE = 0xe6;
	TRISE = 0x00;				// Set port D as output

	MEM_DIR = 1;
	TRISD = 0x00;				// Set port D as output
	MEM_COMD(0x70);
	TRISD = 0x00;

	MEM_DIR = 0;
	TRISD = 0xFF;

	MEM_CE = 0;

	Delay1KTCYx(100);

	MEM_RE = 0;
	stu = PORTD;
	MEM_RE = 1;

	MEM_CE = 1;
	MEM_DIR = 1;
	return(stu);
}
//----------------------------------------------------------------------------------
void MEM_EraseBlock(unsigned char sector_addr,
                    unsigned char block_addr,
                    unsigned char page_addr)
{

	TRISD=0X00;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一区二区在线观看| 欧美激情一区不卡| 久久综合色鬼综合色| 久久久青草青青国产亚洲免观| 欧美成人猛片aaaaaaa| 国产欧美在线观看一区| 亚洲美腿欧美偷拍| 日韩国产成人精品| 国产激情91久久精品导航| 97精品国产露脸对白| 欧美日韩在线综合| 亚洲国产高清在线| 五月婷婷久久综合| 成人精品国产一区二区4080| 欧美日韩色综合| 中文字幕乱码亚洲精品一区 | 久久99国内精品| 色综合久久中文综合久久牛| 日韩欧美专区在线| 亚洲乱码国产乱码精品精98午夜| 蜜臀av亚洲一区中文字幕| 99热在这里有精品免费| 久久久久久久久岛国免费| 一区二区三区在线观看网站| 黑人巨大精品欧美黑白配亚洲| 日韩毛片视频在线看| 国产成人福利片| 国产福利91精品一区二区三区| 欧美三级三级三级| 亚洲美女在线国产| 国产乱理伦片在线观看夜一区| 欧美在线观看18| 亚洲精品一二三区| bt7086福利一区国产| 国产喂奶挤奶一区二区三区| 另类中文字幕网| 日韩女优av电影| 日本美女一区二区| 精品国产成人系列| 国产一区二区三区在线观看免费 | 久久精品人人做人人爽人人| 人妖欧美一区二区| 精品人在线二区三区| 韩国女主播一区| 国产亚洲精品aa午夜观看| 国产成人无遮挡在线视频| 国产精品女人毛片| 91精品办公室少妇高潮对白| 亚洲美女一区二区三区| 欧美老年两性高潮| 久久成人精品无人区| 国产女同互慰高潮91漫画| a级精品国产片在线观看| 一个色在线综合| 日韩精品影音先锋| 国产不卡在线播放| 亚洲国产美女搞黄色| 欧美一级二级在线观看| 国产成都精品91一区二区三| 亚洲品质自拍视频| 91精品国产一区二区三区香蕉| 韩国一区二区三区| 亚洲色欲色欲www| 88在线观看91蜜桃国自产| 国产一区二区三区免费在线观看| 中文字幕视频一区| 日韩一区二区三区电影在线观看 | 国产视频视频一区| 欧美日韩视频专区在线播放| 成人免费福利片| 蜜桃视频一区二区| 亚洲一区二区欧美激情| 久久久99久久| 日韩一级免费一区| 欧美亚洲综合一区| 91丝袜呻吟高潮美腿白嫩在线观看| 天天av天天翘天天综合网 | 国产精品女人毛片| 亚洲精品在线观看视频| 欧美中文字幕一区二区三区亚洲| 国产成人久久精品77777最新版本| 婷婷激情综合网| 亚洲国产cao| 一区二区成人在线| 国产精品色在线| 国产日韩亚洲欧美综合| 欧美哺乳videos| 日韩精品一区二区三区老鸭窝| 欧美性xxxxxxxx| 欧美日韩亚洲综合一区二区三区| 99久免费精品视频在线观看| 国产高清不卡一区| 国产九色sp调教91| 国产99久久精品| 不卡的av电影| 色妞www精品视频| 91国在线观看| 欧美色爱综合网| 欧美精三区欧美精三区| 综合自拍亚洲综合图不卡区| 久久麻豆一区二区| 国产精品美女久久久久久久久| 国产精品久久免费看| 亚洲同性gay激情无套| 亚洲欧美色一区| 色综合久久精品| 欧美久久免费观看| 国产日韩欧美不卡| 国产精品福利av| 婷婷国产在线综合| 国产精品一区三区| 欧美在线看片a免费观看| 日韩欧美久久久| 国产精品成人免费| 日韩激情中文字幕| 不卡的看片网站| 日韩网站在线看片你懂的| 久久精品在线观看| 亚洲亚洲精品在线观看| 国产在线观看一区二区| 91久久免费观看| 26uuuu精品一区二区| 一区二区三区欧美视频| 精品亚洲国产成人av制服丝袜| 91亚洲午夜精品久久久久久| 欧美xxxxx牲另类人与| 欧美日韩高清一区| 久久亚区不卡日本| 日韩精品欧美精品| 99久久精品一区| 久久影音资源网| 日本特黄久久久高潮| 91极品视觉盛宴| 国产精品成人网| 国产福利一区二区| av成人免费在线观看| 欧美日韩夫妻久久| 亚洲综合小说图片| 99久久婷婷国产综合精品电影 | 欧美国产一区二区在线观看 | 欧美国产精品一区二区| 日韩成人免费在线| 欧美肥妇bbw| 亚洲二区在线视频| 色伊人久久综合中文字幕| 中文字幕中文字幕一区二区| 国产一区二区在线观看视频| 欧美一级夜夜爽| 男女男精品网站| 日韩视频一区二区三区在线播放 | 成人黄色一级视频| 国产精品午夜免费| 99re成人在线| 亚洲精品国产视频| 欧美亚洲另类激情小说| 亚洲一区在线观看免费| 欧美日韩国产首页| 开心九九激情九九欧美日韩精美视频电影 | 亚洲午夜电影在线| 91精品国产综合久久婷婷香蕉| 亚洲国产精品久久久久秋霞影院| 欧美丝袜丝交足nylons图片| 日一区二区三区| 精品日产卡一卡二卡麻豆| 国产精品一区二区无线| 国产精品蜜臀av| 在线免费观看日本欧美| 日韩经典中文字幕一区| 久久人人97超碰com| 91九色02白丝porn| 激情综合五月婷婷| 自拍偷拍国产亚洲| 日韩一区二区三免费高清| 成人午夜免费电影| 日韩高清国产一区在线| 久久精品欧美日韩精品| 欧美日韩中字一区| 成人性生交大片免费看在线播放| 1000精品久久久久久久久| 欧美一区二区三区四区久久| 国产二区国产一区在线观看| 亚洲一二三级电影| 中文字幕一区不卡| 日韩欧美国产一区二区在线播放| 94-欧美-setu| 国产曰批免费观看久久久| 香蕉影视欧美成人| 亚洲免费在线视频一区 二区| 欧美r级在线观看| 欧美美女视频在线观看| 91免费版在线看| 免费观看一级欧美片| 国产精品三级在线观看| 欧美一级电影网站| 一本色道久久加勒比精品| 国产精品一区在线观看你懂的| 亚洲夂夂婷婷色拍ww47 | 亚洲色图.com| 中文一区在线播放| 国产午夜亚洲精品羞羞网站|