微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > avr单片机流水灯汇编程序及电路图

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

时间:12-02 来源:互联网 点击:

这是电路图

本程序使用的avr单片机型号是m16 实现流水灯效果
下面是汇编程序源码:

/*

* 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

brnedel1

pop r20

dec r20

brnedel2

pop r20

dec r20

brnedel3

pop r20

ret

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top