Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

? 發問時間: 電腦與網際網路程式設計 · 1 0 年前

8051 timer interrupts的問題

Write a program to create a square wave of T = 160 ms on pin P2.2 while at the same time the 8051 is sending out 55H and AAH to P1 continuously.

ORG0000H

LJMPMAIN

ORG001BH

LJMPISR_T1

ORG0030H

MAIN:MOVTMOD,#10H

MOV A,#55H

MOVP1,A

MOVR3,#32

AGAIN:MOVTL1,#00H

MOVTH1,#12H

MOVIE,#88H

SETBTR1

BACK:JNBTF1,BACK

CLRTR1

CLRTF1

DJNZ R3,AGAIN

ISR_T1:

CPL P2.2

CPLA

MOVP1,A

RETI

END

請問我這樣寫delay對嗎?還有沒有其他要修正的?

請教8051高手

已更新項目:

這我編譯器0error 而且T=160ms [ 65536-(EE00H) ]*1.085 *32 不是這樣嗎..不然你寫來看看..

2 個已更新項目:

不對!是組譯= =

3 個已更新項目:

我改成

MOVTL1,#00H

MOVTH1,#0EEH

這樣跑起來很像@@

4 個已更新項目:

求救冷太陽

請問改成這樣對嗎?

http://crystal87825.myweb.hinet.net/test.txt

2 個解答

評分
  • 1 0 年前
    最佳解答

    1.請先參考另一題問答, 瞭解 TIMER 計數值的計算:

    http://tw.knowledge.yahoo.com/question/question?qi...

    2.你所指的那一個程式碼, 問題的內容不同, 當然就不是你要的. 但你可以參考其 TIMER1 處理, 以下我修改了你的程式碼供作參考:

    ISR_T1:

    MOV TL1,#B0H ;

    MOV TH1,#3CH ; 在此是舉例, 請依實際的頻率計算 40ms 代入

    DJNZ COUNT,NEXT

    MOV COUNT,#4 ; 40 x 4 = 160ms

    CPL P2.2

    CPL A

    MOV P1,A

    NEXT:

    RETI

    3.下列程式碼在此無作用, 可以試著以 JMP $ 取代, 然後試試看.

    BACK: JNB TF1,BACK

    CLR TR1

    CLR TF1

    DJNZ R3,AGAIN

  • 1 0 年前

    不對, 連題目都沒對上, T=160ms 在哪邊?

    當 R3 = 0 之後呢??

    這連編譯都不過了, 還談啥流程?

    沒有 震盪器頻率 就沒有時間, 這是基礎常識

還有問題?馬上發問,尋求解答。