;--------------------------- Подпрограмма отправки содержимого temp в эфир (начиная с старшего разряда) -------------
outbyte: ldi count,0x08 ; Фиксируем количество передаваемых бит в байте (счётчик =
m2: rol temp ; Сдвиг вправо через перенос регистра temp
brsh zerro ; Переход если бит нолевой
cbi PORTD,0 ; Если бит еденичный - сбрасываем в ноль разряд передачи PD0
rcall zad05t ; Удержание состояния порта D0 на время 500 микр.сек (0,5 периода передачи)
sbi PORTD,0 ; Устанавливаем в еденицу разряд передачи PD0
rcall zad05t ; Удержание состояния порта D0 на время 500 микр.сек (0,5 периода передачи)
rjmp m1 ;
zerro: sbi PORTD,0 ; Устанавливаем в еденицу разряд передачи PD0
rcall zad05t ; Удержание состояния порта D0 на время 500 микр.сек (0,5 периода передачи)
cbi PORTD,0 ; Cбрасываем в ноль разряд передачи PD0
rcall zad05t ; Удержание состояния порта D0 на время 500 микр.сек (0,5 периода передачи)
m1: dec count ; Уменьшение счётчика переданных бит на еденицу
brne m2 ; Если счётчик не пуст, уходим на отправку следующего бита
ret
вот изобразил аналог на си
//;--------------------------- Подпрограмма отправки содержимого temp в эфир (начиная с старшего разряда) -------------
outbyte(char data){
for (char count=0; count<=8; count++){
data=data >> 1;
if (data==0){
PORTD |=_BV(0); // PD=1
_delay_ms(250); // Пауза 250ms
_delay_ms(250); // Пауза 250ms
PORTD &=~_BV(0); // PD=0
_delay_ms(250); // Пауза 250ms
_delay_ms(250); // Пауза 250ms
}else{
PORTD &=~_BV(0); // PD=0
_delay_ms(250); // Пауза 250ms
_delay_ms(250); // Пауза 250ms
PORTD |=_BV(0); // PD=1
_delay_ms(250); // Пауза 250ms
_delay_ms(250); // Пауза 250ms
}
count--;
if (count!=0){
return
}
}


