1

关于投票
AVR单片机IO端口操作方法(ICCAVR)

    AVR单片机的IO端口操作是撑握AVR技术的基础,因此需要清晰的理解。下面的例子列出了操作IO端口的方法,资料来源于OURAVR。

举例一:将PB0定义为输出,且输出为高电平

DDRB=BIT(0); //定义 PB0为输出

PORTB|=BIT(0); // PB0 输出高电平

举例二:将PB0PB1定义为输出,PB0PB1均为高电平

DDRB|=BIT(0)|BIT(1); //定义 PB0PB1为输出

PORTB|=BIT(0)|BIT(1);// PB0PB1 输出高电平

举例三:将PB0数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1

PORTB^=BIT(0); //翻转PB0

举例四:将PB0PB1数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1

PORTB^=BIT(0)|BIT(1); // 翻转PB0 PB1

举例五:将PB2PB3定义为输入,不带上拉电阻

DDRB&=~(BIT(2)|BIT(3)); //定义 PB2PB3为输入

PORTB&=~(BIT(2)|BIT(3)); // PORT 0,没有上拉电阻

举例六:将PB2PB3定义为输入,带上拉电阻。即没有引用这些引脚时,缺省值为高电平

SFIOR&=~BIT(PUD); // SFIOR寄存器的上拉电阻控制位PUD0,在整个代码中,这句话可以不出现,或仅出现一次即可。因为它是一个控制全部上拉电阻的控制位。

DDRB&=~(BIT(2)|BIT(3)); //定义 PB2PB3为输入

PORTB|=BIT(2)|BIT(3); // PORT 1,满足上拉电阻的另一个条件

举例七:DDRB=BIT(0)|BIT(1) DDRB|=BIT(0)|BIT(1) 的区别

假定在执行上面两句指令前,DDRB 的状态为: 1000 0000

如果执行 DDRB="BIT"(0)|BIT(1) DDRB的状态变为: 0000 0011
如果执行 DDRD|=BIT(0)|BIT(1),,DDRB的状态变为: 1000 0011

那前一句会先清空以前的所有状态,后一句保留前面的状态。

在实际应用中,后一句更常用。

举例八:将第三位置1,除了用BIT(3),还有其它的表达方法吗?

DDRB|=BIT(3);

DDRB|=1<<3;

DDRB|=0x08;

DDRB|=0b00001000;

系统分类: 单片机
用户分类: AVR-study
标签: AVR
来源: 转贴
发表评论 阅读全文(178) | 回复(0)

1

关于投票
AVR的IO端口特性与应用

OURAVR网站上关于AVR单片机IO端口的经典解析,有助于理解IO端口的操作方法。

AVRIO端口特性分析:

点击开大图

分析IO引脚PxnDDRxn 只有为1时,可控单向开关才工作,PORTxn 的数值才能通过可控单向开送到 Pxn.

结论:DDRxn=1 时,为输出状态。输出值等于PORTxn。所以,DDRxn 为方向寄存器。PORTxn 为数据寄存器。

分析上拉电阻。E的电位为0时,即D1时,上拉电阻有效。

从与门的输入分析,只有以下的条件同时满足时,上拉电阻才有效

1PUD 0

2DDxn 0

3PORTxn 1

结论是:只有DDRxn = 0 即管脚定义为输入状态,并且 PORTxn="1", 而且UPD设置为0时,上拉电阻才生效。

分析 Pxn SLEEP。只有当 SLEEP = 0 时,可控开关2才导通,SD1不工作,施密特触发器的输入等于Pxn, 信号送到同步器后读取。

结论:Pxn 无论在输入或输出状态都能被AVR读取。SLEEP=0时输入才能被读取。

系统分类: 单片机
用户分类: AVR-study
标签: AVR
来源: 整理
发表评论 阅读全文(138) | 回复(0)

1

关于投票
LED+数码管+蜂鸣器循环控制程序

