第一步:打开keil4,建立工程,芯片选择:AT89c52(比AT89c51多一个中断)
1.点亮第一个LED灯
#include<reg52.h>
sbit led=P2^0;
void main()
{
led=0;//低电平亮
}
2.利用延时来使LED 1秒闪烁,500ms变化
利用while(i- -)
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;
void delay(u16 i)
{
while(i--);//大约i=1,10us。
}
void main()
{
while(1)
{
led=0;//低电平亮
delay(50000);//大约500ms。
led=1;//高电平灭
delay(50000);//大约500ms。
}
}
利用for(1,2,3)
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;
void delay(u16 i)
{
int x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);//delay(1000)大约1秒
}
void main()
{
while(1)
{
led=0;//低电平亮
delay(500);//大约500ms。
led=1;//高电平灭
delay(500);//大约500ms。
}
}
利用定时器中断循环
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;
void timer0init0()
{
TMOD=0x01;//设置工作模式1,16位。
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;//5000=50ms
ET0=1;//打开定时器中断允许
TR0=1;//打开定时器
EA=1;//打开总中断
}
void main()
{
timer0init0();
while(1);
}
void timer0() interrupt 1
{
u8 a;
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;//5000=50ms
if(a==10)
{
a=0;
led=~led;
}
}
STC89c51有5个中断源分别是2个外部中断(0,2),2个定时器/计数器中断(1,3),1个串行口中断(4)。