How to Use Timer-0 Interrupt in AT89C1051

The following code demonstrate, how to generate clock of 1.0Hz using timer-0 interrupt. Every 50,000 micro-second timer-0 interrupt is generated and the clock is generated on pin P3.0.  The code is written in Keil uVision2 IDE and simulation is done with Proteus 8.0. At the end of code, you can find complete project files for download.

Code Using Keil uVision2

#include
#include
// proto-types
void ConfigT0Interrupt(void);
void Delayms(unsigned int x_time);
// pin labling
sbit PULSE = P3^0;
sbit LED = P1^0;
unsigned char timer0_isr_counter = 0;
// timer-0 interrupt isr
void timer0_isr(void) interrupt 1
{
if(timer0_isr_counter++ >= 20)
{
PULSE = ~PULSE;
// reload timer-0 registers
TL0 = 0xB0;
TH0 = 0x3C;
}
}
void main(void)
{
// make pins as output
PULSE = 0;
LED = 0;
// config timer-0 interrupt
ConfigT0Interrupt();
while(1)
{
LED = ~LED;
Delayms(500);
}
}
void ConfigT0Interrupt(void)
{
// master clock is 12MHz
// timer clock is 1/12th => 1MHz
// in 16-bit mode timer overflow
// after 65536 usec.
// for overflow every 50,000 usec
// 65,536-50,000 = 15536 (0x3CB0)
TL0 = 0xB0;
TH0 = 0x3C;
// Configure timer-0 interrupt
ET0 = 1;
// Enable Global Interrupt Flag
EA = 1;
// set timer-0 mode-1 (16-bit)
TMOD = 0x01;
// start timer-0
TR0 = 1;
}
void Delayms(unsigned int x_time)
{
unsigned int x,y;
for(x=0;x<x_time;x++)
for(y=0;y<122;y++);
}

Download Files

For download Keil project and Proteus 8.0 simulation files, click here.

Comments

Popular posts from this blog

How to Program Parallel Slave Port (PSP) in PIC16F877A

How to Program Interrupts in PIC16F877A

How to Program SPI in PIC16F877A (Slave Mode)