我正在尝试使用CTC(比较时清除定时器)方法来使用定时器但我无法写入寄存器以尝试启用该模式。完整的数据表可以找到HERE。 P.144解释了这个想法是如何工作的,而不是如何在代码中实际实现。
我尝试使用OCR2A(输出比较寄存器)尝试设置值,但在尝试设置其值时会出现构建错误。
尝试设置OCR2A或TCCR2A的值时出现一些错误。
错误可能是Operand 1 out of range
或Invalid Register
任何建议或指示都会有所帮助
.def AllOnes = R16
.def ChargeState = R17
.def AllZeros = R18
.def PushButn = R19
.def TimerValue = R20
MAIN:
LDI AllOnes, 0xFF ; assign 1 - make an output
LDI ChargeState, 0x00 ; start with all the LEDS ON; Holds the Light Pattern
LDI AllZeros, 0x00 ; assign 0 - make an input
LDI PushButn, 0x00 ; to hold the value read from PORTB0
SBI COM2A1,0 ; set the Output compare pin for
SBI TIFR2, 1 ; set the Output compare Flag; i.e OCF2A
;According to the breakout board, PORTB5 is connected on spot 13 on the board
OUT DDRD, AllOnes ;set PORT D as an output
;make PORTB an input
OUT DDRB, AllZeros ;set PORT B as an input
;Start by turning all LEDS OFF
OUT PORTD, ChargeState
OFFSTATE: ;state for when the lights are off
;check if the button has been pressed.
IN PushButn, PINB
SBRC PushButn, 0
JMP OFFSTATE
JMP CHARGING
CHARGING:
LDI ChargeState, 0x01
OUT PORTD, ChargeState
;display the state of the first charge state
;initialize the value for the Output Comare Register (OCR2A)
;SBI OCR2A, 0
LOOP:
CP TCCR0A, COM2A1
JMP LOOP
答案 0 :(得分:1)
我认为答案是:没有指示去做。请参阅数据表中的寄存器汇总和指令集汇总表。 SBI OCR2A,0 不能使用,因为 OCR2A 在高位地址寄存器空间中。与 SBI TIFR2,1 比较,其中 TIFR1 位于较低的空间。 类似地, CP TCCR0A,COM2A1 无法与IO寄存器进行比较。使用
MOV R0,TCCR0A
CPI R0,COM2A1
左右。对不起,希望语法正确。
答案 1 :(得分:0)
变为TCCR0A有COM2A1,它是一个输出寄存器。要写信给你,你必须使用OUT