//************************PT2262三态解码程序****************************//

//

//                                                                      //

//同步头引导低电平4mS~5mS;即震荡电阻为150K;                             //

//三态地址共6561个地址设置;                                             //

//通常的单片机软件解码地址码为0或1,没有悬空(高阻)状态,地址只有256个;  //

//解码原理:使用PIC单片机的电平变化中断功能来捕捉功能判断脉冲宽度;      //

//特点:解码稳定可靠,抗干扰强。                                        //

//作者:   cqgxh@163.com     2009-7-10 于重庆                    //

//                                                                      //

//

/**************************************************************************************

16F690

__   __

+5V        VDD|  |_|  |VSS       GND    (地 )

osc20M    OSC1|       |AN0

osc20M    OSC2|       |AN1

RA3/MCLR|       |AN2       IR     (遥控)

PORTC5|       |PORTC0

PORTC4|       |PORTC1

PORTC3|       |PORTC2

PORTC6|       |RB4

PORTC7|       |RB5/RX

RB7/TX|_______|RB6

2009-7-10 10:05:55   CQGXH@163.COM

***************************************************************************************/

#include

#include

__CONFIG(HS&UNPROTECT&PWRTEN&BORDIS&WDTDIS);

#define IR RA2                               //定义遥控信号输入端

#define uchar unsigned char                  //缩写

#define uint unsigned int                    //缩写

bank2    bit  lock;

bank2  uchar  OUT;

bank2  uint   add_set;

bank2  uchar  i,k,j,t2data;

bank2  uchar  irdata;

bank2  uint   iradd;

bank2  uchar  a[24];

const uchar add_Tab[8]={2,2,2,2,2,2,2,2} ;   //设置地址码;0==低电平;1==高电平;2==悬空(高阻);

//共计6561个地址状态

//

//函数声明

void cos_js();

void add_3();

void interrupt IRQ(void);                  //中断处理

main(void)

{

TRISA0=0;

TRISA2=1;

ANSEL=0x00;                      //关闭模拟量输入

ANSELH=0x00;

RABPU=0x00;                      //全局上拉使能

WPUA=0x04;                       //RA2上拉

//Timer0初始化设置

PSA=0;                           //Timer0 使用预分频器

PS0=0;PS1=1;PS2=1;               //Timer0选择分频率为1:128

T0CS=0;                          //外部时钟定时方式

IOCA2  =1;                       //开启RA2电平中断

RABIE  =1;                       //开启RAB口电平变化中断

PEIE   =1;                       //PEIE:外设中断允许位1 = 允许所有未屏蔽的外设中断 0 = 禁止所有的外设中断

GIE    =1;                       //GIE:全局中断允许位 1 = 允许所有未屏蔽的中断 0 = 禁止所有中断

add_3();                         //计算设置的地址码

while(1)                         //循环等待中断

{

NOP();

;

}

}

//解码地址3进制计算

void add_3()

{

uchar i;

for(i=0;i<8;i++)

{

add_set=add_set*3+add_Tab;

}

}

void interrupt IRQ(void)      //中断函数

{

if(RABIF&&RABIE&&IOCA2)     //RA2电平变化中断解码PT2262;

{

//           RABIF=0;

t2data=TMR0;

TMR0=0X00;

if((lock==0)&&IR)

{

if(t2data>0x9f)    //0x9f大于4.08mS;实际同步头低电平脉宽4280uS ( 25.6uS*0xa7) ;3.2mS(0x7D)

{

if(t2data<0xc5)  //0xaf小于4.48mS;0xc5=5043US

{

j=0;

k=0;

lock=1;

}

}

}

if(lock&&(IR==0))

{

if(t2data<0x09)          //窄脉冲识别

//0x6小于153.6uS ;实际脉宽135uS~144US

{

if(t2data>0x02)        //0x4大于102.4uS

{

a[j]=0;

j++;

}

else j=0;

}

if(t2data>0x0d)           //宽脉冲识别

//0x0f大于384uS ;实际脉宽405uS 或0x11=432US

{

if(t2data<0x18)       //0x12小于460.8uS;  0x14=512uS;

{

a[j]=1;j++;

}

else j=0;

}

if(j==24)                 //数据接收完毕,进行译码处理

{

lock=0;

j=0;

for(i=0;i<24;i+=2)

{

if((a==0)&(a[i+1]==0)){a[j]=0;j++;}    //两个都是窄脉冲为0

else if(a&a[i+1]){a[j]=1;j++;}         //前窄后宽为1

else if((a==0)&a[i+1]){a[j]=2;j++;}    //前宽后窄为2

else break;

}

for(iradd=0,i=0;i<8;i++)

{

iradd=iradd*3+a;

}

for(irdata=0,i=8;i<12;i++)

{

irdata=(irdata<<1)+a;

}

if(iradd==add_set)

{

OUT=irdata;

}

else if(iradd==0)

{

OUT=irdata^0x0f;

}

else OUT=0;

}

}

RABIF=0;            //清中断标志,过早清除易产生错误

}              //电平变化中断处理结束

}

