单片机汇编语言编程:对累加器A中数据进行开方运算
扫描二维码
随时随地手机看文章
===================================================
1. 编程对累加器A中数据进行开方运算,结果仍存储于A中。
A中数据进行开平方,如下即可:
;
MOV R2, #255
LP1:
INC R2
SETB C
SUBB A, R2
JC EXIT
SUBB A, R2
JNC LP1
EXIT:
MOV A, R2
RET
;应用《减奇数法》来开平方。
===================================================
2. 请编写将片内RAM区中30H~3AH单元中十一个字节数据按从大到小规律排序的程序。
如下即可:
SORT: ;排序子程序
MOV R6, #10 ;11个数字,比较10次
S1:
MOV R0, #30H ;起始地址
MOV A, R6
MOV R7, A
CLR PSW.5 ;交换标志清零
S2:
MOV B, @R0 ;取出前一个数
INC R0
MOV A, @R0 ;取出后一个数
CJNE A, B, S3 ;后-前
S3:
JNC N_JH ;够减就不用交换
MOV @R0, B ;交换存放
DEC R0
MOV @R0, A
INC R0
SETB PSW.5 ;设立交换标志位
N_JH:
DJNZ R7, S2
JNB PSW.5, S_END ;没有交换过,就结束
DJNZ R6, S1
S_END:
RET
===================================================
3. 请编写将片内RAM区30H~3AH单元中十一个已从大到小排序的字节数据去除1个最大值、
去除1个最小值后再取平均值的数值滤波程序。
若平均值大于等于100,则置7FH单元为全1,否则将该单元清零。
去除1个最大值、去除1个最小值后再取平均值,如下即可:
;
;(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 ;循环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
提问者评价:谢谢!
做而论道 |十七级采纳率51%
===================================================
4. 请编写程序,将片外RAM区1000H单元开始的30个短整数按正、负数分开存储,负数从30H单元开始存放,非负数从40H单元开始存放。
短整数,按照单字节数据来处理,如下即可:
;
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. 请编写统计片外数据存储器区2000H单元开始的256单元中ASCII码字符’A’的个数的程序,统计数据存放在片内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. 请编写程序,在片外扩展数据存储器区2000H单元开始的32个单元中寻找最大值,存放到片内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
===================================================
呵呵,一口气编写了六个小程序。