📄 timer0.c
字号:
/*A sample project file to be used with HI-TIDE, to demonstrate the functionality of the microcontroller's TIMER0.*/
/*Refer to timer0.txt for additional information*/
#include <pic18.h>
#include "timer0.h"
#include <stdio.h>
void init(void);
void putch(unsigned char);
volatile bit UPDATE_REQUIRED ; /* used to indicate when to refresh output data */
void main(void)
{
init();
while(1)
{
/*display current status of timer settings*/
RE0=TMR0ON; /*timer on/off -RED LED*/
RE1=PSA; /*prescalar off/on -GREEN LED*/
RE2=T0CS; /*timer is in counter/timer mode -YELLOW LED*/
RE3=T08BIT; /*timer is in 8/16-bit mode -AMBER LED*/
LED3=TMR0L; /*Load LED3 with current value of TMR0L*/
T0PS2=RA2;
T0PS1=RA1; /*update values of prescalar bits*/
T0PS0=RA0;
if (UPDATE_REQUIRED)
{
printf("\n TIMER0 STATUS\n----------------\n");
if (TMR0ON){ printf("TIMER0 is ON\n");}
else {printf("TIMER0 is OFF\n");}
if (PSA){printf("PRESCALAR is OFF\n");}
else{printf("PRESCALAR is ON\n");}
if (T0CS){printf("TIMER0 is in COUNTER mode \n");}
else{printf("TIMER0 is in TIMER mode \n");}
if (T08BIT){printf("%cTIMER0 is in 8-bit mode \n",0x0D); }
else {printf("%cTIMER0 is in 16-bit mode \n",0x0D);}
UPDATE_REQUIRED=0;
}
}
}
void init(void)
{
T0CON=0x4E;
TMR0IF=0; /* Clear overflow flag*/
TMR0IE=1; /* Enable TIMER0 interrupts */
T0PS2=RA2;
T0PS1=RA1; /*update values of prescalar bits*/
T0PS0=RA0;
T1CON=0x80; /*use TIMER1 as a reference for comparison*/
TMR1IF=0;
TMR1IE=1;
RBIE=1; /* enable PORTB interrupts to */
GIEH=1; /* allow interrupts from PUSH BUTTONS */
GIEL=1;
TXEN=1; /* enable serial port transmissions */
SPEN=1;
TXIE=0; /* not interrupt driven */
TRISA=0x17; /* Set first 3 bits to input to read DIP switch values and*/
/*4th bit for counter, clock input */
ADCON1=0x0F; /*Configure all ADC pins to be digital inputs*/
TRISB=0xF0; /* Pushbutton switches to change TIMER0 status are on PORTB */
TRISC=0xBF; /* LED panel to indicate oveflows of TIMER0*/
TRISH=0x00; /* LED panel to indicate oveflows of TIMER1*/
TRISD=0x00; /* 8-bit DIP switch to set value of LED pannels */
TRISF=0x00; /* LED panel to indicate current value of TIMER0*/
TRISE=0xC0; /* LED panels to indicate current mode of the TIMER0*/
TMR0=1; /*Load initial value to TIMER0*/
LED1=DIP1; /*Load LEDs with current value of 8-bit DIP*/
LED2=DIP1;
LED3=TMR0L; /*Load LED3 with current value of TMR0L*/
UPDATE_REQUIRED=1;
}
void putch(unsigned char c)
{
TXREG=c; /* transmit a character to Serial IO */
while(!TXIF)continue;
TXIF=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -