单片机程序Word格式文档下载.docx

上传人:b****5 文档编号:21066837 上传时间:2023-01-27 格式:DOCX 页数:19 大小:20.93KB
下载 相关 举报
单片机程序Word格式文档下载.docx_第1页
第1页 / 共19页
单片机程序Word格式文档下载.docx_第2页
第2页 / 共19页
单片机程序Word格式文档下载.docx_第3页
第3页 / 共19页
单片机程序Word格式文档下载.docx_第4页
第4页 / 共19页
单片机程序Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机程序Word格式文档下载.docx

《单片机程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机程序Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

单片机程序Word格式文档下载.docx

存高字节BCD

RET

4将存于外部RAM8000H开始的50H数据传送0010H的区域,请编程实现。

MOVDPTR,#8000H

MOVR0,#10H

MOVR2,#50H

LOOP:

MOVXA,@DPTR;

取数

MOVX@R0,A;

存数

1NCDPTR

DJNZR2,LOOP

5请将片外RAM20H-25H单元清零。

MOVR0,#20H

MOVR7,#06H

CLRA

MOVX@R0,A

INCR0

DJNZR7,LOOP

6请将ROM3000H单元内容送R7

MOVDPTR,#3000H

MOVCA,@A+DPTR

MOVR7,A

7编程题

CYADPTR片外01H片外00H片外8000H

001H8000H0lH00H86H

MOVDPTR,#8000H;

加数单元地址送DPTR

MOVXA,@DPTR;

取加数之一

ADDA,20H;

两数相加

MOVR0,#00H;

和值的低位送片外00H单元

MOVX@R0,A

CLRA;

计算和值的高位

ADDCA,#00H

MOVX@R0,A;

高位送片外01H单元

RET

8有一长度为10字节的字符串存放在8031单片机内部RAM中,其首地址为40H。

要求将该字符串中每一个字符加偶校验位。

(以调用子程序的方法来实现。

源程序如下:

ORG1000H

MOVR0,#40H

MOVR7,#10

NEXT:

MOVA,@R0

ACALLSEPA

MOV@R0,A

INCR0

DJNZR7,NEXT

SJMP$

SEPA:

ADDA,#00H

JNBPSW.0,SRET

ORLA,#80H

SRET:

9从内部RAM30H单元开始,有10个单字节数据。

试编一个程序,把其中的正数、负数分别送40H和50H开始的内部RAM单元。

(10分)

MOVR0,#30H

MOVR1,#40H

MOVA,#50H

LOOP:

MOV20H,@R0

JB20H.7,FSHU

ZSHU:

MOV@R1,20H

INCR1

SJMPNEXT

FSHU:

XCHA,R1

MOV@R1,A

INCA

DJNZR7,LOOP

END

10将内部RAM20H为首的16个单元的8位无符号数排序写出程序,并作适当注释

SORT:

MOVR0,#20H

MOVR7,#07H

CLRTR0;

交换标志位复位

MOV2BH,A

MOV2AH,@R0

CLRC

SUBBA,@R0;

比较前后两个数

JCNEXT;

MOV@R0,2BH

DECR0

MOV@R0,2AH

SETBTR0;

置交换标志位有效

DJNZR7,LOOP

JBTR0,SORT;

若交换标志位有效,继续进行

HERE:

END

11将字节地址30H~3FH单元的内容逐一取出减1,然后再放回原处,如果取出的内容为00H,则不要减1,仍将0放回原处。

MOVR7,#10H

MOVR1,#30H

CJNE@R1,#00H,NEXT

MOV@R1,#00H

SJMPNEXT1

NEXT:

DEC@R1

NEXT1:

INCR1

DJNZR7,LOOP

12数据块传送,将RAM从30H开始的连续32个单元的内容传递给片内RAM从60H开始的连续32个单元。

MOVR7,#20H

MOVR0,#30H

MOVR1,#60H

MOVA,@R0

MOVR1,A

DJNZR7,LOOP

13将4个单字节数放片内30H~~33H,它们求和结果放在片内40H,41H单元。

MOVR7,#04H

MOVR0,30H

CLRA

MOV41H,A

ADDA,@R0

JNCNEXT

INC41H

DJNZ:

R7,LOOP

MOV40H,A

SJMP$

END

14RAM中40H单元内存有一个十六进制数,把这个数转换为BCD码的十进制数,BCD码的十位和个位放在累加器A中,百位放在R2中。

ORG2200H

MOVA,40H

MOVB,#64H

DIVAB

MOVR2,A

MOVA,#0AH

XCHA,B

ORLA,B

15编程序将片内40H-46H单元内容的高4位清零,保持低4位不变。

MOVR7,#07H

MOVA,@R0

ANLA,#0FH

MOV@R0,A

DJNZR7,LOOP

16编写一程序实现将1000H单元开始的100个单元的数据转移到2000H开始的单元中。

(8分)

ORG0000H

MOVDPTR,#1000H;

给源数据块地址指针DPTR赋初值

MOVP2,#20H;

给目的数据块地址指针P2和R0赋初值

MOVR0,#00H

MOVXA,@DPTR

MOVX@R0,A

INCDPTR

CJNER0,#64H,LOOP

17设R0=20H,R1=25H,(20H)=80H,(21H)=90H,(22H)=A0H,(25H)=A0H,(26H)=6FH,(27H),下列程序执行后,结果如何?

(20H)=20H(21H)=00H(22H)=17H(23H)=01HCY=1A=17HR0=23HR1=28H

CLRC

MOVR2,#3

ADDCA,@R1

MOV@R0,A

DJNZR2,LOOP

MOV@R0,#01H

NEXT:

DECR0

18编写航标灯控制程序。

要求航标灯在白天熄灭,在夜晚断续点亮,时间间隔2秒,即亮2秒,息2秒,周期循环进行。

(20分)

主程序

ORG2000H

MAIN:

MOVSP,#30H

GAT0:

CLRP1.7

MOVTMOD,#09H;

T0定时,模式1,GATE=1

MOVTL0,#058H;

T0计算初值

MOVTH0,#9EH

MOVR7,#28H;

软件计数初值

HERE1:

JNBP3.2,HERE1;

夜晚到了吗?

P3.2=0(白天)转HER1即停在此语句等待,夜晚到了P3.2=1往下执行。

到了,启动T0

SETBET0;

允许T0中断

SETBEA;

CPU开中断

HERE2:

JBP3.2,HERE2;

白天到了吗?

P3.2=1(黑夜)转HERE2,即停在此语句等待,白天到了P3.2=0往下执行。

到了,关T0

CLRET0;

禁止T0中断

CLREA;

关中断

CLRP1.7;

关信号灯

SJMPGAT0

中断服务程序

ORG000BH

SJMPT0INT

ORG0020H

T0INT:

重赋T0初值

MOVTH0,#9EH

DJNZR7,EXIT;

软件计数为零吗?

计数已到,重赋初值

CPLP1.7;

输出取反,控制灯亮或灭

EXIT:

RETI;

中断返回

7、简单编程题:

1)编程查找内部RAM的30H一50H单元中是否有0FFH这一数。

