定时器的应用技术实训

单片机外接12MHz 晶振编程设置TO定时器工作在定时模式,定时时间1秒钟,每当 1秒钟定时时间到达,控制PO口的8个LED灯的亮灭,实现流水灯控制。流水灯流动时,每个状态只让2个灯亮从最左边的2个灯开始亮当最右边的2个灯亮的状态结束后恢复到最左边的2个灯亮依次重复

#include <REGF51RC.H>
#include "intrins.h"
#define FOSC 12000000L
#define T1MS (65536-FOSC/12/1000) //定时器1ms的中断
unsigned int count=0,position=0;

void tm0_isr() interrupt 1
{
TL0 = T1MS; //reload timer0 low byte
TH0 = T1MS >> 8; //reload timer0 high byte
if(count<1000)///定时1s
count++;
else
{
count=0;
if(position<6)
{
position++;
}
else
position=0;
P0=0xff-((1<<position)+(1<<(position+1)));

    }

}

void main()
{
char i=3,j=5;
position=0;
TMOD = 0x01; //set timer0 as mode1 (16-bit)
TL0 = T1MS; //initial timer0 low byte
TH0 = T1MS >> 8; //initial timer0 high byte
TR0 = 1; //timer0 start running
ET0 = 1; //enable timer0 interrupt
EA = 1; //open global interrupt switch
P0=0xff;
while(1)
{

}

}