久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2652|回復: 9
收起左側(cè)

c51單片機利用定時器0產(chǎn)生38khz方波的問題

[復制鏈接]
ID:879924 發(fā)表于 2021-11-5 03:13 | 顯示全部樓層 |閱讀模式
  1. void khz(uchar aa)
  2. {
  3.     for(a=aa;a>0;a--)       //這個for語句可以得到準確的26.3波特率
  4.     {
  5.         out=0;
  6.         i=7;            
  7.         while(i>0) i--;    //38kHZ  
  8.         out=1;            
  9.     }
  10. }
復制代碼
調(diào)用 khz(116);即可產(chǎn)生38.5khz
但如果改成
  1. void khz()
  2. {
  3.     for(a=116;a>0;a--)   
  4.     {
  5.         out=0;
  6.         i=7;            
  7.         while(i>0) i--;   
  8.         out=1;            
  9.     }
  10. }
復制代碼

調(diào)用 khz();頻率就會變成50khz
請問兩組代碼為什么會出現(xiàn)這樣的差異?另外下面的一段代碼是像利用定時器生成38khz方波,環(huán)境是stc90c51rc+12mhz時鐘,定時器初始化后,這里是13us的溢出中斷,取反各一次后是26us,主函數(shù)沒有任何其他語句,按道理應該是獲得38KHZ的方波啊,但是示波器顯示是26KHZ,請大神明示~~~

  1. void Timer0_Routine(void) interrupt 1
  2. {
  3.         TL0=0xF3;
  4.         TH0=0xFF;                                                               
  5.         IR_OUT=~IR_OUT;
  6. }
復制代碼
回復

使用道具 舉報

ID:213173 發(fā)表于 2021-11-5 05:48 | 顯示全部樓層
輸出高速脈沖用定時器模式2比較合適。
  1. #include<reg52.h>

  2. sbit IR_OUT=P1^0;

  3. void Timer0Init(void)//13微秒@12.000MHz
  4. {
  5.         TMOD= 0x02;                //設(shè)置定時器模式
  6.         TL0 = 0xF3;                //設(shè)置定時初始值
  7.         TH0 = 0xF3;                //設(shè)置定時重載值
  8.         TR0 = 1;
  9.         EA  = 1;
  10.         ET0 = 1;
  11. }

  12. void main()
  13. {
  14.         Timer0Init();
  15.         while(1);
  16. }

  17. void Timer0_Routine(void) interrupt 1
  18. {
  19.         IR_OUT=~IR_OUT;
  20. }
復制代碼
回復

使用道具 舉報

ID:198543 發(fā)表于 2021-11-5 09:42 | 顯示全部樓層
本帖最后由 nbhmwj 于 2021-11-5 09:56 編輯

1.  38KHZ變成26KHZ的原因是響應中斷程序使用SJMP  #ADDRESS指令  需2個機器周期,進入中斷程序后,由于TL0=0xF3;  TH0=0xFF; 兩條指令需要2*2=4個機器周期,12M晶振,1個機器周期1us,故增加了6us,從而增中了脈沖的周期,故變成了26KHZ。
2.  可以調(diào)整程序?qū)R_OUT=~IR_OUT;移到第一位置,同時將TL0賦值0xF6

; .\T0int.SRC generated from: T0int.c
; COMPILER INVOKED BY:
;        d:\Keil_v4\C51\BIN\C51.EXE T0int.c BROWSE DEBUG OBJECTEXTEND SRC(.\T0int.SRC)

$NOMOD51

NAME        T0INT

