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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rc_mk1.2.1_rx.c

?? CYRF6936 based system Receiver & transmiter
?? C
字號(hào):
// RX/** * \file main.c * \brief Firmware for the CYRF6936 based RC system Receiver. * \author Duncan Law * \version receiver/main.c V1.0 * * \log. * \ 01/12/08 v1 of firmware complete. * \ 01/01/09 Restructure of main loop. Now pauses to wait for incoming transmission. * \ 01/01/09 syncronises timer0 according to Controller's timer0 displayed in incoming packet. *  *  * License: See documentation. */#include "main.h"#include <avr/eeprom.h>#include </usr/avr/include/compat/deprecated.h>#define NOP asm("nop");#define F_CPU        8000000                            // 8MHz processor#define CYCLES_PER_US ((F_CPU+500000)/1000000)  // cpu cycles per microsecondint main(){  // timer0 setup for system clock.  TCCR0A = 0x00;  TCCR0B = 0x05;				// timer0 prescaler = 1024  TCNT0 = 0x00;					// set timer0 to 0x00.  // timer1 setup for servo control  TCCR1A = _BV(COM1A1) // set OC1A/B at TOP         | _BV(COM1B1) // clear OC1A/B when match         | _BV(COM1C1)          | _BV(WGM11); // mode 14 (fast PWM, clear TCNT1 on match ICR1)  TCCR1B = _BV(WGM13)         | _BV(WGM12)         | _BV(CS11); // timer uses main system clock with 1/8 prescale  ICR1 = 20000; // used for TOP, makes for 50 hz PWM  OCR1A = 1500; // servo at center  OCR1B = 1500; // servo at center  OCR1C = 1000; // servo at low (ESC off)  DDRB = _BV(PB5)       | _BV(PB6)   // have to set up pins as outputs       | _BV(PB7);  // have to set up pins as outputs  // timer3 setup for servo control  TCCR3A = _BV(COM3A1) // set OC1A/B at TOP         | _BV(COM3B1) // clear OC1A/B when match         | _BV(COM3C1)         | _BV(WGM31); // mode 14 (fast PWM, clear TCNT1 on match ICR1)  TCCR3B = _BV(WGM33)         | _BV(WGM32)         | _BV(CS31); // timer uses main system clock with 1/8 prescale  ICR3 = 20000; // used for TOP, makes for 50 hz PWM  OCR3A = 1500; // servo at center  OCR3B = 1500; // servo at center  OCR3C = 1500; // servo at center  DDRE = _BV(PE3)       | _BV(PE4)   // have to set up pins as outputs       | _BV(PE5);  // have to set up pins as outputs  // set the baud rate of the UART   uartSetUp(19200);  UARTout(0x00);  UARTout(0x00);  UARTout(0x00);  UARTout(0x00);  // setup SPI bus and RF module.  InitialiseRF();  short int timeout = 0;  short int i; 					// loop through data bytes.  unsigned char data[16], data_debounce[16];  unsigned char servo_multiplier = 1;		// multipler for all chanels  float servo_multiplier_1 = 1;			// multiplier for different channels  float servo_multiplier_2 = 1;  uint16_t trimA_addr = 0x0000;  uint16_t trimB_addr = 0x0002;  uint16_t trimA = eeprom_read_word(&trimA_addr);  uint16_t trimB = eeprom_read_word(&trimB_addr);  short int newdata=0;  unsigned char tmp, tmp2, tmp3, TXcount, count;  unsigned char chan_num=0, PWM_count_error=0, PWM_count_consecutive_error_max=0;  short int PWM_count=0, PWM_count_consecutive_error=0, PacketTX_result=0, PacketTX_debounce;  unsigned char timeL = 0;  unsigned char timeH = 0;  short int PWM_count_total = 0, time_int = 0;  TCNT0 = 0x00;					// set timer0 to 0x00.  while (1) // Loop forever  {	while(0){		if ((!(SpiByteRead(0x05) & (1<<7))) && (!(SpiByteRead(0x07) & (1<<6)))){			SpiByteWrite(0x05,0x80); 		    //RX_GO 		}	}     //while(TCNT0 < 0x01){	// Transmitter is reading controller now so this end free to do stuff.     //}     //UARTout_hex(SpiByteRead(0x00));     // put RF module in receive mode:     SpiByteWrite(0x05,0x80); 		    //RX_GO      newdata=0;     // wait for incoming packet.     while((!newdata) && (TCNT0 < 0x95)){	tmp= SpiByteRead(0x07);	if (!(SpiByteRead(0x05))){		tmp2= SpiByteRead(0x08);		if ((tmp & (1<<1)) && (!((tmp) & (1<<0)))){			SpiByteWrite(0x07,0x80);			for (i=0; i<16; i++){		   	//read data.		   		data[i] = SpiByteRead(0x21);			}			TCNT0 = data[4] -4 ;	     // syncronise clocks			newdata=1;			//UARTout('A'); UARTout(0x0A);		}		else {			newdata=0;			/*UARTout('B');			UARTout_hex(tmp);			UARTout(',');			UARTout_hex(tmp2);			UARTout(0x0A);*/		}			}	else {		/*UARTout('C');		UARTout_hex(tmp);		UARTout(',');		UARTout_hex(tmp2);		UARTout(0x0A);*/	}     }     //UARTout(0x0A);     // do something with received packet...//     if (1){     if (newdata ){	 // syncronise which channel Receiver is on. set the same as Controller	 chan_num = data[3];         // top left pad doubles servo movment.         if (!(data[7] & 0x01)) { servo_multiplier = 2; }         else {servo_multiplier = 1;}         // triangle button sets trim.          // data_debounce makes sure only one press is recognised.         if ((!(data[7] & 0x10)) && (data_debounce[7] & 0x10)){	    trimA += - (servo_multiplier*servo_multiplier_2*((2*data[9]) - 255));	    trimB += (servo_multiplier*servo_multiplier_1*((2*data[8]) - 255));	    eeprom_write_word(&trimA_addr, trimA);	    eeprom_write_word(&trimB_addr, trimB);         }         // remember the value of button register on last pass          //so we can compare for single reponse to button press.         data_debounce[7] = data[7];	         // Circle button clears trim         if (!(data[7] & 0x20)) {		    trimA = 0;	    trimB = 0;	    eeprom_write_word(&trimA_addr, trimA);	    eeprom_write_word(&trimB_addr, trimB);         }         // set servos. aerlon controll:         OCR1C = 1900-  (4*data[11]);             // set servo position         OCR1B = 1500+ (servo_multiplier_1*servo_multiplier*((2*data[9]) - 255)) - trimA;         OCR1A = 1500+ (servo_multiplier_2*servo_multiplier*((2*data[8]) - 255)) + trimB;         OCR3C = 1500+ (servo_multiplier_2*servo_multiplier*((2*data[8]) - 255)) + trimB;     }     else{	 PWM_count_error++;     }     // cycle between channels every 5 cycles.     if (chan_num++ < 5){	//UARTout('a');     	SpiByteWrite(0x00,0x45);		// CHANNEL     }     else if ((chan_num >= 5) && (chan_num <= 10)){	//UARTout('b');	SpiByteWrite(0x00,0x48);		// CHANNEL     }     else{	//UARTout('c');	SpiByteWrite(0x00,0x60);		// CHANNEL     }     //UARTout(chan_num);     if (chan_num >= 15) { chan_num = 0;}     if (count++ == 50){	count = 0;	UARTout(TXcount);	TXcount=0;     }     // once per second output transmission statistics.     if (PWM_count++ == 49){            // 50 x 20ms devisions have passed.        // count time in seconds since last power cycle.        time_int++;        timeL++;        if (timeL > 99){                timeH++;                timeL=0;        }        PWM_count_total+=PWM_count_error;        if ((PWM_count_error==50) && (PWM_count_consecutive_error_max==50)){                timeH=0; timeL=0; PWM_count_total=0; PWM_count_error=0;                PWM_count_consecutive_error_max=0; time_int=0;        }        UARTout_dec(timeH);        UARTout_dec(timeL);        UARTout(' ');        UARTout_dec(PWM_count_error);        UARTout(',');        UARTout_dec(PWM_count_total/time_int);        UARTout(0x0A);        PWM_count=0;        PWM_count_error=0;     }     while(TCNT0 < 0x97){}     TCNT0 = 0;  }}// no signal for multiple cycles so reset servo position.void servo_default(uint16_t trimA, uint16_t trimB){	// aerlon control:	OCR1B = 1500 - trimA;	OCR1A = 1500 + trimB;	OCR3C = 1500 + trimB;	OCR1C = 1000;/*	// R/E controll:	OCR1B = 1500 + trimB;	OCR1A = 1500 + trimA;	OCR1C = 1000;*//*	if (OCR1C > 1000){		OCR1C-=0x1;				// center servos,stop motor	}	if (OCR1B > 1503 + trimA){		OCR1B-=0x1;	}	else if (OCR1B < 1497 + trimA){		OCR1B+=0x1;	}	if (OCR1A > 1503 + trimB){		OCR1A-=0x1;	}	else if (OCR1A < 1497 + trimB){		OCR1A+=0x1;	}	if (OCR3C > 1503 + trimB){		OCR3C-=0x1;	}	else if (OCR3C < 1497 + trimB){		OCR3C+=0x1;	}*/     return;}// set the uart baud ratevoid uartSetUp(unsigned int baudrate){        // calculate division factor for requested baud rate, and set it        unsigned int bauddiv = ((F_CPU+(baudrate*8L))/(baudrate*16L)-1);	/* Set baud rate */	UBRR1H = (unsigned char)(bauddiv>>8);	UBRR1L = (unsigned char)bauddiv;	/* Enable receiver and transmitter */	UCSR1B = (1<<RXEN1)|(1<<TXEN1);	/* Set frame format: 8data, 2stop bit */	UCSR1C = (1<<USBS1)|(3<<UCSZ10);}// send an 8bit number out of the UART.// *note* this does not use the pesudo manchester encoding // so many RF modules will not transmit numbers with high proportion of "1"s or "0"s correctly.void UARTout(unsigned char data){        while (!(UCSR1A & (1<<UDRE1)))                {                continue;                }        UDR1 = data;        return;}// send an 8bit number out of the UART. display as decimal number in ASCIIvoid UARTout_dec(unsigned char data){        if(data/100){ UARTout('0' + data/100); }        UARTout('0' + ((data%100)/10));        UARTout('0' + data%10);        return;}// send an 8bit number out of the UART. display as decimal number in ASCIIvoid UARTout_hex(unsigned char data){	if (((data & 0xF0) >= 0) && ((data & 0xF0) < 0xAA)) {	        UARTout('0' + ((data >>4) & 0x0F));	}	else if (((data & 0xF0) >= 0xA0) && ((data & 0xF0) <= 0xF0)){		UARTout('A' + ((data >>4) & 0x0F) - 0x0A);	}	if (((data & 0x0F) >= 0) && ((data & 0x0F) < 0x0A)) {	        UARTout('0' + (data & 0x0F));	}	else if (((data & 0x0F) >= 0x0A) && ((data & 0x0F) <= 0x0F)){		UARTout('A' + (data & 0x0F) - 0x0A);	}        return;}// SPI send byte and receive following byteunsigned char SpiByteRead(unsigned char data){    cbi(PORTB, PB0);			// SS low to initiate SPI.    SPDR = data;			// send byte (Address)    while(!(SPSR & (1<<SPIF)));    SPDR = 0x00;			// not sending anything on the next cycle.    while(!(SPSR & (1<<SPIF)));    sbi(PORTB, PB0);			// SS high to end SPI.    return SPDR;			// receiving data instead.}// SPI send byte and send following bytevoid SpiByteWrite(unsigned char register_address, unsigned char data){    cbi(PORTB, PB0);			// SS low to initiate SPI.    SPDR = register_address | 0x80;	// send byte (Address) with pit 8 set for write enable    while(!(SPSR & (1<<SPIF)));    SPDR = data;			// send byte (data).    while(!(SPSR & (1<<SPIF)));    sbi(PORTB, PB0);			// SS high to end SPI.    return ;}void InitialiseRF(void){  // setup I/O pins connected to RF module.  cbi(DDRE, PE7);                 // set UNIGEN RF module IRQ pin to input  sbi(DDRB, PB0);                 // set UNIGEN RF module SS pin to output  sbi(PORTB, PB0);  sbi(DDRG, PG3);                 // set UNIGEN RF module RST pin to output  cbi(PORTG, PG3);  // set up SPI from: http://www.openavr.org/AVR_SPI_C_Snippets  SPCR = _BV(SPE) | _BV(MSTR);		// SPI enable bit and the master mode bit  DDRB |= _BV(0) | _BV(1) | _BV(2);	// SS is at PB0, SCK is at PB1 and MOSI is at PB2. set direction  PORTB |= _BV(3);			// enable pullups on MISO at PB3.  unsigned char tmp;			// read registers at startup to clear.  tmp = SPSR;  tmp = SPDR;  //SpiByteWrite(0x26,0x08);		// XTAL_CFG  (must)  //SpiByteWrite(0x32,0x3C);		// AUTO_CAL_TIME  (must)  //SpiByteWrite(0x35,0x14);		// AUTO_CAL_OFFSET  (must)  SpiByteWrite(0x1D,0x01);		// MODE_OVERRIDE, RST (Reset module)  SpiByteWrite(0x03,0x2F);		// TX_CFG,   SpiByteWrite(0x05,0x00);		// set RX_CTRL_ADR, RX_GO  SpiByteWrite(0x06,0x4A);		// RX_CFG_ADR, overwrite (RXOW EN)//  SpiByteWrite(0x0F,0x83);		// XACT_CFG, END_STATE & ACK_EN  SpiByteWrite(0x0F,0x93);		// XACT_CFG,END_STATE,ACK EN, ACK_TO_15X  //SpiByteWrite(0x0F,0x11);		// XACT_CFG,END_STATE,ACK EN, ACK_TO_15X//  SpiByteWrite(0x10,0xA4);		// FRAMING_CFG, LEN EN  SpiByteWrite(0x10,0xEE);		// FRAMING_CFG, LEN EN  //SpiByteWrite(0x11,0x05);		// DATA32_THOLD  SpiByteWrite(0x11,0x08);		// DATA32_THOLD  SpiByteWrite(0x12,0x0E);		// DATA64_THOLD  SpiByteWrite(0x15,0x14);		// CRC_SEED_LSB  SpiByteWrite(0x16,0x14);		// CRC_SEED_MSB  SpiByteWrite(0x1B,0x55);		// TX_OFFSET_LSB  SpiByteWrite(0x1C,0x05);		// TX_OFFSET_MSB  SpiByteWrite(0x24,0x10);			// PREAMBLE  SpiByteWrite(0x24,0x33);			// PREAMBLE  SpiByteWrite(0x24,0x33);			// PREAMBLE  //SpiByteWrite(0x1E,0x08);		//   return;}// delay for a minimum of <us> microseconds // the time resolution is dependent on the time the loop takes // e.g. with 4Mhz and 5 cycles per loop, the resolution is 1.25 us void delay_us(unsigned short time_us){        unsigned short delay_loops;        register unsigned short i;        delay_loops = (time_us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty)         // one loop takes 5 cpu cycles         for (i=0; i < delay_loops; i++) {};}void delay_ms(unsigned char time_ms){	unsigned short int i;        for (i=0; i < 500; i++) {delay_us(100);}	return;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
肉肉av福利一精品导航| 欧美日韩国产a| 欧美丝袜第三区| 91精品国产乱| 久久久99免费| 亚洲国产日韩av| 蜜桃精品在线观看| proumb性欧美在线观看| 在线观看亚洲一区| 国产日韩三级在线| 亚洲成av人片一区二区三区| 久久狠狠亚洲综合| 欧美午夜影院一区| 精品国产乱码久久久久久久| 中文字幕成人av| 国产成人综合在线| 26uuu国产在线精品一区二区| 日韩成人免费看| 日韩一卡二卡三卡四卡| 日本系列欧美系列| 51精品视频一区二区三区| 亚洲香蕉伊在人在线观| 欧美视频一区二区三区四区| 亚洲一区视频在线| 91.麻豆视频| 久久国产精品露脸对白| 久久综合av免费| 国产成人亚洲综合色影视| 国产精品国模大尺度视频| 9l国产精品久久久久麻豆| 亚洲精品v日韩精品| 色88888久久久久久影院野外| 日本一区二区高清| 成人一区在线观看| 国产精品视频一二三区| 成人性生交大片免费看中文网站| 久久午夜色播影院免费高清| 国产乱码精品一品二品| 久久久美女毛片| 成人午夜视频福利| 中文字幕中文字幕一区| 一本一道综合狠狠老| 一区二区三区四区视频精品免费| 在线视频综合导航| 性做久久久久久免费观看| 91精品一区二区三区久久久久久| 日本亚洲最大的色成网站www| 日韩欧美不卡在线观看视频| 国产一区不卡在线| 亚洲综合一区二区精品导航| 欧美乱熟臀69xxxxxx| 激情偷乱视频一区二区三区| 国产精品另类一区| 欧美日韩午夜在线| 国模一区二区三区白浆| 亚洲男同性恋视频| 日韩精品一区二区三区在线观看| 福利一区福利二区| 日韩在线一区二区| 国产精品久久久久婷婷| 91精品国产高清一区二区三区蜜臀| 黑人巨大精品欧美一区| 亚洲乱码国产乱码精品精98午夜 | 亚洲午夜精品久久久久久久久| 51精品秘密在线观看| 成人免费av在线| 日av在线不卡| 亚洲高清一区二区三区| 欧美国产日韩一二三区| 欧美一级生活片| 在线观看亚洲精品视频| 国产成人av福利| 激情文学综合插| 视频一区在线播放| 亚洲自拍偷拍欧美| 亚洲国产精品ⅴa在线观看| 欧美日韩1区2区| 91搞黄在线观看| 99精品1区2区| 不卡一二三区首页| 国产大陆a不卡| 激情丁香综合五月| 蜜桃av一区二区在线观看| 一区二区三区成人| 亚洲欧美偷拍卡通变态| 国产精品美女一区二区在线观看| 精品日产卡一卡二卡麻豆| 欧美不卡在线视频| 欧美www视频| 精品国产99国产精品| 日韩欧美黄色影院| 久久久综合九色合综国产精品| 日韩精品一区二区三区中文不卡| 欧美一级片在线看| 日韩欧美不卡一区| 国产无一区二区| 国产精品不卡一区| 亚洲第一二三四区| 麻豆freexxxx性91精品| 国产老女人精品毛片久久| 国产成人99久久亚洲综合精品| 国产91对白在线观看九色| 国产大片一区二区| 色94色欧美sute亚洲13| 欧美绝品在线观看成人午夜影视| 欧美一区二区三区视频在线观看 | 欧美日韩高清一区| 日韩一二三四区| 国产精品网站在线观看| 亚洲综合色视频| 国产伦精品一区二区三区视频青涩 | 婷婷综合五月天| 懂色av中文字幕一区二区三区| 色呦呦一区二区三区| 欧美大片在线观看一区| 中文字幕中文乱码欧美一区二区| 亚洲国产精品久久久男人的天堂| 久久精品国产在热久久| 99re在线视频这里只有精品| 欧美一区二区三区色| 国产精品久久久久国产精品日日| 婷婷国产在线综合| av在线不卡观看免费观看| 91精品国产一区二区| 国产精品电影一区二区| 国内精品不卡在线| 欧美日本在线一区| 一区二区三区丝袜| 成人禁用看黄a在线| 精品国产伦一区二区三区免费| 亚洲主播在线观看| 99精品久久免费看蜜臀剧情介绍| 日韩免费视频一区二区| 性感美女久久精品| 91国内精品野花午夜精品 | 亚洲私人影院在线观看| 久久se精品一区二区| 欧美精品成人一区二区三区四区| 日韩一区在线看| 99久久伊人久久99| 国产欧美一区二区精品婷婷| 美女视频网站黄色亚洲| 日韩欧美亚洲国产精品字幕久久久| 午夜精品久久久久久久99樱桃| 国产精品一二三区在线| 91在线视频免费观看| 国产欧美精品在线观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 成人av在线资源网| 最新国产精品久久精品| 99久久久精品免费观看国产蜜| 国产精品免费久久| 色噜噜狠狠色综合欧洲selulu| 亚洲免费电影在线| 欧美精品18+| 激情五月播播久久久精品| 久久久久久久久久久久久夜| 丁香婷婷综合色啪| 亚洲精品美国一| 欧美一区二视频| 国产激情视频一区二区三区欧美| 国产精品热久久久久夜色精品三区| 成人黄色在线看| 三级在线观看一区二区| 久久欧美中文字幕| 一本色道久久综合精品竹菊| 亚洲电影在线免费观看| 久久一区二区三区国产精品| 国产99精品国产| 中文字幕成人av| 成人免费视频国产在线观看| 18欧美亚洲精品| 91精品国产欧美一区二区18| 国产电影一区二区三区| 亚洲高清视频的网址| 日本一区二区三区dvd视频在线| 91麻豆精品在线观看| 国产在线国偷精品产拍免费yy| 亚洲午夜久久久久久久久电影院| 国产无人区一区二区三区| 欧美综合欧美视频| 丰满白嫩尤物一区二区| 免费观看在线综合| 亚洲成人综合在线| 国产精品欧美久久久久无广告 | 欧美高清www午色夜在线视频| av电影一区二区| 国产精品99久久久久久久vr| 午夜久久久久久| 国产日韩精品一区| 欧美熟乱第一页| 午夜天堂影视香蕉久久| 最新日韩在线视频| 久久久精品一品道一区| 91精品久久久久久久久99蜜臂| 色哟哟国产精品| 色综合av在线| 欧美日韩精品欧美日韩精品一 | 国产清纯在线一区二区www| 日韩精品最新网址|