/************************************************************************************
Project      : AVR下载实验板/蜂鸣器、LED端口、数码管循环控制
Chip type  : ATmega16L
Frequency : 7.3728M
Software   : ICCAVR6.31
Author      : 林夕依然
Date         : 07.09.05
Version     : 1.0
Comments  :
1、确认预处理命令使用方法:前面加"#",后面不能加";"
2、验证宏定义一行写不下的解决办法
3、LED流水灯、蜂鸣器、 数码管移位的循环控制
4、第二种MS延时程序,较第一种快
5、循环控制的运用
6、参照BEE01,LED6-01
7、蜂鸣器用PD3口
*************************************************************************************/

        参照前些天的程序,进行一下综合,实现三种模块的循环控制,欢迎朋友们指导!

        看到朋友们总是来去匆匆,从未留下一点痕迹,不免有些失落,还请朋友们别嫌弃,该批评的批评,该指导的指导,以稍给些鼓励也好,谢谢!

rar

系统分类: 单片机
用户分类: AVR-study
标签: 无标签
来源: 原创
发表评论 阅读全文(712) | 回复(0)

1

关于投票
流水灯同蜂鸣器循环控制程序

/************************************************************************************
Project      : AVR下载实验板/蜂鸣器和LED端口循环控制
Chip type : ATmega16L
Frequency : 7.3728M
Software    : ICCAVR6.31
Author       : 林夕依然
Date           : 07.08.14初稿,07.09.04更新
Version      : 1.1
Comments  :
1、函数的调用
2、延时函数的运用
3、LED流水灯同蜂鸣器的控制
4、编程风格的练习
5、循环控制的运用
6、实现流水灯和蜂鸣器依次循环
*************************************************************************************/

rar

系统分类: 单片机
用户分类: AVR-study
标签: AVR
来源: 原创
发表评论 阅读全文(669) | 回复(0)

1

关于投票
函数调用练习

/*******************************************************************************
Project     : AVR下载实验板流水灯部分
Chip type: ATmege16L
Clock F    : 7.3728M
Software  : ICCAVR6.31
Author    : 林夕依然
Date        : 07.07.14初稿,07.08.30更新,07.08.31二次更新
Version  : 1.1
comments :
1、宏定义的使用
2、练习简单延时函数的编制,两种类型实现
3、AVR单片机端口寄存器的使用及理解
4、while();和do~while的代换
5、while(1)和for(;;)无限循环的代用
6、float型数据同int型数据所占空间及延时时间的比较

Update:(07.08.31)
1、方法二中用uint i替代uchar i,方便延时函数的书写
2、增加宏定义uint
3、增加方法三,重新编写了延时函数,用unsigned int      代替float,并且用uint型单层循环来替代二层的uchar型,看一下延时是否准确
4、方法三增加第二种跑马灯程序,第一种循环5次后运行第二种
5、方法三使用LED_01()和LED_02()两个函数来代表两种跑马灯方式,练习程序模块化
6、练习函数的嵌套调用
*******************************************************************************/  

         在“简单延时函数的应用”的基础上,编写此程序,主要练习函数的调用,并对函数类型的应用进行了简单的测试,算是有了一些心得。欢迎朋友们批评指正!

rar

系统分类: 单片机
用户分类: AVR-study
标签: AVR
来源: 原创
发表评论 阅读全文(565) | 回复(0)

1

关于投票
简单延时函数的应用

/*******************************************************************************
Project     : AVR下载实验板流水灯部分
Chip type : ATmege16L
Clock F    : 7.3728M
Software   : ICCAVR6.31
Author      : 林夕依然
Date         : 07.07.14初稿,07.08.30更新补充
Version     : 1.1
comments :
1、宏定义的使用
2、练习简单延时函数的编制,两种类型实现
3、AVR单片机端口寄存器的使用及理解
4、while();和do~while的代换
5、while(1)和for(;;)无限循环的代用
6、float型数据同int型数据所占空间及延时时间的比较
*******************************************************************************/

        以前写的程序,今天重新拿出来同朋友们分享,欢迎提出宝贵意见,谢谢!

        主要练习C语言的等价代换及延时函数的编写,源程序中用两种方法实验同样的功能,采用不同的代换,发现ICCAVR在编译float型时高利率不高。