P0        DATA        080H
P1        DATA        090H
P2        DATA        0A0H
P3        DATA        0B0H
T0        BIT        0B0H.4
AC        BIT        0D0H.6
T1        BIT        0B0H.5
T2        BIT        090H.0
EA        BIT        0A8H.7
IE        DATA        0A8H
EXF2        BIT        0C8H.6
RD        BIT        0B0H.7
ES        BIT        0A8H.4
IP        DATA        0B8H
RI        BIT        098H.0
INT0        BIT        0B0H.2
CY        BIT        0D0H.7
TI        BIT        098H.1
INT1        BIT        0B0H.3
RCAP2H        DATA        0CBH
PS        BIT        0B8H.4
SP        DATA        081H
T2EX        BIT        090H.1
OV        BIT        0D0H.2
RCAP2L        DATA        0CAH
C_T2        BIT        0C8H.1
WR        BIT        0B0H.6
RCLK        BIT        0C8H.5
TCLK        BIT        0C8H.4
SBUF        DATA        099H
PCON        DATA        087H
SCON        DATA        098H
TMOD        DATA        089H
TCON        DATA        088H
IE0        BIT        088H.1
IE1        BIT        088H.3
B        DATA        0F0H
CP_RL2        BIT        0C8H.0
ACC        DATA        0E0H
ET0        BIT        0A8H.1
ET1        BIT        0A8H.3
TF0        BIT        088H.5
ET2        BIT        0A8H.5
TF1        BIT        088H.7
TF2        BIT        0C8H.7
RB8        BIT        098H.2
TH0        DATA        08CH
EX0        BIT        0A8H.0
IT0        BIT        088H.0
TH1        DATA        08DH
TB8        BIT        098H.3
EX1        BIT        0A8H.2
IT1        BIT        088H.2
TH2        DATA        0CDH
P        BIT        0D0H.0
SM0        BIT        098H.7
TL0        DATA        08AH
SM1        BIT        098H.6
TL1        DATA        08BH
SM2        BIT        098H.5
TL2        DATA        0CCH
PT0        BIT        0B8H.1
PT1        BIT        0B8H.3
RS0        BIT        0D0H.3
PT2        BIT        0B8H.5
TR0        BIT        088H.4
RS1        BIT        0D0H.4
TR1        BIT        088H.6
TR2        BIT        0C8H.2
PX0        BIT        0B8H.0
PX1        BIT        0B8H.2
DPH        DATA        083H
DPL        DATA        082H
EXEN2        BIT        0C8H.3
REN        BIT        098H.4
T2CON        DATA        0C8H
RXD        BIT        0B0H.0
TXD        BIT        0B0H.1
IR_OUT        BIT        090H.0
F0        BIT        0D0H.5
PSW        DATA        0D0H
?PR?Timer0Init?T0INT SEGMENT CODE
?PR?main?T0INT       SEGMENT CODE
?PR?Timer0_Routine?T0INT                 SEGMENT CODE
        EXTRN        CODE (?C_STARTUP)
        PUBLIC        Timer0_Routine
        PUBLIC        main
        PUBLIC        Timer0Init
; #include<reg52.h>
;
; sbit IR_OUT=P1^0;
;
; void Timer0Init(void)//13微秒@12.000MHz

        RSEG  ?PR?Timer0Init?T0INT
Timer0Init:
                        ; SOURCE LINE # 5
; {
                        ; SOURCE LINE # 6
;        // TMOD= 0x02;                //設(shè)置定時器模式
;         TL0 = 0xF3;                //設(shè)置定時初始值
                        ; SOURCE LINE # 8
        MOV          TL0,#0F3H
;         TH0 = 0xFF;                //設(shè)置定時重載值
                        ; SOURCE LINE # 9
        MOV          TH0,#0FFH
;         TR0 = 1;
                        ; SOURCE LINE # 10
        SETB         TR0
;         EA  = 1;
                        ; SOURCE LINE # 11
        SETB         EA
;         ET0 = 1;
                        ; SOURCE LINE # 12
        SETB         ET0
; }
                        ; SOURCE LINE # 13
        RET         
; END OF Timer0Init

;
; void main()

        RSEG  ?PR?main?T0INT
main:
                        ; SOURCE LINE # 15
; {
                        ; SOURCE LINE # 16
;         Timer0Init();
                        ; SOURCE LINE # 17
        LCALL        Timer0Init
?C0002:
;         while(1);
                        ; SOURCE LINE # 18
        SJMP         ?C0002
; END OF main

CSEG        AT        0000BH
        LJMP        Timer0_Routine

; }
;
; void Timer0_Routine(void) interrupt 1

        RSEG  ?PR?Timer0_Routine?T0INT
        USING        0
Timer0_Routine:
                        ; SOURCE LINE # 21
; {
;         TL0=0xF3;
                        ; SOURCE LINE # 23
        MOV          TL0,#0F3H
;         TH0=0xFF;                                                               
                        ; SOURCE LINE # 24
        MOV          TH0,#0FFH
;         IR_OUT=~IR_OUT;
                        ; SOURCE LINE # 25
        CPL          IR_OUT
;                
; }                                                                ; SOURCE LINE # 27
        RETI        
; END OF Timer0_Routine

        END


回復

使用道具 舉報

