单片机.docx

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

单片机.docx

《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(22页珍藏版)》请在冰豆网上搜索。

单片机.docx

单片机

3.1;外部数据存储器两个单元000EH,000FH互换

ORG0000H

MOVP2,#00H;P2+P0

MOVR0,#0EH

MOVR1,#0FH

MOVXA,@R0

MOVB,A

MOVXA,@R1

MOVX@R0,A

MOVA,B

MOVX@R1,A

SJMP$

END

3.2;求R(30H)(31H)单元的补码,结果保存在20H,21H

ORG0000H

MOVA,30H;(30H)(31H)

JNBACC.7,ABC

CLRA;10000H-(30H)(31H)

SUBBA,31H

MOV21H,A;保存结果

MOVA,#00H

SUBBA,30H

SETBACC.7

MOV20H,A

ABC:

SJMP$;111111*********

END

3.3;保20H单元中的压缩BCD码,变成非压缩的BCD码,结果放在21H,22H

ORG0000H

MOVA,20H;34H

MOV21H,#00H

MOV22H,#00H

MOVR0,#22H

XCHDA,@R0

SWAPA

MOV21H,A

SJMP$

END

3.4;把one单元的二进制数,变成压缩BCD码,放在HUND,TEN单元

ONEEQU20H

HUNDEQU21H

TENEQU22H

ORG0000H;255

MOVA,ONE

MOVB,#100

DIVAB

MOVHUND,A

MOVA,B

MOVB,#10

DIVAB

SWAPA

ADDA,B

MOVTEN,A

SJMP$

END

3.5;比较40H,41H单元的大小,大的存GR,小的存LE,相等存两个

GREQU30H

LEEEQU31H

ORG0000H

MOVA,40H

SUBBA,41H

JZABC

JCBCD

MOVGR,40H;没借位

MOVLEE,41H

SJMP$

BCD:

MOVGR,41H;有借位

MOVLEE,40H

SJMP$

ABC:

MOVGR,40H;相等操作

MOVLEE,40H

SJMP$

END

3.6;X>0,Y=X;X=0,Y=20H:

X<0,Y+X+5

XEQU31H

YEQU32H

ORG0000H

MOVA,X

JZABC

JBACC.7,BCD

MOVY,X

SJMP$

BCD:

MOVA,X

ADDA,#5

MOVY,A

SJMP$

ABC:

MOVY,20H

SJMP$

END

3.7;根据R3的内容,转身相应的程序

ORG0000H

MOVDPTR,#T_TAB

MOVA,R3

RLA

JMP@A+DPTR

T_TAB:

AJMPPR0

AJMPPR1

AJMPPR2

AJMPPR3

AJMPPR4

AJMPPR5

PR0:

SJMP$

PR1:

NOP

SJMP$

PR2:

SJMP$

PR3:

NOP

NOP

SJMP$

PR4:

SJMP$

PR5:

SJMP$

END

3.8;接收码为3AH,47H,65H,70H,8BH放在20H,R3存放要找的序号

ORG0000H

MOVR3,#0FFH

ABC:

INCR3

MOVDPTR,#T_TAB

MOVA,R3

MOVCA,@A+DPTR

CJNEA,20H,ABC

MOVDPTR,#T_TAB1

MOVA,R3

RLA

JMP@A+DPTR

T_TAB1:

AJMPPR0

AJMPPR1

AJMPPR2

AJMPPR3

AJMPPR4

AJMPPR5

PR0:

SJMP$

PR1:

NOP

SJMP$

PR2:

SJMP$

PR3:

NOP

NOP

SJMP$

PR4:

SJMP$

PR5:

SJMP$

T_TAB:

DB3AH,47H,65H,70H,8BH

END

3.9;为10ms的子程序

ORG0000H

ACALLdelay

SJMP$

delay:

MOVR6,#5

delay2:

MOVR5,#249

delay1:

NOP

NOP

DJNZR5,delay1

DJNZR6,delay2

RET

END

3.10;多字节乘10的程序,数据块放在20单元为首地址,第一个单元放字节数

ORG0000H

MOVR4,#00H

MOVR0,#20H

MOV30H,@R0;字节数

INCR0

ABC:

MOVA,@R0

MOVB,#10

MULAB

ADDA,R4

MOV@R0,A

MOVR4,B

INCR0

DJNZ30H,ABC

