[英]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.