MCU C8051F時序10us怎麼用?

發布 科技 2024-06-13
17個回答
  1. 匿名使用者2024-01-29

    總結一下:1:晶振的問題和初始值設定,這樓已經說得很清楚了,微控制器的51個機週期=12個晶振頻率(s),比如晶振頻率是12MHz,那麼機器週期是1us,從你設定的暫存器的初始值來看,晶振頻率應該是6MHz, 首先檢查它是否正確。

    2:程式問題,本應是主要問題,樓上的人沒有提到。 10us是很短的時間,而你用的6MHz晶振,乙個機器週期佔2us,在你的中斷中程式執行所需的時間已經超過了10us,應該是15us。

    也就是說,你還沒有完成中斷程式,下乙個中斷已經到了,你就要回到中斷功能的開始。 這絕對不是你想要的結果。

    3:還是程式問題,為什麼你沒有看到你在中斷函式中清除中斷溢位標誌? 應新增 tf1=0。

    解決方案:1:在硬體方面,提高晶體振盪器的頻率。

    2:在軟體方面,簡化程式中的中斷功能。

  2. 匿名使用者2024-01-28

    12m MCU每台機器有10us的週期,10個機器週期有10us,可以粗略推測。 當然,打斷時間也不是不可避免的。

  3. 匿名使用者2024-01-27

    簡單的 12MHz 晶體振盪器時序為 1 個機器週期為 2us。 這裡選擇了12MHz。

    xu:mov r0,#05h;1 個機器週期。

    djnz r0,xu;2 個機器迴圈;

    RET總計2*5=10us(這是乙個典型的延遲程式)在中斷時一般由th1 th0、th1 th0決定。 就像那傢伙下樓時提出的清單一樣。

  4. 匿名使用者2024-01-26

    定時器實際上是微控制器內部時鐘的計數器,計數器每個週期加1,所以在使用定時器功能時,必須向定時器支付初始值,即先寫th0tl0的值(如下圖),寫完初始值後,定時器功能的計數器上滿是數字, 也就是說,它達到65536後溢位,所以乙個定時的過程是65536-初始值。

    介於兩者之間的數字。 表示的時鐘週期,計數已滿且溢位,為了產生中斷,需要編寫乙個中斷服務子程式,該子程式如下:void

    timer0()

    interrrupt

    xInterrupt 服務子例程還給出計時器計數器的初始 thtl 值。

    我執行下乙個計數並理解它。 樓上的那個沒有寫中斷來選擇計時器的工作方式。 哎呀,媽媽。

    我已經筋疲力盡了。 void

    main()

    th0=(65536-50000)/256;

    tl0=(65536-50000)%256;定時器為0初始值,定時為50ms

    時序高達 1000 毫秒

    ea=1;開啟總中斷數。

    et0=1;允許定時器 0 中斷。

    tr0=1;開啟定時器 0

    while(1)

    voidtimer0()

    interrrupt

    th0=(65536-50000)/256;

    tl0=(65536-50000)%256;

  5. 匿名使用者2024-01-25

    th2=(65535-U時序時間x(12MHz微控制器頻率)) 256;

    tl2=(65535-你的定時時間x(12MHz微控制器頻率))%256;

    如果減去的數字為負數,則無法完成計時,需要多次計時以累積時間。

  6. 匿名使用者2024-01-24

    很簡單,當你需要更改時序值時,只需編寫乙個子函式並重新分配計時器的初始值即可。 時間的演算法:例如,12m晶體振盪器在1個機器週期的那一邊是1 12,所以1us=12個機器週期固體5us=5*12

  7. 匿名使用者2024-01-23

    當 e812 轉換為十進位時,它是 59410,(65536-59410)*4 = 1ms,因此中斷中的計數累計 1000 次。

    初始值計算方法(65536-x)*系統時鐘分頻系統時鐘=定時時間(單位us)。

  8. 匿名使用者2024-01-22

    該程式應使用定時器來驅動LED閃光燈,sysclk定時器預分頻器1000的第一行這是計算1ms需要多少時鐘週期,其中定義定時器預分頻器48是在ckcon暫存器中設定分頻,1000為1ms。

    第二行 AUX1 是觸發 LED 所需的時鐘週期數,即 1ms 所需的時鐘週期數乘以該時鐘週期數。

    led_toggle_rate。

    第三行是為了方便將值直接分配給給定計時器。

  9. 匿名使用者2024-01-21

    這在門控方面很好。

    org 0000h

    ljmp main

    org 0030h

    main:mov r0,#50h

    mov tmod .#09h

    mov th0,#00h

    mov tl0,#00h

    setb tr0

    kk:jnb ,$

    jb , mov a,tl0

    da amov @r0,a

    inc r0

    mov a,th0

    da amov @r0,a

    inc r0

    sjmp kk

    END主要採用門控檢測... 程式很簡單... 如果您有任何問題,請與我聯絡。

  10. 匿名使用者2024-01-20

    請註明程式語言,具體要求,好嗎?

  11. 匿名使用者2024-01-19

    系統時鐘是。

    那麼每定時器為1,那麼5ms就是n=5000(1次,定時器的初始值(如果是16位)是65536-n

    外部晶體振盪器模型非常準確,程式編寫完成後,用示波器觀察,然後進行微調。

  12. 匿名使用者2024-01-18

    微控制器定時時間的計算公式=計數值(定時值)*機器週期=計數值(定時值)*12晶振頻率。

    以上兩個等號是等價的,因為,微控制器的機器週期=12秒晶體振盪器頻率,所以這兩個公式是通用的。

    完成基本操作所需的時間稱為機器週期。 通常,機器週期由多個 S 週期(狀態週期)組成。 80C51系列MCU,乙個機器週期由6個S週期組成。

    由 2 個時鐘週期組成的 S 週期(狀態週期)。

    指令週期由多個機器週期組成。 根據指令的不同,所需的機器迴圈次數會有所不同。

  13. 匿名使用者2024-01-17

    首先,lz這個所謂的計數值的含義並不明確,不知道是初始值,還是溢位需要的值,如果理解為後者,那麼普通的51微控制器,可以認為上面2個等號是正確的。

    但是,大約有 51 個 MCU 可以使用 1t 機械週期,即 1 個機械週期 = 1 個時鐘週期(晶體振盪器週期),因此並非所有機械週期都等於 12 個晶體頻率。

  14. 匿名使用者2024-01-16

    學習微控制器還是離不開教科書的,這些問題,教科書裡的盜賊一目了然。

  15. 匿名使用者2024-01-15

    基本上,只要將接收訊號的高電平和低電平分開定時,兩者之和就是週期,然後就可以計算出占空比。

    一般來說,計時中使用的點數需要非常密集,才能獲得更準確的結果。 換句話說,時間越精確,結果就越精確。

    例如,如果將 1us 和 10us 用於相同的脈衝持續時間,則誤差之間的差異非常大。

  16. 匿名使用者2024-01-14

    你需要知道占空比,你可以把引數傳遞給它,通過乙個普通的IO,模擬IIC或SPI就可以把引數傳遞過來,8051很難直接識別占空比,也可以用差分電路,把它轉換成直流訊號,然後AD取樣,間接判斷占空比。

  17. 匿名使用者2024-01-13

    我遇到過這個問題,可以這樣解決,用電容捕獲單元,不占用微控制器定時器,在中斷程式中對高低電平進行定時,計算占空比,非常簡單。

相關回答
12個回答2024-06-13

1.將C語言編譯成程式設計師支援的語言格式,如常用的bin,或十六進製等格型。 >>>More

12個回答2024-06-13

LCD1602,兩者都顯示兩條線。

您無需執行任何特殊操作即可顯示兩行。 >>>More

5個回答2024-06-13

這是乙個只點亮 P1 埠的程式。

#include >>>More

5個回答2024-06-13

微控制器應用廣泛,如智慧型電表、實時工業控制、通訊裝置、導航系統、家用電器等。 >>>More

20個回答2024-06-13

宋禪你好,房東,騰訊地圖非常好用**離線地圖包後,還可以開啟零交通地圖模型實現離線位置搜尋、公交行車路線規劃、步行導航、行車語音導航等功能,非常完美,非常方正的場塵非常精準,你也會喜歡的。