MOV@R0,B

SJMP$

END

3.11;设首地址为20H单元里面放字节数,后面就放排序的数

ORG0000H

BBC:

MOVR0,#20H

MOV30H,@R0;字节数

DEC30H;比较次数

INCR0

MOVR1,#22H

CLRF0;交换标记

ABC:

MOVA,@R0;@r0,@R1

CLRC;清C

SUBBA,@R1

JZABC1

JCABC1

XCHA,@R0;交换数据

XCHA,@R1

XCHA,@R0

SETBF0;设置交换标记

ABC1:

INCR0

INCR1

DJNZ30H,ABC

JBF0,BBC

SJMP$

END

3.12;BCD码减法程序

ORG0000H

MOVR0,#20H

MOVA,R0

ADDA,R3;加上字节数

DECA;被减数最后一个单元

MOVR0,A

MOVR1,#30H

MOVA,R1

ADDA,R3;加上字节数

DECA;减数最后一个单元

MOVR1,A

ABC:

MOVA,#9AH

SUBBA,@R1

ADDA,@R0

DAA;调整指令

MOV@R0,A;保存结果到被减数

CPLC

DECR1

DECR0

DJNZR3,ABC

SJMP$

END

3.14;按图写程序

ORG0000H

MOVC,P2.2

ORLC,TF0

ANLC,P1.1

MOV20H.0,C

MOVC,IE1

ORLC,/25H

ANLC,20H.0

ANLC,/26H

MOVP1.3,C

SJMP$

END

3.15;根据逻辑表达式写程序

X0bit00H

X1bit01H

X2bit02H

X3bit03H

X4bit04H

X5bit05H

X6bit06H

X7bit07H

Ybit08H

ORG0000H

MOVC,X0

ANLC,X1

ANLC,X2

MOVF0,C;保存第一项

MOVC,X0

ANLC,/X1

MOV09H,C;为后一项准备

ANLC,/X2

ORLC,F0

CPLC

MOVF0,C;保存前两项的反

MOVC,09H

ANLC,X2

ANLC,X3

ORLC,F0

MOVF0,C;前三项

MOVC,X7

ANLC,/X4

ANLC,/X5

ANLC,/X6

ORLC,F0

MOVY,C

SJMP$

END

3.16;c=a^2+b^2

AAEQU21H

BBEQU22H

CCEQU20H

ORG0000H

MOVA,AA

ACALLPP;获得a平方

MOVCC,A

MOVA,BB

ACALLPP;获得b平方

ADDA,CC;a^2+b^2

DAA

MOVCC,A

SJMP$

PP:

MOVDPTR,#P_TAB

MOVCA,@A+DPTR

RET

P_TAB:

DB0,1,4,9,16H,25H,36H,49H,64H,81H

END

3.17;求两个数据(60H,70H)块中最大值的乘积

ORG0000H

MOVR0,#60H

ACALLF_MAX

MOVB,A;第一个数据块的最大值

MOVR0,#70H

ACALLF_MAX;最大值在A

MULAB

MOV5FH,A

MOV5EH,B

SJMP$

F_MAX:

MOVA,@R0;数据块长度(字节数)

MOVR7,A;R7保存长度

CLRA

ABC2:

INCR0

MOV50H,@R0;

CJNEA,50H,ABC

ABC:

JNCABC1

MOVA,@R0;A中放大数

ABC1:

DJNZR7,ABC2

RET

END

5.1ORG0000H

ABC:

SETBP1.1;输入端要置1

MOVC,P1.1

MOVP1.0,C

SJMPABC

END

5.2ORG0000H

MOVP1,#11111111B

ABC:

MOVA,P1

SWAPA

ORLA,#00001111B

MOVP1,A

SJMPABC

END

5.3ORG0000H

bbb:

JBP1.7,AAA

movr6,#200

abc:

CPLP1.0

ACALLdelay

djnzr6,abc

movr6,#200

bbc:

CPLP1.0

ACALLdelay

ACALLdelay

djnzr6,bbc

AAA:

sjmpbbb

delay:

movr7,#125

delay1:

nop

nop

djnzr7,delay1

ret

end

5.4ORG0000H

MOVDPTR,#Z_TAB

MOVA,#15

MOVCA,@A+DPTR

MOVP1,A

SJMP$

Z_TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0c6H,0A1H,86H,8EH

