gpt4 book ai didi

assembly - 汇编中定时器的问题 [ATmega8]

转载 作者:行者123 更新时间:2023-12-02 09:13:44 24 4
gpt4 key购买 nike

我已经written a programm输出 2 种不同的声音,取自 2 个电位计。

问题是,通过打开和关闭蜂鸣器会产生延迟,这基本上是电位计的值。

但是频率越高,声音播放的时间越短,我希望声音播放的时间与其频率无关。

所以我决定使用计时器。

计划的结构如下:

while(timer0counter > 0)
while(timer2counter > 0)
output on
while(timer2counter > 0)
output off

如您所见,这应该给出指定时间内的频率。到目前为止的实现如下(PORTB 是蜂鸣器)(这仅适用于一种声音):

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

我还设置了 T2OVF、T0OVF 的中断向量并启用了一般中断。

但它确实有效,输出看起来像是随机的。有什么问题吗?

最佳答案

            ;PORTC  0 = INPUT
;POT. 1[C0 / ADC0]
cbi DDRC,0
cbi DDRC,1
;PULLUP
sbi DDRC,0
sbi DDRC,1

上拉不是通过 DDR 设置的,而是通过 PORT 设置的。从输出读取时,输入不确定。

关于assembly - 汇编中定时器的问题 [ATmega8],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17026641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com