Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
程序清单与注释.txt
Package: AVR.rar [view]
Upload User: sophiecyc
Upload Date: 2007-10-14
Package Size: 14856k
Code Size: 2k
Category:
SCM
Development Platform:
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 ;子程序返回