attiny13a程序实例_关于ATtiny13A的一段程序
关于ATtiny13A的一段程序
[复制链接]
可调光手电筒电路及程序如下:
ourdev_427556[1].jpg (36.4 KB, 下载次数: 0)
2011-12-16 11:01 上传
#include
#include
//IO--寄存器定义
#define PB0 0 //tiny13第5脚
#define PB1 1 //tiny13第6脚
#define PB2 2 //tiny13第7脚
#define PB3 3 //tiny13第2脚
#define PB4 4 //tiny13第3脚
#define PB5 5 //tiny13第1脚
#define SM0 3
#define SM1 4
#define SE 5
//控制寄存器EECR位名设置
#define EERE 0 //读使能
#define EEPE 1 //编程使能
#define EEMPE 2 //准备好中断使能
#define EERIE 3 //主机编程使能
#define EEPM0 4 //EEPROM编程模式位
#define EEPM1 5 //
//LED亮度基数设置
#define lum3 0xff //亮度1--最亮
#define lum2 0x50 //亮度2
#define lum1 0x10 //亮度3
#define lum0 0x00 //亮度4--关
#define led_dis() (PORTB&=~(1<
#define led_en() (PORTB|=(1<
#define pwm_en() (PORTB&=~(1<
#define pwm_dis() (PORTB|=(1<
unsigned char lum; //亮度
unsigned char count;
unsigned char count1;
bit flag;
bit time_flag;
//=======================================================================
//eeprom写一个字节数据
//变量:address--地址 data--数据
//
//=======================================================================
void eep_write(unsigned char address,unsigned char data)
{
//等待上一次写操作结束
while(EECR&(1<
//设置编程模式
EECR=(0<>EEPM0);
//设置地址和数据寄存器
EEAR = address;
EEDR = data;
//置位EEMPE
EECR |= (1<
EECR |= (1<
//=======================================================================
//eeprom读一个字节数据
//变量:address--地址
//
//=======================================================================
unsigned char eep_read(unsigned char address)
{
//等待上一次写操作结束
while(EECR&(1<
//设置地址寄存器
EEAR=address;
//设置EERE以启动读操作
EECR |= (1<
return(EEDR);
}
//=======================================================================
//定时器T0溢出中断
//
//
//=======================================================================
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
count++;
if(count>=200)
{
count=0;
flag=~flag;
if(flag) led_en();
else led_dis();
}
}
//=======================================================================
//设备初始化
//
//
//=======================================================================
void init_devices(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_#pragma optsize+
#endif
//IO口初始化
PORTB = 0xff;
DDRB = 0x02;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9600.000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Inverted PWM
// OC0B output: Inverted PWM
TCCR0A=0x21;
TCCR0B=0x0a;
TCNT0=0x00;
OCR0A=0xff;
OCR0B=0x00;
// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
MCUCR=0x00;
GIMSK=0x00;
PCMSK=0x00;
GIFR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
#asm("sei") //打开全部中断
//MCUCR|=(1<
//MCUCR|=(1<
//#asm ("sleep"); //开机后进入中断
}
//=======================================================================
// 主程序
//
//
//=======================================================================
void main(void)
{
init_devices();
delay_ms(10);
lum=eep_read(0x01); //读取eeprom里的数据
lum++;
if(lum>=4) lum=0;
eep_write(0x01,lum); //写eeprom里的数据
led_dis();
TIMSK0=0x00;
TCCR0A=0x00;
TCCR0A=0x21;
switch(lum)
{
case 0: OCR0B=lum1;
break;
case 1: OCR0B=lum2;
break;
case 2: OCR0B=lum3;
break;
case 3: OCR0B=lum3; //闪
TCCR0A=0x01;
TIMSK0=0x02;
default: OCR0B=lum1;
break;
}
while (1)
{
}
}
我是用EEPROM做记录的,只有一个电源开关/
这是本人在网上找的一个手电筒电路和程序,PWM调光,ATtiny13中文资料如附件,因为初次接触AVR单片机,上面程序一些红色的代码是我不懂得地方(我现在只看到红色代码的地方,下面的还没看,可能下面还会有不懂的),请大侠们帮小弟讲解一番。首先是EEPROM读写子程序,资料上也是这个例程,但是就是不太懂,<
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_#pragma optsize+
#endif
是啥意思,pragma我查了下,还是不理解,optsize-和optsize+是什么东西?
请高手帮小弟解释解释,再拜,万分感谢!
attiny13a程序实例_关于ATtiny13A的一段程序相关推荐
- wps应用程序实例_有一个WPS Office应用程序实例wps.exe在运行,请关闭后重试 。如何解决?...
点击查看有一个WPS Office应用程序实例wps.exe在运行,请关闭后重试 .如何解决?具体信息 答:请按照下面步骤试试:右击任务栏-启动任务管理器-进程-结束进程树 1.右击系统下方的任务栏, ...
- attiny13a程序实例_关于ATtiny13A的程序
关于ATtiny13A的程序 [复制链接] 可调光手电筒电路及程序如下: ATTINY13_cn.pdf (1.56 MB, 下载次数: 635) 2011-12-16 11:05 上传 点击文件名下 ...
- 应用程序迁移_加速绿色IT-关于应用程序迁移和重新托管的实用指南
应用程序迁移 许多大型应用程序开发和维护帐户都考虑到将核心应用程序和数据库迁移到新环境的问题,从哪里开始,如何计划和实施迁移以及如何避免过程中的陷阱就迷茫了. 缺乏对标准方法论或指南的了解,在为快速有 ...
- python程序如何循环_在Python的一段程序中如何使用多次事件循环详解
背景 本文主要给大家介绍了关于在Python一段程序中使用多次事件循环的相关内容,我们在Python异步程序编写中经常要用到如下的结构 import asyncio async def doAsync ...
- api 定位 微信小程序 精度_一行代码区分微信小程序或QQ小程序
背景 很多开发者发现微信小程序的代码作为QQ小程序也能运行,可谓是无缝移植,这点为腾讯开发团队点赞. 但是QQ和微信小程序之间的服务端API有所不同,由此产生了一个需求:判断小程序当前是运行在微信还是 ...
- stc8g1k08程序范例_通过WiFi对STC单片机程序下载和调试
简介 本文设计了基于WiFi-UART的STC单片机下载调试模块,这样便于对嵌入式系统进行远程调试开发,特别是在一些具有移动功能的平台,强电平台以及需要实时监视和修改程序的应用场合. 本文相关的下载资 ...
- python怎么背景实现循环_在Python的一段程序中如何使用多次事件循环详解
背景 本文主要给大家介绍了关于在Python一段程序中使用多次事件循环的相关内容,我们在Python异步程序编写中经常要用到如下的结构 import asyncio async def doAsync ...
- 微信点餐小程序开发_分享微信点餐小程序可以实现哪些功能
线下餐饮实体店都开始摸索发展网上订餐服务.最多人选择的是入驻外卖平台,但抽成高,推广还要另买流量等问题,也让不少商家入不敷出.在这种情况下,建立自己的微信订餐小程序,做自己的私域流量是另一种捷径.那么 ...
- h5 bootstrap 小程序模板_汉中餐饮行业支付宝小程序模板
汉中餐饮行业支付宝小程序模板 r2y8w85 汉中餐饮行业支付宝小程序模板 在上,都能够开设自身的美妆旗舰店,根据这类方法开展精细化的服务,随后去一些线下用户流量.命名合适的小程序名称商城在搭建过程之 ...
最新文章
- nio的优势_NIO研究所 | 最有AI的EC6故事
- Raspberry Pi, UPNP(二), Scala
- 大型门户网站的可伸缩性架构设计
- python中find函数运算结果类型_Python 运算符与数据类型
- 跟熊浩学沟通30讲读后感_怎样提高自己的沟通表达能力
- 为什么python这么慢_为啥 Python 运行速度这么慢 ?
- 在SQL SERVER 中如何备份和恢复单个表?
- java 反射创建属性_使用Java反射机制确定基本数据类型属性
- linux 最大磁盘 16t,linux ext4无法使用超过16T磁盘的解决办法
- 阿里飞天云平台架构简介
- 回望中国计算机学会CCF十大历史贡献
- 一款全功能Markdown在线编辑器,让在线创作如此便捷简单
- Html5 css3 导航箭头,HTML – CSS3导航箭头
- python中使用缩进来体现代码之间的逻辑关系_Python使用缩进来体现代码之间的逻辑关系....
- 基于深度搜索的树路径求解_基于深度学习的自动验证码求解器
- 好看的头像太多了,全部拿住!
- 毕业设计 大数据B站数据分析与可视化 - python 数据分析 大数据
- Body-parser
- android计算器开发
- [NKNY]寒假培训《NY寒假有奖欢乐赛 》总结
热门文章
- hdu-5493 Queue(二分+树状数组)
- SPOJ LCS 后缀自动机
- (转)Spring Boot(十一):Spring Boot 中 MongoDB 的使用
- Toastr.js插件用法
- (转) Hibernate框架基础——操纵持久化对象的方法(Session中)
- 大型网站技术架构(七)--网站的可扩展性架构(转)
- 判断是否是微信浏览器JavaScript代码
- Airflow 中文文档:初始化数据库后端
- 【语义分割】全卷积网络(Fully Convolutional Networks, FCN)详解
- 计蒜客挑战难题:整数转换成罗马数字