这是关于如何在 PIC 上使用 timer0 的一般问题。
我正在尝试使用 PIC18f87k22 和 arduino pro trinket 构建直流电机控制系统。
在我的程序中,我有一个名为get_courant()
. 此函数向 trinket 发送请求并读取接收到的答案(通过 uart)并将该值存储在我的一个全局变量中,从而实现它。
我想做的是按如下方式使用计时器:
如果get_courant()
需要超过 10us 才能继续,则跳过它,直接转到我的 main.js 中的其余说明。
我知道我应该在调用函数之前启动一个计时器,并以某种方式读取计时器值来决定是否跳过它。
但是,如果我在调用函数后检查计时器值,那么如果 `get_courant() 的执行超过 10us,我的时间可能会被浪费,在这种情况下,计时器是无用的。
任何提示可以帮助我实现我想要实现的目标(如果我的英语不好的话,IDK)?这是get_courant()
如果可以提供任何帮助的代码:
int16_t get_courant()
{
uint8_t courant1;
uint8_t courant2;
int16_t courant;
if(EUSART1_is_tx_ready())
{
EUSART1_Write(0b00000001);
}
if(EUSART1_is_rx_ready())
{
courant1= EUSART1_Read();
}
if(EUSART1_is_tx_ready())
{
EUSART1_Write(0b00000010);
}
if(EUSART1_is_rx_ready())
{
courant2= EUSART1_Read();
}
if (CheckBit(courant1,7))
{
bit_clr(courant1,7);
courant = (courant1 << 8) | courant2;
courant = - courant;
}
else
{
courant = (courant1 << 8) | courant2;
}
return courant;
}
这是我调用 get_courant() 的主要功能的一部分:
while(!Stop_flag)
{
int i=0;
do
{
Mesure_courant=get_courant();
Tension_initiale = PID_Courant(Mesure_courant,Erreur_courant,Consigne_courant,Integrale_courant,Kp_courant,Ki_courant,Kd_courant,Wind_up_flag_courant);
i++;
Put_Rapport_Cyclique(Tension_initiale, Choix_Mode);
} while(i<10);