C51定时一秒用P1.1显示灯亮的程序,哪位大侠看看哪有错误,我用proteus仿真时,灯闪得很快!

#include<reg51.h>
sbit a=P1^1;
int b=100;
void main()
{ a=0;
TR1=1;
ET1=1;
EA=1;
TMOD=0x10;
while(1);
}
timerl() interrupt 3
{ for(;b<=100;b++)
{TH1=0xd8;
TL1=0xf0;
}
a=!a;
}

定时器方式1的定时最大值是71.11ms,不知道您的TH1=0XD8,TL1=0XF0的定时时间是多少?追问

晶振是12MHZ...我这定时是10ms...循环100次。然后b的初值错了我把b的值改成了0...可是仿真时,灯还是闪的很快...

追答

#include
#define uchar unsigned char

char cnt;
sbit LAMP=P1^1;

void initial(void)
{
TMOD=0X01;
TH0=-(50000/256);
TL0=-(50000%256);
ET0=1;
TR0=1;
EA=1;
}

void time0(void) interrupt 1
{
TH0=-(50000/256);
TL0=-(50000%256);
cnt++;
if(cnt=40)cnt=0;
}

void main(void)
{
initial();
while(1){
}

}
这个程序让P1.1的灯亮1S,灭1S. 参考一下
编程序时最好不要拿a、b作为变量

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-22
1185873106

C51单片机,P1和P2口做为流水灯,P0口做为数码管输出,按键每按一次要求nu...
led1 = ~led; 这两个灯不变,也许你就要这个效果。程序就是这么编的。按键没有去抖,每次按下不一定是加一。初学不建议仿真,不是最好的学习方法,仿真实际电路是有差异的,这样你会误入歧途(言过了)。反正我是从不仿真。需要帮助加我

哪位大侠知道proteus中的traffic lights怎么用?
三个引脚分别对应三只灯,从你的图上来看,从上向下分别是绿黄红 控制的时候必须三只引脚都有控制信号(高电平或低电平)不能悬空。比如从上向下接:100(绿灯亮)010(黄红亮)001(红灯亮)

汇编DS18B20 传感器 AT89C51 串行显示 温度上限报警 仿真 PROTEUS
只是看了程序的一小部分,开头就有问题:用"EQU"来定义变量??EQU是等价赋值指令,例如 AAA EQU 88H 表示AAA的值就是88H。这样指令:MOV AX,AAA就相当于MOV AX,88H,即AX=88H,而不是取地址88H中的值。如果要定义变量,用DB、DW、DATA都可以.建议你再仔细检查,如果还有问题,再把代码...

请教大侠用AT89S52的定时器2来设置波特率同时带串口中断,因为我定时器...
没有几个可配置的,程序如下:PCON = 0; \/\/波特率不倍增 SCON = 0x50; \/\/串口方式1, 8-n-1, 允许接收.\/\/---下面就是用T2的设置.T2CON = 0x34;T2MOD = 0x00;RCAP2L = 0xf7; \/\/FFF7: 38400 bps RCAP2H = 0xff;TL2 = 0xf7;TH2 = 0xff;SBUF = 0x35;...

相似回答
大家正在搜