Datasheet
TMP05/TMP06 Data Sheet
Rev. C | Page 22 of 28
#include <stdio.h>
#include <ADuC812.h> //ADuC812 SFR definitions
void delay(int);
sbit Daisy_Start_Pulse = 0xB7; //Daisy_Start_Pulse = P3.7
sbit P3_4 = 0xB4;
long temp_high0,temp_low0,temp_high1,temp_low1,temp_high2,th,tl; //Global variables to allow
//access during ISR.
//See
Figure 32.
int timer0_count=0,timer1_count=0,tempsegment=0;
void int0 () interrupt 0 //INT0 Interrupt Service Routine
{
if (TR1 == 1)
{
th = TH1;
tl = TL1;
th = TH1; //To avoid misreading timer
TL1 = 0;
TH1 = 0;
}
TR1=1; //Start timer1 running, if not running
Already
if (tempsegment == 1)
{
temp_high0 = (TH0*0x100+TL0)+(timer0_count*65536); //Convert to integer
TH0=0x00; //Reset count
TL0=0x00;
timer0_count=0;
}
if (tempsegment == 2)
{
temp_low0 = (th*0x100+tl)+(timer1_count*65536); //Convert to integer
temp_high1 = (TH0*0x100+TL0)+(timer0_count*65536); //Convert to integer
TH0=0x00; //Reset count
TL0=0x00;
timer0_count=0;
timer1_count=0;
}
if (tempsegment == 3)
{
temp_low1 = (th*0x100+tl)+(timer1_count*65536); //Convert to integer
temp_high2 = (TH0*0x100+TL0)+(timer0_count*65536);
TH0=0x00; //Reset count
TL0=0x00;
timer0_count=0;
timer1_count=0;
}
tempsegment++;
}
void timer0 () interrupt 1
{
timer0_count++; //Keep a record of timer0 overflows
}
void timer1 () interrupt 3
{
timer1_count++; //Keep a record of timer1 overflows