Перейти к содержанию

Dan'nah

Members
  • Постов

    213
  • Зарегистрирован

  • Посещение

Весь контент Dan'nah

  1. До обновления при открытии темы с новыми сообщениями она открывалась на первом непрочитанном сообщении. Сейчас открывается первое сообщение темы — неудобно (особенно когда в теме много страниц, а первое непрочитанное находится не на последней странице — приходится его искать). Возможно ли вернуть эту функцию?
  2. Нужно отключить JTAG (fuse JTAGEN), который висит на PORTC
  3. 3S / 2200 mAh / 30C : С=2200 mAh, 30С=30*2200=66000 mA — максимальный отдаваемый ток 66А
  4. Нет. (!PINC.0) -> (PINC.0==0), проверка на равенство 0 ( !0 == 1 is true, !1 == 0 is false). (PINC.0 != 0) -> (PINC.0 == 1) , т.к. PINC.0 может принимать значения 0 или 1 (1 != 0 is true, 0 != 0 is false).
  5. #include <mega8.h> // частота CP 8мгц. #include <delay.h> unsigned char n = 1; unsigned char m = 1<<7; void main(void) { // начало программы DDRD = 0xFF; PORTD = 0x00; // выход - PORTD. DDRC = 0x00; PORTC=0x03; // входы - PC0 и PC1. подключаем нагрузочные резисторы к PC0 и PC1 PORTD = 0xFF; delay_ms(1000); PORTD = 0x00; // мигнуть для проверки лампочек while(1) { // главный цикл if (!PINC.0) { // если есть нажатие n delay_ms(20); while(!PINC.0); // Ждём отпускания n=n<<1; // сдвиг влево if (!n) n=1; //переполнение — восстанавливаем исходное значение } if (!PINC.1) { // если есть нажатие m delay_ms(20); while(!PINC.1); // Ждём отпускания m=m>>1; // сдвиг вправо if (!m) m=1<<7; // } delay_ms(20); // доп. задержка антидребезга при отпускании кнопки PORTD= (n & m); } } Доработал код. При отпускании кнопка тоже дребезжит — добавил задержку. Код целиком и полностью работает в соответствии с лог. схемой (если нет каких-то дополнительных условий) — проверено в железе.
  6. Знаю)) Уже просветили. Очень удобно
  7. @Prozac Согласно алгоритму (картинке) в порт выводится AND 0001 xor 0001 = 0000, если не ошибаюсь
  8. #include <mega8.h> // частота CP 8мгц. #include <delay.h> unsigned char n = 1; unsigned char m = 1<<7; void main(void) { // начало программы DDRD = 0xFF; PORTD = 0x00; // выход - PORTD. DDRC = 0x00; PORTC=0x03; // входы - PC0 и PC1. подключаем нагрузочные резисторы к PC0 и PC1 PORTD = 0xFF; delay_ms(1000); PORTD = 0x00; // мигнуть для проверки лампочек while(1) { // главный цикл temp=0; if (PINC.0==0) { // если есть нажатие n delay_ms(10); while(PINC.0==0); // Ждём отпускания n=n<<1; // сдвиг влево if (!n) n=1; //переполнение — восстанавливаем исходное значение } if (PINC.1==0) { // если есть нажатие m delay_ms(10); while(PINC.1==0); // Ждём отпускания m=m>>1; // сдвиг вправо if (!m) m=1<<7; // } PORTD= (n & m); } }
  9. Если не ошибаюсь, "дурина" тактируется от кварцевого резонатора на 16МГц. Вот и надо выставить на тактирование от внешнего кварцевого резонатора CKSEL3...0 0111, CKDIV8 1, SUT1...0 10 или 11
  10. Сдвигать переменную никто не запрещал: button = PIND; //если кнопка замыкается на землю проинвертировать: button=~button; t=5; while (t--) { if (button&0x01) {err++;} button=button>>1; //сдвиг переменной реализовать проще чем создание маски на лету: if (button & (1<<t)) } if (err>2) [/* ВЫВОДИМ СИМВОЛ E НА ДИСПЛЕЙ*/; err=0;]
  11. А разница? PORTB0=PINB0=PB0=(и т.д. и т.п)=0 это есть константа: #define PORTB0 0
  12. Вместо "несколько переменных" создать массив и обращаться по индексу.
  13. Только это уже не совсем актуально. Сейчас выпускают ATmaga8A она работает и как ATmaga8, и как ATmaga8L
  14. @;tv Учите мат. часть!!! При инициализации PORTC&=0x00; , т.е. PORTC=0; (0b00000000) Выражение PORTC&=0b00000010; означает PORTC=PORTC&0b00000010; , если PORTC=0 , то после выполнения этой строки PORTC останется 0 0b00000000; & 0b00000010; ------------- 0b00000000; A=PORTC; => A=0; И выполняться будет только условие "case 0:" Так и считывайте PINC! Вам об этом уже писали: A = PINC & 0b00000010;
  15. Проще в предыдущей схеме столбцы матрицы СД повесить на PORTB. И
  16. В 2008 писал подобную игрушку для ПК на Delphi: Puzzle.rar
×
×
  • Создать...