У меня есть программа с миганием светодиода а я в место него хочу воткнуть например, телефонный капсюль! В проге светодиод мигает с частотой 4 Гц, если уменьшить время задержки в 1000 раз, то можно получить частоту сигнала на выходе, равную 4 кГц. Эта частота как раз входит в слышимый звуковой диапазон. А как уменьшить время задерки? Код (Text): ;############################################## ;## Пример 4 ## ;## Мигающий светодиод ## ;############################################## ;------------------------- Псевдокоманды управления .include "tn2313def.inc" ; Присоединение файла описаний .list ; Включение листинга ;------------------------- Начало программного кода .cseg ; Выбор сегмента программного кода .org 0 ; Устанеовка текущего адреса на ноль .def temp = r16 ; Определение главного рабочего регистра .def loop1 = r17 ; Определение первого регистра цикла .def loop2 = r18 ; Определение второго регистра цикла .def loop3 = r19 ; Определение второго регистра цикла ;-------------------------- Инициализация стека ldi temp, 0x7F ; Выбор адреса вершины стека out SPL, temp ; Запись его в регистр стека ;-------------------------- Инициализация Главного предделителя ldi temp, 0x80 ; Записываем число $80 в регистр temp out CLKPR, temp ; Записываем в регистр CLKPR ldi temp, 0 ; Записываем 0 в регистр temp out CLKPR, temp ; Записываем этот ноль в CLKPR ;-------------------------- Инициализация портов ВВ out DDRD, temp ; Записываем этот ноль в DDRD (порт PD на ввод) ldi temp, 0xFF ; Записываем число $FF в регистр temp out DDRB, temp ; Записываем это число в DDRB (порт PB на вывод) out PORTB, temp ; Записываем то же число в PORTB (потушить светодиод) out PORTD, temp ; Записываем его же в PORTD (включаем внутр. резисторы) ;--------------------------- Инициализация компаратора ldi temp, 0x80 ; Выключение компаратора out ACSR, temp ;-------------------------- Начало основного цикла main: sbi PORTB, 0 ; Устанавливаем PB0 в единицу (тушим светодиод) in temp, PIND ; Читаем содержимое порта PD sbrc temp, 0 ; Проверка младшего разряда rjmp main ; Если не ноль, переходим в начало ;-------------------------------- Мигание светодиода cbi PORTB, 0 ; Устанавливаем PB0 в единицу (тушим светодиод) rcall wait1 ; Вызов подпрограммы задержки sbi PORTB, 0 ; Сброс PB0 в ноль (зажигаем светодиод) rcall wait1 ; Вызов подпрограммы задержки rjmp main ; К началу цикла ;--------------------------------- Подпрограмма задержки wait1: push loop1 ; Сохраняем содержимое регистра loop1 push loop2 ; Сохраняем содержимое регистра loop2 push loop3 ; Сохраняем содержимое регистра loop3 ldi loop1, 15 ; Помещаем в loop1 константу задержки wt1: dec loop1 ; Уменьшаем значение регистра loop breq wt4 ldi loop2, 100 ; Помещаем в loop2 константу задержки wt2: dec loop2 ; Уменьшаем значение регистра loop2 breq wt1 ldi loop3, 255 ; Помещаем в loop3 константу задержки wt3: dec loop3 ; Уменьшаем значение регистра loop3 brne wt3 ; Если не ноль, продолжаем цикл rjmp wt2 wt4: pop loop3 ; Восстанавливаем значение регистра loop3 pop loop2 ; Восстанавливаем значение регистра loop2 pop loop1 ; Восстанавливаем значение регистра loop1 ret