![]() |
|
||||||||||||||
| | 网站首页 | 关于我们 | 单片机培训 | 产品展示 | 产品开发 | 单片机解密 | 技术文章 | 下载中心 | 留言薄 | 技术论坛 | 联系我们 | | ||
|
||
|
|||||
| HT48 & HT46 MCU I / O 口的应用-流水灯 | |||||
| HT48 & HT46 MCU I / O 口的应用-流水灯 | |||||
作者:佚名 文章来源:本站原创 点击数: 更新时间:2007-10-16 ![]() |
|||||
|
HT48 & HT46 MCU I / O 口的应用-流水灯 介绍: 本例以HT48R30A-1 为例,模拟流水灯的功能,用LED 显示输出。PA 口每一位输出 接一个LED,串联一个240Ω电阻到电源,即可完成初步电路。通过这个例子,用户可以 了解到HT48XX 单片机输入输出口的基本用法。 电路设计: PA0~PA7 用作输出,每一位连接一个电阻来控制一个LED。通过左移(RLC)、右移(RRC) 指令来控制点亮的LED 左右移动。电路图如下: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 程序: #include ht48R30A-1.inc ;------------------------------------------------- data .section ‘data’ ;定义数据寄存器 count1 db ? ;延时计数器0 count2 db ? ;延时计数器1 lamp db ? ;亮灯状态记录器 ;-------------------------------------------------------------- code .section at 0 ‘code’;程序段 org 00h jmp start ;主程序开始 start: mov a,0 ;(1) mov pac,a ;PA口设为输出 cpl acc ;ACC取反(为0FFH) mov pa,a ;设定PA 口初始状态 mov a,1 ;(2) HT48 & HT46 MCU I / O 口的应用-流水灯 mov lamp,a ;亮灯状态初值送到亮灯状态记录器 llamp: ;亮灯左移的循环 mov a,lamp ;累加器的值送到亮灯状态记录器 cpl acc ;累加器值取反 mov pa,a ;点亮与亮灯状态记录器相对应的灯 call delay ;(3) ;调用延时子程序 clr c ;清除进位标志 rlc lamp ;(4) ;亮灯状态记录器值左移一位 sz lamp ;亮灯状态记录器是否为0 jmp llamp ;(5) ;如果不是则继续循环 rrc lamp ;(6) ;如果是,亮灯状态记录器右移一位 rlamp: ;亮灯右移的循环 mov a,lamp ;将亮灯状态记录器值送到累加器 cpl acc ;累加器取反 mov pa,a ;点亮与亮灯状态记录器对应的灯 call delay ;调用延时子程序 clr c ;清除进位标志 rrc lamp ;(7) ;亮灯状态记录器值右移一位 sz lamp ;判断亮灯状态记录器的值是否为0 jmp rlamp ;如果不是则继续循环 rlc lamp ;将亮灯状态记录器的值右移 jmp llamp ;(8) ;跳到左移循环 delay proc ;延时子程序 mov a,2fh mov count1,a ;定义延时计数器1 的初值 mov count2,a ;定义延时计数器2 的初值 d1: sdz count2 ;延时计数器2 递减,判断是否为0 jmp d1 ;如果不是,跳到D1 循环 sdz count1 ;延时计数器1 递减,判断是否为0 jmp d1 ;如果不是,跳到D1 循环 ret ;子程序返回 delay endp ;延时子程序结束 end ;主程序结束 程序说明: 这段小程序能够使八个LED 依次点亮,先从左向右,然后从右向左。程序开始时先设 定输入输出口的状态(1),在这里设定所有的口为输出,将PA 口的控制寄存器PAC 设为0。 然后设定输出的初始状态,PA 口的第一位设为0,点亮第一个LED(2)。为了能观察到LED 的闪亮,(3)设定了延时子程序。通过亮灯状态记录器和累加器,点亮的LED 由左移指令 控制左移(4)。为了判断左移时所有的LED 是否都依次点亮过,可以测试亮灯状态记录器 是否为0(5),如果是则恢复亮灯状态记录器左移时的终值(6),程序向下执行,控制LED 右移。这次用右移指令RRC 来控制(7),重复类似的过程。最后同样判断亮灯状态记录器 是否为0,如果是,则表明右移时所有的LED 都已经点亮过,程序跳到开始处,重新开始 循环(8)。 __ |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| HT48 & HT46 交通信号灯的实 HT MCU查表指令的使用 HT48 & HT46 MCU 用软件执行 HT48 & HT46 MCU 与HT93LC46 HT MCU 软件堆栈的应用 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | | |||
|