END

5.4ORG0000H

BBC:

MOVDPTR,#Z_TAB

MOVR2,#1

MOVR3,#11111110B

MOVR4,#8

ABC:

MOVA,R2

MOVCA,@A+DPTR

MOVP2,R3

MOVP1,A

ACALLdelay

MOVP1,#0FFH

INCR2

MOVA,R3

RLA

MOVR3,A

DJNZR4,ABC

SJMPBBC

Z_TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0c6H,0A1H,86H,8EH

delay:

movr7,#1

delay3:

movr6,#5

delay2:

movr5,#250

delay1:

nop

nop

djnzr5,delay1

djnzr6,delay2

djnzr7,delay3

ret

END

5.5ORG0000H

ABC:

MOVP1,#00001111B

MOVA,P1;按了键,知道哪一行

MOVB,A;B里行信息

MOVP1,#11110000B

MOVA,P1;列信息

ADDA,B;11101110=EEH11011110=DEH

MOVB,A;备份了键值在B

MOVP2,A

MOV7FH,#0FFH;7FH单元存放第几个数

MOVDPTR,#S_TAB

AAA:

INC7FH;指向下一个数

MOVA,7FH

MOVCA,@A+DPTR

CJNEA,B,AAA

;显示数

MOVDPTR,#Z_TAB;10110110

MOVA,7FH

MOVCA,@A+DPTR

MOVP3,A

SJMPABC

Z_TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0c6H,0A1H,86H,8EH,0B6H

S_TAB:

DB0EEH,0DEH,0BEH,07EH,0EdH,0DdH,0BdH,07dH

DB0EbH,0DbH,0BbH,07bH,0E7H,0D7H,0B7H,077H,0FFH

END

6.1ORG0000H

AJMPAAA

ORG0013H

AJMPBBB

AAA:

MOVIE,#84H;10000100SETBEASETBEX1

MOVTCON,#04H;00000100

;以上两条指令是设置外中断0(INT0)

AAA1:

MOVP1,#0FFH

SJMPAAA1

BBB:

MOVA,P1

CPLA

SWAPA

MOVP1,A

ACALLDELAY

RETI

delay:

PUSH05H;延时程序

PUSH06H

PUSH07H

MOVR7,#4

delay1:

MOVR6,#250

delay2:

MOVR5,#250

delay3:

NOP

NOP

DJNZR5,delay3

DJNZR6,delay2

DJNZR7,delay1

POP07H

POP06H

POP05H

RET

END

6.1ORG0000H

MOVTMOD,#00100000B

MOVTH1,#230

MOVTL1,#230

SETBTR1;以上设置波特率为1200

MOVSCON,#50H;方式1,且允许的接收

ABC:

JNBRI,$;等待数据的到来

CLRRI

MOVA,SBUF

MOVDPTR,#Z_TAB

MOVCA,@A+DPTR

MOVP2,A

SJMPABC

 

Z_TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0c6H,0A1H,86H,8EH

END

6.2ORG0000H

AJMPAAA

ORG0003H

AJMPBBB

AAA:

MOVIE,#81H;10000100SETBEASETBEX1

MOVTCON,#01H;00000001

;以上两条指令是设置外中断0(INT0)

MOVR4,#3

MOVP1,#0FFH;开机显示0

SJMP$

BBB:

INCR4

MOVDPTR,#Z_TAB

MOVA,R4

MOVCA,@A+DPTR

MOVP1,A

ACALLDELAY

CJNER4,#15,BBB1

MOVR4,#0

BBB1:

SETBP3.3

RETI

delay:

PUSH05H;延时程序

PUSH06H

PUSH07H

MOVR7,#1

delay1:

MOVR6,#250

delay2:

MOVR5,#250

delay3:

NOP

NOP

DJNZR5,delay3

DJNZR6,delay2

DJNZR7,delay1

POP07H

POP06H

POP05H

RET

Z_TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0c6H,0A1H,86H,8EH,0B6H

END

7.1ORG0000H

AJMPMAIN0

ORG000BH

AJMPT_0

MAIN0:

;100ms,选择了方式1(16),选择了(定时)

MOVTMOD,#00000001B;T0,T1,TR0

MOVTH0,#3CH;初值65536-50000=15536(3CB0H)->T0

MOVTL0,#0B0H;设起点

