标题: 单片机IO口由低电平用定时器延时0.5s后变成高电平 [打印本页]

作者: Mohair    时间: 2021-4-29 10:57
标题: 单片机IO口由低电平用定时器延时0.5s后变成高电平
#include<reg52.h>

sbit P2_0=P2^0;//1号继电器正位
sbit P2_1=P2^1;//1号继电器反位

sbit P2_2=P2^2;//2号继电器正位
sbit P2_3=P2^3;//2号继电器反位

sbit P2_4=P2^4;//光电开关



unsigned int a;        
typedef unsigned char uchar;

void delay(unsigned int xms)         //延时函数
{
        unsigned  int t1, t2 ;
        for(t1=0;t1<xms;t1++)
        for(t2=0;t2<110;t2++);
}

void main()
{
   SCON = 0x50;//设置串口工作方式1
    TMOD = 0x20;//设置计数器工作方式2
    PCON = 0x00;//即SMOD=1,波特率不加倍
    TH1 = 0xE6;//计数器初值,波特率是1200,晶振为11.0592MHz
    TL1 = 0xE6;
    ES = 1;//打开接收中断
    EA = 1;//打开总中断
    TR1 = 1;//打开计数器
         
  while(1)
{
   if(P2_4==0)
  {
          a=0x01;
    SBUF=a;
          while(!TI);
          TI=0;
  }
}
         
}
void Usart() interrupt 4
{
        uchar receiveData;       
        if(RI)
        {
         while(!RI);               
   receiveData=SBUF;//出去,接,收到的数据
    if(receiveData==0xA1)//1号继电器正位
          {
                P2_0=0;
                P2_1=1;       
                P2_2=1;
                P2_3=1;       
       
                delay(10000);
          P2_0=1;
          }       
   if(receiveData==0xA2)//1号继电器反位
          {
                P2_0=1;
                P2_1=0;       
                P2_2=1;
                P2_3=1;       
               
                delay(10000);
          P2_1=1;          
          }       
                if(receiveData==0xB1)//2号继电器正位
          {
                P2_0=1;
                P2_1=1;       
                P2_2=0;
                P2_3=1;       
       
                delay(10000);
          P2_2=1;
          }       
   if(receiveData==0xB2)//2号继电器反位
          {
                P2_0=1;
                P2_1=1;       
                P2_2=1;
                P2_3=0;       
               
                delay(10000);
          P2_3=1;          
          }       
        }
    RI = 0;       
}






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1