利用P1口輸出高低電平,控制繼電器的開合,以實現對外部裝置的控制。
1)利用定時計數器0定時0.5秒,在定時時間到時,通過P1.2控制繼電器每隔0.5秒通斷1次,以便控制LED燈的閃爍。 2)利用定時計數器1設置為計數模式,通過P3.5上所接的按鈕開關給出計數脈沖,每檢測到一個脈沖,控制繼電器通斷1次,以便切換連接在P1.2引腳的LED燈狀態。
我的理解:繼電器只是個幌子,其實就是一個LED燈,上面兩個要求分開來用兩個程序做我都能實現,問題是放到一個程序中再仿真,什么現象也沒有.
總程序如下,不知道錯在哪,希望大佬指點
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit P1_0=P1^0;
sbit P3_5=P3^5;
void delayms(uint xms)
{
uint i,j;
for(i=0;i<xms;i++)
for(j=0;j<110;j++) ;
}
void main(void)
{
TMOD=0x61; //置定時器0工作方式1,計數器1工作方式2
TH0=0x3c; //設置計數初值,定時100ms
TL0=0xae;
TH1=0xff; //計數1個脈沖
TL1=0xff;
EA=1; //開中斷
ET0=0; //關定時器0中斷
ET1=1; //開計數器1中斷
TF0=0; //清除TF0標志位
TF1=0; //清除TF1標志位
TR0=1; //啟動定時器0
TR1=1; //啟動計數器1
while (1)
{
if(TF0)
{
TF0=0; //清除TF0標志位
TH0=0x3c; //重裝初值,定時100ms
TL0=0xae;
P1_0=!P1_0;
}
}
}
void service_int1()interrupt 3 using 3
{
P1_0=!P1_0; //自動裝初值
}
|