rar

系统分类: 单片机
用户分类: AVR-study
标签: 无标签
来源: 原创
发表评论 阅读全文(467) | 回复(0)

1

关于投票
六位数码管移位显示程序

/*******************************************************************************
Project       : AVR下载实验板LED6部分
Chip type   : ATmege16L
Clock F     : 7.3728M
Software    : ICCAVR6.31
Author       : 林夕依然
Date          : 07.08.29
Version      : 1.0
comments  :
1、以实验板LED6原程序为基础进行更改,参考ICCAVR网站:LED数码管程序(实验四)
2、练习74HC595移位寄存器的使用
3、SPI功模块学习
4、数码管的向右移位显示,初始为123456,然后数据由高位向低位循环移动,时间间隔为1s
5、延时函数的编制使用
6、用二层char型变量循环比用float型变量节省空间
*******************************************************************************/

        参考ICCAVR网站:LED数码管程序(实验四),编制了六位数码管移位显示程序。程序初始化后数码管首先显示123456,紧接着开始向右移位显示,时间间隔为1s.

        欢迎朋友们多多指点,给出宝贵意见。

rar

系统分类: 单片机
用户分类: AVR-study
标签: AVR
来源: 原创
发表评论 阅读全文(697) | 回复(0)

1

关于投票
八路LED流水灯程序

/*******************************************************************************
Project      : AVR下载实验板流水灯部分
Chip type  : ATmege16L
Clock F    : 7.3728M
Software   : ICCAVR6.31
Author      : 林夕依然
Date         : 07.07.12
Version     : 1.0
comments :
1、以实验板八个LED灯为硬件电路
2、练习简单延时函数的编制
3、AVR单片机端口寄存器的使用及理解
4、练习程序模块化,结构化的书写
*******************************************************************************/       

        前段时间练习了不少关于LED显示的程序,下面贴出一个,程序是参照书上的资料编写的。(买的开发板上的LED程序都是汇编的,都是我所看不懂的),需要说明几点:

1、八路LED由ATmega16L的PA口控制

2、八路LED共阳极连接后接+5V

由于还未能掌握AVR内涵,还请各位朋友批评指正,多提意见,谢谢!

rar

系统分类: 单片机
用户分类: AVR-study
标签: AVR
来源: 原创
发表评论 阅读全文(725) | 回复(1)

1

关于投票
六位数码管简单显示程序

很久没来维护和更新了,下面上传一个六位数码管简单的显示程序

/*******************************************************************************
Project      : AVR下载实验板LED6部分
Chip type  : ATmege16L
Clock F    : 7.3728M
Software   : ICCAVR6.31
Author      : 林夕依然
Date         : 07.08.28
Version     : 1.0
comments :
1、以实验板LED6原程序为基础进行更改
2、练习74HC595移位寄存器的使用
3、SPI功模块学习
4、数码管的控制显示
*******************************************************************************/

        这个是根据我买的开发板上的一个程序改的,由于水平有限,有些简单,复杂一点的还在研究中,请朋友们提出宝贵意见。

另外:我打算利用此硬件电路写一段数码管从000000依次计数到001000的程序,由于水平有限,还没有想出思路,请过路的高手指点一二,谢谢!

rar

 

系统分类: 单片机
用户分类: AVR-study
标签: AVR
来源: 原创
发表评论 阅读全文(577) | 回复(0)

1

关于投票
AVR的IO端口特性与应用

        做为单片机初学者,端口操作应该算是一个重要的学习单元,下面就推荐一份ouravr网站上的由阿莫先生整理的资料。以供初学者学习。

doc