>
首 页文章中心单片机论坛电脑援救中心杀毒软件下载电子元件速查集成电路速查客户留言下载中心商品展示频道繁體中文
设为首页
加入收藏
联系我们
您当前的位置:中国单片机网 -> 单片机讲座 -> 文章内容 退出登录 用户管理
栏目导航
· 经典软件 · 单片机讲座
· 电源技术 · 称重技术
· 硬件与电路 · 资料下载
· 淘宝商品 · 轻松一刻
· 金华电大资讯 · 胡老师招生
· l
热门文章
· [图文] 本站承接单片..
· 金华广播电视大学(金..
· 关于金华广播电视大..
· 关于金华广播电视大..
· [组图] 三极管s8050管..
· [组图] 9014三极管管..
· [组图] 三极管9012引..
· [组图] 中央广播电视..
· [组图] 三极管9013管..
· [组图] 万用表的使用..
相关文章
· [图文] 单片机串口通..
· 单片机百科知识
· 基于单片机的实验室..
· 中国单片机网 开通 ..
· [组图] 单片机在步进..
· 常用PIC系列8位单片..
· [组图] 利用单片机I/..
· 汇编指令大全(含指..
· 单片机基础知识汇总..
· 单片机应用编程技巧..
单片机对PT2262的编码信号进行解码
作者:中国单片机网  来源:中国单片机网  发布时间:2009-10-22 14:53:57  发布人:admin

减小字体 增大字体

单片机对PT2262的编码信号进行解码

/******************************************
******* 文件名:Decode.c
******* 描述:对PT2262的编码信号进行解码PT2262的输出信号经三极管反向后送入单片机的中断引脚
******* 代码:A0 -- A11 中的每bit用2bit表示:0码:00 ;1码:11
******* 版权:http://www.51hei.com/
******* 备注:PT2262输出数据的顺序:A0 A1 -- A10 A11+同步码+A0 A1 -- A10 A11+同步码,连续发四次
*******************************************/
#include<reg51.h> //51系列头文件
#include<intrins.h> //方便调用_nop_();做延时用;
unsigned char Receive[3] ;    //解码缓冲区:Receive[0]:A0 A1 A2 A3 ; Recdive[1]:A4 A5 A6 A7 ; Receive[2]: D3 D2 D1 D0
//Recdive[x]:xx xx xx xx 代表4bit
bit flag = 0 ;  //解码完成标志位
sbit RemPin = P3^2 ; //编码信号输入脚
/******************************************************
函数名:INT0_ISR( )
描  述: 外部中断0服务函数,实现对PT2262的解码
参  数:输入参数:无
输出参数:无
*******************************************************/
void INT0_ISR(void) interrupt 0 using 1
{
unsigned char i = 0 ;
unsigned char j = 0 ;
unsigned int temp = 0x0000;

//EA = 0 ;
TH0 = 0 ;
TL0 = 0 ;
while( !RemPin) ; //等待高电平的到来,检测同步头
TR0 = 1 ;   //启动定时器0,开始测量高电平的宽度
while( RemPin)
{
if( TF0 == 1 )
 {
 goto RemExit;  //定时器超时溢出则退出
 }
}

TR0 = 0 ;
temp = TH0 ;
temp = temp << 8 ;
temp = temp + TL0 ; //取得高电平的宽度

if( ( 0x36B0 < temp ) && ( temp < 0x4100) )  //检测到同步头
 {
  for( j = 0 ; j < 3 ; j ++) //循环3次
 {
   for( i = 0 ; i < 8; i ++ )
  {
  TH0 = 0 ;
  TL0 = 0 ;
  while( !RemPin);//等待高电平到来
     TR0 = 1 ;  //开启定时器0 ,测量高电平的宽度
  while( RemPin)
  {
   if( TF0 == 1 )
   {
   goto RemExit; //定时溢出则退出
   }
  }
        TR0 = 0 ;
     temp = TH0 ;
  temp = temp << 8 ;
  temp = temp + TL0 ;  //取得高电平的宽度
        
  if( ( 1000 < temp ) && (temp< 1800 ) ) //判断得窄脉冲:1表示
  {
  Receive[j] = Receive[j] << 1 ;
  Receive[j] = Receive[j] + 0x01 ;
  }
  else if( ( 300 < temp) && (temp< 700) )//判断得宽脉冲:0表示
  {
  Receive[j] = Receive[j] << 1 ;
  }
  else
   return;   
                  
  }
  }
  flag = 1 ;      //表示已解码完毕
   return;
    }
        else
 {
 goto RemExit;
 }
RemExit:
{
TR0 = 0 ;
//TR1=1;
EA = 1 ;
TF0 = 0 ;
RemPin = 1 ;
return;
}  
}

[本站www.chinadpj.com(中国单片机网),摘自     http://www.51hei.com/mcu/700.html    作者    ]

[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 管理登录
Copyright © 2002-2009 www.chinadpj.com. All Rights Reserved. 浙ICP备06040125号
Powered by:NewAsp SiteManageSystem Version 2.1 SP1 1030