Точно сказать может только другой студент или глубокий анализ исходника.
Точно сказать может только другой студент или глубокий анализ исходника.
Код: Выделить всё
ldi temp,0b00000001
out timsk0,temp
clr tempКод: Выделить всё
...............
..........
ldi dx3, 0x02 ;Устанавливаем длину сигнала
rcall SNDGEN ;Вызываем пищалку
.......
...........
;************************************************
;************************************************
;---------------------------------------------- Генератор звука
SNDGEN:
sbi P1_OUT, BZR_OUT ;Устанавливаем единицу в Порт, пин
LOOP1:
dec dx1
brne LOOP1
;-------------------------------
cbi P1_OUT, BZR_OUT ;Устанавливаем ноль в Порт, пин
LOOP0:
dec dx1
brne LOOP0
;------------------------------- Циклы для установки длинны звука
dec dx2
brne SNDGEN
dec dx3
brne SNDGEN
ret
Код: Выделить всё
Delay: out PortB,Temp
ldi Temp1,0
ldi Temp2,0
ldi Temp3,10
Loop: dec Temp1
brne Loop
dec Temp2
brne Loop
dec Temp3
brne Loop
ret
;****************************************************************************************************
Beep: ldi Temp,0b00000010 ;вывод 1
rcall Delay ;вызов подпрограммы задержки
ldi Temp,0b00000000 ;вывод 0
rcall Delay ;вызов подпрограммы задержки
;вызов подпрограммы задержки
rjmp Beep ;Код: Выделить всё
.include "tn2313def.inc"
;----------------------------------------------------------------------------------------------------
.Def Temp = R16 ; Временная переменная
.Def Temp1 = R19 ; Временная переменная
.Def Temp2 = R20 ; Временная переменная
.Def Temp3 = R21 ; Временная переменная
.Equ SOUND = PB2 ; бипер
////////////////////////////////////////////////////////////////////////////////////////////////////
.CSeg .Org 0x00 ; Сегмент кода
////////////////////////////////////////////////////////////////////////////////////////////////////
;****************************************************************************************************
;
;****************************************************************************************************
Delay: out PortB,Temp
ldi Temp1,0
ldi Temp2,0
ldi Temp3,10
Loop: dec Temp1
brne Loop
dec Temp2
brne Loop
dec Temp3
brne Loop
ret
;****************************************************************************************************
Beep: ldi Temp,SOUND ;вывод 1
rcall Delay ;вызов подпрограммы задержки
ldi Temp,SOUND ;вывод 0
rcall Delay ;вызов подпрограммы задержки
;вызов подпрограммы задержки
rjmp Beep ;
;******************************************************************************************************
Код: Выделить всё
...............
..........
ldi temp2, 0x02 ;Устанавливаем длину сигнала
rcall SNDGEN ;Вызываем пищалку
.......
...........
;************************************************
;************************************************
;---------------------------------------------- Генератор звука
SNDGEN:
sbi PORTB, PB1 ;Устанавливаем единицу в Порт, пин
LOOP1:
dec temp0
brne LOOP1
;-------------------------------
cbi PORTB, PB1 ;Устанавливаем ноль в Порт, пин
LOOP0:
dec temp0
brne LOOP0
;------------------------------- Циклы для установки длинны звука
dec temp1
brne SNDGEN
dec temp2
brne SNDGEN
ret
Код: Выделить всё
BEEP:
ldi r16,0x4
out ddrb,r16
START:
ldi r17,5
loop2:
ldi r16,255
loop:
dec r16
brne loop
dec r17
brne loop2
com r15
out portb,r15
rjmp STARTПриблизительно так. Если надо, чтоб длительнось побольше была, можно задействовать регистровую пару, например, R24,R25 и с ними : subi R24,1sinobi писал(а):Вообщем нашел в инете код и под себя переделалПодскажите-как ограничить по времени звучания ?Код: Выделить всё
BEEP: ldi r16,0x4 out ddrb,r16 ldi r18,N ; N = константа = число повторений цикла START: ldi r17,5 loop2: ldi r16,255 loop: dec r16 brne loop dec r17 brne loop2 com r15 out portb,r15 dec r18 breq na_fig rjmp START na_fig: ......
Спасибо за помощь. Попробуем.Engineer_Keen писал(а):Если в коде, то отключаем прерывания, пишем в CLKPR 0x80, потом не позднее 4 тактов пишем туда же 0x03, возвращаем прерывания. Это что касается делителя. А вот источник тактирования можно изменить только программатором, потому что CKSEL это не регистр, а биты во фьюзе.