在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Android手机应用开发 → AS3933唤醒例程

AS3933唤醒例程

Android手机应用开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.06M
  • 下载次数:21
  • 浏览次数:681
  • 发布时间:2020-10-12
  • 实例类别:Android手机应用开发
  • 发 布 人:hbsun2007
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 例程

实例介绍

【实例简介】

详细注释-解决唤醒死机

【实例截图】

from clipboard

【核心代码】

  
#include"system.h"
sfr P1M0=0X92; //定义P1口配置寄存器
sfr P1M1=0X91; //定义P1口配置寄存器
sfr P3M0=0XB2; //定义P3口配置寄存器
sfr P3M1=0XB1; //定义P3口配置寄存器
unsigned char receive_flag=0; //唤醒中断标志位,1:唤醒到来	  0:无唤醒信号
unsigned int AS3933_data1;//AS3933_data1:AS3933接收到的数据高8位
unsigned int AS3933_data2;//AS3933_data1:AS3933接收到的数据低8位
unsigned int run_count;//主程序大循环计数标志,主要用来延时
unsigned int i;//AS3933接收数据16次循环计数
unsigned int temp1,temp2,temp3;//AS3933接收数据校验寄存
void delay(unsigned int k)//延时函数
{
 int i,j;
 for(i=0;i<k;i  )
  for(j=0;j<100;j  );
}

void main(void)
{	 
unsigned int dead_count1,dead_count2;//唤醒死机计数 
Init_Com();	 //初始化串口
AS3933_SET ();//配置AS39933各项寄存器
IT1=1; //打开外部中断1
EX1=1; //打开外部中断允许位
EA=1;  //开总中断
P1M0|=0X80;//配置P1口输入输出状态
P3M1=0X98; //配置P2口输入输出状态
P3M0=0X00; //配置P2口输入输出状态
 P0=0xFF;  //初始化P0口
 P1=0xFF;  //初始化P1口
 P2=0xFF;  //初始化P2口
 P3=0xFF;  //初始化P3口
while(1)
{
/*********************************处理AS3933接收到的数据**********************/
 if(P3_3==1&&receive_flag==1)//接收到唤醒信号和正确的数据时序	  
 {
  P1_7=1;//点亮LED指示灯
  AS3933_data1=0;//清零AS3933接收数据高8位
  dead_count1=0;
  dead_count2=0;
  for(i=0;i<16;i  )//曼彻斯特解码
	 {
	  if(CL_DAT==1)//P3_7接AS3933 CL_DATA(数据时钟)引脚
	    {
		 if(DAT==0)//P3_4接AS3933 DAT(数据)引脚
		 AS3933_data1=AS3933_data1|0x01;//如果时钟高电平,数据引脚是低电平,则接收的数据为1
		 while(CL_DAT==1)//等待时钟跳变
		  {
		    dead_count1  ;
			if(dead_count1>=1000)
			 {
			   dead_count1=0;
			   dead_count2  ;
			   if(dead_count2>=1000)
			    {
				 dead_count2=0;
				 break;//跳出循环
				}
			 }
		  }
		}
	   dead_count1=0;
	   dead_count2=0;
	   while(CL_DAT==0) //如果时钟低电平,则认为数据为0
	     {
          dead_count1  ;
			if(dead_count1>=1000)
			 {
			   dead_count1=0;
			   dead_count2  ;
			   if(dead_count2>=1000)
			    {
				 dead_count2=0;
				 break;//跳出循环
				}
			 }
		 }
	   dead_count1=0;
	   dead_count2=0;
	   AS3933_data1=AS3933_data1<<1;
	  }	  
	receive_flag=0;//接收完数据,清零AS3933唤醒标志位
	if(receive_flag==0)	//接受完数据后进行数据校验
    {
	   	AS3933_data2=AS3933_data1&0xff00;//将接收到的数据高8位赋值给 AS3933_data2 高8位
		AS3933_data2=AS3933_data2>>8;//将AS3933_data2高八位数据移至低8位
		AS3933_data1=AS3933_data1&0x00ff;//将将AS3933_data1高八位数据清零
		temp1=AS3933_data2>>1<<1;//将AS3933_data2低8位数据赋值给temp1,并将最后一位清零
		temp2=AS3933_data1;//将AS3933_data1低8位数据赋值给temp2
		temp2=~temp2>>1<<1;//将TEMP2数据取反,并将最后一位清零。
	(unsigned char)temp3=temp1-temp2;//对比TEMP1、TEMP2
	if(temp3==0)//如果TMP1等于TEMP2 则数据校验正确
	 {
	  SendASC(255-AS3933_data2);  //串口发送接收到的数据
	 }
	receive_flag=2;//唤醒标志位赋值成2,避免重复解调数据
  }

 }
/************************************************************************/ 
  P1_7=0; //关闭LED指示灯
  run_count  ;	//大循环计数
   if(run_count>=60000)//大循环60000次后睡眠
   {
    run_count=0;
	//SendASC(0xbb);
    go_sleep();	//睡眠,降低功耗
   }

}
}
																							

标签: 例程

实例下载地址

AS3933唤醒例程

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警