簡體   English   中英

使用Timer2中斷的C程序設計

[英]Design for a C Program Using Timer2 Interrupts

我正在將C代碼編程到PIC板上。 我的問題是如何讓我的程序計算按下按鈕(RB0)的時間。 然后,它顯示花費的時間,並將其顯示在LCD顯示屏上。 它以毫秒為單位。 下面是到目前為止的代碼。

    // Global Variables
unsigned int COUNTER;
// Subroutine Declarations
#include <pic18.h>
#include "lcd_portd.c"

//LCD routine, modified from previous examples
void LCD_Out(unsigned int STUFF, unsigned char A)
{
    unsigned char C[5], i;

    for (i=0; i<5; i++)
    {
        C[i] = STUFF % 10;
        STUFF = STUFF / 10;
    }

    for (i=5; i>0; i--)
    {
        if (i == A) LCD_Write('.');
        LCD_Write(C[i-1] + '0');
    }
}

void interrupt IntServe(void)
{
    if (TMR2IF)
    {
        RB0 = !RB0;
        TMR2IF = 0;

        COUNTER = COUNTER + 1;

    }
 }


// Main Routine

void main(void)
{
    //Instantiate all Ports to ready for Timers and pin sets
    LCD_Init();
   TRISA = 0;
   TRISB = 0;
   TRISC = 0;
   TRISD = 0;
   TRISE = 0;
   ADCON1 = 0x0F;
   //Timer Interrupt for 1 ms, A = 9, C = 4, B = 250
   //Which means PR2 = 249, and # is x1001101 = 0x4D
   T2CON = 0x4D;
   PR2 = 249;
   TMR2IE = 1;
   PEIE = 1;
   TMR2ON = 1;
   TMR2IP = 1;

   GIE = 1;
   // While Loop displays length of Wait through Counter
   while(1)
   {
       LCD_Move(0,0);
       LCD_Out(COUNTER,3);
   }
}

您需要弄清楚您的按鈕如何連接到微控制器,並在主要功能中聲明該端口。 確保您能夠讀取端口的狀態(即,按下按鈕或按下按鈕)。

然后,您的IntServe中斷檢查按鈕是否按下,是否為COUNTER增量。

COUNTER是一個整數,因此最多只能計數65,535毫秒(約65秒),您可能想要實現第二個計數變量以進行溢出,以便您可以將按鈕按下計數超過65秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM