用單片機定時器0做了個PWM模擬輸出實現了50HZ輸出周期為20Ms,占空比剛剛好對應為0-255級此變量"PWM_DUTY"對應0-255變化脈寬對應0-100變化沒什么問題了.問題1:怎么才能結合ADC對外部電位器采樣的數值0-255映射到對應的脈寬0-100之間電位器滿程調節呢?
問題2:比如需要限制某一個脈寬值比如脈寬1Ms-2.5M變化怎么才能把ADC數值映射到0-255滿程調節呢?
sbit PWM_OUT_GPIO=P2^0;
unsigned char PWM_DUTY=128;//此時脈寬剛剛好百分之50
uint8 ADC_Value=0;
void XPT2046_Allot()//XPT2046-ADC芯片數據分頻函數
{
ADC_Value=Start_XPT2046_ADC(PIN0_0_XP_ADC_8BIT,8);//啟動ADC轉換芯片函數 此函數第一個形參設置模式和通道 第二個為設置轉換的位數 范圍8-12
}
void Timer0Init() //100微秒@12MHz"八位自動"
{
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x02; //設置定時器模式
TL0 = 0xb2; //設置定時初始值
TH0 = 0xb2; //設置定時重載值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0不啟動
ET0 = 1; //允許定時器0申請中斷
EA = 1; //開啟所有中斷
}
void main()
{
while(1)
{
XPT2046_Allot();//XPT2046-ADC芯片數據分頻函數
}
}
void Timer0Interrupt() interrupt 1
{
if(PWM_Cnt<PWM_DUTY)
{
PWM_OUT_GPIO=1;
}
else
{
PWM_OUT_GPIO=0;
}
PWM_Cnt++;
}
|