ioca0中断 pic单片机_用PIC对PT2262进行三态解码(6561个地址),地址码设置方便。...相关推荐

  1. ioca0中断 pic单片机_关于PIC单片机的一些经验总结 -单片机-电子工程世界网

    为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大家能及时的 ...

  2. ioca0中断 pic单片机_关于PIC单片机的模块和功能总结

    PIC 单片机的概述 PIC16F616 是一款 14 引脚.8 位的 CMOS 单片机.采用精简指令集,仅有 35 条指令,由于采用了数据总线和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之 ...

  3. ioca0中断 pic单片机_单片机入门知识-PIC为例程序.ppt

    PIC单片机原理及应用 内容提要 单片机概述 PIC单片机的特色 PIC单片机的程序设计 单片机概述 单片机正名为:微控制器 --MCU ,MicroController Unit 单片机概述 何为单 ...

  4. PIC单片机-PICC介绍

    目录: 一.如何从汇编转向PICC 1.头文件 2.如何赋值 3.如何位操作 4.内存分配问题 二.浅谈PICC 的位操作 三.PICC 之延时函数和循环体优化 五.在PICC 中使用常数指针 六.P ...

  5. 16F877A和24C02通信汇编语言,pic单片机IIC通信读24C02程序例 16F877A 主频4M

    #define _iic_h_//pic单片机IIC通信初始化函数声明 void iiccsh(void); //pic单片机IIC通信读外围设备函数声明 //功能:传送一个8位地址,返回一个8位数据 ...

  6. PIC单片机入门_中断系统详解

    1.中断的基本概念 当单片机正在执行程序时,出现了某些特殊状况,例如定时时间到.有键盘信号输入等,此时CPU须要暂时停止当前的程序,而转去执行处理这些事件的程序,待执行完这些特定的程序之后,再返回到原 ...

  7. ioca0中断 pic单片机_PIC单片机学习笔记

    1.前言 为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大 ...

  8. ioca0中断 pic单片机_PIC单片机

    PIC 单片机 为了给前一段时间学习 PIC16F616 型单片机的一个总结和方便大家的交 流 , 我写了这篇关于 PIC 单片机的学习心得 , 都是在看了手册和编程调试后用自 己的语言组织的 , 其 ...

  9. PIC单片机精通_异步串口通讯实例与细节

    1.前言 PIC16F876a异步串口通信的定义以及寄存器控制,这里不再多谈,前面已经进行过详细的分析.这里注意集中在几个关键点上. 串口中断服务程序应该注意什么? 利用串口助手进行调试应该注意什么? ...

最新文章

  1. java基础---JVM---java内存区域与内存溢出问题
  2. 懒人必备:.NetCore快速搭建ELK分布式日志中心
  3. OPK修改操作系统信息 --oobe.xml
  4. oracle表没有数据判断,Oracle中判断有表DROP无表CREATE的存储过程
  5. php preg match x,PHP的preg_match噩梦
  6. Git之diff和status
  7. linux 启动,停止mysql
  8. 复数基础—— i = 根号 -1 _3
  9. git删除分支_程序员必须要掌握的 Git 使用技巧
  10. 评分卡模型开发(八)--主标尺设计及模型验证
  11. plsqldev显示语言有问题
  12. 为什么越来越多的人选择FUP T10S系列超声波探伤仪
  13. abaqus三点弯曲有限元模拟
  14. 亚马逊店铺关联的申诉流程分享给大家。
  15. 1G2G3G4G5G:一部波澜壮阔的移动通信史
  16. 什么是HTAP 阿里云上实现
  17. 对于编码器与解码器的理解
  18. Nacos系列(12)-Nacos1.3.2注册中心nacos.discovery配置参数详解
  19. 流量累计程序 博途v15编写的西门子流量累计程序
  20. python贪心算法几个经典例子_关于贪心算法的一些探讨、经典问题的解决和三种典型的贪心算法算法(哈弗曼,Kruskal,Prim)的Python实现。...

热门文章

  1. 【120817测试】JSOI2007夏令营考试(A层次)
  2. Python爬虫 + 人脸检测 + 颜值检测 = 知乎高颜值图片抓取
  3. 春秋招聘 + 寒暑假实习 时间线
  4. 动态规划练习——最长回文子序列
  5. canvas 简单入门
  6. 【VS开发】MFC学习之 解决StretchBlt()图片缩放绘图失真
  7. ubuntu重装系统后电脑没声音怎么办[已解决]
  8. .NET 入门测试题一:变量与表达式
  9. C#设计模式(4)——抽象工厂模式
  10. python实现计算移动平均值MA