找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9659|回复: 2
打印 上一主题 下一主题
收起左侧

红外串口通讯电路用程序

[复制链接]
跳转到指定楼层
楼主
ID:75926 发表于 2015-4-2 22:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


一体化的红外接收头信号脚接到单片机的RXD,红外发射管信号是从单片机串口TXD输出的,其中单片机的P3.4脚是输出38KHZ的载波信号,是用定时器0工作在方式2,自动重载的,在中断里进行端口取反,产生38.4KHZ的方波,晶振用的是11.0592M,通信的波特率是9600



#include <reg51.h>
#define uchar unsigned char
sbit led=P3^3;
uchar a;
sfr AUXR   = 0x8E;    //STC单片机1T的芯片时需要用的
void InitUART(void)       //这个初始化是用的STC的1T单片机时用的
{
    TMOD = 0x22;
    SCON = 0x40;
    TH1 = 0xDC;
    TL1 = TH1;
    PCON = 0x00;
    TH0 = 0x70;
    TL0 = TH0;
    ET0 = 1;
    TR0 = 1;
    EA = 1;
    ES=1;
    TR1 = 1;
}  
////////////////////////////////////////////////////下面的初始化是用的12T的单片机时,
/*void InitUART(void)
{
    TMOD = 0x22;
    SCON = 0x40;
    TH1 = 0xDC;
    TL1 = TH1;
    PCON = 0x00;
    TH0 = 0xf4;
    TL0 = TH0;
    ET0 = 1;
    TR0 = 1;
    EA = 1;
    ES=1;
    TR1 = 1;
}   */
///////////////////////////////////////////////////////////////////////
void Timer0Interrupt(void) interrupt 1    //定时器0工作在方式2自动重载的,产生38.4KHZ方波作为载波用的
{
    led=!led;
}
////////////////////////////////////////////
void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}


void main(void)
{
    AUXR = AUXR|0xB0;  // T1, 1T Mode
    InitUART();
while(1)
{
    SendOneByte(a);  //发射数据
}
}

void UARTInterrupt(void) interrupt 4
{
    if(RI)
    {
        RI = 0;
        a=SBUF ;    //把收到的数据存入变量a中
    }
    else
        TI = 0;
}




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:86327 发表于 2015-7-21 15:26 | 只看该作者
波特率调成300,发数据还要加20ms的延时
回复

使用道具 举报

板凳
ID:67537 发表于 2016-7-10 20:33 | 只看该作者
输出不是38K的频率,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表