И вот на прошлой неделе установил себе Proteus 8…
Естественно, многие ключевые элементы в нём отсутствуют, либо не имеют модели симуляции. Например, тот же Z80 графически есть, но логически не симулируется…
А элемент 12И-НЕ (К531ЛА19/74S134) вовсе не так работает, выдавая на выходе не инверсный, а прямой результат… И разрешающий сигнал - логическая единица!
Конечно, я скачал архивы с ZX-Spectrum и Радио-86РК, но элемент отображения композитного видео не работает и даёт предупреждение «Batch mode model creation function(s) not found in display.DLL. [TVOUT#008A]». И только «boblite» имеет «RGBIOUT» - работающий цветной дисплей…
А так как микросхема телевизионного сепаратора LM1881 так же отсутствует в списке элементов симуляции, я взял сигналы развёртки, идущие к «RGBIOUT», чтобы подтянуть их к ATtiny 85. И тут я споткнулся с прерываниями…
Не срабатывают они по сигналу строчной развёртки через вывод 3(PCINT4) как бы я ни старался!
Открыл проект попроще и решил в нём кнопками прерывания отладить…
Однако и в нём они не вырабатываются!
Вот что тут не так?
И ещё вопрос…
Спойлер
К данному ATtiny можно подключить 12 светодиодов (если очень захотеть).Однако, я попытался сделать обратное - подключить 12 кнопок…
(Помните тему?)
Но почему-то регистры R22 и R23, при нажатии двух кнопок несут не два, а три бита.
Получается, будто по двум проводам нельзя опросить две кнопки, разделённые диодами?
Алгоритм:
- Настраиваем выводы 5,6,7 на вывод и 2,3 на ввод
- Перемещаем логический «0» от вывода 5 к выводу 7 и считываем три раза выводы 2,3 в регистры R20,R21,R22
- Настраиваем выводы 5,6,7 на ввод и 2,3 на вывод
- Перемещаем логический «0» от вывода 2 к выводу 3 и считываем два раза выводы 5,6,7 в регистры R23,R24
- Маскируем, сдвигаем и упаковываем все 12 битов в два регистра R22,R23
Код: Выделить всё
; Reset Vector
RJMP Reset
RJMP Event
RJMP Event
NOP ; TIMER
NOP ; EEPROM
NOP ; Analog
NOP ; Timer 0 Compare A
NOP ; Timer 0 Compare B
NOP ; Watch
NOP ; ADC Conversion
; .ORG 0x0010
;==============
; CODE SEGMENT
;==============
Event:
Reset:
LDI R16,LOW(RAMEND)
OUT SPL,R16
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,1 << PUD
OUT MCUCR,R16
Phase_1:; Vertical Out - Horizontal In
LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4)
OUT PORTB,R17
LDI R16,(1 << DDB0) | (1 << DDB1) | (1 << DDB2)
OUT DDRB,R16
LDI R17,(1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4)
OUT PORTB,R17
IN R20,PINB
LDI R17,(1 << PB0) | (1 << PB2) | (1 << PB3) | (1 << PB4)
OUT PORTB,R17
IN R21,PINB
LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB3) | (1 << PB4)
OUT PORTB,R17
IN R22,PINB
Phase_2:; Horizontal Out - Vertical In
LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4)
OUT PORTB,R17
LDI R16,(1 << DDB3) | (1 << DDB4)
OUT DDRB,R16
LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB4)
OUT PORTB,R17
IN R23,PINB
LDI R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3)
OUT PORTB,R17
IN R24,PINB
Phase_3:; Pack the bits
ANDI R24,(1 << PB0) | (1 << PB1) | (1 << PB2)
LSL R24
LSL R24
LSL R24
ANDI R23,(1 << PB0) | (1 << PB1) | (1 << PB2)
OR R23,R24
ANDI R20,(1 << PB3) | (1 << PB4)
LSR R20
LSR R20
LSR R20
ANDI R21,(1 << PB3) | (1 << PB4)
LSR R21
OR R21,R20
ANDI R22,(1 << PB3) | (1 << PB4)
LSL R22
OR R22,R20
LDI R21,0x3F
EOR R22,R21
EOR R23,R23
; Now is code in R23 and R22
Stopped:RJMP Phase_1;Stopped


