AVR单片机入门----MEGA端口操作

发布者:森绿企鹅最新更新时间:2017-12-11 来源: eefocus关键字:AVR单片机  MEGA  端口操作 手机看文章 扫描二维码
随时随地手机看文章

    AVR端口是真正的双向端口,不像51伪双向。这也是AVR的一项优势,只是操作时大家注意DDRn就可以了。真正双向端口在模拟时序方面不如伪双向的方便。

    DDRn PORTn PINn 解释:n为端口号:ABCDE

    DDRn:控制端口是输入还是输出,0为输入,1为输出。个人记忆方法:一比零大所以往外挤,即1为输出,0为输入。

    PORTn:从引脚输出信号,当DDRn为1时,可以通过PORTn=x等端口操作语句给引脚输出赋值。

    PINn:从引脚读输入信号,无论DDRn为何值,都可以通过x=PINn获得端口n的外部电平。

    当引脚配置为输入时,若PORTxn 为"1“,上拉电阻将使能。内部上拉电阻的使用在键盘扫描的时候还要说到。

    端口更详细功能及介绍以及端口第二功能请参考数据手册。

    端口引脚配置

    DDxn PORTxn PUD (in SFIOR) I/O 上拉电阻说明

    0 0 X 输入 No 高阻态 (Hi-Z)

    0 1 0 输入 Yes被外部电路拉低时将输出电流

    0 1 1 输入 No高阻态(Hi-Z)

    1 0 X 输出 No输出低电平 ( 漏电流)

    1 1 X 输出 No输出高电平 ( 源电流)

    如果有引脚未被使用,建议给这些引脚赋予一个确定电平。最简单的保证未用引脚具有确定电平的方法是使能内部上拉电阻。但要注意的是复位时上拉电阻将被禁用。如果复位时的功耗也有严格要求则建议使用外部上拉或下拉电阻。不推荐直接将未用引脚与VCC 或GND 连接,因为这样可能会在引脚偶然作为输出时出现冲击电流。

    下面我们来看例子:

    void port_init(void)

    {

    PORTA = 0x03;

    DDRA = 0x03;

    PORTB = 0x00;

    DDRB = 0x01;

    PORTC = 0x00;

    DDRC = 0x00;

    PORTD = 0x00;

    DDRD = 0x00;// 建议赋值为零

    }

    PORTA = 0x03;DDRA = 0x03;这两句使PA口的PA1和PA0处于输出状态,PA7—PA2处于输入状态。这里的0x03即二进制的00000011,从左到右对应于Pn7--Pn0八个IO口。

    通过跑马灯程序来深入理解IO口的操作:

    CODE:

    //ICC-AVR application builder : 2006-11-21 9:20:57

    // Target : M32

    // Crystal: 7.3728MHz

    #include

    #include

    void _delay(unsigned char n) //延时函数定义

    {

    unsigned char i,j;

    for(;n!=0;n--) //n*10ms

    {

    for(j=100;j!=0;j--) //100us*100=10ms

    {

    for(i=147;i!=0;i--) //delay 100us

    ;

    }

    }

    }

    int main(void)

    {

    unsigned char i,j,k; //

    PORTA=0xFF; //PA口设为输出高电平,灯灭

    DDRA=0xFF; //PA口设置为输出

    while(1)

    {

    i=1;

    for (j=0;j<8;j++) //循环8次,即PA0~~PA7轮流闪亮

    {

    PORTA=~i; //反相输出,低电平有效,对应的灯亮

    for (k=0;k<10;k++) _delay(100); //延时 100*10=1秒,可自行调节 i=i<<1; //左移一位,I的值将向下面的列表那样变化

    // 0b00000001 PA0

    // 0b00000010 PA1

    // 0b00000100 PA2

    // 0b00001000 PA3

    // 0b00010000 PA4

    // 0b00100000 PA5

    // 0b01000000 PA6

    // 0b10000000 PA7

    }

    }

    }[Copy to clipboard]

    其他IO口操作指令:

    void main(void)

    {

    PORTA=0xff;

    DDRA=0xff; //输出 模式 ,IO口上拉电阻有效,1为输出,0为输入。

    PORTA=0xf0; //等

    以下三条指令只对操作符号右边的数字位是一的位操作。

    PORTA&=~0x70; //清零 0x70为 01110000 ,即把*三位清零,其余数位不变。

    PORTA|=0x77; //置一 0x77为 01110111 ,即把*210六位清零,其余数位不变。

    PORTA^=0x70; //翻转 0x70为 01110000,即*三位,如果是零变成1,是一变成0。

    (P & 0x80)==0x80; //按位与 判断p的第七位是否是一,是则成立

    }

    关于1<

    ADIF是一个寄存器变量,可以堪称数字4, 跟手册中的定义,包含芯片头文件的定义是一样的。

    (1<

    ADCSR=(1<

    ADCSR|=(1<

    ADCSR&=~(1<

    while(ADCSR&(1<

    while(1)

    {

    while(ADCSR&(1<

    {

    程序......

    }

    }

    实践出真知:只看这样的说明是很枯燥的,从实践中去学习会是更好的途径,把这些代码都写到单片机里,一步一步调试运行,看看各个端口以及寄存器的效果,也锻练程序调试能力,和乐而不为呢?


关键字:AVR单片机  MEGA  端口操作 引用地址:AVR单片机入门----MEGA端口操作

上一篇:基于AVR单片机的轮胎模具内径测量系统设计
下一篇:基于AVR单片机的语音识别系统设计方案

推荐阅读最新更新时间:2024-03-16 15:49

AVR单片机-- I/O口的使用
简介:本文章主要通过程序控制实现按键控制LED 灯的亮灭,按一下亮,再按一下灭,如此循环往复,并学习AVR 单片机的I/O口如何配置为输入和输出。 //文件名:delay_rest.c //文件描述:实现按键控制LED 灯的亮灭,按一下亮,再按一 //下灭,如此循环往复。 //实验目的:学习AVR 单片机的I/O口如何配置为输入和输出 //当前版本号:V1.0 //--------------------------------------------------------------------- //----------------------------start------------------
[单片机]
AVR单片机学习笔记
下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。 1、 AVR单片机采用RISC 架构 ,8051单片机采用CISC架构。前者速度为后者的2~4倍,为流水线操作指令 2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器 3、 哈佛结构,131条机器指令 4、 延迟开机功能 5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟 6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG
[单片机]
基于AVR单片机的博物馆防盗保护器系统设计
引言 博物馆内的藏品常常受到人为盗窃的威胁,周围环境的变化也会对其造成破坏,因此需要极为可靠的防盗系统及完善的空调系统,本设计的目的就是实现对馆藏品的智能化防盗和保护。博物馆关闭时便可将此防盗保护器启动,通过CMOS传感器对博物馆进行扫描,图像信号在微处理器中进行处理筛选压缩,并与被监控信号(人形信号)进行比较,一旦出现类人形信号,便将数据进行存储(这样可以大大节省存储空间),并进行报警。被监控信号可以增加,可以是其它任何可能对馆藏品造成损害的动物,只不过在进行筛选比较处理时要复杂一些。另外,通过温度传感器对温度信号进行采集监控,通过控制馆内空调来达到调节温度的效果,以避免馆内文物因为温度的变化而造成损害。 图1 系统功能框
[单片机]
基于<font color='red'>AVR单片机</font>的博物馆防盗保护器系统设计
基于AVR单片机的新型防汽车追尾安全装置设计
1 引言 随着我国汽车保有量逐年增加,高速公路的发展使得汽车的行驶速度越来越快。车流量也越来越大,导致高速公路交通事故频频发生,其发生率甚至达到普通公路的4倍,且有上升趋势。在高速公路所发生的交通事故中尤以汽车追尾居多,约占30%~40%,而在这些事故中,80%以上的事故是由于司机反应不及时或者判断失误引起的。由于目前只有高档车型才配有防碰撞装置,而且以往设计中只单纯考虑在车前或车后安装防碰撞装置,不尽全面,所以设计一套低成本、通用性好的汽车防车前车后追尾的安全装置具有广阔的应用和市场前景。因此。这里提出一种基于AVR的新型防汽车追尾安全装置设计。 2 安全装置组成和硬件电路设计 安全装置硬件电路设计主要由单片
[单片机]
AVR单片机的智能家居监控系统提高生活水平
随着科技的发展和人民生活水平的提高,智能家居成为了一个热门的研究领域。智能家居问题中面临的主要问题就是安全防盗、电器控制等问题。 智能 家居不仅能够完成出现问题对主人进行的报警功能,还应提供智能家居设备执行主人的命令操作,比如通过手机或是平板电脑等终端控制电器进行做饭或是空气清洁等工作。 因此, 智能 家居中用到的传感器主要有红外传感器、门磁传感器、实时时钟芯片等。 1 家居监控系统工作原理 系统主要由门磁报警、红外传感器报警、煤气传感器报警、正常工作、用户命令执行动作构成。 1.1 门磁报警 门磁系统完成对门出入安全的监测,主要有磁铁和干簧管组成。当主人离开房子的时候可以启动防盗功能,如果两者保持正对,那么在磁铁的作用下
[电源管理]
<font color='red'>AVR单片机</font>的智能家居监控系统提高生活水平
AVR单片机程序设计架构
昨天在回家的火车上,带了一本《匠人手记》,看了几篇,受益匪浅。其中一篇讲到编程思路,也就是如何入手构建一个程序。我用C语言在原文的基础上稍微展开一下,以备日后查看。 简单的程序只要用简单的方式就可以了,我在此之前也只会这一种方式。也就是: void main() { init();//初始化 while (1) { module01();//模块1,或若干语句 } } 匠人在书中讲到事件驱动机制,例如: void main() { init(); while (1) { if (事件1条件) shijian1();//执行事件1 if (事件2条件)
[单片机]
AVR单片机---串口发送
第一种方法: void send1_1byte(uchar k) { while(UCSR1A.5==0){;} UDR1=k; while(UCSR1A.6==0){;} UCSR1A.6=1; } void send0_1byte(uchar k) { while(UCSR0A.5==0){;} UDR0=k; while(UCSR0A.6==0){;} UCSR0A.6=1; } 这种方法常用。 第二种方法: putchar(k);
[单片机]
AVR单片机I/O口使用注意事项
1. 先正确设置DDRx方向寄存器,再进行I/O口的读写操作。 2. I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效,外部引脚呈现三态高阻输入状态。 3. 当I/O口工作在输入方式时,且要读取外部引脚上的电平时,应读取PINxn的值,而不是PORTxn的值。 4. 当I/O工作在输入方式时,要根据实际情况使用或不使用内部的上拉电阻。 5. 一旦将I/O口的工作方式由输出设置成输入方式后,必须等待1个时钟周期后才能正确读到外部引脚PINxn的值。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved