单片机.docx
《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(17页珍藏版)》请在冰豆网上搜索。
![单片机.docx](https://file1.bdocx.com/fileroot1/2023-2/5/5aae8392-afc4-41ac-968c-ba1cd89a15ad/5aae8392-afc4-41ac-968c-ba1cd89a15ad1.gif)
单片机
MOVDPTR,#2000H
MOVXA,@DPTR
MOV20H,A
MOVDPTR,#2000H
MOVXA,@DPTR
MOVDPTR,#3000H
MOVX@DPTR,A
MOVA,20H
MOV20H,30H;XCHA,30H
MOV30H,AMOV20H,A
00100101P=1CY=0AC=0
+10011011
11000000P=0CY=0AC=1
ANLA,#0F0H
ORLA,#0FH
XRLA,#0FH
CPLAXRLA,#0FFH
A=00000001RLA
A=00000010RLA
A=00000100
10=8+2
010111105E
设数a存放在R1中,数b存放在R2中,计算Y=a2-b,并将结果放入R4和R5中。
ORG0000H
LJMPSTART
ORG0100H
START:
MOVR1,#03H
MOVR2,#04H
MOVA,R1
MOVB,A
MULAB
CLRC
SUBBA,R2
MOVR4,A;A=00000101
CPLA;A=11111010
MOVP1,A
MOVA,B
SUBBA,#00H
MOVR5,A
END
已知两个带符号数分别存放于ONE和TWO单元,试编程比较的大小,并把大数存放于MAX单元。
ORG0100H
ONEDATA30H
TWODATA31H
MAXDATA32H
CLRC
MOVA,ONE
SUBBA,TWO
JZXMAX
JBACC.7,NEG
JBOV,YMAX
SJMPXMAX
NEG:
JBOV,XMAX
YMAX:
MOVA,TWO
SJMPDONE
XMAX:
MOVA,ONE
DONE:
MOVMAX,A
END
Org0000H
LJMPSTART
0RG0003H
LJMPSERINT0
ORG0100H
START:
MOVIE,#10000001B
MOVIP,#xxxxxxxxxB
MOVA,#0FEH
MOVP1,A
SJMP$
DELAY:
…….
…….
……
RET
ORG0200H
SERINT0:
Movr0,#08h
Loop:
RLA
MOVP1,A
LCALLDELAY
Djnzr0,loop
RETI
END
交通灯框图
开始START:
…….
红灯亮MOVP1,#0FFH
CLRP1.0
倒计时20S
绿灯亮MOVP1,#0FFH
CLRP1.1
倒计时15S
黄灯亮0.5S
全灭0.5S
返回开始LJMPSTART
CLRP2.0
CLRP2.1
LOOP0:
SETBP2.1
MOVP1,#0C0H
CLRP2.1
SETBP2.0
MOVP1,#0F9H
CLRP2.0
DJNZR1,LOOP0
ORG0000H
LJMPMAIN
ORG0100H
TEMPEQU20H
MAIN:
MOVA,#0FEH
MOVTEMP,#50
MOVIE,#00H
LOOP1:
JNBP3.2,LOOP2
JNBP3.3,LOOP2
SJMPLOOP1
LOOP2:
LCALLDELAY
JNBP3.2,INT0
JNBP3.3,INT1
SJMPLOOP1
Into:
MOVA,TEMP
INCA
LCALLDISPLAY
LCALLDELAY200MS
SJMPLOOP1
INT1:
SJMPLOOP1
DELAY:
…….
…….
……..
RET
END
ORG0000H
LJMP
ORG0100H
…..
MOVTMOD,#20H
MOVTL1,#xxH
MOVTH1,#xxH
MOVSCON,#0D0H11010000
MOVPCON,#80H
MOVIE,#00H
SETBTR1
MOVA,#00H
MOVR7,#20H
MOVR0,#20H
LOOP0:
MOV@R0,A
INCA
INCR0
DJNZR7,LOOP0
MovR0,#20h
MOVR7,#20H
START:
Sent:
MOVR7,#20H
MOVR0,#20H
Loop1:
Mova,@r0
Incr0
Cjner0,40h,checkt
Ajmpback
Checkt:
Movc,p
Movtb8,c
Movsbuf,a
Wait:
Jbcti,loop1
Sjmpwait
Back:
CONT:
JBCRI,LOOP3
SJMPCONT
LOOP3:
MOVA,SBUF
JNZSTART;重新发送
IncR0
DJNZR7,START
RETSJMP$
END
RE:
MOVTMOD,#20H
MOVTL1,#0F4H
MOVTH1,#0F4H
MOVSCON,#0D0H11010000
MOVPCON,#80H
MOVIE,#00H
SETBTR1
MOVR0,#50H
MOVR7,#20
RIGHT:
MOV@R0,A;保存数据
INCR0;地址+1
LOOP4:
MOVA,#00H
MOVSBUF,A;返回0表示正确
LOOP6:
JBCTI,LOOP5
SJMPLOOP6
LOOP5:
DJNZR7,WAIT
;显示接收的数据
MOVR7,#20H
MOVR0,#50H
LOOP1:
MOVA,@R0
LCALLDISPLAY
延时1S
INCR0
DJNZR7,LOOP1
SJMP$
ERR:
告诉甲机,重新发送
MOVA,#0FFH
MOVSBUF,A;返回FFH表示错误
LOOP2:
JBCTI,WAIT
SJMPLOOP2
DISPLAY:
RET
DELAY:
RET
END
Org0000h
Ljmpstart
Org0003h
Ljmpsint0
Org0100h
Start:
Mova,#0efh
Sjmp$
Delay:
…..
…..
…..
ret
Org0400h
Sint0:
Rla
Movp1,a
Lcalldelay
reti
end
p1.0p1.1p1.2…..
检测p1.0是否为0
Jbp1.0,
Start:
Jnbp1.0,switch0
Jnbp1.1,switch1
……
……
Jnbp1.5,switch5
Ljmpstart
Switch2:
03送数码管显示
延时0.5秒
数码管全灭
延时0.5秒
03送数码管显示
延时0.5秒
数码管全灭
延时0.5秒
03送数码管显示
延时0.5秒
数码管全灭
延时0.5秒
15秒倒计时
Dec指令
到0时跳出循环
Setbp3.0
延时0.5秒
Clrp3.0
Ljmpstart
数码管动态显示
定义TEMP=XXH存储单元
START:
初始化TEMP=00H,从0开始
LOOP:
调用显示子程序
TEMP+1
判断TEMP是否=100?
是,跳转到START
否,跳转到LOOP
SJMP$
显示子程序:
TEMP->a
R0=50
B=10
a/b
p2.0=1
P2.1=0
a值查表后送P0
调用延时10MS子程序
P2.0=0
P2.1=1
B值查表后送P0
调用延时10MS子程序
循环50次
Ret
延时10MS子程序
D10MS:
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
RET
TABNUM:
DBXXH,XXH,XXH,……
End
地址线:
p2.7-------p2.0p0.7------p0.0
1111000000000000f000h
1111111111111111ffffh
00001111000000000f00h
1111111111111111ffffh
000y0
001
010
011
100
101
110
111
0111100000000000
0111111111111111
R0
A=r0
Jzloop0
Decr0
A=r0
Jzloop1
Decr0
A=r0
Jzloop2
……
…..
Decr0
A=r0
Jzloop15
Loop0:
Ljmpstart
Loop1:
0.004999999999
0.005000000000
0.0000000001111111
0.000000001000000.。
。
。
Org0000h
Ajmpstart
Org0100h
Start:
clrA
Movdptr,#7fffh
Up:
movx@dptr,A;上升段线性输出
IncA
Nop
Nop
CjneA,#0ffh,up
Down:
movx@dptr,A;下降段输出
DecA
Nop
Nop
CjneA,#00h,down
Ajmpup
end
行扫描
列扫描
得到键值
保存键值到R0
R0送A
Jzloop00
Djnzr0,next1
Ajmploop01
Next1:
Djnzr0,next2
Ajmploop02
Next2:
Djnzr0,next3
Ajmploop03
Next3:
Djnzr0,next4
Ajmploop10
Next4:
Djnzr0,next5
Ajmploop11
……
……
Loop00:
Mov30h,#01h
并送显示
跳转到开始
Loop01:
…….
……
Loop03:
;+号
Mova,30h
跳转到开始
……
……
Loop32:
;=号
Movr1,a
Mova,20h
Jz开始
Rrca
Jc加法
Rrca
Jc减法
Rrca
Jc乘法
Rrca
Jc除法
Sjmp$
加法:
Mova,r1
Adda,30h
显示
跳转到开始
。
。
。
。
。
……
end