利用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; //自动装初值
}
|