全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2157
推到 Plurk!
推到 Facebook!

使用89c51+74LS47+七段顯示器 做上下數計時器問題

尚未結案
mylove04
一般會員


發表:1
回覆:1
積分:0
註冊:2013-01-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-01-08 09:51:50 IP:211.72.xxx.xxx 訂閱
使用二進制補數的方式做減法成下數

七段顯示器顯示0~9 ABCDEF

似乎是16進制

如何讓他只顯示0~9 就是轉換成十進制

需要怎麼改

是74LS47的問題嗎

因為程式查無減法轉換BCD的指令

sos~~~~~~~~~~~~~~~~~~


------------------------------以下是小弟的程式---------------------------
ORG 0000H
CLR A ;清除a
ADD A,#153 ;將a加至153
MOV R0,A ;將a值放入R0暫存器

LOOP:
MOV P1,A ;將a值顯示於P1
JNB P3.7,$ ;3.7未按開路,等待
ACALL DELAY ;開路(延遲)
JB P3.7,$ ;3.7按下閉路,等待
ACALL DELAY ;閉路(延遲)

CLR C ;清除CY值
MOV R0,A ;將a值放入R0暫存器(被減數)
MOV A,#1 ;減數
CPL A ;將減數反向
INC A ;減數 1
ADD A,R0 ;被減數 反向後減數
MOV R0,A ;等於答案
MOV P1,A ;顯示P1
AJMP LOOP ;跳躍回主程式

;
DELAY: MOV R6,#100
DL: MOV R7,#200
DJNZ R7,$
DJNZ R6,DL
RET
;
END


編輯記錄
mylove04 重新編輯於 2013-01-08 06:41:09, 註解 無‧
 重新編輯於 2013-01-09 19:06:25, 註解 無‧
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-01-08 13:04:51 IP:111.252.xxx.xxx 未訂閱
 8位元數字系統裡,

加255 等於 減1


8051是8位元的單晶片,ACC&暫存器是8位元的,
(在51執行的程式裡,一般使用的數據資料也是8位元的.)
在8位元暫存器的 算術運算中,
(加255)和(減1)算出來的結果8位元數字會是一樣的,差在進位旗標不同而已.
編輯記錄
kib72377 重新編輯於 2013-01-08 18:15:35, 註解 無‧
mylove04
一般會員


發表:1
回覆:1
積分:0
註冊:2013-01-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-01-08 21:28:17 IP:114.44.xxx.xxx 訂閱

===================引 用 kib72377 文 章===================
8位元數字系統裡,

加255 等於 減1


不好意思,可以請k大講詳細一點,小弟對這塊還不是很懂,不知道大大為何提到8位元數字 是8進制的意思嗎
編輯記錄
mylove04 重新編輯於 2013-01-08 06:30:36, 註解 無‧
handystudio
高階會員


發表:1
回覆:81
積分:106
註冊:2005-03-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2013-03-16 01:46:27 IP:1.163.xxx.xxx 未訂閱
你需仔細看一下 DA A 這個指令

DA A調整當累積器A先前與變數相加的8位元結果,累積器A與變數都必須是BCD碼的格式。ADD及ADDC指令後都可使用此指令。
如果累積器A位元3~0的值大於9(xxxx-1010 ~ xxxx-1111),或是AC旗號等於1,累積器A會在低4位元(low nibble)進行加6使成BCD範圍,若此內部加值使低4位元產生進位,進位值將被加到高4位元(high nibble),若高4位元仍產生進位,則進位旗號會被設定。
如果進位旗號已經設定,或高4位元(high nibble)大於9(1010-xxxx ~ 1111-ffff),高4位元會被自動加6使成BCD範圍,當然若高4位元加6後產生進位,進位旗號會為1,否則為0。因此,進位旗號指示兩個BCD變數相加後的合,是否大於99,來處理準確的多位數十進制加法運算。OV不會被影響。
所有發生的所有動作都在一個機器週期裡,實質上,此指令是加00H、06H、60H、66H到累積器A執行十進制轉換,當然要依據累積器A的值及PSW的條件而定。
註:DA A不能對累積器A內容,直接做十六進制轉十進制的轉換,須在運算指令(如ADD、ADDC)後使用,也不能使用於十進制減法。

===================引 用 mylove04 文 章===================
使用二進制補數的方式做減法成下數

七段顯示器顯示0~9 ABCDEF

似乎是16進制

如何讓他只顯示0~9 就是轉換成十進制

需要怎麼改

是74LS47的問題嗎

因為程式查無減法轉換BCD的指令

sos~~~~~~~~~~~~~~~~~~


------------------------------以下是小弟的程式---------------------------
ORG 0000H
CLR A ;清除a
ADD A,#153 ;將a加至153
MOV R0,A ;將a值放入R0暫存器

LOOP:
MOV P1,A ;將a值顯示於P1
JNB P3.7,$ ;3.7未按開路,等待
ACALL DELAY ;開路(延遲)
JB P3.7,$ ;3.7按下閉路,等待
ACALL DELAY ;閉路(延遲)

CLR C ;清除CY值
MOV R0,A ;將a值放入R0暫存器(被減數)
MOV A,#1 ;減數
CPL A ;將減數反向
INC A ;減數 1
ADD A,R0 ;被減數 反向後減數
MOV R0,A ;等於答案
MOV P1,A ;顯示P1
AJMP LOOP ;跳躍回主程式

;
DELAY: MOV R6,#100
DL: MOV R7,#200
DJNZ R7,$
DJNZ R6,DL
RET
;
END


------
歡迎光臨 輕巧工作室
網站 http://www.handystudio.tw
控制電路板客製設計、製作交貨
8051專題製作/專題客製
系統時間:2024-11-21 19:43:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!