单片机原理编程题文档格式.docx
- 文档编号:20872758
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:39
- 大小:203KB
单片机原理编程题文档格式.docx
《单片机原理编程题文档格式.docx》由会员分享,可在线阅读,更多相关《单片机原理编程题文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
4.设有100个有符号数,连续存放在以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数并分别存放在30H、31H、32H单元中。
MOV30H,#0
MOV31H,#0
MOV32H,#0
MOVDPTR,#2000H
MOVR1,#100
L4:
MOVXA,@DPTR
INCDPTR
CJNEA,#0,L1
INC32H
SJMPL2
L2:
JCL3
INC30H
L3:
INC31H
DJNZR1,L4
SJMP$
5.编程将内部数据存储器20H~24H单元压缩的BCD码转换成ASCⅡ存放在于25H开始的单元。
注意压缩的BCD码为一个字节占两位BCD码。
ORG0000H
MOVR7,#05H;
R7为转换字节数
MOVR0,#20H;
R0为源操作数地址
MOVR1,#25H;
R1为目的操作数地址
NE:
MOVA,@R0
ANLA,#0FH;
先取低位BCD码
ADDA,#30H;
将BCD码转换成ASCⅡ码
MOV@R1,A
INCR1
MOVA,@R0
ANLA,#0F0H;
取高位BCD码
SWAPA;
半字节交换
将高位BCD码转换成ASCⅡ码
INCR0
DJNZR7,NE
编程题,另外加上第4章课件上的例子。
三、程序解释(每小题5分,共10分)
1.
ORG0200H
MOVDPTR,#1000H
MOVR0,#20H
LOOP:
MOV@R0,A
INCR0
CJNER0,#71H,LOOP
SJMP$
程序功能:
把片外数据存储器1000H~1050H中的内容传送到片内数据存储器20H~70H中。
2.ORG0200H
MOVA,R0
ANLA,#0FH
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVR0,A
TAB:
DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H;
0~9的ASCⅡ码
DB41H,42H,43H,44H,45H,46H;
A~F的ASCⅡ码
利用查表的方法实现RO中的十六进制数转换为ASCⅡ码
对每小题程序中划线的指令含义(或指令作用)进行解释,并说明程序的作用。
*********************************
1.程序解释
ORG100H
MOVA,R0;
R0的内容送A
ANLA,#0FH
MOVR1,A
MOVA,R0
SWAPA;
A的内容高低4位交换
MOVR2,A
SJMP$;
等待
END
该程序的作用是:
将原R0中数据按照高低4位分成两个字节,低位字节保存在R1中,高位字节保存到R2中。
2.程序解释
ORG30H
MOVR0,#data1;
data1送R0
MOVR1,#data2
MOVR2,#2
CLRC
LOOP:
MOVA,@R0
SUBBA,@R1;
(A)-(C)-((R1))→A
MOV@R0,A
INCR0
INCR1
DJNZR2,LOOP;
(R2)-1不等于零,跳LOOP处
SJMP$
将data1中的双字节数据减去data2中的双字节数据,结果
保存到data1中
3.程序解释
ORG30H
VARDATA30H
FUNCDATA31H
MOVA,VAR;
30单元的内容送A
JZDONE;
A为零转移
JNBACC.7,POSI;
A的最高位为0(正数)转移
MOVA,#0FFH;
提示:
0FFH表示-1
SJMPDONE
POSI:
MOVA,#01H
DONE:
MOVFUNC,A
SJMP$
判断30H单元中的内容,结果放在31H单元中。
大于0放1,
小于0放-1,等于零放0。
4.程序解释
ORG100H
MOVA,R3
RLA;
A左循环一位(即乘2)
MOVDPTR,#BRTAB;
绝对转移地址表起始地址送DPTR
JMP@A+DPTR;
(PC)=(A)+(DPTR)
……
BRTAB:
AJMPROUT000
AJMPROUT001
AJMPROUT002
AJMPROUT127
本程序完成128分支转移操作,根据R3中的数值转移到
相应的128个分支程序中。
5.程序解释
ORG0030H
MOVR0,#22H;
立即数22H送R0
MOV@R0,#00H
INCR0;
R0中的内容加1
MOV@R0,#01H
INCR0
MOV@R0,#02H;
02H送24H单元
向单片机内部RAM的22H,23H,24H单元分别送
数据00,01,02。
6.程序解释
MOVA,20H
MOVB,21H
DIVAB;
A除以B
MOV31H,A;
商送30H单元
IMOV31H,B;
余数送31H单元
将20H单元中有一个二进制数除以21H单元中二进制数,商保存到30H单元,余数保存到31H。
7.程序解释
CHENGJIDATA1000H
GRADADATA20H
GRADBDATA21H
MOVGRADA,#00H
MOVGRADB,#00H
MOVR2,#100
MOVDPTR,#CHENGJI;
1000H送DPTR
MOVXA,@DPTR
CJNEA,#60,LOOP1
LOOP1:
JNCNEXT1
INCGRADB;
21H单元的内容加1
SJMPNEXT
NEXT1:
INCGRADA
NEXT:
INCDPTR
DJNZR2,LOOP;
(R2)-1→R2不为零,转移
该程序的作用是本程序完成对100个数(如100个学生成绩)的过滤统计,成绩在60以上的学生统计到GRADA,<
60的学生统计到GRADB。
8.程序解释
LENDATA20H
SUMDATA21H
BLOCKDATA22H
CLRA;
A清0
MOVR2,LEN
MOVR1,#BLOCK
ADDA,@R1;
(A)+((R1))→A
CHECK:
DJNZR2,LOOP;
LEN个单元未加完,继续
MOVSUM,A
完成BLOCK单元开始的LEN单元中数据个数的累加,累加结果保存到SUM单元中。
9.程序解释
XXDATA40H
YYDATA41H
MOVA,XX
JZDONE
MOVR0,#0FFH;
0FFH表示-1
JNBACC.7,NEG;
若A<
0,则转向NEG
MOVR0,#01H;
01送R0
NEG:
MOVA,R0
MOVYY,A;
(A)送41H单元
SJMP$
END
判断40H单元中的内容,结果放在41H单元中。
小于0放-1,等于0放0。
10.程序解释
ONEDATA30H
TWODATA31H;
TWO地址定义为31H
MAXDATA32H
CLRC;
C清零
MOVA,ONE
SUBBA,TWO;
(A)-(31H)结果送A
JNCXMAX
YMAX:
MOVA,TWO
SJMPDONE
XMAX:
MOVMAX,A
本程序完成ONE和TWO的两个单元中的数的比较,大数存入
MAX单元中。
11.程序解释
BLOCK1DATA20H
BLOCK2DATA40H
MOVR0,#BLOCK1
MOVR1,#BLOCK2
MOVR2,#03
MOVA,@R0;
被加数送A
ADDCA,@R1;
带进位加法
MOV@R0,A;
和送(R0)
INCR1
DJNZR2,LOOP1
内部RAM中BLOCK1(20H)开始的三字节数与BLOCK2(40H)开始的两个三字节数相加,和数存放到BLOCK1开始的单元。
12.程序解释
SHIFT:
MOVDPTR,#TABJ
MOVA,R2
RLA;
A乘2
ADDA,R2
JMP@A+DPTR;
跳转到(A)+(DPTR)→PC
TABJ:
LJMPPRG0;
跳转到PRG0
LJMPPRG1
……
LJMPPRGN
根据内部RAM中R2数据转向不同的子程序,R2=0转PRG0,R2=1转PRG1,…R2=N转PRGN
13.程序解释
START:
CLRA
MOVR2,#10
MOVR1,#21H;
21H送R1
ADDA,@R1;
INCR1
DJNZR2,NEXT;
未加完,跳转
MOV22H,A
完成21H单元开始的10个数据块的累加,结果保存到22H单元。
14.程序解释
LENDATA20H
MAXDATA21H
ADDRDATA30H
MOVMAX,#00H
MOVR0,#ADDR
MOVA,@R0
CJNEA,MAX,NEXT1;
(A)与(MAX)比较,不等去NEXT
JCNEXT;
C=1去NEXT
MOVMAX,A
INCR0;
R0内容加1
DJNZLEN,LOOP
内部RAM中ADDR(30H)开始的x个数据的比较,将最大的数字送MAX单元。
x由LEN(20H)单元给出。
15.程序解释
MOVA,R0
ANLA,#0FH;
0FH与A相与,结果送A
MOVDPTR,#ASCTAB
MOVCA,@A+DPTR;
查表
MOVR0,A;
查表结果存入R0
ASCTAB:
DB‘0’,‘1’,‘2’,‘3’,‘4’
DB‘5’,‘6’,‘7’,‘8’,‘9’
DB‘A’,‘B’,‘C’,‘D’,‘E’,‘F’
将R0中低4位的0~F的十六进制数据转换成ASCTAB中的编码存放到R0中。
16.程序解释
MERG:
MOVXA,@R0;
读片外RAM第一字节
SWAPA;
高低4位相互交换
MOVB,A
MOVXA,@R0
ORLA,B;
A或B,结果送A
DECR0
MOVX@R0,A
将R0指向的两个字节的低4位和并为一个字节,保存到原R0指向的存储单元。
17.程序解释
MOVDPTR,#DTATAB
MOVA,R4;
(R4)→A
ADDA,DPL;
(DPL)+(A)→A
MOVDPL,A
CLRA;
清A
ADDCA,DPH
MOVDPH,A
CLRA
MOVCA,@A+DPTR
MOVR5,A
RET
DTATAB:
DB……;
元素表格,高字节在前
DB……
根据R4中的内容(元素序号)在DTATAB表格中查表,将查表得到的数据存入R5中。
18.程序解释
MOVA,R0
ACALLSQR;
调用子程SQR
MOVR2,A
MOVA,R1
ACALLSQR
ADDA,R2;
(R2)+(A)→A
SQR:
ADDA,#01H
MOVCA,@A+PC;
查平方表
SQRTAB:
DB0,1,4,9,16;
平方表
DB25,36,49,64,81
将R0和R1中的两个个位数进行平方元算,然后相加,和存入R2中。
19.程序解释
MOVR2,#0AH
MOVR0,#50H
CLRA
(A)→(R0)
INCR0
(R2)-1不等于0,跳转
RET;
子程序返回
END
将50H~59H单元置0
20.程序解释
CONT:
MOVR0,#10;
10送R0
MOV31H,#00H
MOVR1,#01H
CLOP:
MOVA,R1
CLRC
RLCA;
乘2
ADDA,31H;
(A)+(31H)结果送A
MOV31H,A
INCR1
DJNZR0,CLOP
RET
将1~10十个数乘2后再累加,结果送31H单元。
21.程序解释
DLAY:
MOVR7,#02H;
02H送R7
DL:
MOVR6,#0FFH
DL1:
DJNZR6,DL1;
(R6)-1不为零转移。
DJNZR7,DL
END;
程序结束伪指令
利用R6,R7实现双循环延时子程序
22.程序解释
MATHDATA1000H
PASSDATA20H
NOPASSDATA21H
MOVPASS,#00H
MOVNOPASS,#00H
MOVR2,#0C8H
MOVDPTR,#MATH
MOVXA,@DPTR;
片外单元((DPTR))→A
CJNEA,#60,LOOP1;
(A)不等于60转移
JNCNEXT1
INCNOPASS
SJMPNEXT2
INCPASS;
PASS单元内容加1
NEXT2:
INCDPTR
DJNZR2,LOOP
完成1000H开始的200(C8H)个数的过滤统计,在60及以上的统计到PASS,<
60的到NOPASS。
23.程序解释
CLEAN:
MOVDPTR,#1000H;
设置数据区首地址
MOVR2,#51H
CLRA
CLOOP:
MOVX@DPTR,A;
0→(DPTR)
INCDPTR
DJNZR2,CLOOP;
R2-1不为零转移
将外部RAM1000H~1050H单元的内容清零。
24.程序解释
DMOV:
MOVDPTR,#2000H
MOVR2,#00H
DLOOP:
MOVXA,@DPTR;
设置源数据区首地址
MOVDPH,#30H;
置目的数据区高8位地址
MOVX@DPTR,A
MOVDPH,#20H
INCDPTR;
指向下一个数据单元
DJNZR2,DLOOP
将2000H~20FFH的数据块传送到3000H~30FFH单元
25.程序解释
LOK1:
MOV21H,0
MOVR2,#08H;
置统计次数
MOVA,20H
RLCA;
A的内容带进位作循环
JNCLP1
INC21H
LP1:
DJNZR2,LOOP;
次数未完继续
求20H单元数据中”1”的个数,并将统计结果存入21H。
26.程序解释
SUMDATA31H
BLOCKDATA33H
CLRC
MOVSUM,A
MOVSUM+1,A
MOVR2,#10
MOVR1,#BLOCK;
33H送R1
MOVA,SUM
ADDA,@R1;
(A)+((R1))→A
MOVA,SUM+1
ADDCA,0;
加进位位到高字节
INCR1
DJNZR2,LOOP
完成BLOCK开始的10个字节数据的累加,结果(双字节)保存到(SUM+1)(SUM)。
27.程序解释
ORG0000H
SJMPMAIN;
跳转到MAIN
ORG0003H
………..
ORG0030H
Main:
……;
主程序
SUBINT0:
……
RETI;
INT0中断返回
SUB_T0:
SUB_INT1:
SUB_T1:
SUB_UART:
8031/8051系统程序框架,包括主程序及全部中断服务程序框架。
28.程序解释
TB:
MOVA,R2
ADDA,R2
MOVR3,A
ADDA,#6
MOVCA,@A+PC;
查第一字节
XCHA,R3;
交换A,R3内容,保存在R3
ADDA,#3
MOVCA,@A+PC
MOVR4,A
TAB:
DW1520,3721,……
DW……
根据R2内容为索引,在TAB检索数据,检索结果存放到R3R4中。
(TAB中内容为双字节数据)
29.程序解释
DATLENDATA21H
SEACH:
MOVR0,#30H;
30H送R0
MOV20H,#0FFH
SLOP:
MOVA,@R0
CJNEA,20H,NEXT;
A与20H单元内容比较
JNCSLP1;
(A)大,跳转
MOV20H,A
SLP1:
DJNZDATLEN,SLOP
将30H开始的DATLEN个数据中最小的数搜出,保存到20H单元。
30.程序解释
ORG100H
DATAXDATA10H
DATAYDATA11H
CLRC;
清C
MOVA,DATAX
RLCA;
A左循环
JNCPOSI
SJMPDONE
MOVA,#01H
MOVDATAY,A;
(A)送DATAY
判断10H单元的内容,结果送11单元,大于等于零时送1,小于零时送零。
31.程序解释
CJNEA,#3AH,NEXT1;
(A)与3AH比较
JNCERR
CJNEA,#30H
JCERR;
有借位,跳转
SUBBA,#30H;
转换ASCII码为十进制数字
ERR:
MOVA,#0FFH
MOVR0,A
完成将R0中十进制数字0~9的ASCII码值转换为十进制值,结果存放到R0。
32.程序解释
CONP:
MOVDPTR,#8000H;
置外RAM数据区首地址
MOVR0,#20H
MOVA,@R0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 编程