Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly Atmega328P CTC汇编错误_Assembly_Timer_Arduino_Atmega - Fatal编程技术网

Assembly Atmega328P CTC汇编错误

Assembly Atmega328P CTC汇编错误,assembly,timer,arduino,atmega,Assembly,Timer,Arduino,Atmega,我试图使用CTC(比较时清除计时器)方法来使用计时器,但我无法写入寄存器以尝试启用该模式。可以找到完整的数据表。第144页解释了想法是如何工作的,而不是如何在代码中实际实现 我尝试使用OCR2A(输出比较寄存器),试图为其设置一个值,但在尝试设置其值时出现构建错误 我在尝试设置OCR2A或TCCR2A的值时遇到一些错误。 错误可能是操作数1超出范围或无效寄存器 任何建议或指导都是有益的 .def AllOnes = R16 .def ChargeState = R17 .def AllZeros

我试图使用CTC(比较时清除计时器)方法来使用计时器,但我无法写入寄存器以尝试启用该模式。可以找到完整的数据表。第144页解释了想法是如何工作的,而不是如何在代码中实际实现

我尝试使用OCR2A(输出比较寄存器),试图为其设置一个值,但在尝试设置其值时出现构建错误

我在尝试设置OCR2A或TCCR2A的值时遇到一些错误。 错误可能是
操作数1超出范围
无效寄存器

任何建议或指导都是有益的

.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

我认为答案是:并没有关于做这件事的指示。请参阅数据表中的寄存器摘要和指令集摘要表。 SBI OCR2A,0无法使用,因为OCR2A位于上层地址寄存器空间。与SBI TIFR2相比,1其中TIFR1位于较低的空间。 同样,CP TCCR0A、COM2A1不能与IO寄存器进行比较。使用

MOV R0,TCCR0A
CPI R0,COM2A1

大概吧。抱歉,我是用心写的,希望语法是正确的。

证明TCCR0A有COM2A1,这是一个输出寄存器。要写入它,您必须使用
OUT