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

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

?? uart.c

?? 四軸飛行器代碼.rar
?? C
字號:
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Regler f黵 Brushless-Motoren
// + ATMEGA8 mit 8MHz
// + (c) 01.2007 Holger Buss
// + Nur f黵 den privaten Gebrauch / NON-COMMERCIAL USE ONLY
// + Keine Garantie auf Fehlerfreiheit
// + Kommerzielle Nutzung nur mit meiner Zustimmung
// + Der Code ist f黵 die Hardware BL_Ctrl V1.0 entwickelt worden
// + www.mikrocontroller.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#include "main.h"
#include "uart.h"

#define MAX_SENDE_BUFF     100
#define MAX_EMPFANGS_BUFF  100

unsigned volatile char SIO_Sollwert = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned char MeineSlaveAdresse;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned volatile char AnzahlEmpfangsBytes = 0;

struct str_DebugOut    DebugOut;


int Debug_Timer;


SIGNAL(INT_VEC_TX)
{
}

void SendUart(void)
{
 static unsigned int ptr = 0;
 unsigned char tmp_tx;
 if(!(UCSRA & 0x40)) return;
 if(!UebertragungAbgeschlossen)  
  {
   ptr++;                    // die [0] wurde schon gesendet
   tmp_tx = SendeBuffer[ptr];  
   if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
    {
     ptr = 0;
     UebertragungAbgeschlossen = 1;
    }
   USR |= (1<TXC);
   UDR = tmp_tx; 
  } 
  else ptr = 0;
}

// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max)  // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
 unsigned char a,b,c,d;
 unsigned char ptr = 0;
 unsigned char x,y,z;
 while(len)
  {
   a = RxdBuffer[ptrIn++] - '=';
   b = RxdBuffer[ptrIn++] - '=';
   c = RxdBuffer[ptrIn++] - '=';
   d = RxdBuffer[ptrIn++] - '=';
   if(ptrIn > max - 2) break;     // nicht mehr Daten verarbeiten, als empfangen wurden

   x = (a << 2) | (b >> 4);
   y = ((b & 0x0f) << 4) | (c >> 2);
   z = ((c & 0x03) << 6) | d;

   if(len--) ptrOut[ptr++] = x; else break;
   if(len--) ptrOut[ptr++] = y; else break;
   if(len--) ptrOut[ptr++] = z;	else break;
  }

}


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Daten黚ertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
 
#if  X3D_SIO == 1
 static unsigned char serPacketCounter = 100;
    SioTmp = UDR;
	if(SioTmp == 0xF5)     // Startzeichen
	 {
  	  serPacketCounter = 0;
	 }
	else 
	 {
    	  if(++serPacketCounter == MotorAdresse) // (1-4)
    	  {
    		SIO_Sollwert = SioTmp;
            SIO_Timeout = 200; // werte f黵 200ms g黮tig
    	  }
    	  else
    	  { 
    	   if(serPacketCounter > 100) serPacketCounter = 100;
		  }
	 }
#else
 static unsigned int crc;
 static unsigned char crc1,crc2,buf_ptr;
 static unsigned char UartState = 0;
 unsigned char CrcOkay = 0;
 
 SioTmp = UDR;
 if(buf_ptr >= MAX_EMPFANGS_BUFF)    UartState = 0;
 if(SioTmp == '\r' && UartState == 2) 
  {
   UartState = 0;
   crc -= RxdBuffer[buf_ptr-2];
   crc -= RxdBuffer[buf_ptr-1];
   crc %= 4096;
   crc1 = '=' + crc / 64;
   crc2 = '=' + crc % 64;
   CrcOkay = 0;
   if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; };
   if(CrcOkay) // Datensatz schon verarbeitet
    {
     //NeuerDatensatzEmpfangen = 1; 
	 AnzahlEmpfangsBytes = buf_ptr;
     
     RxdBuffer[buf_ptr] = '\r';
	 if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
     uart_putchar(RxdBuffer[2]);	 
	 if (RxdBuffer[2] == 't') // Motortest
            { Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
			  SIO_Sollwert = MotorTest[MotorAdresse - 1];
              SIO_Timeout = 500; // werte f黵 500ms g黮tig
 
			}
	}				  
  }
  else
  switch(UartState)
  {
   case 0:
          if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1;  // Startzeichen und Daten schon verarbeitet
		  buf_ptr = 0;
		  RxdBuffer[buf_ptr++] = SioTmp;
		  crc = SioTmp;
          break;
   case 1: // Adresse auswerten
		  UartState++;
		  RxdBuffer[buf_ptr++] = SioTmp;
		  crc += SioTmp;
		  break;
   case 2: //  Eingangsdaten sammeln
		  RxdBuffer[buf_ptr] = SioTmp;
		  if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++; 
		  else UartState = 0;
		  crc += SioTmp;
		  break;
   default: 
          UartState = 0; 
          break;
  }

	 
#endif
};


// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
 unsigned int tmpCRC = 0,i; 
 for(i = 0; i < wieviele;i++)
  {
   tmpCRC += SendeBuffer[i];
  }
   tmpCRC %= 4096;
   SendeBuffer[i++] = '=' + tmpCRC / 64;
   SendeBuffer[i++] = '=' + tmpCRC % 64;
   SendeBuffer[i++] = '\r';
  UebertragungAbgeschlossen = 0;
  UDR = SendeBuffer[0];
}


// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
 unsigned int pt = 0;
 unsigned char a,b,c;
 unsigned char ptr = 0;
 

 SendeBuffer[pt++] = '#';               // Startzeichen
 SendeBuffer[pt++] = modul;             // Adresse (a=0; b=1,...)
 SendeBuffer[pt++] = cmd;		        // Commando

 while(len)
  {
   if(len) { a = snd[ptr++]; len--;} else a = 0;
   if(len) { b = snd[ptr++]; len--;} else b = 0;
   if(len) { c = snd[ptr++]; len--;} else c = 0;
   SendeBuffer[pt++] = '=' + (a >> 2);
   SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
   SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
   SendeBuffer[pt++] = '=' + ( c & 0x3f);
  }
 AddCRC(pt);
}



//############################################################################
//Routine f黵 die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
	if (c == '\n')
		uart_putchar('\r');
	//Warten solange bis Zeichen gesendet wurde
	loop_until_bit_is_set(USR, UDRE);
	//Ausgabe des Zeichens
	UDR = c;
	
	return (0);
}

// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
}

//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
	//Enable TXEN im Register UCR TX-Data Enable & RX Enable

	UCR=(1 << TXEN) | (1 << RXEN);
    // UART Double Speed (U2X)
	USR   |= (1<<U2X);           
	// RX-Interrupt Freigabe

	UCSRB |= (1<<RXCIE);    // serieller Empfangsinterrupt       

	// TX-Interrupt Freigabe
//	UCSRB |= (1<<TXCIE);           

	//Teiler wird gesetzt 
	UBRR= (SYSCLK / (BAUD_RATE * 8L) -1 );
	//鰂fnet einen Kanal f黵 printf (STDOUT)
	fdevopen (uart_putchar, NULL);
    Debug_Timer = SetDelay(200);   
    // Version beim Start ausgeben (nicht sch鰊, aber geht... ) 
	uart_putchar ('\n');uart_putchar ('B');uart_putchar ('L');uart_putchar (':'); 
	uart_putchar ('V');uart_putchar (0x30 + VERSION_HAUPTVERSION);uart_putchar ('.');uart_putchar (0x30 + VERSION_NEBENVERSION/10); uart_putchar (0x30 + VERSION_NEBENVERSION%10);
    uart_putchar ('\n');uart_putchar('H');uart_putchar('W');uart_putchar (':');uart_putchar('1');uart_putchar('.');uart_putchar ((0x30-10) + HwVersion);
	uart_putchar ('\n');uart_putchar ('A');uart_putchar ('D');uart_putchar ('R'); uart_putchar (':'); uart_putchar (0x30 + MotorAdresse);

}




