// 12MHz晶振
#include "reg52.h"
#include "intrins.h"
#define time (65536-50000) // 单次定时50ms
unsigned char cn;
unsigned char temp;
void main(void)
{
cn=10; //10*50ms=0.5s
temp=0x7f;
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)
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 = 10;
P1=temp;
temp=_cror_(temp,1);
}
}
完整资料打包(含仿真):