前言
学习一下51单片机的汇编。除了上一篇的简单显示外,51汇编还有许多需要学习和注意的地方。
案例一:数码管显示数字2,并左移7位再右移7位
我的单片机是共阴数码管,P0控制。
LED是P2控制,其中P24、P23、P22对应着一个译码器,也就是数码管的片选。P24=LSC、P23=LSB、P22=LSA为输入的数据,三个口组成的3位数据表示选择8个数码管中的某一个。
不管高位,设置零和一都无所谓。
为了让数码管显示的数字从左往右移动到头,再右移到尾,再循环往复。那么低位就有必要考虑了,如果没有低位,那么只需要对某个计数的变量加一和减一,但是这里有两个低位------------那么,每次使片选的三位能增加一位,那么低位就要增加4位
有两种方案:
- 设置8X4 - 1的计数,每循环4次数码管显示数字左移一个。减一的目的是为了防止溢出,溢出的话数码管在显示到最左边时会跳到最右边,然后跳回来。
- 每次数码管显示一次,计数器加或减4
org 0000h
ljmp main
main:
mov r0,#0e0h ;p2.4=0 p2.3=0 p2.2=0
mov r1,#31
mov r3,#31
L1:
mov p2,r0 ;select one number led array
inc r0
mov p0,#05bh ;2
lcall delay_1s
;ljmp L1
djnz r1, L1
L2:
mov p2,r0
clr c
mov a,r0
subb a,#1
mov r0,a
mov p0,#05bh
lcall delay_1s
djnz r3, L2
ljmp main
;-------------------------delay 1 s for eliminating jitter-----------
delay_1s:
mov r7,#0a7h
DL1:
mov r6,#0abh
DL0:
mov r5,#10h
djnz r5,$
djnz r6,DL0
djnz r7,DL1
ret
end
方案一显示效果:
org 0000h
ljmp main
main:
mov r0,#0h ;p2.4=0 p2.3=0 p2.2=0
mov r1,#7
mov r3,#7
L1:
mov p2,r0 ;select one number led array
mov a,r0
add a,#4
mov r0,a
mov p0,#05bh ;2
lcall delay_1s
;ljmp L1
djnz r1, L1
L2:
mov p2,r0
clr c
mov a,r0
subb a,#4
mov r0,a
mov p0,#05bh
lcall delay_1s
djnz r3, L2
ljmp main
;-------------------------delay 1 s for eliminating jitter-----------
delay_1s:
mov r7,#0a7h
DL1:
mov r6,#0abh
DL0:
mov r5,#10h
djnz r5,$
djnz r6,DL0
djnz r7,DL1
ret
end
方案二显示效果:
案例二:弄响蜂鸣器
这个部分注意的是,要想听见蜂鸣器发声,不单单要反复开闭来产生声波。而且,延迟时间需要足够短,不然听不见。一般用Keil调试时是把delay延迟成零点几个毫秒的。
org 0000h
ljmp main
main:
setb p1.5
start:
clr p1.5
lcall delay
setb p1.5
lcall delay
ljmp main
delay:
mov r6,#10h
DL0:
mov r5,#20h
djnz r5,$
djnz r6,DL0
ret
end
案例三:步进电机驱动
- 5线4相
实际图
原理图
5个控制端,Ph1表示步进电机A线圈电流方向,1正向,0方向。Ph2表示步进电机B线圈电流方向,1正向,0方向。I01,I11表示A线圈输出电流大小--------11到00,从零每步进1/3到1。I11,I12表示B线圈电流大小。
5线4相步进电机原理
由两个线圈电流方向不同而产生的磁场不同,带动转子绕一个方向移动。
如何设计步进电机的转动?
下面在A线圈和B线圈电流强度的地方取了巧,都设定了00(最大电流)。
org 000h
ljmp main
main:
mov p1,#28h
lcall delay
mov p1,#16h
lcall delay
mov p1,#2bh
lcall delay
mov p1,#15h
lcall delay
ljmp main
delay:
mov r7,#10h
DL1:
mov r6,#10h
DL0:
mov r5,#10h
djnz r5,$
djnz r6,DL0
djnz r7,DL1
ret
- 4线2相
2相步进电机的工作方式有三种:1相驱动,2相驱动,1-2相驱动。
略