① 单片机汇编实验
1将80C51片内RAM的20H~2EH共15个单元置以初值0A0H~0AEH,
mov r0,#20H
mov a,#0a0h
loop:
mov @r0,a
inc r0
inc a
cjne r0,#2fh,loop
然后再将8700H~870EH单元的内容传送到片内RAM的60H~6EH中。
mov dptr,#8700h
mov r0,#60h
loop2:
movx a,@dptr
mov @r0,a
inc dptr
inc r0
mov a,dpl
cjne a,#0fh,loop2
最后将20H~2EH单元的内容传送到片外RAM的8700H~870EH
mov dptr,#8700h
mov r0,#20h
loop3:
mov a,@r0
movx @dptr,a
inc dptr
inc r0
cjne r0,#2fh,loop3
end
2用P1口的p1.0-p1.7八个端口做输出口,接8只发光二极管(LED),编写程序使LED循环点亮。
mov a,#1
loop:
rl a
mov p1,a
;delay
mov r1,#0ffh
loop2:mov r2,#0ffh
djnz r2,$
djnz r1,loop2
;delay end
sjmp loop
end
3题目: P1口接8只发光二极管(L0~L7), T1作定时器,系统晶振6MHz。编写程序,让第1秒时L0~L3点亮, L4~L7暗;第2秒时L0~L3暗, L4~L7亮;第3秒时L0~L7全亮;第4秒时L0~L7全暗;第5秒时L0~L3点亮, L4~L7暗;如此循环下去......
;这个有点复杂了……
org 0h
sjmp start
org 0bh
mov th0,#0bh
mov tl0,#0dch
inc r7;R7是计数器,满8次表示1秒到了
cjne r7,#8,exit
mov r7,#0
inc r6
cjne r6,#4,skip
mov r6,#0
skip:
mov a,r6
movc a,@a+dptr
mov p1,a
exit:reti
start:
mov tmod,#1
setb ea
setb et0
setb tr0
mov dptr,#tab
sjmp $
tab:db 0f0h,0fh,0h,0ffh
② 51单片机汇编语言编写一个跑马灯的程序,初学者做实验用,具体要求如下,好了可以加分
程序1:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
LOOP:
MOV A,P2
MOV B,A
MOV P0,A
MOV P1,#0FFH
LOOP1:
LCALL DELAY
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
MOV A,P2
CJNE A,B,LOOP
SJMP LOOP1
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END
程序2:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
JNB P2.0,LOOP1 ;
JNB P2.1,LOOP2 ;
SJMP MAIN
LOOP1:
MOV P0,#0FEH
MOV P1,#0FFH
LOOP11:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.1,LOOP2
SJMP LOOP11
LOOP2:
MOV P0,#0FCH
MOV P1,#0FFH
LOOP21:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.0,LOOP1
SJMP LOOP21
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END
③ 单片机实验中,怎么用汇编比较大小
单片机实验中,用汇编语言编程比较两个数大小,主要用SUBB减法指令,也可以使用CJNE指令。示例程序如下:
;启动入口
ORG
0000H
;复位启动
LJMP
START
;
ORG
0100H
;
;
;主控程序
START:
MOV
R0,#30H
MOV
X,#0
MOV
Y,#0
LOOP:
MOV
A,@R0
CLR
C
SUBB
A,#111
JNC
NEXT
CPL
C
MOV
A,@R0
SUBB
A,Y
JC
NUM
MOV
Y,@R0
NUM:
MOV
A,@R0
SUBB
A,#60
JC
INCR0
INC
X
INCR0:
INC
R0
JMP
LOOP
NEXT:
JMP
$
;
X
EQU
20H
;
Y
EQU
21H
;
END
;
④ 单片机汇编编程实验题求解,必采纳
MOV 40H,#68H ;
MOV A,40H ;取压缩BCD数。
ANL A,#0F0H ;屏蔽低4位,保留高4位。
SWAP A ;高低四位交换。
MOV 41H,A ;保存高4位。
MOV A,40H ;再取压缩BCD数
ANL A,#0FH ;屏蔽高4位,保留低4位。
MOV 42H,A ;保存低4位。
⑤ 汇编语言单片机实验
注释如图所示:
⑥ 单片机汇编语言实验,求助!
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXT0
ORG 0030H
MAIN:
SETB EX0
SETB IT0
SETB EA
SJMP $
EXT0:
CLR P1.0
LCALL DELAY
SETB P1.0
RETI
DELAY:
MOV R2,#200
DLY1:
MOV R3,#200
DLY2:
MOV R4,#248
DJNZ R4,$
DJNZ R3,DLY2
DJNZ R2,DLY1
RET
END
⑦ 单片机汇编矩阵键盘实验(扫描法)
关于扫描按键的原理,可以看下面这篇文章。
本文以循序渐进的思路,引导大家思考如何用最少的IO驱动更多的按键,并依次给出5种方案原理图提供参考。在实际项目中我们经常会遇到有按键输入的需求,但有的时候为了节省资源成本,我们都会选择在不增加硬件的情况下使用最少的控制器IO驱动更多的按键,那么具体是怎么做的呢,下面我们就以用5个IO引脚为例,讲下怎么设计可以实现更多的按键?共有5种设计思路,下面依次介绍。
首先通常想到的可能是下面这样的设计:
这样我们可以先识别K01、K02、K03、K04、K05,若没有按键按下然后再和思路四的设计一样去识别其他按键。但这样存在一个问题,如果IO1配置为0,IO5读到0,那么怎么知道是K51按下还是K05按下呢,这里只需要在程序里做下判断,先判断下是不是K05按下,若不是就是K51,因为按键K01、K02、K03、K04、K05在5个IO口都为读取的情况下,就可以识别,不需要扫描识别处理,相当于这5个按键优先级高与其他按键。
总结
综合上述,5个IO口最多可以识别25个按键,思路五程序上处理比较麻烦,若实际中只按思路四设计,也可识别20个按键,那么如果有N个IO口可识别多少按键呢?这里给出如下公式:
假设有N个IO口按照思路三可以识别N*(N-1)/2个;
按照思路四可识别N*(N-1)个;
按照思路5可以识别N*(N-1)+N个。
最后再说下,如果实际设计时,还是按思路四设计好,软件也没那么麻烦。如果是你的话你会选择哪种方法呢?你还有没有其他的设计方法呢?
⑧ 单片机LED灯实验(汇编语言)
用汇编语言AT89C51单片机对八个LED小灯的一个控制,效果呢,就是
左边的四个先亮
间隔2秒
亮三下
再换右边的亮间隔2秒
再亮三下
以此交替
。用延迟程序就行啊!有些问题我还得和你弄清楚,关键是用那几个IO口呢?看,家我名字说吧。
⑨ 单片机实验(MSC51汇编语言)
ORG
4000H
;定义以下代码的存储起始位置
MOV
DPTR,#0CFA7H
;以下三句的功能,把数值82H传送到CFA7H所在的存储单元
MOV
A,#82H
MOVX
@DPTR,A
MAIN:MOV
DPTR,#0CFA5H
MOVX
A,@DPTR
;把0CFA5H的值或者状态读到累加器A中,
MOV
DPTR,#0CFA4H
MOVX
@DPTR,A
;再把A的值赋给0CFA4H,
;所以这四句的功能就是把0CFA5H的值赋给0CFA4H
ACALL
DEL
;调用延时子程序
AJMP
MIAN
;进入循环
DEL
:MOV
R6,#10
DEL1:MOV
R7,#250
DEL2:DJNZ
R7,DEL2
DJNZ
R6,DEL1
RET
END
⑩ 51单片机汇编bcd减法实验
你这个程序没问题的话,直接加点程序就OK了。修改如下:
BCDSUBB:
MOV R2,#4
MOV R0,#38H
MOV R1,#30H
CLR C
SUBBCD1:
MOV A,#9AH
SUBB A,@R0
ADD A,@R1
DA A
MOV @R0,A
CPL C
INC R0
INC R1
DJNZ R2,SUBBCD1
MOV R1,#40H
MOV R0,#30H
MOV R2,#4
SUBBCD2:
MOV A,@R0
MOV @R1,A
DJNZ R2,SUBBCD2
RET