- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
//прерывание по таймеру А
ISR(TIMER1_COMPA_vect)
{
u08 i=0; // локальная переменная
cli();
PORTD |= _BV(PD4); // Вывод PD4 в 1. Выход ШИМ
TCNT1H = 0x00;
TCNT1L = 0x00;
// Динамическая индикация
Shet_ind+=1;
if (Shet_ind==7)
{
PORTC &= 0x70;
PORTB=0;
};
// Подготовка указателя
if (Ukaz_Herc) //
{
Ukaz_znash = (Ukaz_znash+1)&0x0f; // 1кГц
// Загрузить новое значение ШИМ !!!!!!!
OCR1BH = tabl1 [Ukaz_znash][0];
OCR1BL = tabl1 [Ukaz_znash][1];
if (Ukaz_znash==0) {Kol_period-=1;};
}
else
{
Ukaz_znash = (Ukaz_znash+1)&0x07; // 2кГц
// Загрузить новое значение ШИМ !!!!!!!
OCR1BH = tabl2 [Ukaz_znash][0];
OCR1BL = tabl2 [Ukaz_znash][1];
if (Ukaz_znash==0){Kol_period-=1;};
};
// 1-Wire Сброс, передача 1, передача 0
if (Zaxvat1Wire<20000) {Zaxvat1Wire+=1;}; // Инкремент пропущенных захватов
if (Per1Wire!=0)
{
if (Per1Wire>1) DDR |= _BV(DDD7); // Порт D PD7 на выход. Выход 1-Wire на линии 0
//Вставить ожидание 1 мкС
QDEL;
if (Per1Wire-=1)
{
DDR &= ~(_BV(DDD7)); // Линия 1-Wire линия 7 порта D на вход. На линии 1
Zaxvat1Wire=0; // Сброс инкремента пропущенных захватов
};
};
// 1-Wire Cчётчик пропущенных захватов фронтов
// Счёт кол периодов
/*****А ТЕПЕРЬ ПОЗНАЙ ИСТИННУЮ БОЛЬ!*****/
if (Kol_preiod==0)
{
if(Buf_bit)
{ // Передаем бит
//Проверка передаваемого бита
if (Buf_bit>1 && Buf_bit<10) // передаем значащие биты
{
i=0; // Передаем 0
if (bit_is_set(Buf_vtor [Buf_baite], Buf_bit-2)) {i=1;}; // Передаем 1
};
if (Buf_bit==10) i=0; //Передаем старт бит
if (Buf_bit==1) i=1; //Передаем старт бит
if (i)
{Ukaz_Herc = 0x01; Kol_period=10; } // Передаем 1 OCR1AH = 0x01; OCR1AL = 0xF4; Ukaz_znash=0;
else
{Ukaz_Herc = 0x00; Kol_period=20; } // Передаем 0 OCR1AH = 0x01;
OCR1AL = 0xF4; Ukaz_znash=0;
Buf_bit-=1;
};
if (!Buf_bit)
{ // Биты кончились меняем байты
if(Buf_baite) {Buf_baite -=1; Buf_bit=10;}
else
{Buf_bit=1;};
};
};
// Динамическая индикация
if (Shet_ind==7 && IndOn)
{
Shet_ind=0;
Delitel += 1; //Инкремент дополнительного делителя
if (!pos) {Brightness_shet=(Brightness_shet+1)%8;};
PORTB=digits[pos];
if (Brightness_shet<=Brightness) {PORTC |= 1<<pos;}; //Регулировка яркости
};
sei();
}
Тут есть всё на любой извращённый вкус. Этот лютый пиздец я отрыл на каких-то распечатаных листах.
(Листинг 28 страниц, Карл! 28 страниц, 10 шрифтом)
guest 27.11.2015 03:12 # 0
guest 27.11.2015 03:12 # 0
Antervis 27.11.2015 05:46 # +3
kgm-rj 27.11.2015 07:20 # 0
Antervis 27.11.2015 08:50 # 0
kgm-rj 27.11.2015 09:23 # 0
imihajlov 27.11.2015 10:25 # 0
kgm-rj 27.11.2015 10:35 # 0
Bobik 27.11.2015 11:14 # +2
Это каст адреса 0x0f к типу Ukaz_znash+1?
Переменные с большой буквы совсем не читаются :(
Abbath 27.11.2015 11:36 # +4
roman-kashitsyn 27.11.2015 11:39 # +2
Добавляет симпатичную звёздочку
kegdan 27.11.2015 11:42 # +1
Antervis 27.11.2015 11:55 # +1
inkanus-gray 27.11.2015 13:44 # +1
guest 04.12.2015 03:13 # 0
imihajlov 27.11.2015 11:15 # +5
guest 27.11.2015 11:19 # 0
bormand 27.11.2015 19:27 # +2
99% ардуинщиков это либо программисты без опыта в электронике (берут ардуину потому что паять не надо), либо электронщики без опыта программирования (берут ардуину потому что полно примеров кода). Собственно отсюда и результаты...
Antervis 30.11.2015 06:45 # +1
WGH 12.01.2016 01:17 # +1
bormand 27.11.2015 19:19 # +1
> /*****А ТЕПЕРЬ ПОЗНАЙ ИСТИННУЮ БОЛЬ!*****/
Фи, подумаешь, конечный автомат. У меня больше боли от идентификаторов транслитом...
MiD 27.11.2015 19:59 # 0
gost 28.11.2015 09:21 # 0
>if (Brightness_shet<=Brightness) {PORTC |= 1<<pos;};
Они там экономят байты исходного кода в надежде, что это сократит выхлоп конпелятора?
bormand 28.11.2015 09:26 # +2
inkanus-gray 28.11.2015 14:18 # +1
Antervis 30.11.2015 06:50 # 0
kegdan 30.11.2015 09:06 # 0
dxd 03.12.2015 05:08 # 0
kegdan 03.12.2015 08:36 # 0