[an error occurred while processing this directive]
|
вот тут чтото я ума не приложу
#include // 1 Wire Bus functions #define RXB8 1 #define FRAMING_ERROR (1< #if RX_BUFFER_SIZE<256 // This flag is set on USART Receiver buffer overflow // USART Receiver interrupt service routine #ifndef _DEBUG_TERMINAL_IO_ // Standard Input/Output functions #define DS1990_FAMILY_CODE 1 #define MAX_DEVICES 8 // Declare your global variables here void main(void) // Input/Output Ports initialization // Port B initialization // Port C initialization // Port D initialization // Timer/Counter 0 initialization // Timer/Counter 1 initialization // Timer/Counter 2 initialization // External Interrupt(s) initialization // Timer(s)/Counter(s) Interrupt(s) initialization // USART initialization // Analog Comparator initialization // инициализируем 1-ware выход // разрешаем глобальные прерывания }
#asm
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=0
#endasm
#include <1wire.h>
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define RX_BUFFER_SIZE 256
#define RX_BUFFER_SIZE2 128
char rx_buffer[RX_BUFFER_SIZE];
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
bit rx_buffer_overflow;
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif
#include
#define SEARCH_ROM 0xF0
unsigned char rom_code[MAX_DEVICES][9];
unsigned char i,j,devices;
unsigned char n=1;
{
// Declare your local variables here
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=In
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xF8;
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 4800
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
w1_init();
#asm("sei")
#define CRC_BYTE 1 // Количество байт CRC (без CRC - 0, для 8 битного - 1, для 16 битного - 2)
while (1)
{
/*здесь ма начинаем прием пакета в соответствии с нашим олгоритмом работы */
char ADRES; // эта переменная номера устройства которая считывается с порта А
char UPRAV; // это байт управления
char RX_Start; // стартовый байт
char RX_Stop; // Байт пизнака конца пакета
char RX_start_p;// принимаемый байт старта
char RX_stop_p;// принимаемый байт стoпа
char rx_u;// байт управления
char rx_s;// байт состояния
char rx_w1,rx_w2,rx_w3,rx_w4,rx_w5,rx_w6;//принятые байты функции с центрального пульта у нас они не используются
char tx_w1,tx_w2,tx_w3,tx_w4,tx_w5,tx_w6;//передаваемые байты функции (сюда мы будем писать либо 0000000000 либо номер ключа)
char tx_led; //индикация режима приема
char rx_CRC; // Принятый CRC
char tx_CRC; // переданный СRС
char ADRES_RX;// принятый байт адреса
ADRES=PINA; // считываем с порта А номер контроллера
RX_Start=0xAA;//стартовый бaит принимаем равным в нащем протоколе 0b10101010
RX_Stop=0xE7; //стоповый бaит 0b11100111
/* начинаем сам прием*/
RX_start_p=getchar(); //начало приема пакета, прием байта старта приема(выхватываем 1 байт из буфера)
if (RX_start_p==RX_Start) //если стартовый байт совпадает с нашим то идем дальше
{
ADRES_RX=getchar();// принимаем байт адреса
if (ADRES_RX==ADRES)
{
rx_u=getchar(); //принимаем байт управления
rx_s=getchar();//принимаем байт состояния
rx_w1=getchar();// принимаем байт 1 ключа
rx_w2=getchar();// ,,,,,,,,,,,,,,,,,,,,,,
rx_w3=getchar();// ,,,,,,,,,,,,,,,,,,,,,,
rx_w4=getchar();// ,,,,,,,,,,,,,,,,,,,,,,
rx_w5=getchar();// ,,,,,,,,,,,,,,,,,,,,,,
rx_w6=getchar();// принимаем байт 6 ключа
rx_CRC=getchar();//принимаем от главного расчитанное им СRC 8
RX_stop_p=getchar();//принимаем стоповый байт
/* дальше начинаем считать*/
};
};
}
Ответы
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание