- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
程序清单与注释.txt
资源名称:AVR.rar [点击查看]
上传用户:sophiecyc
上传日期:2007-10-14
资源大小:14856k
文件大小:2k
源码类别:
单片机开发
开发平台:
C/C++
- ;按键为常开按键,按键抬起时,单片机管脚为高电平;按键按下,单片机管脚为低电平
- ;低电平所对应的LED将被点亮,由硬件连接方式决定
- .include "m16def.inc" ;文件头,其中包含ATmega16芯片的硬件资源定义,针对ATmega16的
- ;程序一般需要有此指令。
- .org $0000 ;org是一条伪指令,表示随后程序的起始位置。即表示下条指令
- ;"rjmp RESET"位于程序存储器的$0000地址
- rjmp RESET ;单片机复位后从$0000开始执行程序,在这里放一条跳转指令,
- ;跳转到主程序开始的地址
- .org $0020 ;$0000地址之后是中断向量区,跳过中断区。中断与中断向量将在
- ;以后解释,可以参考光盘中ATmega16的数据手册。
- RESET:
- ldi r16,high(RAMEND)
- out SPH,r16
- ldi r16,low(RAMEND) ;设置堆栈,一般将堆栈设置到RAM的结尾。
- out SPL,r16 ;在自己编写程序时,可以使用以上代码
- ldi r16,0b11111111
- out DDRA,r16
- out DDRC,r16
- out DDRD,r16 ;设置PA,PC,PD端口全部为输出
- ldi r16,0b11111110;
- out DDRB,r16 ;设置PB0为输入,PB0管脚连接按键
- ldi r16,0b11111111;
- out PORTA,r16 ;PA端口全部输出高电平,LED熄灭
- out PORTC,r16
- out PORTD,r16 ;PC端口,PD端口输出高电平
- out PORTB,r16 ;PB1~PB7输出高电平,PB0为输入,且打开内部上拉
- ;端口的初始化完成。
- sec ;置进位C为1,为LED移位做准备
- MAIN:
- ldi r16,0b11111111
- out PORTA,r16 ;关闭所有的LED
- ldi r20,0b11111110 ;低电平点亮LED;r20用来存储输出状态
- in r16,PINB
- sbrc r16,0 ;判断PB0是否为低电平,即按键是否按下
- rjmp MAIN ;按键没有被按下,继续检测PB0
- LEDPLAY:
- out PORTA,r20 ;按键被按下,点亮相应的LED
- call DELAY ;点亮持续一段时间
- rol r20 ;r20往左循环一位,即下一位LED亮的状态
- in r16,PINB ;继续检测开关状态,
- sbrc r16,0 ;判断PB0是否为低电平,即按键是否按下
- rjmp MAIN ;没有按下,说明按键已经抬起,回到初始状态
- rjmp LEDPLAY ;按键按下,继续循环点亮
- ;延时子程序
- DELAY:
- ldi r17,0x03 ;设置延时子程序参数
- ldi r18,0xff
- ldi r19,0xff
- DELAY1:
- dec r18 ;r18减去1
- brne DELAY1 ;不为0转DELAY1;为0按顺序执行
- dec r19 ;r19减去1
- brne DELAY1 ;不为0转DELAY1;为0按顺序执行
- dec r17 ;r17减去1
- brne DELAY1 ;不为0转DELAY1;为0按顺序执行,延时程序结束,返回主程序
- ret ;子程序返回