P1口上的第一個發光二極管L1不停地一亮一滅,閃爍的時間間隔爲0.2秒
彙編:
ORG 0
START: CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY
LJMP START
DELAY: MOV R5,#20 ;延時子程序,延時0.2秒
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
C語言:
#include <AT89X51.H>
sbit L1=P1^0;
void delay02s(void) //延時0.2秒子程序
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{
while(1)
{
L1=0;
delay02s();
L1=1;
delay02s();
}
}
Lesson2_1
#include <REG52.H>
sbit P1_0=P1^0;//賦值法,第一個發光管閃爍
unsigned int a;//要定義變量
void main()
{while(1)
{P1_0=0;燈亮
a=50000;//最大值65535
while(a--);//while語句後面需要分號
P1_0=1;//燈滅
a=50000;//保持
while(a--);
}
}
Lesson2_2
#include <REG52.H>
#include <intrins.H>
sbit P1_0=P1^0;
unsigned int a,b,c;
void delay(unsigned int);//第一個燈閃爍,調用子函數法
void main()
{while(1)
{P1_0=0;
delay(2000);
P1_0=1;
delay(2000);
}
}
void delay(unsigned int x)
{
for(c=500;c>0;c--);
for(a=5000;a>0;a--);
for(b=x;b>0;b--);
}
Lesson3_3第一個燈閃爍,啓用中斷定時器法(內部中斷T1)
#include<reg52.h>
sbit P11=P1^0;
unsigned char a,num;
void main()
{
num=0;
EA=1;//中斷總允許
ET1=1;//開發T1的中斷允許
TMOD=0x10;//工作方式2,16位,2的16次方=65536
TH1=(65536-50000)/256;//定時器高八位裝數
TL1=(65536-50000)%256;//50ms
TR1=1;//啓動定時器1
while(1)
{
if(num==2)//2次*50ms=1s
{
num=0;
P11=~P11;取反,燈滅
}
}
}
void time1() interrupt 3 using 1//標號,中斷子函數無需函數聲明
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
num++;
}