若查找到,则将52H单元置为01H,若未找到,则将51H单元置为00H。

FIND:

MOVR0,#30H

NET2:

MOVA,@R0

CJNEA,#0FFH,NET

MOV52H,#01H

NET:

CJNER0,#51H,NET2

MOV51H,#00H

2)两个字符串分别存放在首地址为42H和52H的内部RAM中,字符串长度放在41H单元,请编程比较两个字符串。

若相等,则把数字00H送40H单元,否则把0FFH送40H单元。

COMP:

MOVR7,41H

MOVR0,#42H

MOVR1,#52H

LOOP:

MOV30H,A

MOVA,@R1

CJNEA,30H,NET

MOV40H,#00H

MOV40H,#0FFH

3)在外部RAM首地址为TABLE的数据表中有10个字节数据,请编程将每个字节的最高位无条件地置1。

ZHIGA:

MOVDPTR,#TABLE

MOVR7,#10

MOVXA,@DPTR

ORLA,#80H

MOVX@DPTR,A

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

1、设计4*4的行列式键盘,并包含两位数码管,这16个键的键值为0~15,当某个键按下时,将这个键的键值通过两位数码管显示出来。

ORG0030H

MOV30H,#0

LCALLSCAN

LCALLDISPLAY

SJMPLOOP

DISPLAY:

MOVA,30H

MOVB,#10

DIVAB

MOV40H,A

MOV41H,B

SETBP3.1

CLRP3.0

MOVA,40H

MOVP2,A

LCALLD20MS

SETBP3.0

CLRP3.1

MOVA,41H

RET

SCAN:

MOVP1,#0FH;

行线送“0”

MOVA,P1;

读取列线值

ANLA,#0FH

MOVR4,A;

列号信息

CJNEA,#0FH,NEXT1;

若列线均为“1”则无键按下

SJMPNEXT3

ACALLD20MS;

有键按下,去除抖动

MOVP1,#0F0H;

列线送0

MOVA,P1;

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

NEXT6:

CJNEA,#0BH,NEXT7

MOVR4,#2

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

2、设计包含两个按键S1、S2和一位数码管的系统。

当S1按下时数码管显示的数增一,当增到9后,按下S1按键数值回到0;

当S2按下时数码管显示的数减一,当减到0后,按下S2按键数值回到9。

ORG0000H

ORG0030H

MOVR5,#0

LCALLKEY

MOVA,R5

KEY:

JBP1.0,KEY2

LCALLDELAY

JBP1.0,KEY2

JNBP1.0,$

INCR5

CJNER5,#10,NET

KEY2:

JBP1.1,NET

LCALLDELAY

JBP1.1,NET

JNBP1.1,$

DECR5

CJNER5,#0FFH,NET

MOVR5,#9

DELAY:

MOVR6,#50

MOVR7,#100

DJNZR7,$

DJNZR6,DL2

3、设计60秒倒计时电路,完成程序设计,要求用定时器定时产生1秒的时间。

ORG000BH

LJMPT0INT

MOVR5,#59;

存放秒数

MOVR4,#20

MOVTMOD,#01H

MOVTH0,#3CH;

定时50ms

MOVTL0,#0B0H

SETBEA

SETBET0

SETBTR0

LCALLDISPLAY

T0INT:

MOVTH0,#3CH;

DJNZR4,EXT

CJNER5,#0FFH,EXT

EXT:

CLRP3.0

LCALLDELAY

4、用定时器定时产生周期为1MS,占空比为60%的矩形波。

MOVR4,#10

MOVTMOD,#02H

MOVTH0,#156;

定时100US

MOVTL0,#156

SETBTR0

DJNZR4,NEXT

SETBP3.7

RETI

CJNER4,#4,EXT

CLRP3.7

END

5、完成八盏发光二极管流水点亮的电路及程序设计,每个发光二极管点亮0.5秒。

MOVR4,#0FEH

MOVP1,R4

MOVA,R4

RLA

MOVR4,A

SJMPLOOP

MOVR5,#50

DL1:

DJNZR5,DL1

6、用动态显示法完成8位数码管的显示,显示内容为“20100618”。

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

MOVA,R2

MOVR2,A

CJNER0,#38H,LOP1

MOVR6,#50

MOVR7,#50

DJNZR7,$

DJNZR6,DL2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1