SOGO論壇
標題:
8051進位旗標程式問題(急) 拜託
[列印本頁]
作者:
奇幻人
時間:
2011-6-13 21:42:02
標題:
8051進位旗標程式問題(急) 拜託
為甚麼如果只是單純0~99循環,就不用加另PSW.7 PSW.6為0,而這個0~60循環程式就要?
MAIN: MOV TMOD,#00000001B
MOV TH0,#01100011B
MOV TL0,#11000000B
MOV IE,#10000010B
MOV A,#0
DA A
MOV P2,A
MOV R0,#25
SETB TCON.4
LOOP: AJMP LOOP
TIMER0: MOV TH0,#01100011B
MOV TL0,#11000000B
SETB TCON.4
DJNZ R0,CONT
INC A
CJNE A,#5AH,CONT1 >>0~99無這行
MOV A,#0 >>0~99無這行
CONT1: CLR PSW.6 >知道是另進位旗標為0,但在這個程式裡的作用在哪 >>0~99無這行
CLR PSW.7 >作用在哪,同上 >>0~99無這行
DA A
MOV P2,A
MOV R0,#25
CONT: RETI
謝謝
作者:
ws110402
時間:
2011-6-15 00:35:12
請問您確定是0-60循環計數嗎? 看起來比較像是0-90的耶
作者:
Jackchen00
時間:
2011-6-15 09:21:26
大大
關鍵就是在 DA A這個指令
因為0~99循環時
99+1=9Ah
經過DA A轉換以後A的值變成00,Carry=1
所以沒有必要將A歸零
如果是0~59
當計數到59的下一次A的值是5Ah
經過DA A轉換以後A的值變成60而不是00
所以要讓他歸零就必須加上
CJNE A,#5AH,CONT1
MOV A,#0
去比較A的值如果=5Ah時就要將A歸零
至於
CONT1: CLR PSW.6
CLR PSW.7
DA A
我認為是有錯誤的
應該改成
CLR PSW.6
CLR PSW.7
CONT1: DA A
因為當計數到5A將A歸零後才有必要去清除C和AC
如果不清除C和AC只將A歸零的話
則DA A以後A的值會變成06
至於為什麼請自行研究DA A這個指令的用法
或是你也可以這樣寫
INC A
DA A
CJNE A,#60H,CONT1
MOV A,#0
CONT1: MOV P2,A
MOV R0,#25
CONT: RETI
先轉換以後再做比較
《 本帖最後由
Jackchen00
於 2011-6-15 10:04 編輯 》
作者:
Jackchen00
時間:
2011-6-21 20:58:03
這位開版大大
我實在不知你的急是急在哪裡
如果真的急的話
早該看了也早該給個回應了
至今給你解答都一星期了
到底對你有沒幫助
連回應一下或說個謝字也有那麼難嗎?
那以後這裡還有誰願意去幫人解答呢?
作者:
奇幻人
時間:
2011-6-30 17:09:04
標題:
回覆 #4 Jackchen00 的帖子
抱歉,忘了回覆了,謝謝你的說明,看完你的說明我大概懂了
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM