合泰单片机HT66F018红外发射C程序及电路图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//停止发送红外信号(即编码中的高电平)
if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
{
endcount=3; //1为宽的高电平
}
else
{
endcount=1; //0为窄的高电平
}
_t1on=0;
_pa7=1;
do{}while(count<endcount);
{
_wdtc = 0b10101000;//关闭看门狗
for(_tbhp=0;_tbhp<=1;_tbhp++)//清RAM BANK0和RAM BANK1
{ห้องสมุดไป่ตู้
for(_tblp=0xA0;_tblp>0;_tblp++)
{
_bp = _tbhp;//BP指向所清除的RAM Bank
_mp1=_tblp;//MP1间接寻址指针
irdata=irdata>>1;
}
//发送十六位地址的后八位
irdata=iraddr2;
for(i=0;i<8;i++)
{
//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
endcount=1;
_t1on=1;
do{}while(0<endcount);
//停止发送红外信号(即编码中的高电平)
{
//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
endcount=1;
_t1on=1;
do{}while(0<endcount);
//停止发送红外信号(即编码中的高电平)
if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
{
endcount=3; //1为宽的高电平
char irdata,count;
irdata=p_irdata;
iraddr1=0x00;
iraddr2=0xbf;
//发送9ms的起始码
endcount=16;//223
_t1on=1;
_t2on=1;
do{}while(0<endcount);
//发送4.5ms的结果码
endcount=8;//117
_mf1e = 1; //MF1E:多功能中断0中断控制位
_emi = 1; //总中断控制位
}
irdata=p_irdata;
for(i=0;i<8;i++)
{
//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
endcount=1;
_t1on=1;
do{}while(0<endcount);
//停止发送红外信号(即编码中的高电平)
if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
_pbpu1 = 1;//设置IO口为输出口
_pb1 =0;
_pbc2 = 1;//设置IO口为输出口//设置IO口初值为
_pbpu2 = 1;//设置IO口为输出口
_pb2 =0;
_pbc3 = 1;//设置IO口为输出口//设置IO口初值为
_pbpu3 = 1;//设置IO口为输出口
_pb3 =0;
_tm1c0 = 0b00010000;//f SYS默认为8M
_tm1c1 = 0b10101000;//PWM模式或单脉冲输出模式
_tm1rpl=0xcc; //CCRp频率接近38K
_tm1rph=0x00; //CCRp
_tm1al=0x66; //CCRA占空比为1/2
_tm1ah=0x00; //CCRA
_iar1=0;//IAR1间接数据
}
}
_cpc = 0x08;//关闭比较器
_acerl = 0x00;//关闭AD口,这样芯片的IO口才能作为IO使用
_pbc0 = 1;//设置IO口为输出口//设置IO口初值为
_pbpu0 = 1;//设置IO口为输出口
_pb0 =0;
_pbc1 = 1;//设置IO口为输出口//设置IO口初值为
if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
{
endcount=3; //1为宽的高电平
}
else
{
endcount=1; //0为窄的高电平
}
_t1on=0;
_pa7=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
//发送八位数据
}
else
{
endcount=1; //0为窄的高电平
}
_t1on=0;
_pa7=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
endcount=16;//223
_t1on=1;
do{}while(0<endcount);
endcount=4;//223
{
endcount=3; //1为宽的高电平
}
else
{
endcount=1; //0为窄的高电平
}
_t1on=0;
_pa7=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
//发送八位数据的反码
irdata=~p_irdata;
for(i=0;i<8;i++)
_t1cp=1; //
_tm2c0 = 0b00000000;//f SYS1/4默认为8M/4
_tm2c1 = 0b11000001;//PWM模式或单脉冲输出模式
_tm2al=0x60; //CCRA占空比为1/2
_tm2ah=0x04; //CCRA
//
_t2ae = 1; //TM2比较器A匹配中断请求标志位
_t1on=0;
_pa7=1;
do{}while(0<endcount);
//发送十六位地址的前八位
irdata=iraddr1;
for(i=0;i<8;i++)
{
//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
endcount=1;
_t1on=1;
do{}while(0<endcount);
_t1on=0;
_pa7=1;
do{}while(0<endcount);
endcount=1;//223
_t1on=1;
do{}while(0<endcount);
_t1on=0;
_pa7=1;
_t2on=0;
ZSD=1;
}
#include "HT66F018.h"
void CHUSHIHUA()
#include "HT66F018.h"
#include "ExternRAM.h"
void SendIRdata(char p_irdata)
{
unsigned char iraddr1; //十六位地址的第一个字节
unsigned char iraddr2; //十六位地址的第二个字节
int i;
if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
{
endcount=3; //1为宽的高电平
}
else
{
endcount=1; //0为窄的高电平
}
_t1on=0;
_pa7=1;
do{}while(count<endcount);
{
_wdtc = 0b10101000;//关闭看门狗
for(_tbhp=0;_tbhp<=1;_tbhp++)//清RAM BANK0和RAM BANK1
{ห้องสมุดไป่ตู้
for(_tblp=0xA0;_tblp>0;_tblp++)
{
_bp = _tbhp;//BP指向所清除的RAM Bank
_mp1=_tblp;//MP1间接寻址指针
irdata=irdata>>1;
}
//发送十六位地址的后八位
irdata=iraddr2;
for(i=0;i<8;i++)
{
//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
endcount=1;
_t1on=1;
do{}while(0<endcount);
//停止发送红外信号(即编码中的高电平)
{
//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
endcount=1;
_t1on=1;
do{}while(0<endcount);
//停止发送红外信号(即编码中的高电平)
if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
{
endcount=3; //1为宽的高电平
char irdata,count;
irdata=p_irdata;
iraddr1=0x00;
iraddr2=0xbf;
//发送9ms的起始码
endcount=16;//223
_t1on=1;
_t2on=1;
do{}while(0<endcount);
//发送4.5ms的结果码
endcount=8;//117
_mf1e = 1; //MF1E:多功能中断0中断控制位
_emi = 1; //总中断控制位
}
irdata=p_irdata;
for(i=0;i<8;i++)
{
//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
endcount=1;
_t1on=1;
do{}while(0<endcount);
//停止发送红外信号(即编码中的高电平)
if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
_pbpu1 = 1;//设置IO口为输出口
_pb1 =0;
_pbc2 = 1;//设置IO口为输出口//设置IO口初值为
_pbpu2 = 1;//设置IO口为输出口
_pb2 =0;
_pbc3 = 1;//设置IO口为输出口//设置IO口初值为
_pbpu3 = 1;//设置IO口为输出口
_pb3 =0;
_tm1c0 = 0b00010000;//f SYS默认为8M
_tm1c1 = 0b10101000;//PWM模式或单脉冲输出模式
_tm1rpl=0xcc; //CCRp频率接近38K
_tm1rph=0x00; //CCRp
_tm1al=0x66; //CCRA占空比为1/2
_tm1ah=0x00; //CCRA
_iar1=0;//IAR1间接数据
}
}
_cpc = 0x08;//关闭比较器
_acerl = 0x00;//关闭AD口,这样芯片的IO口才能作为IO使用
_pbc0 = 1;//设置IO口为输出口//设置IO口初值为
_pbpu0 = 1;//设置IO口为输出口
_pb0 =0;
_pbc1 = 1;//设置IO口为输出口//设置IO口初值为
if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
{
endcount=3; //1为宽的高电平
}
else
{
endcount=1; //0为窄的高电平
}
_t1on=0;
_pa7=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
//发送八位数据
}
else
{
endcount=1; //0为窄的高电平
}
_t1on=0;
_pa7=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
endcount=16;//223
_t1on=1;
do{}while(0<endcount);
endcount=4;//223
{
endcount=3; //1为宽的高电平
}
else
{
endcount=1; //0为窄的高电平
}
_t1on=0;
_pa7=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
//发送八位数据的反码
irdata=~p_irdata;
for(i=0;i<8;i++)
_t1cp=1; //
_tm2c0 = 0b00000000;//f SYS1/4默认为8M/4
_tm2c1 = 0b11000001;//PWM模式或单脉冲输出模式
_tm2al=0x60; //CCRA占空比为1/2
_tm2ah=0x04; //CCRA
//
_t2ae = 1; //TM2比较器A匹配中断请求标志位
_t1on=0;
_pa7=1;
do{}while(0<endcount);
//发送十六位地址的前八位
irdata=iraddr1;
for(i=0;i<8;i++)
{
//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
endcount=1;
_t1on=1;
do{}while(0<endcount);
_t1on=0;
_pa7=1;
do{}while(0<endcount);
endcount=1;//223
_t1on=1;
do{}while(0<endcount);
_t1on=0;
_pa7=1;
_t2on=0;
ZSD=1;
}
#include "HT66F018.h"
void CHUSHIHUA()
#include "HT66F018.h"
#include "ExternRAM.h"
void SendIRdata(char p_irdata)
{
unsigned char iraddr1; //十六位地址的第一个字节
unsigned char iraddr2; //十六位地址的第二个字节
int i;