;/***************************************************** ;This program was produced by the ;CodeWizardAVR V2.05.3 Standard ; Программа приёмника RFM12B ;Project : Tiny2313A ;Version : 1.0 ;Date : 18.09.2014 ;Author : MartKot ;Company : Tornado ;Comments: тестовый проект приёмника маяка GPS ;Tiny2313-RFM12B ;SPI Register&Counter=USICLK ;USI Counter Overflow Interrupt-NO ;Universal Serial Interface initialization ;Mode: Three Wire (SPI), программное тактирование ;// Clock source: Register & Counter=USICLK / NO ;// USI Counter Overflow Interrupt: Off ;//f=490кГц, 2,04мкс, 30такт ;//f=1,05МГц, 880Kbit/sec ;f=7,1МГц 7,142Мбит/сек; 8бит скорость 2,31Мбит/сек; 16бит-скорость 1,918Мбит/сек ;======================================= ;// USART initialization ;// Communication Parameters: 8 Data, 1 Stop, No Parity ;// USART Receiver: On ;// USART Transmitter: On ;// USART Mode: Asynchronous ;// USART Baud Rate: 115,2 Kbit/sec ; ;Chip type : ATtiny2313A ;AVR Core Clock frequency: 14,745600 MHz ;Memory model : Tiny ;External RAM size : 0 ;Data Stack size : 32 ;Flash(Кбайт) : 2 ;SRAM(Байт) : 128 ;EEPROM(Байт) : 128 ; ;EEPROM usage: 0 byte(s), 0,0% of EEPROM ;Program size: 593 words (1186 bytes), 57,9% of FLASH ;последние изменения 28.01.2015 ;*****************************************************/ ; ;#include ;PCODE: $00000000 VOL: 0 #ifndef __SLEEP_DEFINED__ ;PCODE: $00000001 VOL: 0 #define __SLEEP_DEFINED__ ;PCODE: $00000002 VOL: 0 .EQU __se_bit=0x20 ;PCODE: $00000003 VOL: 0 .EQU __sm_mask=0x50 ;PCODE: $00000004 VOL: 0 .EQU __sm_powerdown=0x10 ;PCODE: $00000005 VOL: 0 .EQU __sm_standby=0x40 ;PCODE: $00000006 VOL: 0 .SET power_ctrl_reg=mcucr ;PCODE: $00000007 VOL: 0 #endif ;PCODE: $00000008 VOL: 0 ;PCODE: $00000009 VOL: 0 ;#include ;#include ;#include ;//#include ; ;//==== tiny2313 INTERFACE ====// ;#define DCLK PINB.1 //вход прерывания от FIFO, если заполнен до указанного порога ;#define nINT PINB.3 //вход детектора действительных данных ;#define FSK PORTB.2 //выход, FIFO select 0-при включении внутреннего приемного регистра ;#define nSEL 4 // PORTB.4 SPI nSEL (chip select) ;//#define SDI PINB.5 // PORTB.5 SPI DI input (SPI RFM12B data output) ;#define SDO PORTB.6 // PORTB.6 SPI DO otput (SPI RFM12B data input) ;#define nIRQ_LOW PIND.2 //прерывание от nIRQ, ждём low флага окончания передачи ;//#define nIRQ_LOW() while(PIND&(1<> 8; // 0.5sec ; 0000 008E //TCNT1L=0x8F80 & 0xff;// 0.5sec ; 0000 008F //============================== ; 0000 0090 TCNT1H=0x1F00 >> 8; //1.0sec, 0.25sec ;PCODE: $0000000C VOL: 0 ;PCODE: $0000000D VOL: 0 ; 0000 0091 TCNT1L=0x1F00 & 0xff;//1.0sec, 0.25sec ;PCODE: $0000000E VOL: 0 ;PCODE: $0000000F VOL: 0 ; 0000 0092 //============================== ; 0000 0093 //TCNT1H=0xA600 >> 8; //0.1sec ; 0000 0094 //TCNT1L=0xA600 & 0xff;//0.1sec ; 0000 0095 //============================== ; 0000 0096 //можно проверять перемычку здесь if(PIND.5==1) {код таймера}; ; 0000 0097 ; 0000 0098 flag_1s ^=1; //переодическое переключение sec ;PCODE: $00000010 VOL: 0 ;PCODE: $00000011 VOL: 0 ;PCODE: $00000012 VOL: 0 ;PCODE: $00000013 VOL: 0 ;PCODE: $00000014 VOL: 0 ;PCODE: $00000015 VOL: 0 ;PCODE: $00000016 VOL: 0 ;PCODE: $00000017 VOL: 0 ;PCODE: $00000018 VOL: 0 ;PCODE: $00000019 VOL: 0 ;PCODE: $0000001A VOL: 0 ;PCODE: $0000001B VOL: 0 ; 0000 0099 if (PIND.4==1){ //если включен выход D.4 ;PCODE: $0000001C VOL: 0 ;PCODE: $0000001D VOL: 0 ;PCODE: $0000001E VOL: 0 ; 0000 009A TickTimer1s++; ;PCODE: $0000001F VOL: 0 ; 0000 009B if (TickTimer1s == 2){ ;PCODE: $00000020 VOL: 0 ;PCODE: $00000021 VOL: 0 ;PCODE: $00000022 VOL: 0 ; 0000 009C PORTD.4=0; //выкл.выход D.4 через 2сек ;PCODE: $00000023 VOL: 0 ;PCODE: $00000024 VOL: 0 ; 0000 009D TickTimer1s = 0; //обнуляем через 5сек ;PCODE: $00000025 VOL: 0 ; 0000 009E }; ;PCODE: $00000026 VOL: 0 ; 0000 009F }; ;PCODE: $00000027 VOL: 0 ; 0000 00A0 ; 0000 00A1 //PORTB.0=0; //выкл.выход B.0 через 1сек ; 0000 00A2 //PORTD.4=0; //выкл.выход D.4 пикаем с периодом 1сек ; 0000 00A3 /* ; 0000 00A4 if (flag_1s==1 && flag_Kn==1) { ; 0000 00A5 GIMSK=0x80; //разрешить прерывания int1 ; 0000 00A6 GIFR=0x80; ; 0000 00A7 flag_Kn=0; ; 0000 00A8 }; ; 0000 00A9 */ ; 0000 00AA } ;PCODE: $00000028 VOL: 0 ;PCODE: $00000029 VOL: 0 ;PCODE: $0000002A VOL: 0 ; ; ;// External Interrupt 0 ==== программа обрабобтки прерывания ;//при инициализации устройств, глобально запрещаем все прерывания ;/* ;interrupt [EXT_INT0] void ext_int0_isr(void) //сейчас выключено в init_ATtiny ;{ ; //тут хаваем данные с RFM12 ;dataGPS=((writeCmd(0xB000))&0x00FF); ;putchar(dataGPS);//передача данных на UART ;} ;*/ ; ;// External Interrupt 1 service routine ;interrupt [EXT_INT1] void ext_int1_isr(void) ; 0000 00BA { ;PCODE: $0000002B VOL: 0 ;PCODE: $0000002C VOL: 0 ; 0000 00BB GIMSK=0x00; //запретить прерывания int1, здесь это лишнее ;PCODE: $0000002D VOL: 0 ;PCODE: $0000002E VOL: 0 ; 0000 00BC if (PIND.3==0 && PIND.5==1) rfSend_K(1); //посылаем по RF код кнопки 1 ;PCODE: $0000002F VOL: 0 ;PCODE: $00000030 VOL: 0 ;PCODE: $00000031 VOL: 0 ;PCODE: $00000032 VOL: 0 ;PCODE: $00000033 VOL: 0 ;PCODE: $00000034 VOL: 0 ;PCODE: $00000035 VOL: 0 ;PCODE: $00000036 VOL: 0 ;PCODE: $00000037 VOL: 0 ;PCODE: $00000038 VOL: 0 ;PCODE: $00000039 VOL: 0 ;PCODE: $0000003A VOL: 0 ; 0000 00BD if (PIND.3==0 && PIND.5==0) rfSend_K(2); //посылаем по RF код кнопки 2, поставить диод между кн1 и кн2 ;PCODE: $0000003B VOL: 0 ;PCODE: $0000003C VOL: 0 ;PCODE: $0000003D VOL: 0 ;PCODE: $0000003E VOL: 0 ;PCODE: $0000003F VOL: 0 ;PCODE: $00000040 VOL: 0 ;PCODE: $00000041 VOL: 0 ;PCODE: $00000042 VOL: 0 ;PCODE: $00000043 VOL: 0 ;PCODE: $00000044 VOL: 0 ;PCODE: $00000045 VOL: 0 ;PCODE: $00000046 VOL: 0 ;PCODE: $00000047 VOL: 0 ; 0000 00BE //if (PIND.5==0) rfSend_K(2); //посылаем по RF код кнопки 2, поставить диод между кн1 и кн2 ; 0000 00BF GIMSK=0x80; //разрешить прерывания int1 ;PCODE: $00000048 VOL: 0 ;PCODE: $00000049 VOL: 0 ;PCODE: $0000004A VOL: 0 ; 0000 00C0 //перед тем, как выйти из прерывания, надо сбросить флаг запроса прерывания, ; 0000 00C1 // так как из-за дребезга он мог установиться повторно. ; 0000 00C2 } ;PCODE: $0000004B VOL: 0 ;PCODE: $0000004C VOL: 0 ;PCODE: $0000004D VOL: 0 ; ;//Program size: 602 words (1204 bytes), 58,8% of FLASH ; ;//========= USART работа с прерываниями TX ============== ;//Program size: 663 words (1326 bytes), 64,7% of FLASH ;//занимает 5,9% of FLASH ;/* ;#define DATA_REGISTER_EMPTY (1< Y+3 ; timeb -> Y+1 ; i -> R17 ;PCODE: $00000052 VOL: 0 ;PCODE: $00000053 VOL: 0 ;PCODE: $00000054 VOL: 0 ;PCODE: $00000055 VOL: 0 ;PCODE: $00000056 VOL: 0 ;PCODE: $00000057 VOL: 0 ;PCODE: $00000058 VOL: 0 ;PCODE: $00000059 VOL: 0 ;PCODE: $0000005A VOL: 0 ; 0000 0101 { ; 0000 0102 LED_ON(6); //вкл. светодиод PORTD.6 ;PCODE: $0000005B VOL: 0 ;PCODE: $0000005C VOL: 0 ; 0000 0103 delay_ms(timeb); ;PCODE: $0000005D VOL: 0 ;PCODE: $0000005E VOL: 0 ; 0000 0104 LED_OFF(6); //выкл. тест светодиод PORTD.6 ;PCODE: $0000005F VOL: 0 ;PCODE: $00000060 VOL: 0 ; 0000 0105 delay_ms(timeb); ;PCODE: $00000061 VOL: 0 ;PCODE: $00000062 VOL: 0 ; 0000 0106 }; ;PCODE: $00000063 VOL: 0 ;PCODE: $00000064 VOL: 0 ;PCODE: $00000065 VOL: 0 ;PCODE: $00000066 VOL: 0 ;PCODE: $00000067 VOL: 0 ; 0000 0107 } ;PCODE: $00000068 VOL: 0 ;PCODE: $00000069 VOL: 0 ;PCODE: $0000006A VOL: 0 ;PCODE: $0000006B VOL: 0 ;PCODE: $0000006C VOL: 0 ; ; ; ;//=========== USI - SPI //программный SPI//============== ;//=== инициализация портов, SPI в init_ATtiny === ;//функция передачи-приёма 2-х байт(16bit) по USI с max скоростью (до Fclk/2) ;//такт 7,1МГц, 0,14мкс(7,142Мбит/сек), время передачи 16bit 5,49мкс(2,9Mbit/sec), ;//полное время передачи одной команды 16bit-8,34мкс или 1,918Мбит/сек (40 тактов) ;unsigned int writeCmd(unsigned int cmd) //3,70MHz ; 0000 0111 { ;PCODE: $0000006D VOL: 0 ;PCODE: $0000006E VOL: 0 ; 0000 0112 unsigned int recv_16b=0; //16bit полученные из USIDR ; 0000 0113 LO(nSEL); // PORTB.4 SPI nSEL (chip select ENABLE) ;PCODE: $0000006F VOL: 0 ;PCODE: $00000070 VOL: 0 ; cmd -> Y+2 ; recv_16b -> R16,R17 ;PCODE: $00000071 VOL: 0 ;PCODE: $00000072 VOL: 0 ;PCODE: $00000073 VOL: 0 ;PCODE: $00000074 VOL: 0 ; 0000 0114 //USIDR = data_w;//передаваемые данные в сдвиговый регисть ; 0000 0115 USIDR =cmd>>8;//16bit->8bit старший разряд, передаваемые данные в сдвиговый регистр ;PCODE: $00000075 VOL: 0 ;PCODE: $00000076 VOL: 0 ;PCODE: $00000077 VOL: 0 ; 0000 0116 USICR = 0b00010001;//и формируем тактирующие импульсы программно ;PCODE: $00000078 VOL: 0 ;PCODE: $00000079 VOL: 0 ; 0000 0117 USICR = 0b00010011; ;PCODE: $0000007A VOL: 0 ;PCODE: $0000007B VOL: 0 ; 0000 0118 USICR = 0b00010001; ;PCODE: $0000007C VOL: 0 ;PCODE: $0000007D VOL: 0 ; 0000 0119 USICR = 0b00010011; ;PCODE: $0000007E VOL: 0 ;PCODE: $0000007F VOL: 0 ; 0000 011A USICR = 0b00010001; ;PCODE: $00000080 VOL: 0 ;PCODE: $00000081 VOL: 0 ; 0000 011B USICR = 0b00010011; ;PCODE: $00000082 VOL: 0 ;PCODE: $00000083 VOL: 0 ; 0000 011C USICR = 0b00010001; ;PCODE: $00000084 VOL: 0 ;PCODE: $00000085 VOL: 0 ; 0000 011D USICR = 0b00010011; ;PCODE: $00000086 VOL: 0 ;PCODE: $00000087 VOL: 0 ; 0000 011E USICR = 0b00010001; ;PCODE: $00000088 VOL: 0 ;PCODE: $00000089 VOL: 0 ; 0000 011F USICR = 0b00010011; ;PCODE: $0000008A VOL: 0 ;PCODE: $0000008B VOL: 0 ; 0000 0120 USICR = 0b00010001; ;PCODE: $0000008C VOL: 0 ;PCODE: $0000008D VOL: 0 ; 0000 0121 USICR = 0b00010011; ;PCODE: $0000008E VOL: 0 ;PCODE: $0000008F VOL: 0 ; 0000 0122 USICR = 0b00010001; ;PCODE: $00000090 VOL: 0 ;PCODE: $00000091 VOL: 0 ; 0000 0123 USICR = 0b00010011; ;PCODE: $00000092 VOL: 0 ;PCODE: $00000093 VOL: 0 ; 0000 0124 USICR = 0b00010001; ;PCODE: $00000094 VOL: 0 ;PCODE: $00000095 VOL: 0 ; 0000 0125 USICR = 0b00010011; ;PCODE: $00000096 VOL: 0 ;PCODE: $00000097 VOL: 0 ; 0000 0126 recv_16b = USIDR<<8; //сохраняем старший байт из USIDR ;PCODE: $00000098 VOL: 0 ;PCODE: $00000099 VOL: 0 ;PCODE: $0000009A VOL: 0 ; 0000 0127 ; 0000 0128 USIDR = cmd&0x00FF;//оставляем младший байт (8бит разряд вместо FF) ;PCODE: $0000009B VOL: 0 ;PCODE: $0000009C VOL: 0 ;PCODE: $0000009D VOL: 0 ; 0000 0129 //USIDR =cmd<<8;//16bit->8bit младший разряд, передаваемые данные в сдвиговый регистр ; 0000 012A USICR = 0b00010001;//и формируем тактирующие импульсы программно ;PCODE: $0000009E VOL: 0 ;PCODE: $0000009F VOL: 0 ; 0000 012B USICR = 0b00010011; ;PCODE: $000000A0 VOL: 0 ;PCODE: $000000A1 VOL: 0 ; 0000 012C USICR = 0b00010001; ;PCODE: $000000A2 VOL: 0 ;PCODE: $000000A3 VOL: 0 ; 0000 012D USICR = 0b00010011; ;PCODE: $000000A4 VOL: 0 ;PCODE: $000000A5 VOL: 0 ; 0000 012E USICR = 0b00010001; ;PCODE: $000000A6 VOL: 0 ;PCODE: $000000A7 VOL: 0 ; 0000 012F USICR = 0b00010011; ;PCODE: $000000A8 VOL: 0 ;PCODE: $000000A9 VOL: 0 ; 0000 0130 USICR = 0b00010001; ;PCODE: $000000AA VOL: 0 ;PCODE: $000000AB VOL: 0 ; 0000 0131 USICR = 0b00010011; ;PCODE: $000000AC VOL: 0 ;PCODE: $000000AD VOL: 0 ; 0000 0132 USICR = 0b00010001; ;PCODE: $000000AE VOL: 0 ;PCODE: $000000AF VOL: 0 ; 0000 0133 USICR = 0b00010011; ;PCODE: $000000B0 VOL: 0 ;PCODE: $000000B1 VOL: 0 ; 0000 0134 USICR = 0b00010001; ;PCODE: $000000B2 VOL: 0 ;PCODE: $000000B3 VOL: 0 ; 0000 0135 USICR = 0b00010011; ;PCODE: $000000B4 VOL: 0 ;PCODE: $000000B5 VOL: 0 ; 0000 0136 USICR = 0b00010001; ;PCODE: $000000B6 VOL: 0 ;PCODE: $000000B7 VOL: 0 ; 0000 0137 USICR = 0b00010011; ;PCODE: $000000B8 VOL: 0 ;PCODE: $000000B9 VOL: 0 ; 0000 0138 USICR = 0b00010001; ;PCODE: $000000BA VOL: 0 ;PCODE: $000000BB VOL: 0 ; 0000 0139 USICR = 0b00010011; ;PCODE: $000000BC VOL: 0 ;PCODE: $000000BD VOL: 0 ; 0000 013A recv_16b |=USIDR; //(побитовая операция ИЛИ) добовляем младший байт из USIDR ;PCODE: $000000BE VOL: 0 ;PCODE: $000000BF VOL: 0 ;PCODE: $000000C0 VOL: 0 ;PCODE: $000000C1 VOL: 0 ; 0000 013B HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ;PCODE: $000000C2 VOL: 0 ;PCODE: $000000C3 VOL: 0 ; 0000 013C return recv_16b; //возврашаем 16bit полученные данные из USIDR ;PCODE: $000000C4 VOL: 0 ;PCODE: $000000C5 VOL: 0 ;PCODE: $000000C6 VOL: 0 ;PCODE: $000000C7 VOL: 0 ; 0000 013D } ;PCODE: $000000C8 VOL: 0 ; ;/****** ;//8bit функция передачи по USI 7,1МГц 0,14мкс и RF ;//3,46мкс 19тактов или 2,31Мбит/сек ;//Передача-чтение байта по SPI с опросом освобождения прд. регистра RF ;unsigned char rfSend_Byte(unsigned char rf_byte) ;{//LO(2); //вкл. тест светодиод PORTB.2 ; //while(nIRQ_LOW); //wait for previously TX over PIND.2=0 ; //nIRQ_LOW Здесь отключен, работаем в прерывании INT0 по nIRQ ; //LO(nSEL); // PORTB.4 SPI nSEL (chip select ENABLE) ; USIDR = rf_byte;//8bit отправляем байт в сдвиговый регистр ; USICR = 0b00010001;//и формируем тактирующие импульсы программно ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; rf_byte = USIDR; //сохраняем байт из USIDR ; //HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ; return rf_byte; //возврашаем 8bit полученные из USIDR ;//HI(2); //выкл. тест светодиод PORTB.2 ; //USISR |= (1< Y+0 ;PCODE: $000000CC VOL: 0 ;PCODE: $000000CD VOL: 0 ;PCODE: $000000CE VOL: 0 ;PCODE: $000000CF VOL: 0 ;PCODE: $000000D0 VOL: 0 ;PCODE: $000000D1 VOL: 0 ; 0000 0168 USIDR = rf_byte;//8bit отправляем байт в сдвиговый регистр ;PCODE: $000000D2 VOL: 0 ;PCODE: $000000D3 VOL: 0 ; 0000 0169 USICR = 0b00010001;//и формируем тактирующие импульсы программно ;PCODE: $000000D4 VOL: 0 ;PCODE: $000000D5 VOL: 0 ; 0000 016A USICR = 0b00010011; ;PCODE: $000000D6 VOL: 0 ;PCODE: $000000D7 VOL: 0 ; 0000 016B USICR = 0b00010001; ;PCODE: $000000D8 VOL: 0 ;PCODE: $000000D9 VOL: 0 ; 0000 016C USICR = 0b00010011; ;PCODE: $000000DA VOL: 0 ;PCODE: $000000DB VOL: 0 ; 0000 016D USICR = 0b00010001; ;PCODE: $000000DC VOL: 0 ;PCODE: $000000DD VOL: 0 ; 0000 016E USICR = 0b00010011; ;PCODE: $000000DE VOL: 0 ;PCODE: $000000DF VOL: 0 ; 0000 016F USICR = 0b00010001; ;PCODE: $000000E0 VOL: 0 ;PCODE: $000000E1 VOL: 0 ; 0000 0170 USICR = 0b00010011; ;PCODE: $000000E2 VOL: 0 ;PCODE: $000000E3 VOL: 0 ; 0000 0171 USICR = 0b00010001; ;PCODE: $000000E4 VOL: 0 ;PCODE: $000000E5 VOL: 0 ; 0000 0172 USICR = 0b00010011; ;PCODE: $000000E6 VOL: 0 ;PCODE: $000000E7 VOL: 0 ; 0000 0173 USICR = 0b00010001; ;PCODE: $000000E8 VOL: 0 ;PCODE: $000000E9 VOL: 0 ; 0000 0174 USICR = 0b00010011; ;PCODE: $000000EA VOL: 0 ;PCODE: $000000EB VOL: 0 ; 0000 0175 USICR = 0b00010001; ;PCODE: $000000EC VOL: 0 ;PCODE: $000000ED VOL: 0 ; 0000 0176 USICR = 0b00010011; ;PCODE: $000000EE VOL: 0 ;PCODE: $000000EF VOL: 0 ; 0000 0177 USICR = 0b00010001; ;PCODE: $000000F0 VOL: 0 ;PCODE: $000000F1 VOL: 0 ; 0000 0178 USICR = 0b00010011; ;PCODE: $000000F2 VOL: 0 ;PCODE: $000000F3 VOL: 0 ; 0000 0179 //HI(2); //выкл. тест светодиод PORTB.2 ; 0000 017A //USISR |= (1<медленный, ручной-быстрый) ;PCODE: $00000108 VOL: 0 ;PCODE: $00000109 VOL: 0 ; 0000 019E //writeCmd(0xC2FC); //включение аналогового фильтра, для приёма на наушники ; 0000 019F //writeCmd(0xC2AC); //AL,!ml,DIG,DQD4(авт.режим быстрый->медленный) ; 0000 01A0 //writeCmd(0xC2BC); //включение аналогового фильтра, для приёма на наушники ; 0000 01A1 //writeCmd(0xC26C); //!AL,ml,DIG,DQD4(ручной, быстрый) ; 0000 01A2 //writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR 81-заполнение FIFO-буфера не по шаблону синхронизации ; 0000 01A3 writeCmd(0xCA83); //FIFO8,SYNC,ff,DR 83-заполнение FIFO-буфера по шаблону синхронизации ;PCODE: $0000010A VOL: 0 ;PCODE: $0000010B VOL: 0 ; 0000 01A4 //writeCmd(0xCAC3); ; 0000 01A5 //writeCmd(0xCAE3); ; 0000 01A6 writeCmd(0xCED6); //синхробайт (SYNC=D4 по умолчанию) ;PCODE: $0000010C VOL: 0 ;PCODE: $0000010D VOL: 0 ; 0000 01A7 //writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN ; 0000 01A8 writeCmd(0xC49B); //@PWR,YES RSTRIC,st,!fi,OE,EN ;PCODE: $0000010E VOL: 0 ;PCODE: $0000010F VOL: 0 ; 0000 01A9 //=== настройка модуляции и выходной мощности === ; 0000 01AA writeCmd(0x9850); //!mp,90kHz(57.6kbps),MAX OUT ;PCODE: $00000110 VOL: 0 ;PCODE: $00000111 VOL: 0 ; 0000 01AB //writeCmd(0x9870); //!mp,120kHz(115,2kbps),MAX OUT (120kHz зависит от скорости передачи) ; 0000 01AC //=============================================== ; 0000 01AD writeCmd(0xCC77); //OB1, OB0, LPX, 0-ddy, 1-DDIT, 1, 0-CBW0 ;PCODE: $00000112 VOL: 0 ;PCODE: $00000113 VOL: 0 ; 0000 01AE writeCmd(0xE000); //NOT USED ;PCODE: $00000114 VOL: 0 ;PCODE: $00000115 VOL: 0 ; 0000 01AF writeCmd(0xC800); //NOT USED ;PCODE: $00000116 VOL: 0 ;PCODE: $00000117 VOL: 0 ; 0000 01B0 writeCmd(0xC000); //1.0MHz,2.2V NOT USED ;PCODE: $00000118 VOL: 0 ;PCODE: $00000119 VOL: 0 ; 0000 01B1 //printf("test-0\n\r"); ; 0000 01B2 //====================================================== ; 0000 01B3 //LO(nSEL); // PORTB.4 SPI nSEL (chip select ENABLE) ; 0000 01B4 //HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ; 0000 01B5 //writeCmd(0x8219); //включен только кварцевый генератор ; 0000 01B6 //writeCmd(0x8218); //включен синтезатор, кварцевый генератор ; 0000 01B7 //writeCmd(0x8259); //вкл демодулятора ; 0000 01B8 //writeCmd(0x8221); // et-вкл. всего тракта передатчика,dc ; 0000 01B9 //writeCmd(0x8281); // et-вкл. всего тракта приёмника,dc ; 0000 01BA } ;PCODE: $0000011A VOL: 0 ;PCODE: $0000011B VOL: 0 ; ;/************ с опросом регистра состояния ;unsigned char rfRecv() { ; unsigned int dataRF; ; ; while(1) { //можно просто ждать FIFO RX ; while(nIRQ_LOW) {}; //FIFO=8, ждём, когда на nIRQ появится 0 ; //while(nINT) { //если данные действительны ; //while(nIRQ_LOW) {}; //FIFO=8, ждём, когда на nIRQ появится 0 ; dataRF = writeCmd(0x0000); //читаем регистр состояния ; if (dataRF&0x8000) { //если флаг FIFO RX равен 1 ; dataRF = writeCmd(0xB000); ; return (dataRF&0x00FF);//отбрасываем старший байт ; } ; } ;} ;************/ ; ;//программный SPI// ;//Указание из ДШ: во время доступа к FIFO fsck не может буть выше чем fref/4 =2,5МГц, ;//где fref равна частоте кварцевого резонатора модуля 10МГц. Если скважность тактового сигнала - не 50%, ;//то самый короткий период импульса clk должен быть как минимум 2/fref секунд. ;//на самом деле, данные из модуля RFM12B считываются без ошибок на максимальной скорости, ;//при частоте fsck SPI 3,70MHz SCK!!! ; ;//Вариант 1 SPI 3,70MHz SCK!!! ;/*** ;unsigned char rfRecv() { //приём данных RF и передача по SPI 3,70MHz SCK!!! ;//unsigned char dataRF; ;SDO=0; //SPI DO otput (SPI RFM12B data input) ; //if (nINT && DCLK) {} //если данные действительны и FIFO заполнен ;while (!(nINT && DCLK)); //ждём действительных данных и заполнения FIFO ; FSK=0; //0-выбор FIFO для чтения ; LO(nSEL); // PORTB.4 SPI nSEL=0 (chip select ENABLE) ; ; //USIDR = 0;//передаваемые данные в сдвиговый регисть ; USICR = 0b00010001;//и формируем тактирующие импульсы программно 3,70MHz SCK!!!(foc/4) ; USICR = 0b00010011; //0x13 ; USICR = 0b00010001; //0x11 ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; USICR = 0b00010001; ; USICR = 0b00010011; ; //dataRF = USIDR; //сохраняем байт из USIDR ; return (USIDR); ;} ***/ ; //dataRF = rfSend_Byte(0); // регистр чтения FIFO буфера ; //while (DCLK&&SDI){putchar('=');}; //ждём окончания чтения FIFO ; //FSK=1; //1-выкл. чтения FIFO приёмного региста ; //HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ; //FIFOReset(); ; //putchar(dataGPS);//передача данных на UART ; ;//Вариант 2 приём данных RF и передача по SPI 1,05MHz SCK ;/******* ;unsigned char rfRecv() ;{ ;SDO=0; ; //if (nINT && DCLK) {} //если данные действительны и FIFO заполнен ;while (!(nINT && DCLK)); //ждём действительных данных и заполнения FIFO ; FSK=0; //0-выбор FIFO для чтения ; LO(nSEL); // PORTB.4 SPI nSEL=0 (chip select ENABLE) ; ; //USIDR = 0; //передаваемые данные в сдвиговый регисть ; USISR |= (1< R17 ; b1 -> R16 ; b2 -> R19 ; b3 -> R18 ; b4 -> R21 ;PCODE: $0000018E VOL: 0 cli ;PCODE: $0000018F VOL: 0 ; 0000 02FE ; 0000 02FF init_ATtiny();//инициализация железа init_ATtiny2313 ;PCODE: $00000190 VOL: 0 ; 0000 0300 BAUDRATE; //из define BAUDRATE UBRRL=0x07; Baud Rate: 115200bps ;PCODE: $00000191 VOL: 0 ;PCODE: $00000192 VOL: 0 ; 0000 0301 ; 0000 0302 //1.Инициализация RF12, установка параметров приёма-передачи ; 0000 0303 //Перед инициализацией модуля, вы можете сбросить его. Команда на сброс 0xFE00. ; 0000 0304 //2.Сброс буфера ; 0000 0305 //LED_OFF(6); //вкл. Rx светодиод, вкл. УВЧ приёмника ; 0000 0306 //FSK=1; //1-выкл. чтения FIFO приёмного региста, задано в init_ATtiny(); ; 0000 0307 rfInit(); //инициал. радиомодуля в Rx ;PCODE: $00000193 VOL: 0 ; 0000 0308 putsf("rfInit\r\n");//=== тестовое сообщение на терминал ==== ;PCODE: $00000194 VOL: 0 ;PCODE: $00000195 VOL: 0 ;PCODE: $00000196 VOL: 0 ; 0000 0309 LED_Blink(3, 100);//мигаем для теста 3 раза быстро ;PCODE: $00000197 VOL: 0 ;PCODE: $00000198 VOL: 0 ;PCODE: $00000199 VOL: 0 ;PCODE: $0000019A VOL: 0 ;PCODE: $0000019B VOL: 0 ; 0000 030A #asm("sei")// глобально разрешить прерывания ;PCODE: $0000019C VOL: 0 sei ;PCODE: $0000019D VOL: 0 ; 0000 030B FIFOReset(); ;PCODE: $0000019E VOL: 0 ; 0000 030C ; 0000 030D while (1) ;PCODE: $0000019F VOL: 0 ; 0000 030E { ; 0000 030F line_begin: ;PCODE: $000001A0 VOL: 0 ; 0000 0310 /////////////////////аналоговый приём///////////////////////// ; 0000 0311 // if (PIND.5==0) { ; 0000 0312 // //переключаем фильтр на аналоговый ; 0000 0313 // flag_R^=1; ; 0000 0314 // if (flag_R==1) { ; 0000 0315 // writeCmd(0x8098);//выключить приёмный FIFO, данные выводятся на вывод FSK ; 0000 0316 // //writeCmd(0x8018);//выключить передающий и приёмный FIFO ; 0000 0317 // //writeCmd(0xC2BC); //включение аналогового фильтра, ; 0000 0318 // }; ; 0000 0319 // }; ; 0000 031A ////////////////////////////////////////////////////////////// ; 0000 031B ; 0000 031C dataGPS=rfRecv(); ;PCODE: $000001A1 VOL: 0 ;PCODE: $000001A2 VOL: 0 ; 0000 031D putchar(dataGPS); //передача данных на UART ;PCODE: $000001A3 VOL: 0 ;PCODE: $000001A4 VOL: 0 ; 0000 031E if (dataGPS == knb) { //обработка данных от кнопки ;PCODE: $000001A5 VOL: 0 ;PCODE: $000001A6 VOL: 0 ;PCODE: $000001A7 VOL: 0 ; 0000 031F b1=rfRecv(); //1-й байт кнопки ;PCODE: $000001A8 VOL: 0 ;PCODE: $000001A9 VOL: 0 ; 0000 0320 b2=rfRecv(); ;PCODE: $000001AA VOL: 0 ;PCODE: $000001AB VOL: 0 ; 0000 0321 b3=rfRecv(); ;PCODE: $000001AC VOL: 0 ;PCODE: $000001AD VOL: 0 ; 0000 0322 b4=rfRecv(); //4-й байт кнопки ;PCODE: $000001AE VOL: 0 ;PCODE: $000001AF VOL: 0 ; 0000 0323 //b5=rfRecv(); //5-й байт ; 0000 0324 /* ; 0000 0325 dataRF=b1; ; 0000 0326 for (i=0; i<2; i++) { //получаем 2 байта ; 0000 0327 dataRF+=rfRecv(); //проверить, дальше работать не будет ; 0000 0328 //потому, что в rfRecv(): while (!(nINT && DCLK)); ждём заполнения FIFO ; 0000 0329 //putchar(dataGPS); //передача данных на UART ; 0000 032A }; ; 0000 032B b4=rfRecv(); //получаем 4-й байт, сохраняем в b4 ; 0000 032C dataRF+=b4; ; 0000 032D ChkSum=rfRecv(); //5-й байт - контр. сумма ; 0000 032E */ ; 0000 032F FSK=1; //1-выкл. чтения FIFO приёмного региста ;PCODE: $000001B0 VOL: 0 ;PCODE: $000001B1 VOL: 0 ; 0000 0330 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ;PCODE: $000001B2 VOL: 0 ;PCODE: $000001B3 VOL: 0 ; 0000 0331 FIFOReset(); //приём окончен ;PCODE: $000001B4 VOL: 0 ; 0000 0332 //проверка срабатывания кнопоки1 или кнопки2 ; 0000 0333 if (b1==k1b1 && b2==k1b2 && b3==k1b3 && b4==k1b4) { //кнопка1 ;PCODE: $000001B5 VOL: 0 ;PCODE: $000001B6 VOL: 0 ;PCODE: $000001B7 VOL: 0 ;PCODE: $000001B8 VOL: 0 ;PCODE: $000001B9 VOL: 0 ;PCODE: $000001BA VOL: 0 ;PCODE: $000001BB VOL: 0 ;PCODE: $000001BC VOL: 0 ;PCODE: $000001BD VOL: 0 ;PCODE: $000001BE VOL: 0 ;PCODE: $000001BF VOL: 0 ;PCODE: $000001C0 VOL: 0 ;PCODE: $000001C1 VOL: 0 ;PCODE: $000001C2 VOL: 0 ;PCODE: $000001C3 VOL: 0 ;PCODE: $000001C4 VOL: 0 ; 0000 0334 PORTD.4=1; //вкл. выход кн.1 на зв. излучатель ;PCODE: $000001C5 VOL: 0 ;PCODE: $000001C6 VOL: 0 ; 0000 0335 //delay_ms(1000); //пока для теста ; 0000 0336 //PORTD.4=0; //выход кн.1 на зв. излучатель ; 0000 0337 //выключаем через 2сек в прерывании таймера ; 0000 0338 //break; ; 0000 0339 }; ;PCODE: $000001C7 VOL: 0 ; 0000 033A ; 0000 033B //if (b1==k2b1 && b2==k2b2 && b3==k2b3 && b4==k2b4) { //кнопка2 "" ; 0000 033C //PORTB.0=1; //выход кнопки2 (изменить на плате) ; 0000 033D //выключаем через 1сек в прерывании таймера ; 0000 033E //break; ; 0000 033F //}; ; 0000 0340 //putchar(dataRF); //передача данных на UART, можно отключить ; 0000 0341 goto line_begin; ;PCODE: $000001C8 VOL: 0 ; 0000 0342 }; ;PCODE: $000001C9 VOL: 0 ; 0000 0343 ; 0000 0344 FSK=1; //1-выкл. чтения FIFO приёмного региста ;PCODE: $000001CA VOL: 0 ;PCODE: $000001CB VOL: 0 ; 0000 0345 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ;PCODE: $000001CC VOL: 0 ;PCODE: $000001CD VOL: 0 ; 0000 0346 FIFOReset(); ;PCODE: $000001CE VOL: 0 ; 0000 0347 ; 0000 0348 //== приём в аналоговом режиме, пока для теста ================================ ; 0000 0349 //аналоговый выход RSSI на модуле отсутствует, поэтому используем FSK/DATA/nFFS  ; 0000 034A //Transmit FSK data input/ Received data output (FIFO not used)/ FIFO select  ; 0000 034B /*** ; 0000 034C if (0) { //сейчас выключено if(0) ; 0000 034D PORTB=0x10; //PB2=IN ; 0000 034E DDRB=0xD0; //PB2=IN ; 0000 034F writeCmd(0x8098);//ДЛЯ аналогового приёма, FSK выход сигнала, перекл. МК pinB2 на ВХОД! ; 0000 0350 //writeCmd(0xC2FC); //включение аналогового фильтра, для приёма на наушники ; 0000 0351 while (1) { ; 0000 0352 dataGPS=rfRecv(); ; 0000 0353 putchar(dataGPS); //передача данных на UART ; 0000 0354 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ; 0000 0355 //FIFOReset(); ; 0000 0356 //analogRX=1; ; 0000 0357 }; ; 0000 0358 PORTB=0x14; //PB2=Out State2=1 FSK в режиме приёма начальная настройка ; 0000 0359 DDRB=0xD4; //PB2=Out начальная настройка ; 0000 035A writeCmd(0x80D8);//EL,EF,enable register,433MHz,12.5pF ; 0000 035B //writeCmd(0xC2EC); //al,ml,DIG,DQD4(авт.режим быстрый->медленный, ручной-быстрый) ; 0000 035C }; ; 0000 035D ***/ ; 0000 035E //== конец приёма в аналоговом режиме ========================================= ; 0000 035F } ;PCODE: $000001CF VOL: 0 ;PCODE: $000001D0 VOL: 0 ; 0000 0360 ; 0000 0361 } ;PCODE: $000001D1 VOL: 0 ;PCODE: $000001D2 VOL: 0 ;PCODE: $000001D3 VOL: 0 ; ; ;void rfSend_K(char kb) //передача кода кнопки ; 0000 0365 { ;PCODE: $000001D4 VOL: 0 ;PCODE: $000001D5 VOL: 0 ; 0000 0366 bit flag_rx; ; 0000 0367 //char K1, K2; ; 0000 0368 //#asm("cli") // глобально запретить прерывания ; 0000 0369 //GIMSK=0x00; //запретить прерывания int1 ; 0000 036A ; 0000 036B //если был включен режим приёма, переключаемся на передачу ; 0000 036C if (PIND.6==0) { //переключение в режим TX ;PCODE: $000001D6 VOL: 0 ; kb -> Y+0 ; flag_rx -> R15.0 ;PCODE: $000001D7 VOL: 0 ;PCODE: $000001D8 VOL: 0 ;PCODE: $000001D9 VOL: 0 ; 0000 036D flag_rx=1; //запоминаем, какой был режим до переключения ;PCODE: $000001DA VOL: 0 ;PCODE: $000001DB VOL: 0 ;PCODE: $000001DC VOL: 0 ; 0000 036E LED_ON(6); //вкл. светодиод и усилитель мощности ;PCODE: $000001DD VOL: 0 ;PCODE: $000001DE VOL: 0 ; 0000 036F FSK=1; //1-вкл. передающий регистр ;PCODE: $000001DF VOL: 0 ;PCODE: $000001E0 VOL: 0 ; 0000 0370 writeCmd(0x8239); //вкл. передатчик TX ;PCODE: $000001E1 VOL: 0 ;PCODE: $000001E2 VOL: 0 ; 0000 0371 }; ;PCODE: $000001E3 VOL: 0 ; 0000 0372 FSK=1; //1-вкл. перед. регистр ;PCODE: $000001E4 VOL: 0 ;PCODE: $000001E5 VOL: 0 ; 0000 0373 writeCmd(0x0000);//читать регистр состояния перед каждым кадром ;PCODE: $000001E6 VOL: 0 ;PCODE: $000001E7 VOL: 0 ;PCODE: $000001E8 VOL: 0 ; 0000 0374 LO(nSEL); // PORTB.4 SPI nSEL (chip select ENABLE) ;PCODE: $000001E9 VOL: 0 ;PCODE: $000001EA VOL: 0 ; 0000 0375 //FSK=1; //1-вкл. перед. регистр здесь не будет работать ; 0000 0376 rfSend_Byte(0xB8); // вкл. Передающий регистр ;PCODE: $000001EB VOL: 0 ;PCODE: $000001EC VOL: 0 ; 0000 0377 rfSend_Byte(0xAA); // PREAMBLE SYNC byte, рекомендованная длина 8бит-12бит ;PCODE: $000001ED VOL: 0 ;PCODE: $000001EE VOL: 0 ; 0000 0378 //rfSend_Byte(0xAA); // SYNC byte, необязателен ; 0000 0379 //========= Шаблон действительных данных ; 0000 037A rfSend_Byte(0x2D); // SYNC HI byte ;PCODE: $000001EF VOL: 0 ;PCODE: $000001F0 VOL: 0 ; 0000 037B rfSend_Byte(0xD6); // SYNC LOW byte, (по умолчанию D4) программируется ;PCODE: $000001F1 VOL: 0 ;PCODE: $000001F2 VOL: 0 ; 0000 037C //========= передача данных ; 0000 037D rfSend_Byte(knb); // передача символа кнопки ;PCODE: $000001F3 VOL: 0 ;PCODE: $000001F4 VOL: 0 ; 0000 037E if (kb==1) { ;PCODE: $000001F5 VOL: 0 ;PCODE: $000001F6 VOL: 0 ;PCODE: $000001F7 VOL: 0 ; 0000 037F rfSend_Byte(k1b1); // передача byte1 кнопки1 ;PCODE: $000001F8 VOL: 0 ;PCODE: $000001F9 VOL: 0 ; 0000 0380 rfSend_Byte(k1b2); // передача byte2 ;PCODE: $000001FA VOL: 0 ;PCODE: $000001FB VOL: 0 ; 0000 0381 rfSend_Byte(k1b3); // передача byte3 ;PCODE: $000001FC VOL: 0 ;PCODE: $000001FD VOL: 0 ; 0000 0382 rfSend_Byte(k1b4); // передача byte4 ;PCODE: $000001FE VOL: 0 ;PCODE: $000001FF VOL: 0 ; 0000 0383 //rfSend_Byte(k1b5); // передача byte5 ; 0000 0384 //rfSend_Byte(codeK1); // передача codeK1 кнопки1 ; 0000 0385 }; ;PCODE: $00000200 VOL: 0 ; 0000 0386 ; 0000 0387 if (kb==2) { ;PCODE: $00000201 VOL: 0 ;PCODE: $00000202 VOL: 0 ;PCODE: $00000203 VOL: 0 ; 0000 0388 rfSend_Byte(k2b1); // передача byte1 кнопки2 ;PCODE: $00000204 VOL: 0 ;PCODE: $00000205 VOL: 0 ; 0000 0389 rfSend_Byte(k2b2); // передача byte2 ;PCODE: $00000206 VOL: 0 ;PCODE: $00000207 VOL: 0 ; 0000 038A rfSend_Byte(k2b3); // передача byte3 ;PCODE: $00000208 VOL: 0 ;PCODE: $00000209 VOL: 0 ; 0000 038B rfSend_Byte(k2b4); // передача byte4 ;PCODE: $0000020A VOL: 0 ;PCODE: $0000020B VOL: 0 ; 0000 038C //rfSend_Byte(k2b5); // передача byte5 ; 0000 038D //rfSend_Byte(codeK2); // передача codeK2 кнопки2 ; 0000 038E }; ;PCODE: $0000020C VOL: 0 ; 0000 038F //========= конец данных ; 0000 0390 rfSend_Byte(0x00); // DUMMY BYTES ;PCODE: $0000020D VOL: 0 ;PCODE: $0000020E VOL: 0 ; 0000 0391 //rfSend_Byte(0xAA); // DUMMY BYTES ; 0000 0392 FSK=0; //0-выкл.перед.регистр, вкл. приёмный регистр ;PCODE: $0000020F VOL: 0 ;PCODE: $00000210 VOL: 0 ; 0000 0393 HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ;PCODE: $00000211 VOL: 0 ;PCODE: $00000212 VOL: 0 ; 0000 0394 //flag_Kn=1; ; 0000 0395 delay_ms(25); ;PCODE: $00000213 VOL: 0 ;PCODE: $00000214 VOL: 0 ;PCODE: $00000215 VOL: 0 ; 0000 0396 //===== передача окончена === ; 0000 0397 //=== переход в режем приёма ============================================ ; 0000 0398 if (flag_rx==1) { //восстанавливаем режим, который был до переключения ;PCODE: $00000216 VOL: 0 ;PCODE: $00000217 VOL: 0 ;PCODE: $00000218 VOL: 0 ; 0000 0399 writeCmd(0x82D9); //вкл. приёмник RX ;PCODE: $00000219 VOL: 0 ;PCODE: $0000021A VOL: 0 ; 0000 039A LED_OFF(6); //выкл. усилитель мощности и светодиод, вкл ант. усилитель ;PCODE: $0000021B VOL: 0 ;PCODE: $0000021C VOL: 0 ; 0000 039B } ; 0000 039C //#asm("sei")// глобально разрешить прерывания ; 0000 039D //GIMSK=0x80; //разрешить прерывания int1 ; 0000 039E } ;PCODE: $0000021D VOL: 0 ;PCODE: $0000021E VOL: 0 ;PCODE: $0000021F VOL: 0 ;PCODE: $00000220 VOL: 0 ; ; ; ; ; ; ;//================= МУСОР ===================//========================================// ;/***************** ; ; //while(!nINT) {}; //ждём, когда на nIRQ появится 0 ; //if(!nIRQ_LOW) //разрешаем выполнение, когда nIRQ=0 PIND.2=0 ; //for (i=0; i<16; i++) { ; //dataGPS = rfRecv(); ; //putchar(dataGPS);//передача данных на UART ; //FIFOReset(); ; //} ; //while(nIRQ_LOW) {}; //ждём, когда на nIRQ появится 0 ; ; if (nINT && DCLK) { //если данные действительны и FIFO заполнен ; while(nIRQ_LOW) {}; //ждём, когда на nIRQ появится 0 ; //while (!DCLK) {}; //если данные действительны и FIFO заполнен ; //FSK=0; //0-выбор FIFO для чтения ; //LO(nSEL); // PORTB.4 SPI nSEL (chip select ENABLE) ; //dataGPS = rfSend_Byte(0xB0); // регистр чтения FIFO буфера ; ; dataGPS = (writeCmd(0xB000)&0x00FF); ; //return (dataRF&0x00FF);//отбрасываем старший байт ; ; //HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ; //FSK=1; //1-выкл. чтения FIFO приёмного региста ; FIFOReset(); ; putchar(dataGPS);//передача данных на UART ; }; ; ; for (i=0; i<33; i++) { ; dataGPS=rfRecv(); ; putchar(dataGPS);//передача данных на UART ; } ; ; do ; dataGPS=rfRecv(); //получить данные с RFM ; while(dataGPS!=0x24);//проверяем символ "$" ; putchar(dataGPS); //передача данных на UART ; ; ; for (i=0; i<256; i++) { //74символа ; dataGPS=rfRecv(); ; putchar(dataGPS); //передача данных на UART ; if ((tempdataGPS+dataGPS)==0x17) { //если приняли CR(0x0D)+LF(0x0A)-конец пакета ; //if ((tempdataGPS==0x0D)&&(dataGPS==0x0A)) { //если приняли CR и LF(перевод каретки+конец строки) ; FSK=1; //1-выкл. чтения FIFO приёмного региста ; HI(nSEL); //PORTB.4 SPI nSEL (chip select DISALBE) ; FIFOReset(); ; //i=74; ; break; ; }; ; //putchar('='); ; tempdataGPS=dataGPS; ; } ;********/ ; ;/********************* МУСОР ;for(;;){} //бесконечный цикл ; ;while (1) { ; putchar('='); ;}; ; ;**********************************/