专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

51单片机汇编语言

作者:未知   来源:会员上传   点击数:  更新时间:2014年05月20日   【字体:













a)  单个按键与多个LED灯(位操作输入与字节操作输出)判断与子程序
此处只是将输出指令由位指令换成了字节指令,而输入判断仍然是位判断指令。
ORG 0000H
MAIN:
  CLR C
   MOV C,P2.0 ;获取P2.0位状态 送位累加器;位与字节转换需要判断指令
JNC ZIJIE;JC位累加器—进位位为1转移到ZIJIE ,
JNC位累加器为0转移到ZIJIE,否则顺序执行。
MOV C,P1.0
ZIJIE:;子程序起始
MOV  A#00H
    MOV  P3A
RET;子程序结束并返回调用处
END
 
b)  单个按键与多个LED灯(位操作输入与位、字节操作输出)
l  位输入控制位或字节输出
ORG 0000H
MAIN:
  CLR C
   MOV C,P1.0 ;获取P1.0位状态 送位累加器;位与字节转换需要判断指令
JNC ZIJIE      ;JC位累加器—进位位为1转移到ZIJIE ,JNC位累加器为0转移到ZIJIE,否则顺序执行。
  MOV P0.0,C ;送位累加器到P0.0位等,P1.0位状态变化则输出随之变化
    ACALL  DELAY   ; 调延时子程序
  MOV P0.1,C
      ACALL  DELAY
  MOV P0.2,C
      ACALL  DELAY
  MOV P0.3,C
    ACALL  DELAY 
  MOV P0.4,C
    ACALL  DELAY 
         MOV P0.5,C
    ACALL  DELAY          MOV P0.6,C
    ACALL  DELAY    MOV P0.7,C    ACALL  DELAY     
SJMP MAIN ;相对转移时间短,用AJMP绝对转移时间长,RET是用于子程序的返回
ZIJIE:
  MOV A,#00H
  MOV P2,A      ACALL  DELAY 
  MOV P3,A    ACALL  DELAY
     CLR A      MOV P0,A
   MOV P1,A     ACALL  DELAY  
  RET
  DELAY:      ; 延时子程序 - 这是一个非常有用、而且常见的一个子程序
  MOV R5,#04H    ;将16进制数04H传递给寄存器R5
F1:
  DJNZ  R7, F1 ;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令
  RET       ; 子程序结束,返回子程序入口处  ACALL  DELAY   ; 调延时子程序 
  END
l  位输入控制字节输出
 
c)  单个按键与单个电机控制开环控制
单“位”P口1位--单个灯位输出,单个按键控制硬控制与软控制
一个按键,一盏照明灯,一个继电器。硬件接口问题—线路连接、硬件硬驱动问题(程序称为软驱动)。
一个按键,两盏灯(指示、照明),一个继电器。硬件接口问题—线路连接、硬件硬驱动问题。程序称为软驱动:就是利用两个端口,通过延时或计时器完成转换。
说明:
硬件特性,驱动与控制信号,程序编写
由继电器引出的强电驱动电器的控制问题,如电动机交流电机、直流电机、步进电机、伺服电机;单项或多项
 
1.  单个开关(按键)与多个LED数码管点阵问题最小系统输出扩展
a)        单个按键与多个LED灯(位操作输入与字节操作输出)
b)        单个按键与多个LED数码管(位操作输入与字节操作输出)数组
c)         单个按键与多个数码管(位操作输入与多字节操作输出)静态数组
d)        多个按键与多个数码管(位操作输入与字节操作输出)动态扫描函数
e)         单个按键与多个数码管点阵(位操作输入与字节操作输出)静态
f)         多个按键与多个数码管点阵(位操作输入与字节操作输出)动态
 
3.单个开关(按键)与多个LED灯→数码管→点阵问题—输出扩展—最小系统
a)  单个按键,多个LED灯(位操作—输入与字节操作—输出)
l  单输入与多输出的电子线路—静态特性—结构与联接   
对于多个LED灯(LED数 < 8个)来说(图4),在硬件连接方面、软件编写方面均没有大的难点。按照单个LED的连接方式增加便可。控制程序编写基本上也是重复性工作—用COPY简单修改即可。
对于LED数= 8个或是8的倍数的情况,需要解决两个方面的问题。一个是硬件的连接方法,一个是控制程序的编写指令—用词方法—字节操作指令。硬件方面可以用单个或多个成组(NET)的LED或总线接口、单个接口扩展等实现。程序编写则可以使用重复性工作、可以使用字节操作指令而摒弃位操作指令,使得程序简洁、可读性好、硬件运行效率高。
对于LED数> 8个且不能被8整除的,仍需要用位操作指令。参见图5,指令如下:
l  单输入与多输出电子线路的控制指令—动态特性
ORG  0000H  
   MAIN: 
      MOV  A#00H  
MOV  P1   ;P1口的状态,低电平为关
MOV  C0A0H  ;按位操作,P2.0口的状态—按键定,关为低电平,开为高电平
MOV  P1.0  ;P1.0口的状态,按位高电平显示灯亮,低电平显示灯灭
MOV  P1.1 
MOV  P1.2 
MOV  P1.3  ;P1.3口的状态,
MOV  P1.7C
MOV  P2.1C
MOV  P2.2C
MOV  P2.4C
MOV  P3.0C
MOV  P3.3C
MOV  P3.5C
MOV  P3.7C
MOV  P0.0C
MOV  P0.4C
END  
对于LED数> 8个且能被8整除的需要用字节操作指令。参见图2所示。
ORG  0000H  
START: 
      MOV  A#00H  
MOV  P1  
MOV  C0A0H 
JB    0A0HGUAN   ;按位操作;按P2.0口的状态获得两种显示结果0跳转
MOV  P1#0FFH   ;按P2.0口的状态为非1时的顺序显示本指令
RET  ;返回控制指令
GUAN :   ;程序控制指令入口,跳转入口
MOV  P2#0FFH   ;按P2.0口的状态为1时的转移显示本指令
RET  ;子程序返回控制指令
END  
程序说明
每个口用位赋值指令来开关P1口的各个LED。也可以用字节赋值指令一次性的开关8位P1口全部LED。
P1=0;   // P1口8位置低电平,点亮8个LED
P1=1;   // P1口8位置高电平,关闭8个LED。图5为多个LED灯-单个按键的运行结果与汇编语言。
上面的单片机系统和汇编语言控制指令,很容易被更改为多口、多位的单键控制系统。图5为多个LED灯-单个按键的运行结果与汇编语言。图6中对P2.0口改用双掷开关,实现P2.0口的两种电平状态。
ORG 0000H
  START: 
    MOV  A,#0FFH  
    MOV  P3,A
       MOV  P1,A
       MOV C, 0A0H
    JNB  0A0H,GUAN
       MOV  P1,#00H
RET
GUAN : 
       MOV  P3,#00H
     RET   ;可以产生闪烁效果
 END   

 

关闭窗口

相关文章