① 单片机循环
程序没有毛病,楼主希望得到什么样的结果?
------------------
程序没有毛病,用proteus7中仿真的时候,速度太快了不行。
下面程序,只是把延时时间加大了,仿真就可以了。
org 0000h
ajmp main
main:
mov r5, #0h
loop:
call disp
call delay
ajmp loop
disp:
mov DPTR, #table
mov a, r5
movc A, @a+DPTR
mov p0, a
dec r5
cjne r5, #-1, dell
mov r5 , #9
dell:
ret
delay:
mov r4, #100
mov r7, #0x0a
LL1:
mov r6, #-1
djnz r6, $
djnz r7, LL1
djnz r4, LL1
ret
table:
db 3fh,06h,5bh,4fh,66h
db 6dh,7dh,07h,7fh,6fh
end
② 单片机问题,急急~
1.
ORG 0000H
AJMP START
ORG 0030H
START:
MOV DPTR,#0050H ;外部存储器首地址
MOV R0,#9 ;计数器
MOV A,#0 ;A清零
LOOP:
MOVX @DPTR,A ;将A的内容(0)送到外部RAM
INC DPTR ;下一个地地址
DJNZ R0,LOOP ;没有完成则继续
SJMP $
END
2.
方法1:
(算法:11+12+13+……+50=(11+50)*20)
程序:
ORG 0000H
AJMP START
ORG 0030H
START:
MOV R2,#11 ;最小数
MOV R3,#50 ;最大数
MOV R4,#20 ;倍数
MOV A,R2 ;取最小数
ADD A,R3 ;求最小数与最大数之合
MOV B,R4 ;取倍数
MUL AB ;求所有数之合
MOV R0,A ;低位送R0
MOV R1,B ;高位送R1
SJMP $
END
方法1:
(算法:一个一个加)
程序:
ORG 0000H
AJMP START
ORG 0030H
START:
MOV R2,#11 ;被加数(从11开始)
MOV R3,#40 ;个数
MOV A,#0 ;清除A
MOV B,#0 ;清除B
MOV R0,#0 ;清除R0
LOOP:
MOV A,R0 ;低位求和
ADD A,R2
MOV R0,A
MOV A,B ;高位求和
ADDC A,#0
MOV B,A
INC R2
DJNZ R3,LOOP ;没有加完则继续
MOV R1,B ;保存高位数据到R1
SJMP $
END
3.
;定时器选用T0
;工作方1
;时间常数计算公式:(1) T=(65536-X)*(12/fosc)
; (2) 12/fosc=12/12MHz=1us
; (3) T=2ms=2000us
;由(1)(2)(3)得到:(4)X=65536-2000=61536=0F060h
;TH0=0F0h,TL0=060h
程序:
ORG 0000H
AJMP INI ;程序入口
ORG 000BH
AJMP T0_INT ;T0中断入口
ORG 0030H
;初始化
INI:
MOV TMOD,#01H ;设置定时器T0工作方式1
MOV TH0,#0F0h ;装载时间常数
MOV TL0,#060H
SETB EA ;开启中断响应
SETB ET0
SETB TR0 ;启动定时器T0
SJMP $
;定时器中断程序
T0_INT:
MOV TH0,#0F0h ;重装时间常数
MOV TL0,#060H
RETI
END
③ 单片机编程
乱写的,凑合看吧:
ORG 2000H
CLR A
MOV R7,#0
MOV R6,#0
MOV R5,#30
MOV R4,#20
MOV R3,#50H
MOV R2,#20H
LOOP1: MOV A,@R4
JNB ACC.7,LOOP2 ;判断符号数的正负
INC @R3
MOVX @R3,A ;负数存入外存中51H开始的单元中
INC @R7 ;负数个数 1
LOOP2: INC @R2
MOVX @R2,A ;正数存入外存中21H开始的单元中
INC @R6 ;正数个数 1
CJNE A,#64H,LOOP3
SJMP LOOP4
LOOP3: JNC LOOP4
MOV B,#0AH ;小于100的数改成压缩BCD码送还至原地址单元
DIV AB
SWAP A
ADD A,B
MOV @R4,A
LOOP4: MOV @R4,#0AAH ;不小于100的数改为AAH送还至原地址单元
INC @R4
DJNZ R5,LOOP1
MOV DPTR,#20H ;正数的个数存放至外存区20H单元中 MOV A,@R6
MOVX @DPTR,A
MOV DPTR,#50H ;负数的个数存放在外存区50H单元中
MOV A,@R7
MOVX @DPTR,A
SJMP $
上边的几个回答- -...此程序若还有错误请及时联系我修改,谢谢先!
另:各位参考的童鞋切记要加相关注释,多少做点改动,被老师认为雷同的渣就概不负责了哈。
So,建兄,渣就不多解释了。
④ 单片机C语言编程
KEY4EQU30H
KEY2EQU31H
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
CLREA
MOVSP,#5FH
MOVKEY2,#0
MOVKEY4,#0
LOOP:
JBP1.0,LOOP
MOVR7,#10
LCALLDELAY
JBP1.0,LOOP
JNBP1.0,$
MOVP3,#0C0H
LOOP0:
LCALLKEYDEAL
MOVA,KEY4
JNZLOOP41
MOVA,P3
ANLA,#0F0H
ORLA,#0EH
MOVP3,A
SJMPLOOP21
LOOP41:
DECA
JNZLOOP42
MOVA,P3
ANLA,#0F0H
ORLA,#0DH
MOVP3,A
SJMPLOOP21
LOOP42:
DECA
JNZLOOP43
MOVA,P3
ANLA,#0F0H
ORLA,#0BH
MOVP3,A
SJMPLOOP21
LOOP43:
DECA
JNZLOOP21
MOVA,P3
ANLA,#0F0H
ORLA,#07H
MOVP3,A
LOOP21:
MOVA,KEY2
JNZLOOP22
MOVA,P3
ANLA,#0FH
ORLA,#20H
MOVP3,A
SJMPLOOP3
LOOP22:
DECA
JNZLOOP3
MOVA,P3
ANLA,#0FH
ORLA,#10H
MOVP3,A
LOOP3:
LJMPLOOP0
;----------------------------
DELAY:
MOVR2,#2
DLY1:
MOVR3,#250
DJNZR3,$
DJNZR2,DLY1
DJNZR7,DELAY
RET
;-----------------------------
KEYDEAL:
JBP1.1,KEYEN1
MOVR7,#10
LCALLDELAY
JBP1.1,KEYEN1
JNBP1.1,$
INCKEY4
MOVA,KEY4
ANLA,#03H
MOVKEY4,A
KEYEN1:
JBP1.2,KEYEN2
MOVR7,#10
LCALLDELAY
JBP1.2,KEYEN2
JNBP1.2,$
INCKEY2
MOVA,KEY2
ANLA,#01H
MOVKEY2,A
KEYEN2:
RET
;-----------------------------
⑤ 单片机中的LOOP是什么
一种循环的标示,由自己决定这个的标示(类似地名),比如我一个AJMP跳转指令需要跳转到一个地方,那我就自己定一个标示(LOOP是自己定义的,可以改成别的也行,必须和跳转的那个程序一样),然后跳转的那个地方程序开头就写(LOOP:),这句后面就是跳转后需要执行的程序了~!不知道这样解释对你有没有帮助
⑥ 单片机 跑马灯 代码详解
ORG
0000H
;开机上电主程序入口
AJMP
START
;系统一进来就转到主程序
ORG
0030H
;主程序地址
START:
MOV
A,
#0FFH
;主程序开始,A中初始化成全1
CLR
C
;c清零
MOV
R2,
#08H
;R2左转循环计数器
LOOP:
RLC
A
<<C+A+C<<带进位循环左移,A中的内容在8此循环中从0位到7位依次变0
MOV
P2,
A
;送到P2,使P2从0位到7位依次点亮LED
CALL
DELAY
;单片机运行很快,为了能看到灯的变化,必须延迟,把速度降下来
DJNZ
R2,
LOOP
;R2每次减1后判断是否=0,8次后=0程序才会下行,否则会跳回LOOP
MOV
R2,#07H
;R2右转循环计数器
LOOP1:
RRC
A
>>C+A+C>>带进位循环右移,A中的内容在8此循环中从7位到0位依次变0
MOV
P2,
A
;送到P2,使P2从7位到0位依次点亮LED
CALL
DELAY
;和上个循环一样,延时
DJNZ
R2,
LOOP1
;R2每次减1后判断是否=0,7次后=0程序才会下行,否则会跳回LOOP1
JMP
START
;跳回程序起始位置重复下一个循环
DELAY:
MOV
R3,
#20;延时子程序,这个应该不用解释了吧
D1:
MOV
R4,
#200
D2:
MOV
R5,
#248
DJNZ
R5,
$
DJNZ
R4,
D2
RET
END