ioca0中断 pic单片机_用PIC对PT2262进行三态解码(6561个地址),地址码设置方便。...
//************************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个地址),地址码设置方便。...相关推荐
- ioca0中断 pic单片机_关于PIC单片机的一些经验总结 -单片机-电子工程世界网
为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大家能及时的 ...
- ioca0中断 pic单片机_关于PIC单片机的模块和功能总结
PIC 单片机的概述 PIC16F616 是一款 14 引脚.8 位的 CMOS 单片机.采用精简指令集,仅有 35 条指令,由于采用了数据总线和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之 ...
- ioca0中断 pic单片机_单片机入门知识-PIC为例程序.ppt
PIC单片机原理及应用 内容提要 单片机概述 PIC单片机的特色 PIC单片机的程序设计 单片机概述 单片机正名为:微控制器 --MCU ,MicroController Unit 单片机概述 何为单 ...
- PIC单片机-PICC介绍
目录: 一.如何从汇编转向PICC 1.头文件 2.如何赋值 3.如何位操作 4.内存分配问题 二.浅谈PICC 的位操作 三.PICC 之延时函数和循环体优化 五.在PICC 中使用常数指针 六.P ...
- 16F877A和24C02通信汇编语言,pic单片机IIC通信读24C02程序例 16F877A 主频4M
#define _iic_h_//pic单片机IIC通信初始化函数声明 void iiccsh(void); //pic单片机IIC通信读外围设备函数声明 //功能:传送一个8位地址,返回一个8位数据 ...
- PIC单片机入门_中断系统详解
1.中断的基本概念 当单片机正在执行程序时,出现了某些特殊状况,例如定时时间到.有键盘信号输入等,此时CPU须要暂时停止当前的程序,而转去执行处理这些事件的程序,待执行完这些特定的程序之后,再返回到原 ...
- ioca0中断 pic单片机_PIC单片机学习笔记
1.前言 为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大 ...
- ioca0中断 pic单片机_PIC单片机
PIC 单片机 为了给前一段时间学习 PIC16F616 型单片机的一个总结和方便大家的交 流 , 我写了这篇关于 PIC 单片机的学习心得 , 都是在看了手册和编程调试后用自 己的语言组织的 , 其 ...
- PIC单片机精通_异步串口通讯实例与细节
1.前言 PIC16F876a异步串口通信的定义以及寄存器控制,这里不再多谈,前面已经进行过详细的分析.这里注意集中在几个关键点上. 串口中断服务程序应该注意什么? 利用串口助手进行调试应该注意什么? ...
最新文章
- java基础---JVM---java内存区域与内存溢出问题
- 懒人必备:.NetCore快速搭建ELK分布式日志中心
- OPK修改操作系统信息 --oobe.xml
- oracle表没有数据判断,Oracle中判断有表DROP无表CREATE的存储过程
- php preg match x,PHP的preg_match噩梦
- Git之diff和status
- linux 启动,停止mysql
- 复数基础—— i = 根号 -1 _3
- git删除分支_程序员必须要掌握的 Git 使用技巧
- 评分卡模型开发(八)--主标尺设计及模型验证
- plsqldev显示语言有问题
- 为什么越来越多的人选择FUP T10S系列超声波探伤仪
- abaqus三点弯曲有限元模拟
- 亚马逊店铺关联的申诉流程分享给大家。
- 1G2G3G4G5G:一部波澜壮阔的移动通信史
- 什么是HTAP 阿里云上实现
- 对于编码器与解码器的理解
- Nacos系列(12)-Nacos1.3.2注册中心nacos.discovery配置参数详解
- 流量累计程序 博途v15编写的西门子流量累计程序
- python贪心算法几个经典例子_关于贪心算法的一些探讨、经典问题的解决和三种典型的贪心算法算法(哈弗曼,Kruskal,Prim)的Python实现。...