急求单片机C51 P1口输出的问题!!!!(诸位答题的大哥一定要注意啊,复制粘贴的免)

原题:利用定时计数器产生定时时钟,由P1口控制8个指示灯,编写程序,使8个指示灯依次轮流点亮,每个灯一秒钟闪亮5次。写出程序。
这些都不行啊!大哥们给个能用的啊! 急用!!!!!!!!

//晶振11.0592MHz
#define HI0 0xff //d8f0==10ms interrupt
#define LO0 0xA4 //ff47==0.2ms interrupt

unsigned char code P1_LED[8]= //高电平亮灯
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80

}

void timer0 () interrupt 1 using 1 //timer0 interrupt//定时器0中断
{
TH0=HI0; //loading init value//
TL0=LO0;
t_200us++;
if (t_200us>=50) //10MS
t_com++;
if(t10ms>=10)//100ms
{ t_10ms=0;t_100Ms++;if(t_100Ms==40)t_100Ms=0;
if((t_100Ms%2)==1)P1=P1_LED[t_100Ms/5];
else P1=0;

}

}
void main()
{ unsigned char i;

while (1)
{
//
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-18
每个灯亮1秒,每个灯闪亮频率为5次/秒。
下列程序,在PROTEUS中仿真通过.
;-------------------------------------
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
ORG 0030H
MAIN:
MOV SP, #7FH
MOV TMOD,#01H
MOV TL0, #LOW(65536-50000)
MOV TH0, #HIGH(65536-50000)
SETB TR0
MOV IE, #82H
MOV R2, #2
MOV R3, #10
MOV R4, #0
M_LOOP:
LJMP M_LOOP ;等待中断,一切闪动、移位,都在中断里面解决
;----------------------------------------------------------------
T0_INT:
MOV TL0, #LOW(65536-50000)
MOV TH0, #HIGH(65536-50000)
DJNZ R2, T0_END
MOV R2, #2 ;加大此数字,如改为8,可降低速度,便于观察.
INC R4
DJNZ R3, FLASH ;100ms减一次一.
MOV R3, #10
INC R6 ;1s加一次一
FLASH:
MOV A, R6
ANL A, #7
MOV R5, A ;0~7, 1s换一次位.
INC R5
MOV A, R4
MOV C, ACC.0
MOV A, #255
MOV P1, A ;关显示
T0_LOOP:
RLC A
DJNZ R5, T0_LOOP
MOV P1, A
T0_END:
RETI
;------------------------------------------------------------
END
第2个回答  2010-01-18
太简单了 我就不答了
第3个回答  2010-01-18
这个比较简单
相似回答
大家正在搜