나는 2 개의 포텐시오 미터에서 가져온 written a programm을 출력하며 2 개의 다른 사운드를 출력합니다.어셈블리의 타이머 관련 문제
문제는 신호음이 켜지거나 꺼질 때 신호음의 지연이 발생한다는 것인데, 이는 기본적으로 전위차계의 값입니다.
그러나 주파수가 높을수록 사운드가 재생되는 시간이 짧아지고 사운드가 재생되는 시간이 해당 주파수에 연결되지 않았 으면합니다.
그래서 타이머를 사용하기로 결정했습니다.
보시다시피while(timer0counter > 0)
while(timer2counter > 0)
output on
while(timer2counter > 0)
output off
, 이것은 지정된 시간에 주파수를 제공한다 :
계획은 다음과 같은 구조입니다. 타이머 오버 플로우 기능이
mainloop:
ldi r27,250;The value of one Potientiometer, here a static value
ldi r22,255
mov r23,r27
loop:
ldi r16,4
out PORTB,r16
tst r23
brne loop
mov r23,r27
inner:
ldi r16,0
out PORTB,r16
tst r23
brne inner
tst r22
brne loop
rjmp mainloop
동안 :
tmr0overflow:
tst r22
breq skip0
sub r22,1
skip0:
reti
tmr2overflow:
tst r23
breq skip2
sub r23,1
skip2:
reti
타이머 초기화 :
ldi r16,5
out TCCR0,r16
ldi r16,2
out TCCR2,r16
ldi r16,(1<<TOIE0) | (1<<TOIE2)
out TIMSK,r16
(PORTB는 신호음입니다) (이것은 단지 하나의 소리입니다) 다음과 같이 구현은 지금까지 보인다
T2OVF, T0OVF에 대한 인터럽트 벡터를 설정하고 일반적으로 활성화 된 인터럽트도 설정했습니다.
하지만 출력이 무작위 인 것처럼 보입니다. 뭐가 잘못 되었나요?
"출력이 예상대로 아닙니다"- 예상되는 출력은 무엇이며 실제 출력은 무엇입니까? –
T2OVF, T0OVF 및 활성화 된 인터럽트 ('sei')에 대한 인터럽트 벡터를 설정 했습니까? – MikeD
더 이해할 수 있도록 텍스트를 다시 작성했습니다. –