51单片机系统的晶振频率为6MHz,p1.0接一个低功耗的发光二极管,要求发光二极管亮1秒,灭1秒

51单片机系统的晶振频率为6MHz,p1.0接一个低功耗的发光二极管,要求发光二极管亮1秒,灭1秒,不断循环。要求:1,写出定时器工作模式和初值,要有计算过程。2,完成相关程序。 急急,满意的话追加100财富值

1秒钟定时器无法靠一次中断达到要求,6M晶振,可以设100毫秒中断一次,10次中断为1秒,所以初值为65536-50000
#include<reg51.h>
unsigned char times;
sbit p10=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>=10){times=0;p10=~p10;}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}追问

能帮我写下面的程序段吗,多给你30财富值。 将内部RAM50H单元内容的第四位取反,其余各位保持不变。

追答

MOV A,50H
CPL ACC.4
MOV 50H,A

追问

判断题,每个五个财富值

追答

图片看不清楚

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-11
定时器的
#include <reg51.h>
void InitTimer0(void) //25ms

{
TMOD = 0x01;
TH0 = 0x0CF;
TL0 = 0x2C;
EA = 1;
ET0 = 1;
TR0 = 1;
}

/*------------------------------------------------
定时器0中断子程序 25ms
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 // using 1
{
TH0 = 0x0CF;
TL0 = 0x2C;
num++;

if(num>=40) p0^1 =~p0^1; //用示波器可看到方波输出 0.5Hz

}

void main(void)
{
InitTimer0();
}

这是精确延时做的
void delay1s(void) //误差 0us

{
unsigned char a,b,c;
for(c=205;c>0;c--)
for(b=116;b>0;b--)
for(a=9;a>0;a--);
}