『壹』 自帶PWM功能的STC單片機,在使用內部時鍾的前提下能否產生精度高的38KHz PWM信號
不可以,因為內部RC振盪隨著溫度變化,其振盪頻率是變化的,其實紅外線的載波38K不需要太精確
『貳』 如何使用單片機產生38KHz的載波,求原理及C語言簡單代碼,晶振11.0592,請高手指點。
f=38KHz 那麼周期T約等於26uS,如果這個載波是方波的話,那麼輸出高電平13uS,另外13uS輸出低電平。
你的晶振是11.0592MHz,那麼機器周期是近似為1uS。
所以隔13uS,對輸出口取反即可。
#include<reg51.h>
#include<intrins.h> //用於_nop_();指令
void main{
while(1){
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //13個空指令,每個空指令耗費1uS
P0^1=~P0^1;
}
}
『叄』 單片機產生38kHz信號的問題
首先,樓主的分析是正確的,確實是指令佔用了時間,而且這與軟體編譯時的優化有關。下面從理論上分析一下(事實其實如此)原因:
中斷產生的一瞬間,TH0和TL0都為0,但由於其定時計數並未停止,所以直到下一次重裝前TL0依舊在計數,也就是說直到TL0=(65536-13)%256執行後,計數值才被重裝。那麼這段時間有什麼情況發生呢:
1、如果程序中還使用了別的中斷:定時中斷產生後,單片機開始執行中斷服務程序。一般情況下,首先是要執行中斷入口0x000B處的跳轉指令,12M12T下跳轉指令LJMP等的執行周期為2us,重復一下,此時TL0和TH0已經為0了;然後執行TH0和TL0賦值指令,各需2us(匯編中:立即數賦值給直接地址),這就增加了6個us,所以事實上是13+6=19us取反一次,大約28KHz。
2、同上,但如果將TL0賦值語句放到TH0前,由於方式1下TH0TL1相當於一個INT型數據來計數的,TL0是低8位,所以事實上TL0被賦值後基本可以說被重裝,計數這時才恢復正常,由於TH0的賦值被放到後面,所以事實上就減少了2個us,即13+4=17,大約30KHz。
3、如果程序中的中斷只使用了這一個:那麼編譯器編譯時,就會將中斷程序從000BH開始放置,這樣就又少了一條跳轉指令的周期,時間上就變為13+2=15,大約33KHz。我想這應該屬於是樓主的實際情況。
所以,正如你所說,這種方式指令本身占據了時間,所以產生誤差不足為奇。這里關鍵是TL0重裝指令的位置。
解決的辦法無外乎兩種:
1、將初值中的13改成11,TL0重裝前提,減掉2us賦值時間。
2、採用方式2,初值設為256-13。由於方式2初值的重裝是自動的,不佔指令時間,所以很准確。
不過照理樓主現在應該檢測到的是30K才對,為什麼會測到35K我不敢妄斷,也許是其它誤差,比如頻率計、晶振等、也許是編譯器原因,需要看一下實際的匯編指令才能確定。
『肆』 單片機,硬體,紅外遙控編碼問題。38KHz是幹嘛用的
學習型遙控常用的載波頻率為38kHz,這是由發射端編碼晶元所使用的455kHz晶振來決定的。
在信號傳輸的過程中,並不是將信號直接進行傳輸,而是將信號負載到一個固定頻率的波上,這個過程稱為載入,這樣的一個固定頻率的波稱為載波頻率。
嚴格的講,就是把一個較低的信號頻率調制到一個相對較高的頻率上去,這被低頻調制的較高頻率就叫載波頻率,也叫基頻。
『伍』 單片機自己產生38khz載波發射紅外是不是不行啊.
行是行的不過用51單片機產生38khz頻率那麼中斷的頻率是相當高的,中1秒內要產生70000次左右的中斷,這樣來單片機就沒時間去處理其它任務了,建議用外部電路產生
『陸』 38K載波單片機軟體設計 C語言 ,如何將定時器產生的38K的載波和信號調制起來
單片機的調制一般都是數字調制,一般就是2FSK。可以有二種方法。。
第一:把待調制信數字信號和載波接到一個二輸入與門上。當調制信號是一時,與門開啟,載波可以發送出去。當調制信號是0時,與門關閉,載波不發送。。
第二:產生二種不同的方波(可以是引導碼不同,或者載波頻率不同)。。調制信號1和0分別對應其中的一種即可。。
希望能幫到你。。
再看看別人怎麼說的。
『柒』 51單片機產生38K占空1:3載波
12M的晶振不能產生准確的38K,只能是38.462K。
才8us的周期,不用定時器也行
LOOP:
CPL P3^1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P3^1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LJMP LOOP:
『捌』 單片機輸出一個38KHZ的信號之後,如何這個38KHz的高電平上在進行調制一次(頻率可為100Hz或200Hz。
你這個是紅外的編碼吧,直接在產生38KHZ那個引腳輸出你要調制的信號即可
就是同一個引腳同時發出38KHZ和包含信息的頻率(你的100HZ或200HZ)
『玖』 51單片機怎麼產生38khz方波
用定時器就可以產生38K的方波,比如
#include<reg51.h>
sbit pluse=P1^0;
void t0isr() interrupt 1
{
pluse=~pluse;
}
main()
{
TMOD=0x02;
TH0=256-13;
TL0=256-13;
ET0=1;
TR0=1;
EA=1;
while(1);
}