C51单片机晶振电路,110592晶振,发射38Khz红外,求代码

51单片机红外遥控发射接收的问题???待高手解答。。。不胜感激!_百度知道
51单片机红外遥控发射接收的问题???待高手解答。。。不胜感激!
在51单片机的自学过程中遇到许多问题,这几天在做红外遥控的实验,但按照网上不多的38KHZ载波产生的程序上有很多疑惑,比如在定时中断中,网上其他高手所说26US取反一次,但频率就是19KHZ么?13US才对啊。还有程序中如果仅仅产生38KHZ的话可以实现,接收管可以...
我有更好的答案
用STC12C5A60S2,用其PCA软件定时器就不存在这个问题了,可以做的很精确,值得说明的是13US是对的;另外用T0和T1也是可以的,用其1T模式,几条语句占用不了多少时间,在送的数中处理一下就OK了。
我用的是stc89c52rc,12T的吧。请问对于这个MCU来编程怎么写?
中断程序可以这样处理。设定时器工作在8位重装载模式,这样就不会占用代码时间了,进入中断后直接对发送位取反。ORG 0000HLJMP STAORG 000BHLJMP T0INTORG 0050HSTA:
MOV TMOD,#02H
MOV TH0,#0F3H
MOV TL0,#0F3H
SJMP $T0INT:
CPL IR_OUT
高级工程师
//12M晶振TMOD |= 0x20;
TMOD &= 0 TH1 = 0xeF3;TL1
= 0xF3; TR1 = 1; ET1 = 1; EA
= 0;while(1){????} }void interrupt_timer1() interrupt 3{ LED=~LED;}
到网上 搜搜 有一些的
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。来自机电工程师网
当前位置: &
& 51单片机红外遥控解码数码管显示实验 - C51源代码
51单片机红外遥控解码数码管显示实验 源代码
开放源代码
51单片机红外遥控解码数码管显示实验 源代码下载
//更多51单片机程序与资源:https://www.jdgcs.org/wiki/8051
'''晶振11.0592MHZ'''
#include &reg51.h&
#define c(x) (x*000)
sbit Ir_Pin=P3^7;
sbit beep=P3^6;
unsigned char code Led_Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
//共阳极数码显示码0-F.
unsigned char code Led_Sel[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char Led_Buf[7]; //显示缓冲区
char Led_Index;
unsigned char Ir_Buf[4]; //用于保存解码结果
void delay_50ms(unsigned int t)
unsigned int j;
for(;t&0;t--)
for(j=6245;j&0;j--)
//==============================================================
//数码管扫描
timer0() interrupt 1 using 1
TL0=65536-1000;
TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
P2=Led_Sel[Led_Index];
P0=Led_Tab[Led_Buf[Led_Index]];
if(++Led_Index&7)
Led_Index=0;
//八个扫描完了,到第一个数码管
//==============================================================
unsigned int Ir_Get_Low()
while(!Ir_Pin && (TH1&0x80)==0);
return TH1*256+TL1;
//=============================================================
unsigned int Ir_Get_High()
while(Ir_Pin && (TH1&0x80)==0);
return TH1*256+TL1;
//==============================================================
unsigned int temp;
Led_Index=0;
TMOD=0x11;
TL0=65536-1000;
TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
while(Ir_Pin);
temp=Ir_Get_Low();
if(temp&c(8500)
电路搭建请参考。
Loading...说出来你可能不信,王二正在被信息怪追杀,没错,就是那……
OLED在显示行业的热度还没达到顶峰,Micro LED就出来&ld……
要说最近半导体行业的巨人战争,当属博通费尽心机收购高……
在高性能的应用,如智能汽车、小型的医疗设备这个领域,……
&在我开始讲之前,我希望大家记住Power by
演讲人:郝晓贝时间: 10:00:00
演讲人:王海莉时间: 10:00:00
演讲人:卢柱强时间: 10:00:00
预算:¥10000预算:¥1010000
广东省广东省
单片机解码万能红外遥控器C51程序
[导读]标签:单片机
红外遥控使用方法:打开串口调试助手,设置为9600 bps
单片机这边用11.0592MHz的晶振,使用sm0038或者其他型号的红外接收头按下面的电路连接好,其中out直接与单片机的p3.2脚相连.按下遥控器,串口调
标签:单片机 &红外遥控本文引用地址:
使用方法:打开串口调试助手,设置为9600 bps
单片机这边用11.0592MHz的晶振,使用sm0038或者其他型号的红外接收头按下面的电路连接好,其中out直接与单片机的p3.2脚相连.按下遥控器,串口调试助手便会出现解码值.
/******************************************************************/
/* 本程序的蓝本从网上搜集,经修改并注释,万能遥控器解码成功 */
/* 晶振:11.0592MHz */
/* 整理与测试:单片机教程网 http://www.51hei.com 胡琴
/************************* 说 明 *********************************/
/* 以一个9ms的低电平和4.5ms的高电平为引导码,后跟32位二进制代码 */
/* 前16位为8位用户码及其反码,后16位为8位的操作码及其反码 */
/* 以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示&0&; */
/* 以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示&1&。 */
/* 注意:接收码的脉宽与间隔是对发射码取反的,即间隔是0.565ms */
/* 解码后共有四个十六进制码,本程序取第三个作为识别码 */
/*******************************************************************/
#define uchar unsigned char
uchar data IRcode[4]; //定义一个4字节的数组用来存储代码
uchar CodeT //编码字节缓存变量
uchar i,j,k; //延时用的循环变量
sbit IRsignal=P3^2; //HS0038接收头OUT端直接连P3.2(INT0)
sbit P0_0=P0^0; //P0连接到 LED 上
sbit P0_1=P0^1;
sbit P0_2=P0^2;
/**************************延时0.9ms子程序**********************/
void Delay0_9ms(void)
uchar j,k;
for(j=18;j&0;j--)
for(k=20;k&0;k--)
/***************************延时1ms子程序**********************/
void Delay1ms(void)
uchar i,j;
for(i=2;i&0;i--)
for(j=230;j&0;j--)
/***************************延时4.5ms子程序**********************/
void Delay4_5ms(void)
uchar i,j;
for(i=10;i&0;i--)
for(j=225;j&0;j--)
/**************************** 延时子程序 ************************/
void Delay(void)
uchar i,j,k;
for(i=200;i&0;i--)
for(j=200;j&0;j--)
for(k=3;k&0;k--)
/******************** 中断0解码服务子程序 ********************/
void int0(void) interrupt 0 using 2
EA = 0; //??? 可以这样,跳入中断,但仍可对P3.2(INT0)进行电平变化的读取
for(k=0;k&10;k++)
Delay0_9ms();
if (IRsignal==1) //如果0.9ms后IRsignal=1,说明不是引导码
else if(k==9) //如果 持续了10&0.9ms=9ms的低电平,说明是引导码
while(IRsignal==0);
Delay4_5ms(); //跳过持续4.5ms的高电平
for(i=0;i&4;i++) //分别读取4个字节
for(j=1;j&=8;j++) //每个字节8个bit的判断
while(IRsignal==0); //等待上升沿 此处用得很好:因为0.56ms的低电平(接收时)是代码0与1的相同部分
Delay0_9ms();
//从上升沿那一时刻开始延时0.9ms(因为0.9介于0.56(=1.125-0.56)与1.69(=2.25-0.56)之间),再判断IRsignal
if(IRsignal==1) //如果IRsignal是&1&,高位置&1&,并向右移一位
Delay1ms(); //为什么要延时1ms呢?因为要使IRsignal跳至低电平(即0.56ms的0与1相同部分上)
CodeTemp=CodeTemp|0x80; //此处的算法很好
if(j&8) CodeTemp=CodeTemp&&1;
CodeTemp=CodeTemp&&1;//如果IRsignal是&0&,则直接向右移一位,自动补&0&
IRcode=CodeT
CodeTemp=0;
for(i=0;i&4;i++) //通过串口将代码发出
while(!TI); //等待一个字节发送完毕
/***********************串口初始化程序*********************/
void initUart(void)
TMOD |= 0x20; //
SCON = 0x50; //
PCON |= 0x80; //
TH1 = 250; // 9600 bps @ 11.0592MHz
TL1 = 250;
/**************************主程序*************************/
void main()
initUart();
IT0 = 1; //INT0为负边沿触发, (1:负边沿触发,0:低电平触发)
EX0 = 1; //外部中断INT0开, (1:开, 0:关 )
EA = 1; //开所有中断
CodeTemp = 0; //初始化红外编码字节缓存变量
switch(IRcode[2])
case 0x42:P0=0XFF;P0_0=0;
case 0x4e:P0=0XFF;P0_1=0;
case 0x52:P0=0XFF;P0_2=0;
据Businessinsider报道,在硅谷中想当一个出色的程序员,意味着与诸多精英面临直接竞争。公司给你开出了丰厚的薪水,免费的大餐,免费司机接送,硅谷的程序员在某种意义上就像是好莱坞的明星。Altay Guvench,曾经是一名程序员的......关键字:
程序员们在 StackExchange 上有激烈的讨论,如果偷偷把自己的工作自动化,是不是不道德?......关键字:
你对这些来自东方的程序员有没有一些总结性的看法和观点(比如:他们是否合作,是否能按时提交代码,写出的程序是否有质量?)。依据是什么?......关键字:
马上就到一年一度的2018年春节了,金三银四,而春节过后往往是跳槽的高峰期.作为一名程序员,应该如何准备自己的简历呢?我们程序员一般在什么时机需要更新简历呢?......关键字:
这是北京“近十年最宽松的落户政策”!消息在北京创投圈激起了涟漪。这些年,北京几乎聚集了中国数量最多顶尖的创业公司和创投机构,从IDG资本、红杉中国、经纬创投到百度、京东、美团、今日头条….浩浩荡荡数十万人。这一纸新规有望让他们落地生根。......关键字:
性格影响机缘有无,影响才情发挥,影响努力深浅,最终影响人生之结局,是人这一生里可以把握,又往往被忽视的因素。......关键字:
我不算是聪明的人,经历也不算特别成功,但一步一步走来,我认为,我能做到的,你一定也能做到,而且应该还能做得比我更好。......关键字:
你对这些来自东方的程序员有没有一些总结性的看法和观点(比如:他们是否合作,是否能按时提交代码,写出的程序是否有质量?)。依据是什么?......关键字:
我 要 评 论
热门关键词21ic官方微信-->
独立波特率发生器怎么用的
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
独立波特率发生器怎么用的,为什么我将定时器1的产生波特率的代码改成独立波特率的代码就不对了
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
#include &stc12c5A.H&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
//以下是板子上LED的配置,把Px_x改成自己对应的脚。
//以下是你的51单片机的晶振大小
#define FOSC_110592M
//#define FOSC_12M
//以下是开机后发送到手机的内容,发送的号码在程序中修改。
uchar sms_text[] = &abc123&;
//注意,无论接收到信号还是发送完信号,都会进中断服务程序的
/*初始化程序(必须使用,否则无法收发),次程序将会使用定时器1*/
void SerialInti()//初始化程序(必须使用,否则无法收发)
& & & & SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)
& & & & SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据
& & & & REN=1;//串行接收允许位(要先设置sm0sm1再开串行允许)
& & & & EA=1;//开总中断
& & & & ES=1;//开串行口中断& & & &
/*串行通讯中断,收发完成将进入该中断*/
void Serial_interrupt() interrupt 4
//& & & & a=SBUF;
& & & & P2=SBUF;
& & & & RI=0;//接收中断信号清零,表示将继续接收
//& & & & flag=1;//进入中断的标志符号
void Uart1Send(uchar c)
& & & & SBUF=c;
& & & & while(!TI);//等待发送完成信号(TI=1)出现
& & & & TI=0;& & & &
//串行口连续发送char型数组,遇到终止号/0将停止
void Uart1Sends(uchar *str)
& & & & while(*str!='\0')
& & & & & & & & SBUF=*
& & & & & & & & while(!TI);//等待发送完成信号(TI=1)出现
& & & & & & & & TI=0;
& & & & & & & & str++;
void Delay10ms()& & & & & & & & //@11.0592MHz
& & & & unsigned char i,
& & & & _nop_();
& & & & _nop_();
& & & & i = 108;
& & & & j = 144;
& & & & do
& & & & & & & & while (--j);
& & & & } while (--i);
void main()
& & & & & & & & AUXR &= 0xF7;& & & & & & & & //波特率不倍速
& & & & S2CON = 0x50;& & & & & & & & //8位数据,可变波特率
& & & & AUXR |= 0x04;& & & & & & & & //独立波特率发生器时钟为Fosc,即1T
& & & & BRT = 0xDC;& & & & & & & & //设定独立波特率发生器重装值
& & & & AUXR |= 0x10;& & & & & & & & //启动独立波特率发生器
& & & & SerialInti();
& & & & while(1)
& & & & & & & & Uart1Send(0xaa);
& & & & & & & & Delay10ms();
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
上面那个是改动后的
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
#include &REG51.H&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
//以下是板子上LED的配置,把Px_x改成自己对应的脚。
//以下是你的51单片机的晶振大小
#define FOSC_110592M
//#define FOSC_12M
//以下是开机后发送到手机的内容,发送的号码在程序中修改。
uchar sms_text[] = &abc123&;
//注意,无论接收到信号还是发送完信号,都会进中断服务程序的
/*初始化程序(必须使用,否则无法收发),次程序将会使用定时器1*/
void SerialInti()//初始化程序(必须使用,否则无法收发)
& & & & TMOD=0x20;//定时器1操作模式2:8位自动重载定时器
#ifdef FOSC_12M& & & & & & & && & //在这里根据晶振大小设置不同的数值初始化串口
& & & & TH1=0xf3;//装入初值,波特率2400
& & & & TL1=0xf3;& & & &
#else & & & &
& & & & TH1=0//装入初值,波特率9600
& & & & TL1=0
#endif //end of SOC_12M
& & & & TR1=1;//打开定时器
& & & & SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)
& & & & SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据
& & & & REN=1;//串行接收允许位(要先设置sm0sm1再开串行允许)
& & & & EA=1;//开总中断
& & & & ES=1;//开串行口中断& & & &
/*串行通讯中断,收发完成将进入该中断*/
void Serial_interrupt() interrupt 4
//& & & & a=SBUF;
& & & & P2=SBUF;
& & & & RI=0;//接收中断信号清零,表示将继续接收
//& & & & flag=1;//进入中断的标志符号
void Uart1Send(uchar c)
& & & & SBUF=c;
& & & & while(!TI);//等待发送完成信号(TI=1)出现
& & & & TI=0;& & & &
//串行口连续发送char型数组,遇到终止号/0将停止
void Uart1Sends(uchar *str)
& & & & while(*str!='\0')
& & & & & & & & SBUF=*
& & & & & & & & while(!TI);//等待发送完成信号(TI=1)出现
& & & & & & & & TI=0;
& & & & & & & & str++;
void Delay10ms()& & & & & & & & //@11.0592MHz
& & & & unsigned char i,
& & & & _nop_();
& & & & _nop_();
& & & & i = 108;
& & & & j = 144;
& & & & do
& & & & & & & & while (--j);
& & & & } while (--i);
void main()
& & & & SerialInti();
& & & & while(1)
& & & & & & & & Uart1Send(0xaa);
& & & & & & & & Delay10ms();
//这个是改动后的
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
我用示波器看的时候用定时器1的波形是对的,用独立的波特率发生器的话就没有波形
资深工程师, 积分 12038, 距离下一级还需 7962 积分
资深工程师, 积分 12038, 距离下一级还需 7962 积分
资深工程师, 积分 12038, 距离下一级还需 7962 积分
资深工程师, 积分 12038, 距离下一级还需 7962 积分
/*------------------------------------------------------------------*/
/* --- STC MCU International Limited -------------------------------*/
/* --- STC 1T Series MCU RC Demo -----------------------------------*/
/* --- Mobile: (86) -------------------------------------*/
/* --- Fax: 86-755- ----------------------------------------*/
/* --- Tel: 86-755- ----------------------------------------*/
/* --- Web:
-----------------------------------------*/
/* If you want to use the program or the program referenced in the&&*/
/* article, please specify in which data and procedures from STC& & */
/*------------------------------------------------------------------*/
& & & & 测试方法:
& & & & 根据您的主时钟和波特率修改下面的相关定义,编译后下载到MCU。
& & & & 通过串口助手向MCU发送数据,MCU收到后原样返回。
#include& & & & &reg51.h&
sfr& & & & AUXR = 0x8E;
sfr BRT& &= 0x9C;
#define& & & & & & & & BUF_LENTH& & & & 128& & & & & & & & //定义串口接收缓冲长度
unsigned char & & & & uart0_& & & & & & & & //写指针
unsigned char & & & & uart0_& & & & & & & & //读指针
unsigned char & & & & xdata RX0_Buffer[BUF_LENTH];& & & & //接收缓冲
bit& & & & & & & & B_TI;
void& & & & uart0_init(void);
/*************** 用户定义参数 *****************************/
#define MAIN_Fosc& & & & & & & & UL& & & & //define main clock
#define Baudrate0& & & & & & & & 9600UL& & & & & & & & //define the baudrate,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //12T mode: 600~115200 for 22.1184MHZ, 300~57600 for 11.0592MHZ
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //1T&&mode:
for 22.1184MHZ,
for 11.0592MHZ
/**********************************************************/
/****************** 编译器自动生成,用户请勿修改 ************************************/
#define BRT_Reload& & & & & & & & & & & & (256 - MAIN_Fosc / 16 / Baudrate0)& & & & & & & & //Calculate the timer1 reload value ar 1T mode
/**********************************************************/
void& & & & main(void)
& & & & uart0_init();
& & & & while(1)
& & & & & & & & if(uart0_rd != uart0_wr)& & & & //串口转发
& & & & & & & & {
& & & & & & & & & & & & B_TI = 0;
& & & & & & & & & & & & SBUF = RX0_Buffer[uart0_rd];
& & & & & & & & & & & & while(!B_TI)& & & & ;
& & & & & & & & & & & & B_TI = 0;
& & & & & & & & & & & & if(++uart0_rd &= BUF_LENTH)& & & & & & & & uart0_rd = 0;
& & & & & & & & }
void& & & & uart0_init(void)
& & & & PCON |= 0x80;& & & & & & & & //UART0 Double Rate Enable
& & & & SCON = 0x50;& & & & & & & & //UART0 set as 10bit , UART0 RX enable
& & & & AUXR |=&&0x01;& & & & & & & & //UART0 使用BRT
& & & & AUXR |=&&0x04;& & & & & & & & //BRT set as 1T mode
& & & & BRT = BRT_R
& & & & AUXR |=&&0x10;& & & & & & & & //start BRT& & & &
& & & & ES&&= 1;
& & & & EA = 1;
/**********************************************/
void UART0_RCV (void) interrupt 4
& & & & if(RI)
& & & & & & & & RI = 0;
& & & & & & & & RX0_Buffer[uart0_wr] = SBUF;
& & & & & & & & if(++uart0_wr &= BUF_LENTH)& & & & uart0_wr = 0;
& & & & if(TI)
& & & & & & & & TI = 0;
& & & & & & & & B_TI = 1;
扫描二维码,随时随地手机跟帖
精英会员奖章
等级类勋章
奔腾之江水
发帖类勋章
技术领袖奖章
人才类勋章
时间类勋章
您需要登录后才可以回帖
热门推荐 /3网站已改版,请使用新地址访问:
RC6-NEC NEC与RC-6红外遥控解码,已测试成功。单片机晶振为22.1184,COM口读取代码。 SCM 开发 243万源代码下载- www.pudn.com
&文件名称: RC6-NEC& & [
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 37 KB
&&上传时间:
&&下载次数: 79
&&提 供 者:
&详细说明:NEC与RC-6红外遥控解码,已测试成功。单片机晶振为22.1184,COM口读取代码。-NEC and decoding infrared remote control RC-6, have been tested successfully. MCU crystal is 22.1184, COM port to read codes.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&RC-6 NEC遥控解码\AT89X52.H&&................\INTRINS.H&&................\RC6&&................\RC6.c&&................\RC6.hex&&................\RC6.lnp&&................\RC6.LST&&................\RC6.M51&&................\RC6.OBJ&&................\RC6.Opt&&................\RC6.plg&&................\RC6.Uv2&&................\RC6_Opt.Bak&&................\RC6_Uv2.Bak&&................\STARTUP.A51&&................\STARTUP.LST&&................\STARTUP.OBJ&&RC-6 NEC遥控解码
&[]:不是源代码或资料
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站243万海量源码库中尽情搜索:
&[] - nec 红外协议实现代码。用中断方式检测解调后的时间段解码。
&[] - 红外接收,NEC码解码,51平台,使用定时器
&[] - 用89S52做的NEC码的红外发射程序,其中p10-p17口接按钮组成标准4*4键盘,发射后对应的按键解码为0-F
&[] - 用单片机实现红外接收发送的源码,是基于NEC协议的,包括发送,接收,学习,显示等功能
&[] - 38Khz遥控器红外线解码+1602液晶显示接收到的码。1、使用ATmega8的ICP模块进行红外解码,使用内部RC 8M晶振.2、红外遥控器发射芯片兼容DT9122,HT6222,TC6456B,SC6122,PT2222
&[] - 51红外源代码,NEC代码格式,很精确的代码,请放心使用。
&[] - ATTINY13制作的红外线接收器(attiny13+tsop1730+rs232)的Philips RC5 红外协议的代码,关于sony的代码,下次传上
&[] - nec 红外协议实现代码。用中断方式检测解调后的时间段解码。
&[] - ir decoder rc5, decodes sony/philips rc5 protocol
&[] - Philips
RC-5/6协议
红外编码格式17- Toshiba TC9148P&nbsp
经本人翻译为中文版本的,很好的开发档案,值得下载!

我要回帖

更多关于 单片机晶振频率 的文章

 

随机推荐