[問題] 8051的一些小問題(修正)

看板ASM (組合語言)作者 (瘋狂米虫)時間15年前 (2010/03/21 22:29), 編輯推噓6(6014)
留言20則, 7人參與, 最新討論串1/5 (看更多)
最近開始在學習8051,現在有一些疑惑 希望有人可以幫我解答 感謝 前提 我的PORT一直在讀取一個變數 現在要輸出到LCD上 這個我都已經寫好了 但是怕誤差我想加上一個平均的寫法 假設15次平均後在輸出一次 問題一 考慮到溢位 我是想說把第一次的先存起來丟旁邊 再利用第二次輸入的與第一次輸入相減 第三次輸入的與第一次輸入相減...最後累加差值/15 在與第一次相加 可得平均數 可是我看了一下減法的程式跑法 SUBB 如果是負號他是利用CY來標記 那如果我把他們的差值移動到其他地方會不會系統就搞混?(是失真嗎?意思是差值變了 就是差值得正負在移動後會不會亂掉 我同學說會可是我感覺應該不會才對@@" 問題二 ADD,ADDC有人可以具體的描述他們的差異嗎 有方法可以讓我直接把數值拆開然後累加嗎 可是我考慮到累積15次...還是會有溢位的可能性 所以有人有更好的方法嗎? 能看到這行..真的感謝各位的幫忙.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.93.19

03/21 22:34, , 1F
問題二。用兩個記憶區,加一次判斷是否大於某值就進位
03/21 22:34, 1F

03/21 22:43, , 2F
判斷如果C的話我知道用if寫 組合語言判斷溢位 有好的
03/21 22:43, 2F

03/21 22:43, , 3F
寫法嗎?
03/21 22:43, 3F

03/22 00:00, , 4F
你可以先判斷大小 大的放一邊 小的放一邊
03/22 00:00, 4F

03/22 00:00, , 5F
要加減的時候再統一取正負
03/22 00:00, 5F

03/22 00:01, , 6F
比如說 i2>i1就取i2-i1放到正的暫存器
03/22 00:01, 6F

03/22 00:02, , 7F
i3<i1就取i1-i3放到負的暫存器
03/22 00:02, 7F

03/22 00:02, , 8F
這邊說的正負 是指後面相加減的時候你取的正負號
03/22 00:02, 8F

03/22 00:05, , 9F
add addc差別是一個溢位後會有旗標 簡單講就是表示進位
03/22 00:05, 9F

03/22 00:06, , 10F
就好比兩個個位數相加超過十會進一位一樣
03/22 00:06, 10F

03/22 00:06, , 11F
如果要把兩個8bit暫存器合起來變成一個16bit暫存器
03/22 00:06, 11F

03/22 00:07, , 12F
你就需要那個進位旗標 詳細作法應該書上都會有
03/22 00:07, 12F

03/22 00:07, , 13F
8051的書找不到就去找8086的看看
03/22 00:07, 13F

03/22 01:45, , 14F
問題一. 你可以把(新值*14+舊值)/15 放入舊值
03/22 01:45, 14F

03/22 13:59, , 15F
你會用8-bit指令做出16-bit加法嗎?
03/22 13:59, 15F

03/22 14:01, , 16F
平均還是累加後再除比較好做, 最好取2的冪次方個再平均
03/22 14:01, 16F

03/22 14:02, , 17F
如除16可用右移4 bit完成
03/22 14:02, 17F
感謝大家給我的想法 目前是利用 時脈一直讀取 A B C D E...一直跑N個 讀取A之後先存到一邊 B判斷 B>A B-A 得差值存到一邊(正) B<A A-B 得差值存到一邊(數值為正,但意義上應該是負) C D E..等等同B的計算方法 差值正的累加得到X 差值負的累加得到Y 再次判斷差值X>Y (X-Y)/N+A X<Y A-(Y-X)/N 比大小是利用SUBB看CY是1或0來跑 利用JC決定放哪邊 有關2的N次方我之前有想過 可是我不會16BIT的加減法 有人要教我一下嗎 感覺利用16BIT的寫法會比較快一點 之前我是想說如果取2的一次方的數量 RR1次 2的二次方的數量 RR2次 2的三次方的數量 RR3次來計算平均 可是我只知道用ADD來計算 可是這樣會使A溢位 也想過利用類似邏設的半加法的方法..可是這樣要寫很多迴圈 16BIT是利用這樣寫嗎..? 應該不是吧... ※ 編輯: eternal1879 來自: 59.125.93.19 (03/22 16:09)

03/22 17:16, , 18F
印象中溢不溢位用組語來寫的話,可以靠STATUS來判斷 ?
03/22 17:16, 18F

03/23 01:56, , 19F
你讀取的是什麼東西? 如果是A/D
03/23 01:56, 19F

03/23 01:56, , 20F
已經自動平均了 只要把讀取頻率調低 自然會平均多一點
03/23 01:56, 20F
文章代碼(AID): #1BfYr92d (ASM)
文章代碼(AID): #1BfYr92d (ASM)