单片机编程题基础复习题Word文档格式.docx
《单片机编程题基础复习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机编程题基础复习题Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
![单片机编程题基础复习题Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/23/2d4aa2a2-5cc5-4715-b0fc-92296bce8aa2/2d4aa2a2-5cc5-4715-b0fc-92296bce8aa21.gif)
RET
SCAN:
MOVP1,#0FH;
;
行线送“0”
MOVA,P1;
;
读取列线值
ANLA,#0FH
MOVR4,A;
列号信息
CJNEA,#0FH,NEXT1;
若列线均为“1”则无键按下
SJMPNEXT3
NEXT1:
ACALLD20MS;
有键按下,去除抖动
MOVP1,#0F0H;
列线送0
ANLA,#0F0H
MOVR5,A;
行号信息
CJNEA,#0F0H,KCODE;
若有键按下则键处理
NEXT3:
CLRF0;
无键按下,F0为0
KCODE:
SETBF0;
有键按下,F0为1
MOVA,R4;
计算列值
CJNEA,#0EH,NEXT4
MOVR4,#0
SJMPNEXT5
NEXT4:
CJNEA,#0DH,NEXT6
MOVR4,#1
SJMPNEXT5
NEXT6:
CJNEA,#0BH,NEXT7
MOVR4,#2
SJMPNEXT5
NEXT7:
MOVR4,#3
NEXT5:
MOVA,R5;
计算行值
CJNEA,#0E0H,NEXT8
MOVR5,#0
SJMPNEXT11
NEXT8:
CJNEA,#0D0H,NEXT10
MOVR5,#1
NEXT10:
CJNEA,#0B0H,NEXT9
MOVR5,#2
SJMPNEXT11
NEXT9:
MOVR5,#3
NEXT11:
MOVA,R5
MOVB,#4
MULAB
ADDA,R4
MOV30H,A;
键值放在30H单元
D20MS:
MOVR6,#50
DL2:
MOVR7,#100
DJNZR7,$
DJNZR6,DL2
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,
77H,7CH,39H,5EH,79H,71H
END
2、设计包含两个按键S1、S2和一位数码管的系统。
当S1按下时数码管显示的数增一,当增到9后,按下S1按键数值回到0;
当S2按下时数码管显示的数减一,当减到0后,按下S2按键数值回到9。
LJMPMAIN
MOVR5,#0
LCALLKEY
MOVA,R5
MOVCA,@A+DPTR
SJMPLOOP
KEY:
JBP1.0,KEY2
LCALLDELAY
JBP1.0,KEY2
JNBP1.0,$
INCR5
CJNER5,#10,NET
NET:
RET
KEY2:
JBP1.1,NET
JBP1.1,NET
JNBP1.1,$
DECR5
CJNER5,#0FFH,NET
MOVR5,#9
DELAY:
MOVR6,#50
MOVR7,#100
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,
6FH,77H,7CH,39H,5EH,79H,71H
3、设计60秒倒计时电路,完成程序设计,要求用定时器定时产生1秒的时间。
ORG0000H
LJMPMAIN
ORG000BH
LJMPT0INT
ORG0030H
MOVR5,#59;
存放秒数
MOVR4,#20
MOVTMOD,#01H
MOVTH0,#3CH;
定时50ms
MOVTL0,#0B0H
SETBEA
SETBET0
SETBTR0
LCALLDISPLAY
SJMPLOOP
T0INT:
DJNZR4,EXT
DECR5
CJNER5,#0FFH,EXT
EXT:
RETI
MOVA,R5
MOVB,#10
DIVAB
MOV40H,A
MOV41H,B
SETBP3.1
CLRP3.0
MOVA,40H
MOVCA,@A+DPTR
MOVP2,A
LCALLDELAY
SETBP3.0
CLRP3.1
MOVA,41H
MOVR6,#50
DJNZR7,$
DJNZR6,DL2
4、用定时器定时产生周期为1MS,占空比为60%的矩形波。
MOVR4,#10
MOVTMOD,#02H
MOVTH0,#156;
定时100US
MOVTL0,#156
SJMP$
DJNZR4,NEXT
MOVR4,#10
SETBP3.7
RETI
NEXT:
CJNER4,#4,EXT
CLRP3.7
END
5、完成八盏发光二极管流水点亮的电路及程序设计,每个发光二极管点亮0.5秒。
MOVR4,#0FEH
MOVP1,R4
MOVA,R4
RLA
MOVR4,A
MOVR5,#50
DL1:
DJNZR5,DL1
6、用动态显示法完成8位数码管的显示,显示内容为“20100618”。
ORG0000H
ORG0030H
MOV30H,#2
MOV31H,#0
MOV32H,#1
MOV33H,#0
MOV34H,#0
MOV35H,#6
MOV36H,#1
MOV37H,#8
MOVR0,#30H
MOVR2,#0FEH
LOP1:
MOVP3,R2
MOVA,@R0
INCR0
MOVA,R2
MOVR2,A
CJNER0,#38H,LOP1
MOVR6,#50
MOVR7,#50
DJNZR7,$
DJNZR6,DL2
7、简单编程题:
1)编程查找内部RAM的30H一50H单元中是否有0FFH这一数。
若查找到,则将52H单元置为01H,若未找到,则将51H单元置为00H。
FIND:
MOVR0,#30H
NET2:
CJNEA,#0FFH,NET
MOV52H,#01H
INCR0
CJNER0,#51H,NET2
MOV51H,#00H
2)两个字符串分别存放在首地址为42H和52H的内部RAM中,字符串长度放在41H单元,请编程比较两个字符串。
若相等,则把数字00H送40H单元,否则把0FFH送40H单元。
COMP:
MOVR7,41H
MOVR0,#42H
MOVR1,#52H
MOV30H,A
MOVA,@R1
CJNEA,30H,NET
INCR1
DJNZR7,LOOP
MOV40H,#00H
MOV40H,#0FFH
3)在外部RAM首地址为TABLE的数据表中有10个字节数据,请编程将每个字节的最高位无条件地置1。
ZHIGA:
MOVDPTR,#TABLE
MOVR7,#10
MOVXA,@DPTR
ORLA,#80H
MOVX@DPTR,A
INCDPTR
4)在内部RAM的41H单元开始存有一组单字节无符号数,数据长度为10,要求找出最小数存入40H单元。
FIND:
MOV40H,41H;
40H中存放最小的数
CJNEA,40H,NET
JNCNET2
MOV40H,A;
当A小于40H单元的数时,小的数存入40H中
INCR0
CJNER0,#4BH,LOOP
5)请编写能完成16位二进制数67D3H减去23F9H运算的程序,计算结果的高8位和低8位分别放在内部数据存储器的30H和31H单元。
CAL:
MOVA,#0D3H
CLRC
SUBBA,#0F9H
MOV31H,A
MOVA,#67H
SUBBA,#23H
MOV30H,A
6)存放在外部数据存储器2000H单元的自变量X为一无符号数,函数Y存放在内部数据存储器30H单元中,请编写满足如下关系的程序:
MOVDPTR,#2000H
CJNEA,#40,NET
MOVB,#5
MULAB
MOV30H,A