找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2885|回复: 0
打印 上一主题 下一主题
收起左侧

进入休眠为什么外串口换醒不了呢?

[复制链接]
跳转到指定楼层
楼主
ID:71991 发表于 2016-10-4 12:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h> //包含单片机寄存器的头文件

unsigned char code Tab[ ]={"net ok"};

unsigned char add1;
unsigned char add2;
unsigned char add3;
unsigned char add4;
unsigned char add5;
unsigned char add6;
unsigned char id;
unsigned char addsum;
sbit key=P2^5;     
/*****************************************************
函数功能:接收一个字节数据
***************************************************/
unsigned char Receive(void)
{
unsigned char dat;
while(RI==0) //只要接收中断标志位RI没有被置“1”
; //等待,直至接收完毕(RI=1)
RI=0; //为了接收下一帧数据,需将RI清0
dat=SBUF; //将接收缓冲器中的数据存于dat
return dat;
}
/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
void Send(unsigned char dat)
{
SBUF=dat;
while(TI==0)
;
TI=0;
}
/**************************************************************
函数功能:延时约150ms
**************************************************************/
void delay(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/*****************************************************
函数功能:延时1ms
(3j+2)i=(3×33+2) ×10=1010(微秒),可以认为是1毫秒
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;              
}
/*****************************************************
函数功能:延时若干毫秒
***************************************************/
void delaynms(unsigned char x)
{
unsigned char i;
for(i=0;i<x;i++)
delay1ms();
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
unsigned char i;
TMOD=0x20; //定时器T1工作于方式2
SCON=0x50; //SCON=0101 0000B,串口工作方式1,允许接收(REN=1)
PCON=0x00; //PCON=0000 0000B,波特率9600
TH1=0xfb;//0xfd; //根据规定给定时器T1赋初值
TL1=0xfb; //根据规定给定时器T1赋初值
EA=1;
ES=1;
TR1=1; //启动定时器T1
REN=1; //允许接收
id=0;
P1=0XFF;
P2=0XFF;
while(1)
{
   add1=Receive();
   if(add1==0xa5)
   {
            add2=Receive();
         add3=Receive();
         add4=Receive();
         add5=Receive();
         add6=Receive();
         addsum=(add3+add4)%256;
     if(add5==addsum)
                {
               
                 key=~key;
               
                 for(i=0;i<8;i++)
                 {
                        Send(Tab[i]);
                        delay();  
                       
                  }
                 
                }
           TR1=0;
                PCON=0X01;
   }

   delaynms(100);

        add1=0;
        add2=0;
        add3=0;
        add4=0;
        add5=0;

}

}

void int4() interrupt 4 //外串口中断换醒
{
TR1=1;
PCON=0X00;
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表