Программирование в IAR. Так как в ATtiny13 ни каких аппаратных интерфейсов нет, то приходится делать всё самому. Делаю трех проводную связь (наверное, можно более оптимально сделать, но пока так). ……………………………….. #include <ioavr.h> #include <inavr.h>
unsigned int Byte = 0; extern unsigned int ByteEx = 0; struct { unsigned Bt1 : 1; unsigned Bt2 : 1; unsigned Bt3 : 1; unsigned Bt4 : 1; };
void main( void ) { Bt1 = 1; Bt2 = 1; Bt3 = 0; Bt4 = 1;
DDRB = 0x03; // 00 0011 PORTB = 0x3C; // 11 1100 __enable_interrupt();
while (1) { if (PINB_Bit2 == 0) { if (Bt4) { Byte = 0; Nbit = 0; Bt4 = 0; } if (PINB_Bit4 == 0 && Nbit < 8) { if (Bt2) { PORTB_Bit1 = 1;
// if (PINB_Bit3) Byte = 127;//|= (1 << Nbit);
Nbit++; } Bt2 = 0; } else { PORTB_Bit1 = 0; Bt2 = 1; } if (Nbit == 8) Bt3 = 1; } else { if (Bt3) { // ByteEx = Byte; Bt4 = 1; } Bt3 = 0; } } } ………………………………..
Пин 2 это Chip Select, пин 4 – Data Clock, пин 3 – данные. Если передаю большие значения, больше 40 – 50 (точно границу не отлавливал), то всё принимается нормально, если меньше, то идут сбои в тактировании битов, периодические объединения битов (виден четкий период). Пин 1 специально ввёл для теста. Также для теста закомментировал проверку бита данных (if (PINB_Bit3)) и установку константы в переменную данных. С константой ситуация не изменилась. Переменные объявлял и как unsigned int, и как unsigned char. Два дня бьюсь, не могу понять, в чём дело. Помогите разобраться.
|