單片機(jī)匯編語言編程:對累加器A中數(shù)據(jù)進(jìn)行開方運(yùn)算
===================================================
1. 編程對累加器A中數(shù)據(jù)進(jìn)行開方運(yùn)算,結(jié)果仍存儲于A中。?
A中數(shù)據(jù)進(jìn)行開平方,如下即可:
;
? ? MOV ? R2, #255
LP1:
? ? INC ? R2
? ? SETB ?C
? ? SUBB ?A, R2
? ? JC ? ?EXIT
? ? SUBB ?A, R2
? ? JNC ? LP1
EXIT:
? ? MOV ? A, R2
? ? RET
;應(yīng)用《減奇數(shù)法》來開平方。
===================================================
2. 請編寫將片內(nèi)RAM區(qū)中30H~3AH單元中十一個(gè)字節(jié)數(shù)據(jù)按從大到小規(guī)律排序的程序。
如下即可:
SORT: ? ? ? ? ? ? ? ? ? ?;排序子程序
? ? MOV ?R6, #10 ? ? ? ? ;11個(gè)數(shù)字,比較10次
S1:
? ? MOV ?R0, #30H ? ? ? ?;起始地址
? ? MOV ?A, R6
? ? MOV ?R7, A
? ? CLR ?PSW.5 ? ? ? ? ? ;交換標(biāo)志清零
S2:
? ? MOV ?B, @R0 ? ? ? ? ?;取出前一個(gè)數(shù)
? ? INC ?R0
? ? MOV ?A, @R0 ? ? ? ? ?;取出后一個(gè)數(shù)
? ? CJNE A, B, S3 ? ? ? ?;后-前
S3:
? ? JNC ?N_JH ? ? ? ? ? ?;夠減就不用交換
? ? MOV ?@R0, B ? ? ? ? ?;交換存放
? ? DEC ?R0
? ? MOV ?@R0, A
? ? INC ?R0
? ? SETB PSW.5 ? ? ? ? ? ;設(shè)立交換標(biāo)志位
N_JH:
? ? DJNZ R7, S2
? ? JNB ?PSW.5, S_END ? ?;沒有交換過,就結(jié)束
? ? DJNZ R6, S1
S_END:
? ? RET
===================================================
3. 請編寫將片內(nèi)RAM區(qū)30H~3AH單元中十一個(gè)已從大到小排序的字節(jié)數(shù)據(jù)去除1個(gè)最大值、
去除1個(gè)最小值后再取平均值的數(shù)值濾波程序。
若平均值大于等于100,則置7FH單元為全1,否則將該單元清零。? ? ? ?
去除1個(gè)最大值、去除1個(gè)最小值后再取平均值,如下即可:
;
;(31H)+(32H)+...+(39H)--->R2R3
;
? ? MOV ? R0, #31H
? ? MOV ? R2, #0
? ? MOV ? R3, #0
LP1:
? ? MOV ? A, @R0
? ? ADD ? A, R3
? ? MOV ? R3, A
? ? JNC ? NEXT
? ? INC ? R2 ? ? ? ?;和在R2R3
NEXT:
? ? INC ? R0
? ? CJNE ?R0, #3AH, LP1 ;循環(huán)9次
;--------------------------------
;取平均值,即除以9:
;R2R3 / 9 ---> R4
? ? MOV ? R4, #255
LP2:
? ? INC ? R4
? ? CLR ? C
? ? MOV ? A, R3
? ? SUBB ?A, #9
? ? MOV ? R3, A
? ? MOV ? A, R2
? ? SUBB ?A, #0
? ? MOV ? R2, A
? ? JNC ? LP2
;--------------------------------
;若平均值大于等于100,則置7FH單元為全1,否則將該單元清零:
? ? MOV ? 7FH, #255
? ? CJNE ?R4, #100, $ + 3
? ? JNC ? EXIT
? ? INC ? 7FH
EXIT:
? ? RET
提問者評價(jià):謝謝!
做而論道 ? ?|十七級采納率51%
===================================================
4. 請編寫程序,將片外RAM區(qū)1000H單元開始的30個(gè)短整數(shù)按正、負(fù)數(shù)分開存儲,負(fù)數(shù)從30H單元開始存放,非負(fù)數(shù)從40H單元開始存放。? ? ? ? ??
短整數(shù),按照單字節(jié)數(shù)據(jù)來處理,如下即可:
;
? ? MOV ? DPTR, #1000H
? ? MOV ? R0, #30H
? ? MOV ? R1, #40H
? ? MOV ? R2, #30
LOOP:
? ? MOVX ?A, @DPTR
? ? JNB ? ACC.7, ZH
? ? MOV ? @R0, A
? ? INC ? R0
? ? SJMP ?NEXT
ZH:
? ? MOV ? @R1, A
? ? INC ? R1
NEXT:
? ? INC ? DPTR
? ? DJNZ ?R2, LOOP
? ? RET
===================================================
5. 請編寫統(tǒng)計(jì)片外數(shù)據(jù)存儲器區(qū)2000H單元開始的256單元中ASCII碼字符’A’的個(gè)數(shù)的程序,統(tǒng)計(jì)數(shù)據(jù)存放在片內(nèi)RAM的6FH單元中。? ?
如下即可:
;
? ? MOV ? DPTR, #2000H
? ? MOV ? R2, #0
? ? MOV ? 6FH, #0
LOOP:
? ? MOVX ?A, @DPTR
? ? CJNE ?A, #'A', NEXT
? ? INC ? 6FH
NEXT:
? ? INC ? DPTR
? ? DJNZ ?R2, LOOP
? ? RET
6. 請編寫程序,在片外擴(kuò)展數(shù)據(jù)存儲器區(qū)2000H單元開始的32個(gè)單元中尋找最大值,存放到片內(nèi)RAM的68H單元中。? ? ??
如下即可:
;
? ? MOV ? DPTR, #2000H
? ? MOV ? R2, #32
? ? MOV ? 68H, #0
LOOP:
? ? MOVX ?A, @DPTR
? ? CJNE ?A, 68H, $ + 3
? ? JC ? ?NEXT
? ? MOV ? 68H, A
NEXT:
? ? INC ? DPTR
? ? DJNZ ?R2, LOOP
? ? RET
===================================================
呵呵,一口氣編寫了六個(gè)小程序。