我在 C 中创建了一些简单的代码来更改输出的占空比,我正在尝试将其转换为 Assembly,以便我可以在那里对其进行编辑并提高效率。但是,代码是为连接到 Teensy 2.0 的 Atmega32U4 编写的,每当我尝试使用常用方法翻译它时,由于使用了库(我认为),它会给我带来错误。
如果我知道如何用汇编编写代码,我会重做整个代码,但我对此一无所知。
代码如下,
#include <avr/io.h>
#define F_CPU 7800UL // frequency of 7.8kHz
#include <util/delay.h>
int main()
{
DDRF = 0x00; // all in F are input
PORTF = 0xFF; // all inputs are set to low
DDRB = 0xFF; // all in B are output
PORTB = 0x00;
while(1)
{
if (~PINF &(1<<PF1)) // 0.05 duty cycle
{
PORTB = 0b00100000;
_delay_ms(50);
PORTB = 0x00;
_delay_ms(950);
}
else if (~PINF & (1<<PF4)) //0.73 duty cycle
{
PORTB = 0b00100000;
_delay_ms(730);
PORTB = 0x00;
_delay_ms(270);
}
else if (~PINF & (1<<PF6)) //0.92 duty cycle
{
PORTB = 0b00100000;
_delay_ms(920);
PORTB = 0x00;
_delay_ms(80);
}
else
{
PORTB = 0b00100000;
_delay_ms(500);
PORTB = 0x00;
_delay_ms(500);
}
}
}
我很确定我没有以最有效或最正确的方式对此进行编码,但我上个月才开始学习 C。任何将其翻译为大会的建议将不胜感激。