|
本帖最后由 happy2058 于 2022-2-28 10:16 編輯
請教一下,下面寫法,大循環(huán)跑不動原因 用定時器反轉(zhuǎn)一個標(biāo)志位,大循環(huán)判斷發(fā)送。8H1K08 24M 開了串口1串口2 不在中斷狀態(tài)
我想定時器多用的情況下,反轉(zhuǎn)不同的標(biāo)志位讓大循環(huán)判斷輸出
void main()
{
P_SW2 |= 0x80; //擴(kuò)展 RAM 區(qū)特殊功能寄存器(XFR)訪問控制寄存器
CKSEL = 0x00; //8H默認(rèn)內(nèi)部IRC
CLKDIV =0x00; //不分頻SYSCLK時鐘
IOsatar(); //IO口模式
Timer0(); //定時器0 100uS
Uart_Init(); //串口中斷
EA=1;
//WDT_CONTR = 0x24; //?????,?????? 1s
while(1)
{
key_service2(); //串口接收判斷,空閑
Circular_transmission(); //串口隊列發(fā)送,空閑
TXD_Send_out_uart2(); //直接發(fā)送,空閑
Set_time(); //時間隊列發(fā)送,空閑
facecare_start() ; //時間隊列發(fā)送,空閑
Microneedle_forward_PWM_out (); //PWM 輸出
}
}
ode unsigned char Microneedle_speed_intensity[11]={0,1,2,3,4,5,6,7,8,9,10};
unsigned char Microneedle_speed_counters_time=0;
unsigned char Microneedle_speed=0;
bit Open_speed_dose_key=0;
//=====================================================================
void Microneedle_forward_PWM_out ()
{
if(Microneedle_speed_counters)
{
Microneedle_speed_counters=~Microneedle_speed_counters;
Microneedle_speed_counters_time++;
if(Microneedle_speed_counters_time<=Microneedle_speed_intensity[Microneedle_speed])
{
Microneedle_PWM_out=1;
}
else
{
Microneedle_PWM_out=0;
}
if(Microneedle_speed_counters_time>=10)
Microneedle_speed_counters_time=0;
}
}
void Timer0() 100US
{
AUXR |= 0x80; //1T
TMOD &= 0xF0; //清零T0的控制位
TL0 = 0xA0; //設(shè)置定時初始值
TH0 = 0xF6; //設(shè)置定時初始值置定時初始值
ET0 = 1; //使能T0中斷
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //啟動T0
}
//****************************************************************
void TM0_Isr() interrupt 1 //定時器0中斷
{
//if(UL_INO_CLOK_lock||MIC_lock||RSM_lock)
// {
//facecare_Time_Counter=~facecare_Time_Counter;
// }
if(Open_speed_dose_key)
{
Microneedle_speed_counters=~Microneedle_speed_counters;
}
}
51hei截圖_20220228101354.png (167.76 KB, 下載次數(shù): 39)
下載附件
2022-2-28 10:14 上傳
占空比前后抖動,如果是寫在定時器里面是不會的
oid TM0_Isr() interrupt 1 //定時器0中斷
{
//if(UL_INO_CLOK_lock||MIC_lock||RSM_lock)
// {
//facecare_Time_Counter=~facecare_Time_Counter;
// }
Microneedle_speed_counters_time++;
if(Microneedle_speed_counters_time<=Microneedle_speed_intensity[Microneedle_speed])
{
Microneedle_PWM_out=1;
}
else
{
Microneedle_PWM_out=0;
}
if(Microneedle_speed_counters_time>=10)
Microneedle_speed_counters_time=0;
}這個子是不會有問題
|
|