ID:198543 發(fā)表于 2021-11-5 09:54 | 顯示全部樓層
本帖最后由 nbhmwj 于 2021-11-5 11:02 編輯

上一層樓已編緝修改完成。
回復

使用道具 舉報

ID:879924 發(fā)表于 2021-11-5 11:05 來自觸屏版 | 顯示全部樓層
wulin 發(fā)表于 2021-11-5 05:48
輸出高速脈沖用定時器模式2比較合適。

您好,換了模式2 還是那樣
回復

使用道具 舉報

ID:879924 發(fā)表于 2021-11-5 11:13 來自觸屏版 | 顯示全部樓層
nbhmwj 發(fā)表于 2021-11-5 09:42
1.  38KHZ變成26KHZ的原因是響應中斷程序使用SJMP  #ADDRESS指令  需2個機器周期,進入中斷程序后,由于TL0 ...

感謝您給了專業(yè)的解釋。匯編不是很懂。 后來我換成自動重裝模式2,中斷里只有IR_OUT=~IT_OUT 還是26khz。而且如果我改成F6,就會變成55.5khz。簡直要崩潰了。對了我的晶振顯示11.965mhz不是12mhz應該沒問題吧? 新手一枚,還請大神賜教
回復

使用道具 舉報

ID:624769 發(fā)表于 2021-11-5 13:58 | 顯示全部樓層
macboa 發(fā)表于 2021-11-5 11:13
感謝您給了專業(yè)的解釋。匯編不是很懂。 后來我換成自動重裝模式2,中斷里只有IR_OUT=~IT_OUT 還是26khz ...

單片機型號? 如果軟件延時,單片機的型號,直接影響,延時的時間。

按你代碼帶來的結(jié)果,初步判斷你是 STC 15系列單片機,

所以, void khz(uchar aa) 的話,編譯以后 是: DJNZ R7  計數(shù), 步進為4
void khz() 的話,編譯以后 是: DJNZ D8  計數(shù), 步進為5,  兩者比例關(guān)系差不多就是  4:5     基本吻合 38Khz :  50Khz

最后,除非你會玩匯編,不然要精確計時的話,還是老老實實用定時器吧。
回復

使用道具 舉報

ID:879924 發(fā)表于 2021-11-5 15:33 來自觸屏版 | 顯示全部樓層
188610329 發(fā)表于 2021-11-5 13:58
單片機型號? 如果軟件延時,單片機的型號,直接影響,延時的時間。

按你代碼帶來的結(jié)果,初步判斷你 ...

我是用的st90c51rc 然后晶振是11.0592mhz。快愁死我了
回復

使用道具 舉報

ID:879924 發(fā)表于 2021-11-5 15:40 | 顯示全部樓層
感覺51hei真好 很活躍。csdn問個問題好久都沒人回。
回復

使用道具 舉報

ID:624769 發(fā)表于 2021-11-5 15:57 | 顯示全部樓層
STC90C51RC  有T2定時器, 可以直接方波輸出,你試試那個吧。

另外,如果你開了 6T 模式, 11.0592 的晶振是會翻倍成: 22.1184 的。按你說的各種線索看,不排除這個可能,你最好確認一下。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一码二码三码在线 | 成人免费在线视频 | 日韩精品一区二区三区在线观看 | 日韩在线小视频 | 超碰在线免费公开 | 91精品麻豆日日躁夜夜躁 | a级大片免费观看 | 精品91久久 | 日本aaa视频 | 欧美精品1区| 国产亚洲精品久久久久久豆腐 | 九色在线视频 | 久久精品国产一区二区电影 | 91资源在线| 午夜一区| 色视频一区二区 | 久久亚洲国产 | 亚洲午夜av | 91精品国产乱码久久久久久久久 | 国产精品美女久久久久aⅴ国产馆 | 男女免费观看在线爽爽爽视频 | 国产小视频在线观看 | 中文字幕 在线观看 | 久久久久久毛片免费观看 | 91影片| 欧美区在线观看 | 91视在线国内在线播放酒店 | www.日本国产 | 日韩区 | 欧美日韩午夜精品 | 国产精品久久久久久久久免费软件 | 久草免费在线视频 | 激情五月婷婷综合 | 国产极品粉嫩美女呻吟在线看人 | 久久精品一 | 看a网站 | 亚洲一区二区三区在线播放 | 国产欧美日韩一区二区三区在线观看 | 久久久91精品国产一区二区三区 | 免费一区| 黄网免费看 |