Сделал для 2313. Тактовая частота 20МГц. Выход PB4. Потом можно переделать на таймер 0 и там будет нужная Вам нога, СКАЗОЧНИК. Есть возможность присобачить на PB4?
20МГц наверняка даст возможность выдвигать биты в цикле (может и 16 хватит). Но пускай пока для каждого бита свой код. Главное проверить работоспособность.
На линию выкидывает 100 байт начиная с адреса 0x60.
Спойлер
Код: Выделить всё
.equ eTOP=0x18 //предел счетчика для 20МГц
.equ eBit1=0xF //длительность единичного импулься для лог1
.equ eBit0=0x08
//---------------------------------------
.def zero=R1
.def buf=R16
.def Bit1 =R17
.def Bit0 =R18
.def SbrosFlag=R19
.def Chislo=R20
//-----------------
.macro SetBit
out TIFR,SbrosFlag
//sbrc chislo,@0
out OCR1BL,bit1
sbrs chislo,@0
out OCR1BL,bit0
.endm
.Macro WaitFlag//ждем когда сбросится счетчик
in BUF,TIFR
ANDi buf,1<<TOV1
breq PC-2
.endm
//---------------------
.org 0
rjmp RESET ; Reset Handler
reti//rjmp EXT_INT0 ; IRQ0 Handler
reti//rjmp PCINT0 ; PCINT0 Handler
reti//rjmp TIM0_OVF ; Timer0 Overflow Handler
reti//rjmp EE_RDY ; EEPROM Ready Handler
reti//rjmp ANA_COMP ; Analog Comparator Handler
reti//rjmp TIM0_COMPA ; Timer0 CompareA Handler
reti//rjmp TIM0_COMPB ; Timer0 CompareB Handler
reti//rjmp WATCHDOG ; Watchdog Interrupt Handler
reti//rjmp ADC ; ADC Conversion Handler
;
//--------------------------------------------
RESET: //
ldi buf,low(RAMEND)
out SPL, buf
//ldi buf,High(RAMEND)
//out SPH,buf
//константы
ldi buf,0
mov zero,buf
ldi Bit1,eBit1 //значение для передачи 1
ldi Bit0,eBit0//0
ldi SbrosFlag,1<<TOV1
//Настройка таймера 1
Ldi buf,eTop //Предел счета
out OCR1AH,zero
out OCR1AL,buf
//настройка порта
ldi buf,1<<PB4
out DDRB,buf
//cbi PORTB,1<<PB3 //на всякий случай выключить порт
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//Функция вывод ОЗУ на диоды
//изначально таймер должен быть обязательно в нормальнром режиме и выключен
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//**************************************************8
ldi Xl,low(100) //счечтик отправленных байт
ldi XH,High(100)
ldi Zl,low(0x60) //адрес откуда считывать данные
ldi ZH,High(0x60)
out TCNT1h, zero //установить счетчик чуть меньшим значение верха
ldi buf,eTop-2
out TCNT1l,buf
//*************************
//Занести ноль в старшой буфер
out OCR1BH,zero
//переключение выхода
ld chislo,Z+
//ldi chislo,0x55
SetBit 7
//------------------------------------------
// понеслась
LDI buf,(1<<WGM10)|(1<<WGM11)|(1<<COM1B1)|(0<<COM1B0)
out TCCR1A,buf
LDI buf,(1<<WGM13)|(1<<WGM12)+1
out TCCR1B,buf
//______________________
WaitFlag
Cicle:
SetBit 6
WaitFlag
SetBit 5
WaitFlag
SetBit 4
WaitFlag
SetBit 3
WaitFlag
SetBit 2
WaitFlag
SetBit 1
WaitFlag
SetBit 0
WaitFlag
SBIW X,1
breq Stop
ld chislo, Z+
SetBit 7
WaitFlag
rjmp Cicle
//таймер стоп
Stop:
out TCCR1B,zero
out TCCR1A,zero
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
loop:
rjmp loop