SETBTR0;在TCON.4

MOVIE,#10000010B;设置了T0中断

MOVA,#11111110B

sjmp$

T_0:

MOVTH0,#3CH;初值65536-50000=15536(3CB0H)->T0

MOVTL0,#0B0H;设起点

MOVP1,A

RLA

RETI

END

7.2ORG0000H

AJMPMAIN0

ORG000BH

AJMPT_0

ORG001BH

AJMPT_1

MAIN0:

;100ms,T0选择了方式1(16),选择了(定时)T1计数,方式2(8)

MOVTMOD,#01100001B;T0,T1,TR0

MOVTH0,#3CH;初值65536-50000=15536(3CB0H)->T0

MOVTL0,#0B0H;设起点

MOVTH1,#0FBH;100H-5=FB

MOVTL1,#0FBH

SETBTR0;在TCON.4

SETBTR1

MOVIE,#10001010B;设置了T0,T1中断

sjmp$

T_0:

MOVTH0,#3CH;初值65536-50000=15536(3CB0H)->T0

MOVTL0,#0B0H;设起点

CPLP1.0

CPLP1.2

RETI

T_1:

CPLP1.7

RETI

END

7.3ORG0000H

AJMPMAIN0

ORG000BH

AJMPT_0

 

MAIN0:

;100ms,T0选择计数方式2(8),T1定时,方式2

MOVTMOD,#00100110B;

MOVTH0,#0FFH;初值65536-50000=15536(3CB0H)->T0

MOVTL0,#0FFH;设起点

SETBTR0;启动T0

MOVIE,#10000010B;设置了T0中断

sjmp$

T_0:

SETBP1.0

ACALLdelay500u

CLRP1.0

ACALLdelay500u

CPLP1.1

SJMPT_0

RETI

delay500u:

;100ms,选择了方式1(16),选择了(定时)

MOVTH1,#6;初值65536-50000=15536(3CB0H)->T0

MOVTL1,#6;设起点

SETBTR1;在TCON.4

JNBTF1,$;等TF=1

CLRTF1

RET

END

7.4ORG0000H

AJMPMAIN0

ORG000BH

AJMPT_0

MAIN0:

;T0必须是定时方式1,起动条件为TR0=1,

MOVTMOD,#11100001B;T1选择计数方式2,门控位为1,两个起动条件

MOVTH0,#3CH;50000个脉冲

MOVTL0,#0B0H

SETBTR0

SETBTR1

MOVIE,#10000010B

MOVR2,#10

MAIN1:

MOVA,TL1

CJNEA,#16,ABC

MOVTL1,#1

ABC:

MOVDPTR,#Z_TAB

MOVCA,@A+DPTR

MOVP1,A

SJMPMAIN1

T_0:

MOVTH0,#3CH;50000个脉冲

MOVTL0,#0B0H

DJNZR2,T_0_0

CPLP3.7

MOVR2,#10

T_0_0:

RETI

Z_TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0c6H,0A1H,86H,8EH,0B6H

END

8.1a

ORG0000H

MOVTMOD,#00100000B

MOVTH1,#230

MOVTL1,#230

SETBTR1;以上设置波特率为1200

MOVSCON,#01000000B;设置串行发送为方式1

MOVR2,#0

ABC:

MOVSBUF,R2

JNBTI,$;等待TI等于1(发送完成)

CLRTI;清除发送标志

INCR2

ACALLDELAY

CPLP3.2

CJNER2,#16,ABC

SJMP$

delay:

PUSH05H;延时程序

PUSH06H

PUSH07H

MOVR7,#4

delay1:

MOVR6,#250

delay2:

MOVR5,#250

delay3:

NOP

NOP

DJNZR5,delay3

DJNZR6,delay2

DJNZR7,delay1

POP07H

POP06H

POP05H

RET

END

8.2b

ORG0000H

MOVTMOD,#00100000B

MOVTH1,#230

MOVTL1,#230

SETBTR1;以上设置波特率为1200

MOVSCON,#50H;方式1,且允许的接收

ABC:

JNBRI,$;等待数据的到来

CLRRI

MOVA,SBUF

MOVDPTR,#Z_TAB

MOVCA,@A+DPTR

MOVP2,A

SJMPABC

Z_TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0c6H,0A1H,86H,8EH

END

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

当前位置:首页 > 自然科学

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

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