// 12MHz晶振
#include "reg52.h"
#include "intrins.h"
#define time (65536-50000) // 单次定时50ms
unsigned char cn;
unsigned char temp;
unsigned char dir;
void main(void)
{
cn=20; //20*50ms=1s
temp=0x80;
dir=0;
TMOD = 0x10; //set timer1 as mode1 (16-bit)
TL1 = time; //initial timer1 low byte
TH1 = time >> 8; //initial timer1 high byte
TR1 = 1; //timer1 start running
ET1 = 1; //enable timer1 interrupt
IT0 = 1; //set INT0 int type (1:Falling 0:Low level)
EX0 = 1; //enable INT0 interrupt
EA = 1; //open global interrupt switch
while(1);
}
/* Timer0 interrupt routine */
void tm1_isr() interrupt 3
{
TL1 = time;
TH1 = time >> 8;
if (cn-- == 0)
{
cn = 20;
P1=temp;
if(dir==0)
temp=_cror_(temp,1);
else
temp=_crol_(temp,1);
}
}
//External interrupt0 service routine
void exint0() interrupt 0 //(location at 0003H)
{
dir=~dir;
}