stc89c52单片机利用定时器0模式2产生38khz发射红外信号,不能达到38khz,

最后你是怎么解决的

第1个回答  2012-07-20
STC89c52单片机上是12MHZ的晶振对吧,1/12MHZ计数一次,现在是1/38KHZ发射一次信号,定时器0要装65535-(12000000/38000)的计数值
中断处理也是要时间的所以可以将初值装大一些本回答被网友采纳
第2个回答  2012-07-20
很简单的的,你的程序有问题,主要是中断程序,因为你的中断程序太长了,时间来不及,希望能帮到你呵呵追问

哦,好的谢谢!

追答

呵呵

来自:求助得到的回答
第2个回答  2012-07-20
我的方法是定时13uS,刚好是38KHz频率换算周期的一半,以这个为基本单位循环I/O取反就可以了

单片机产生38kHz信号的问题
1、如果程序中还使用了别的中断:定时中断产生后,单片机开始执行中断服务程序。一般情况下,首先是要执行中断入口0x000B处的跳转指令,12M12T下跳转指令LJMP等的执行周期为2us,重复一下,此时TL0和TH0已经为0了;然后执行TH0和TL0赋值指令,各需2us(汇编中:立即数赋值给直接地址),这就增加了6个...

单片机 智能小车 课程设计
方案二:采用红外线避障,利用单片机来产生38KHz信号对红外线发射管进行调制发射,发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出TTL电平。外界对红外信号的干扰比较小,且易于实现,价格也比较便宜,故采用方案二。 红外线发射接受电路原理图如图2所示。 采用红外线避障方法,利用一管发射...

单片机红外发射信号的问题(怎么让单片机发射一个频率的红外波呢?能不...
【1】通常一体化红外接收头,都是固定频率的,如常用的38KHz调制,这样可以提高抗干扰能力,以滤掉环境的红外光。【2】因此红外发射管,应按照接收头频率,调制发射38KHz。【3】按键按下后,再次按您所述的频率再次调制。【4】实现方法:a、按键发射机,开双定时器。一个调制38KHz,一个根据按键产生...

单片机产生38khz方波,怎么做可以让一体化接头很好的识别,并且距离能达 ...
首先,单片机产生方波。可以通过程序实现,用定时器产生76K中断,然后某个引脚非操作 然后,一体化接头,是要做超声波吧,网上买个超声波的模块吧,自己做也可以 最后达到6m,还是要硬件功能实现的好,当然买一个最方便,如果想自己动手,可以去多看看模电的运算放大电路怎么来实现信号放大。

单片机做红外遥控器的问题求教。。。
最简单的就是通过定时器在P3.2脚输出38K载波P3.1直接输出串口数据 接收用3只脚的红外接收头

用51单片机产生38kHz脉冲的程序怎么写
11.0592M,产生38kHz脉冲将有误差。11059200\/12=921600\/38000=24.3=23 static void timer0_isr(void) interrupt 1 using 0 \/\/中断函数 { TR0=0;TL0=0xe9;TH0=0xff;TR0=1;timer0_tick++;if(timer0_tick++==23){ timer0_tick=0;} if (timer0_tick==0){ P3_7=~P3_7;} } stat...

stc89c52单片机红外线接收器与单片机引脚怎么连接!
当 CX20106A 接收到40KHz的信号时,会在第7脚产生一个低电平下降脉冲,这个信号可以接到单片机的外部中断引脚作为中断信号输入。1脚:超声信号输入端,该脚的输入阻抗约为40kΩ。2脚:该脚与地之间连接RC串联网络,它们是负反馈串联网络的一个组成部分,改变它们的数值能改变前置放大器的增益和频率特性...

关于单片机 发射红外线遥控电视机疑问?
红外遥控插排 遥控器的编码方式也是NES。几个遥控器挺麻烦的,所以我就用STC11L04做了一个4和1遥控器,很方便的!STC1205A32S2比传统51单片机有所改进,有很多扩展功能,只要你将它的各项功能大概了解,上面的程序只是小问题了。不建议:使用中断产生38K载波。推免驱动发射二极管。用软件或者PWM产生38...

用455khz的晶振怎么产生38khz的载波?
晶振的振荡频率除以12分频。为什么会起振,这要看高频书的自激振荡了,首先并联谐振有1个作用就是选择频率,频率是更具f=1\/(2根号(L*(C0*CP)\/(C0+CP))C0是内部与电感串联的电容,CP是内部与电感并联,外部与晶振并联的,电容并联(也就是外部电容与内部并联电容之和),并联谐振最终目的就是...

用51单片机制作学习型红外遥控器的原理
TL0=0; \/\/定时器清0 TR0=1; \/\/开启定时器T0 while(IR==1) \/\/如果是高电平就等待 ; TR0=0; \/\/关闭定时器T0 HighTime=TH0*256+TL0; \/\/保存高电平宽度 if((LowTime<370)||(LowTime>640)) return 0; \/\/如果低电平长度不在合理范围,则认为出错,停止解码 if((HighTime>420)&&(HighTime<620...

相似回答
大家正在搜