
那位单片机高手可以给我有关MSC-51系列单片机的例子程序.
如:有关指令的,顺序编程,分支编程,循环编程,子程序调用,查表编程.谢谢急用!!!!!!!!!!...
如:有关指令的,顺序编程,分支编程,循环编程,子程序调用,查表编程.谢谢急用!!!!!!!!!!
展开
1个回答
展开全部
顺序编程,分支编程,循环编程,子程序调用:
;p1口八个灯作跑马灯。
org 0000h
ajmp start
org 0030h
start:
mov a,#0ffh ;
clr c ;
mov r2,#08h ;循环八次。
loop: rlc a ;带进位左移。
mov p2,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop ;反复循环
mov r2,#07h ;再往回循环。
loop1:
rrc a ;带进位右移
mov p2,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop1 ;反复循环
jmp start ;重新开始
delay:
mov r3,#20 ;延时子程序
d1: mov r4,#200
d2: mov r5,#248
djnz r5,$
djnz r4,d2
ret
end
查表编程:
;例程:100位计数器
a_bit equ 20h ;个位数存放处
b_bit equ 21h ;十位数存放处
temp equ 22h ;计数器寄存器
star: mov temp,#0 ;初始化计数器
stlop: acall display
inc temp
mov a,temp
cjne a,#100,next ;=100重来
mov temp,#0
next: ljmp stlop
;显示子程序
display: mov a,temp ;将temp中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b
mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;显示1000次
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p2.0 ;开个位显示
acall d1ms ;显示1ms
setb p2.0
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p2.1 ;开十位显示
acall d1ms ;显示1ms
setb p2.1
djnz r1,dplop ;100次没完循环
djnz r0,dpl1 ;4个100次没完循环
ret
;1MS延时(按12MHZ算)
;====================================================
D1MS: MOV R7,#80
DJNZ R7,$
RET
;7段数码管各划的数字排列表
numtab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
; 0 1 2 3 4 5 6 7 8 9
end
;p1口八个灯作跑马灯。
org 0000h
ajmp start
org 0030h
start:
mov a,#0ffh ;
clr c ;
mov r2,#08h ;循环八次。
loop: rlc a ;带进位左移。
mov p2,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop ;反复循环
mov r2,#07h ;再往回循环。
loop1:
rrc a ;带进位右移
mov p2,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop1 ;反复循环
jmp start ;重新开始
delay:
mov r3,#20 ;延时子程序
d1: mov r4,#200
d2: mov r5,#248
djnz r5,$
djnz r4,d2
ret
end
查表编程:
;例程:100位计数器
a_bit equ 20h ;个位数存放处
b_bit equ 21h ;十位数存放处
temp equ 22h ;计数器寄存器
star: mov temp,#0 ;初始化计数器
stlop: acall display
inc temp
mov a,temp
cjne a,#100,next ;=100重来
mov temp,#0
next: ljmp stlop
;显示子程序
display: mov a,temp ;将temp中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b
mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;显示1000次
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p2.0 ;开个位显示
acall d1ms ;显示1ms
setb p2.0
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p2.1 ;开十位显示
acall d1ms ;显示1ms
setb p2.1
djnz r1,dplop ;100次没完循环
djnz r0,dpl1 ;4个100次没完循环
ret
;1MS延时(按12MHZ算)
;====================================================
D1MS: MOV R7,#80
DJNZ R7,$
RET
;7段数码管各划的数字排列表
numtab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
; 0 1 2 3 4 5 6 7 8 9
end
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询