//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)  
{
 if((CheckDelay(Debug_Timer) && UebertragungAbgeschlossen))	 // im Singlestep-Betrieb in jedem Schtitt senden
    	 {
    	  SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
       	  Debug_Timer = SetDelay(50);   // Sendeintervall
    	 } 
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99久久99小草精品免视看| 日本sm残虐另类| 国产精品天天看| 久久精品一二三| 国产精品丝袜在线| 国产精品高潮呻吟久久| 自拍视频在线观看一区二区| 国产精品大尺度| 一区二区成人在线观看| 亚欧色一区w666天堂| 秋霞电影网一区二区| 韩日av一区二区| 波多野洁衣一区| 在线免费精品视频| 91精品欧美综合在线观看最新| 欧美大片国产精品| 国产精品女主播在线观看| 亚洲视频一二三区| 日韩av网站免费在线| 国产乱子轮精品视频| 成人高清免费观看| 欧美丰满高潮xxxx喷水动漫| 日韩欧美黄色影院| 最新欧美精品一区二区三区| 亚洲国产一区二区视频| 国产毛片精品一区| 99在线热播精品免费| 欧美一区二区三区在| 久久精品欧美一区二区三区不卡 | 丁香婷婷综合色啪| 色婷婷av一区二区三区之一色屋| 欧美一区二区三区精品| 欧美激情中文不卡| 日日摸夜夜添夜夜添国产精品| 国内精品免费**视频| 91黄色在线观看| 精品国产91乱码一区二区三区| 亚洲欧美一区二区三区久本道91| 蜜臀av性久久久久蜜臀aⅴ| av电影在线不卡| 日韩精品专区在线影院观看| 亚洲丝袜制服诱惑| 国产高清亚洲一区| 欧美肥妇free| 亚洲欧美激情小说另类| 国产高清视频一区| 精品日韩在线一区| 日日夜夜一区二区| 色成年激情久久综合| 国产精品久久久久久一区二区三区| 日韩av一区二| 欧美精三区欧美精三区| 一区二区三区日韩欧美| 成人精品电影在线观看| 久久久久久久久久久久电影| 蜜臀av性久久久久av蜜臀妖精| 精品视频在线免费观看| 亚洲人成精品久久久久| 不卡av在线网| 欧美国产一区二区在线观看| 国产一区在线不卡| 日韩免费观看高清完整版| 性做久久久久久免费观看| 91久久免费观看| 亚洲视频每日更新| 色婷婷综合久色| 亚洲男人天堂av| 91在线精品一区二区| 中文字幕亚洲一区二区av在线 | 91美女在线视频| 国产精品国产自产拍高清av王其 | 日韩欧美国产1| 日本美女视频一区二区| 欧美一级高清片| 免费不卡在线视频| 久久影院午夜片一区| 国产乱人伦偷精品视频不卡| 国产午夜一区二区三区| 成人av在线资源网站| 亚洲人成在线观看一区二区| 日本韩国一区二区| 午夜欧美大尺度福利影院在线看| 欧美日本在线播放| 老司机精品视频线观看86| 日韩欧美综合一区| 国产精品影视在线观看| 国产精品麻豆久久久| 91网页版在线| 日韩综合一区二区| 精品国产一区二区在线观看| 国产成人精品免费视频网站| 亚洲欧美综合在线精品| 欧美日韩亚洲综合| 麻豆国产精品一区二区三区| 欧美高清在线精品一区| 欧美主播一区二区三区美女| 日av在线不卡| 中文字幕在线一区免费| 在线观看视频一区| 精品一区二区三区在线播放视频| 国产午夜精品一区二区| 欧美视频完全免费看| 开心九九激情九九欧美日韩精美视频电影 | 亚洲精品久久嫩草网站秘色| 欧美日韩综合在线| 激情欧美一区二区三区在线观看| 国产精品久久久久久久浪潮网站| 欧美日韩国产一级| 国产成人在线视频网站| 亚洲成人免费视频| 国产精品色一区二区三区| 91精品国产免费| 91视频www| 国产一区二区免费视频| 亚洲夂夂婷婷色拍ww47 | 99久久精品99国产精品| 亚洲成精国产精品女| 国产精品免费观看视频| 欧美一区二区久久久| 91一区二区在线| 国产一区二区免费在线| 日本麻豆一区二区三区视频| 亚洲欧美在线观看| 久久久久国产精品人| 欧美一级片在线看| 91国偷自产一区二区使用方法| 高清shemale亚洲人妖| 美国毛片一区二区三区| 午夜精品一区在线观看| 一区二区视频在线看| 国产情人综合久久777777| 欧美不卡一二三| 69堂国产成人免费视频| 日本高清成人免费播放| 成人午夜免费av| 国产精品亚洲一区二区三区妖精| 日韩国产欧美三级| 亚洲第一电影网| 亚洲一区二区av电影| 亚洲激情图片qvod| 亚洲女厕所小便bbb| 亚洲特级片在线| 亚洲精品videosex极品| 亚洲视频在线一区观看| 亚洲另类在线制服丝袜| 《视频一区视频二区| 亚洲天堂成人在线观看| 亚洲欧美偷拍卡通变态| 亚洲人成亚洲人成在线观看图片| 中文字幕中文在线不卡住| 国产精品国产精品国产专区不蜜 | 亚洲综合在线电影| 亚洲美女少妇撒尿| 亚洲欧美电影院| 亚洲高清免费观看| 香蕉加勒比综合久久| 日韩国产在线一| 久久精品国产亚洲高清剧情介绍| 久久 天天综合| 国产一区二区三区av电影| 国产91丝袜在线播放九色| 93久久精品日日躁夜夜躁欧美| 一本到高清视频免费精品| 欧美日韩色一区| 日韩欧美你懂的| 国产精品久久综合| 亚洲一区视频在线观看视频| 奇米影视在线99精品| 国产中文字幕精品| 91丝袜国产在线播放| 欧美剧在线免费观看网站| 欧美成人精品高清在线播放 | 97se亚洲国产综合自在线观| 在线免费亚洲电影| 日韩一区二区三区视频| 国产日产欧美精品一区二区三区| 尤物av一区二区| 久久精品国产精品青草| 99re这里只有精品6| 制服丝袜日韩国产| 国产欧美一区二区在线| 亚洲天堂a在线| 久久久久久免费网| 一区二区三区在线免费播放| 免费在线看一区| 成人一区二区视频| 91麻豆精品国产综合久久久久久| 精品日韩欧美在线| 樱桃视频在线观看一区| 美女视频第一区二区三区免费观看网站 | 91精品国产色综合久久| 国产欧美日韩在线视频| 午夜精品福利在线| jvid福利写真一区二区三区| 日韩三级视频在线观看| 亚洲黄一区二区三区| 国产美女视频91| 日韩一区二区三区精品视频| 中文字幕视频一区| 国产麻豆视频精品|