找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4467|回复: 1
收起左侧

avr单片机流水灯汇编程序及电路图

[复制链接]
ID:72519 发表于 2015-1-20 01:39 | 显示全部楼层 |阅读模式
转自:http://www.51hei.com/mcu/2992.html

                                                
这是电路图


/*
* LEDlight.asm
*        运行环境  atmelage16        4M晶振        流水灯共阳极
*        由于引脚输出电流20mA  输入电流最大能达到40mA
*  Created: 2014/3/13 13:08:20
*   Author: Wujie
*/
.include "m16def.inc"                                        ;包含atmelage16定义文件
.def            temp1=r16                                                ;定义标识符temp1表示寄存器r16
.def            count=r17                                                ;定义标识符count表示寄存器r17

.org        $0000                                                        ;上单复位后第一条执行语句地址
                rjmp        reset                                        ;第一条语句跳转到程序入口,跳过中断向量区
.org        $002A                                                        ;主程序入口地址
reset:                                                                ;主程序标识符
                ldi        r20,high(RAMEND)                        ;high获取RAMEND高字节的立即数,将立即数装入r20
                out        sph,r20                                        ;将获取到的堆栈高字节立即数送堆栈寄存器SP高字节中
                ldi        r20,low(RAMEND)                        ;low获取RAMEND低位立即数,将立即数装入r20
                out        spl,r20                                        ;将获取到的堆栈低字节立即数送堆栈寄存器SP低字节中
                ser        temp1                                        ;将temp1置位,等于是将temp1设置为0b11111111
                sec                                                        ;将C标志位设置为1,下面将带进位位移
                out        ddrc,temp1                                ;将端口C全部设置为输出模式
                out        portc,temp1                                ;将引脚C全部设置为高电平,即全部熄灭
                ldi        r20,197                                        ;设置1秒延时
               
                ldi        count,0b01111111                        ;将最左边LED点亮

loop:                                                                        ;循环闪烁
                out        portc,count                                ;通过count来判断
                rcall        delay                                        ;调用延时函数
                rol        count                                        ;带进位循环左移            前面sec将标志位C设置为了1,即移位后填充为1
                rjmp        loop                                          ;集训循环闪烁


delay:        push        r20
del3:                push        r20
del2:                push        r20
del1:                dec                r20
                brne    del1
                pop                r20
                dec                r20
                brne    del2
                pop                r20
                dec                r20
                brne    del3
                pop                r20
                ret


回复

使用道具 举报

ID:74365 发表于 2015-3-8 22:04 | 显示全部楼层
汇编写的,也值得学习,参考
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表