注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

chenht7的个人空间 http://home.eeworld.com.cn/space-uid-490705.html [收藏] [复制] [分享] [RSS]

日志

单片机_汇编编程_广告灯左移右移

已有 273 次阅读2017-9-25 10:38 |个人分类:汇编

 单片机_汇编编程_广告灯左移右移
时间:2017/9/25

# 一、任务描述
通过汇编编程,从而控制端口P1.0~P1.7口,先按照从小到大进行循环点亮。然后从大到小进行点亮。

# 二、任务实现
## 2.1 硬件连接
目前的硬件线路如下:
主控芯片: STC 89C52
输入引脚: 无
输出引脚: P1.0 ~ P1.7 -- LED
工作频率: 12MHz

其中的LED是通过上拉的方式进行连接。当输出低电平的时候,则点亮LED。

[图 5_广告灯左移右移_输出]

## 2.2 分析命题
这次主要的功能如下:
1. LED需要进行功能的显示。<--涉及到了调用延时的功能
2. 进行循环移位。<--调用RLL与RRL
3. 在两个循环变换的时候,需要对于初始值进行对应的改变。

## 2.3 确定算法
目前的方法是,将整体步骤分为四个部分,左移前,左移时,右移前,右移时。在四个部分,做四个不同的功能。然后再在这四个主要部分中,配套LED显示的延时函数。
采用的方法为,因为是循环的只有一颗LED点亮,所以采用的是,利用标志位来存储点亮的LED的信息。然后再通过不断地移动标志位来实现对应的效果。

## 2.4 流程图

[图 5_广告灯左移右移_流程图]

## 2.5 程序

```

ORG 00H
START:
    MOV A, #0FFH    ; 设置左移初始数值,1111 1111
    CLR C            ; 设置标志位为0
    MOV R2, #8        ; 设置循环次数,8次
LOOP:
    RLC A            ; 进行循环左移一次,如1111 1111,则为0111 1111
    MOV P1, A        ; 将寄存器A的数据,传输到P1端口
    LCALL DELAY        ; 进行延时
    DJNZ R2, LOOP    ; 进行左移的循环
    MOV R2, #8        ; 对移位的次数,进行重新赋值
    MOV A, #0FFH    ; 设置右移的初始数值,1111 1111
    CLR C            ; 将标志位置0
LOOP1:
    RRC A            ; 进行右移
    MOV P1, A        ; 将寄存器的内容进行输出
    LCALL DELAY        ; 进行对应的延时
    DJNZ R2, LOOP1    ; 循环右移
    LJMP START        ; 恢复起始位置,进行下一个总循环
DELAY:
    MOV R5, #20        ; 延时
D1:
    MOV R6, #20
D2:
    MOV R7, #248
    DJNZ R7, $
    DJNZ R6, D2
    DJNZ R5, D1
    RET
    END

```


# 三、总结

这个的实现方法更加的具有一般的性质,判断每一个端口的状态,对每一个状态进行处理,比较简洁明了,即使对于其他端口,也可以进行对应的处理。

# 参考资料

[1] 《单片机的编程与汇编程序案例》, https://wenku.baidu.com/view/9018d6795acfa1c7aa00cc58.html

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-10-17 19:24 , Processed in 0.111603 second(s), 11 queries , Redis On.

Powered by EEWORLD电子工程世界

© 2017 http://bbs.eeworld.com.cn/

返回顶部