#include <types.h>
#include <reg8252.h>
#define PWMCYCLE ( 4096 + 2 * 256 )
#define PWMvalue ( PWMCYCLE / 5 ) // 1V
main()
{
TMOD = T0_M0_ | T0_M1_ | T0_GA_ | T1_M1_; // T0: split,
// TL0 with gate
// T1: auto reload
TCON = IT0_ | TR1_; // run T1,
// EX0 transition activated
T2MOD = T2OE_; // T2: clock out mode
T2CON = TR2_; // stop T2
IP = PX0_ | PT0_;
IE = EA_ | EX0_ | ET0_;
P1 &= ~1; // output pin = 0
RCAP2W = -PWMvalue;
T2W = -1;
TR2 = 1; // run T2
for(;;);
}
int_ex0() interrupt INT_EX0 // 1-0 transition
{
RCAP2W = -PWMCYCLE - RCAP2W;
TL0 = 0xFF;
TR0 = 1;
}
int_t0() interrupt INT_T0 // 0-1 transition
{
RCAP2W = -PWMCYCLE - RCAP2W;
TR0 = 0;
}