發新話題
打印

C8051F410延遲動作

C8051F410延遲動作

日前要在程式中加入一個延遲副程式
原先使用Port I/O的範例程式去做修改
結果是可以做到延遲的動作
之後加上了ADC的程式碼
由外部輸入一電源
經由ADC處理後做為程式判斷的條件
結果延遲的動作就消失了

請問是哪方面的問題
是SYSCLK的值太高了?
所以延遲的動作我沒有看到
還是因為中斷使用計數器的關係
使得延遲副程式和計數器有衝突
還是因為其他原因?

TOP

範例程式中的adc轉換是由timer設定的吧~ 所以 轉換速度很快~
很難有延遲的明顯效果~

TOP

附上我的延遲副程式
void Delay10ms(int count)
{
        int i,j;
        for(i=0;i<count;i++)
        for(j=0;j<1940;j++);
}

可以透過修改副程式裡面的參數達到我要的效果嗎?
還是有其他方式可以完成
我暫時不考慮使用計數器來做
原因是因為我延遲的動作誤差0.1S~1S 是比較沒關係的
而且我程式中有其他東西需要使用計數器
所以目前傾向使用副程式取代

TOP

請問你的Delay10ms(int count)用在那段程式?
你的ADC是用中斷方式讀取資料嗎? Sample code是用中斷的.
請你描述清楚,才能幫你解答!


J.K

TOP

附上程式碼

void main (void)
{
   PCA0MD &= ~0x40;                    // WDTE = 0 (clear watchdog timer
                                       // enable)
   
   PORT_Init();                        // Initialize Port I/O
   Oscillator_Init ();                 // Initialize Oscillator
   ADC0_Init();                        // Initialize ADC0       
   Timer2_Init();

   while (1)
   {
     if (Power == 1)
         {
                Blower =1;
         }
         else
         {
         
         Delay10ms(5000);
         Blower = 0;
         }
   }
}


我也是中斷的方式讀取資料

TOP

可以貼上你的ADC中斷處理程式嗎?

TOP

問題已經處理了
ADC的初始化部分沒有設定好

TOP

發新話題