80c51单片机P1端口上经驱动器接有8只发光二极管FOSC=6MHZ,试编写程序

使这八只发光二极管每个两秒循环发光,要求使用定时器0实现(高电平点亮二极管,每次只点亮一只二极管)。计算定时器时间常数H,写出程序。

6MHz晶振的话,一个机器周期就是2us,采用定时器计数就会每隔2us计数一次,犹豫你没有指定使用什么工作方式,我暂且使用工作方式1吧,16位定时计数器,那么定时器初值就应为65536-25000,定时器初始化:
void inition()
{
TMOD=0x01;
TH0=(65536-25000)/256;
TL0=(65536-250000)%6;
EA=1;
ET0=1;
TR0=1;
}
中断程序:
void timer() interrupt 1
{
TH0=(65536-25000)/256;
TL0=(65536-250000)%6;
P1=00000001;
}
程序的关键给你了,不要依靠别人全部做出来,没意义。
希望我的回答能帮助到你。追答

修正中断函数:
P1=00000001<<1;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-29

#include "reg51.h"
char i=0;  
void time0(void) interrupt 1
{
   TL0=(65536-50000)%0x100;//6M晶体此常数为100ms中断一次
   TH0=(65536-50000)/0x100;
   c++;
   if(c==10){
       c=0;
       P1=(1<i);
       if(++i==8)i=0;
   }
}
void main(void){
   TMOD=0x01;
   EA=ET0=RT0=1;  
   while(1);
}