欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    AVR的IO口详解及正确的熔丝配置.docx

    • 资源ID:3359064       资源大小:25.79KB        全文页数:18页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    AVR的IO口详解及正确的熔丝配置.docx

    1、AVR的IO口详解及正确的熔丝配置AVR的I/O口详解及正确的熔丝配置 更改被锁死的单片机AVR的I/O口结构与使用详解其实采用真正双向IO结构的新型MCU很多,常用的有 增强型51,PIC,AVR等AVR的IO是真正双向IO结构,由于大部分网友都是从标准51转过来的,受标准51的准双向IO和布尔操作概念影响,没能掌握AVR的IO操作,所以有必要撰文说明一下先简单的回顾一下标准51的准双向IO结构这种准双向IO结构的特点是 1 输出结构类似 OC门,输出低电平时,内部NMOS导通,驱动能力较强(800uA);输出高电平靠内部上拉电阻,驱动能力弱(60uA)。 2 永远有内部电阻上拉(P0口除外

    2、),高电平输出电流能力很弱,所以即使IO口长时间短路到地也不会损坏IO口 (同理,IO口低电平输出能力较强,作低电平输出时不能长时间短路到VCC)3 作输入时,因为OC门有线与特性,必须把IO口设为高电平(所以按键多为共地接法)4 作输出时,输出低电平可以推动LED(也是很弱的),输出高电平通常需要外接缓冲电路(所以LED多为共阳接法)5 软件模拟 OC结构的总线反而比较方便-例如 IIC总线* P0口比较特殊,做外部总线时,是推挽输出,做普通IO时没有内部上拉电阻,所以P0口做按键输入需要外接上拉电阻。* OC门:三极管的叫集电极开路,场效应管的叫漏极开路,简称开漏输出。具备线与能力,有0得

    3、0。* 为什么设计成输出时高电平弱,低电平强-是考虑了当年流行的TTL器件输入特性AVR的真正双向IO结构就复杂多了,单是控制端口的寄存器也有4个 PORTx.DDRx,PINx,SFIOR(PUD位),不过功能也强劲多了作为通用数字I/O 使用时,所有AVR I/O 端口都具有真正的读- 修改- 写功能。这意味着用SBI 或CBI 指令改变某些管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻) 时不会无意地改变其他管脚的方向( 或者是端口电平、禁止/ 使能上拉电阻)。输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。并有保护二极管

    4、与VCC 和地相连。* (很多数字器件都有保护二极管,在低功耗应用时要考虑保护二极管的电流倒灌的影响)每个端口都有三个I/O 存储器地址: 数据寄存器 PORTx 数据方向寄存器 DDRx 端口输入引脚 PINx。数据寄存器PORTx和数据方向寄存器DDRx为读/ 写寄存器,而端口输入引脚PINx为只读寄存器。但是需要特别注意的是,对PINx 寄存器某一位写入逻辑1“ 将造成数据寄存器相应位的数据发生0“ 与“1“ 的交替变化。当寄存器MCUCR 的上拉禁止位PUD置位时所有端口引脚的上拉电阻都被禁止。在( 高阻态) 三态(DDxn, PORTxn = 0b00) 输出高电平(DDxn, PO

    5、RTxn = 0b11) 两种状态之间进行切换时,上拉电阻使能(DDxn, PORTxn = 0b01) 或输出低电平(DDxn,PORTxn = 0b10) 这两种模式必然会有一个发生。通常,上拉电阻使能是完全可以接受的,因为高阻环境不在意是强高电平输出还是上拉输出。如果使用情况不是这样子,可以通过置位SFIOR 寄存器的PUD 来禁止所有端口的上拉电阻。在上拉输入和输出低电平之间切换也有同样的问题。用户必须选择高阻态(DDxn,PORTxn = 0b00) 或输出高电平(DDxn, PORTxn = 0b10) 作为中间步骤。不论如何配置DDxn,都可以通过读取PINxn 寄存器来获得引脚

    6、电平PINxn寄存器的各个位与其前面的锁存器组成了一个同步器。这样就可以避免在内部时钟状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定。其缺点是引入了延迟。AVR IO具备多种IO模式: 1 高阻态 ,多用于高阻模拟信号输入,例如ADC数模转换器输入,模拟比较器输入 2 弱上拉状态(Rup=20K50K),输入用。为低电平信号输入作了优化,省去外部上拉电阻,例如按键输入,低电平中断触发信号输入 3 推挽强输出状态,驱动能力特强(20mA),可直接推动LED,而且高低驱动能力对称.使用注意事项:写用PORTx,读取用PINx实验时,尽量不要把管脚直接接到GND/VCC,当设定不当,I

    7、O口将会输出/灌入 80mA(Vcc=5V)的大电流,导致器件损坏。作输入时: 1通常要使能内部上拉电阻,悬空(高阻态)将会很容易受干扰。(表面看好像是51的抗干扰能力强,是因为51永远有内部电阻上拉,) 2尽量不要让输入悬空或模拟输入电平接近VCC/2,将会消耗太多的电流,特别是低功耗应用场合-CMOS电路的特点 3读取软件赋予的引脚电平时需要在赋值指令out 和读取指令in 之间有一个时钟周期的间隔,如nop 指令。 4功能模块(中断,定时器)的输入可以是低电平触发,也可以是上升沿触发或下降沿触发。 5用于高阻模拟信号输入,切记不要使能内部上拉电阻,影响精确度。例如ADC数模转换器输入,模

    8、拟比较器输入 作输出时: 采用必要的限流措施,例如驱动LED要串入限流电阻 复位时: 复位时内部上拉电阻将被禁用。如果应用中(例如电机控制)需要严格的电平控制,请使用外接电阻固定电平休眠时: 作输出的,依然维持状态不变 作输入的,一般无效,但如果使能了第二功能(中断使能),其输入功能有效。例如 外部中断的唤醒功能。AVR的C语言IO操作: AVR的C语言基于ANSI C,没有像51那样扩展了位操作(布尔操作),虽然汇编指令里面有SBI/CBI/SBIC/SBIS指令 , 所以需要采用 位逻辑运算 来实现,这是必须要掌握的。 IO口和功能寄存器的操作方法一样,但对于部分功能寄存器的读写有特殊要求

    9、,请参看手册。 不必考虑代码效率的问题,如果可能,GCCAVR会自动优化为SBI/CBI/SBIC/SBIS指令,跟汇编的效率是一样的。 例如 iom16.h 里面定义了 #define PA7 7 (这标准头文件定义了MCU的所有官方定义(包括寄存器,位,中断入口等),但管脚的第二功能没有定义) 想PA7为1 PORTA|=(1PA7); 想PA7为0 PORTA&=(1PA7); 想PA7取反 PORTA=(1PA7); 想检测PA7是否为1 if (PINA&(1PA7) ; 想检测PA7是否为0 if !(PINA&(1PA7) ; * 为左移运算符,不懂的就要好好复习C语言基础了。注

    10、意IO操作的顺序: /上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻 假设PA口驱动LED的负极,低电平灯亮初始化方法1: PORTA=0xFF; /内部上拉,高电平 DDRA=0xFF; /输出高电平-灯一直是灭的初始化方法2: DDRA=0xFF; /输出低电平-灯被错误点亮了 PORTA=0xFF; /输出高电平-马上被熄灭了,时间很短(1个指令不到uS时间),灯闪了一下,眼睛无法察觉,但要是这个IO口是控制炸药包的点火信号呢?工控场合要考虑可靠性的问题 模拟OC结构的IIC总线的技巧: 虽然AVR大多带有硬件IIC接口,但也有需要使用软件模拟IIC的情况,可以通过使

    11、用外部上拉电阻+控制DDRx的方法来实现OC结构的IIC总线。 IC的速度跟上拉电阻有关,内部的上拉电阻阻值较大(Rup=20K50K),只能用于低速的场合 #define SDA 0 /PC0 #define SCL 1 /PC1 (程序初始化设定 SDA和SCL都是 PORT=0,DDR=0) #define SDA_0() DDRA|=(1SDA) /输出低电平 #define SDA_1() DDRA&=(1SDA) /输入,外部电阻上拉为高电平 #define SCL_0() DDRA|=(1SCL) /输出低电平 #define SCL_1() DDRA&=(1SCL) /输入,外

    12、部电阻上拉为高电平 使用上面的SDA_0()/SDA_1()/SCL_0()/SCL_1()宏即可,直观,而且效率跟汇编是一样的AVR熔丝配置对I/O端口有什么影响 AVR熔丝配置对I/O端口有什么影响?是不是每次ISP烧录程序都可以更改它的熔丝配置呢? AVR的熔丝关于端口主要控制引脚的复用功能,比如有些型号的复位脚是可以复用的,时钟输入引脚也可以复用,当作普通的IO口使用,支持JTAG功能的单片机有一个熔丝位 JTAG_EN,设置为1的时候就禁用了JTAG,为0的时候原来这些JTAG的IO口就解放出来变成普通的IO口。说白了就是一些引脚有复用功能,用熔丝来设置是否把它变成普通的IO口。每次

    13、烧录的时候都可以更改熔丝配置,只要你想的话。另外顺便提示一句,初学者最好尽量少弄熔丝,掌握几个常用的熔丝位就可以了,比如JTAG_EN、时钟设置这些,有些不知道作用的熔丝千万别乱设置,后果很严重,会导致单片机锁死或者永远下载不了程序或者读出程序。AVR学习笔记之端口操作详解AVR端口是真正的双向端口,不像51伪双向。这也是AVR的一项优势,只是操作时大家注意DDRn就可以了。真正双向端口在模拟时序方面不如伪双向的方便。 DDRn PORTn PINn 解释:n为端口号:ABCDE DDRn:控制端口是输入还是输出,0为输入,1为输出。个人记忆方法:一比零大所以往外挤,即1为输出,0为输入。 P

    14、ORTn:从引脚输出信号,当DDRn为1时,可以通过PORTnx等端口操作语句给引脚输出赋值。 PINn:从引脚读输入信号,无论DDRn为何值,都可以通过xPINn获得端口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输出低电平 (

    15、 漏电流)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

    16、= 0x00;/ 建议赋值为零PORTA = 0x03;DDRA = 0x03;这两句使PA口的PA1和PA0处于输出状态,PA7PA2处于输入状态,因为先定义了PORTA=0x30,PA1和PA0的内部上拉电阻也使能了。这里的0x03即二进制的00000011,从左到右对应于Pn7-Pn0八个IO口。通过跑马灯程序来深入理解IO口的操作:/ICC-AVR application builder : 2006-11-21 9:20:57/ Target : M32/ Crystal: 7.3728Mhz#include#includevoid _delay(unsigned char n) /

    17、延时函数定义unsigned char i,j;for(;n!=0;n-) /n*10msfor(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?a?3?while(1) i=1; for (j=0;j8;j+) /循环8次,即PA0PA7轮流闪亮 PORTA=i; /反相输出,低电平有效,对应的灯亮 for (k=0;k10;k+) _delay(100); /

    18、延时 100*10=1秒,可自行调节 i=i1; /左移一位,I的值将向下面的列表那样变化 / 0b00000001 PA0 / 0b00000010 PA1 / 0b00000100 PA2 / 0b00001000 PA3 / 0b00010000 PA4 / 0b00100000 PA5 / 0b01000000 PA6 / 0b PA7 其他IO口操作指令:void main(void)PORTA=0xff;DDRA=0xff; /输出 模式 ,IO口上拉电阻有效,1为输出,0为输入。PORTA=0xf0; /等以下三条指令只对操作符号右边的数字位是一的位操作。PORTA&=0xf0;

    19、 /清零 0xf0为 01110000 ,即把654三位清零,其余数位不变。PORTA|=0x77; /置一 0xf0为 01110111 ,即把654210六位清零,其余数位不变。PORTA=0x70; /翻转 如果是零变成1,是一变成0。(P & 0x80)=0x80; /按位与 判断p的第七位是否是一,是则成立关于1 ADIF是一个寄存器变量,可以堪称数字4, 跟手册中的定义,包含芯片头文件的定义是一样的。(1 ADCSR=(1 ADCSR|=(1 ADCSR&=(1 while(ADCSR&(1while(1)while(ADCSR&(1 程序.Atmega16单片机有32个通用I/O

    20、口,有PA PD四组,每组都是8位。其主要的寄存器有DDRXn(X=A,B,C,D;n=0,2,7,下同),PORTXn和PINXn。 DDRX是方向寄存器,可读可写。在写操作时用于制定PX口是作为输入口还是输出口;在读操作时,从DDRX寄存器读出来的是端口的方向设定值。DDRX寄存器的初始值为0x00。 PORTX是数据寄存器,可读写。在写操作时,从PORTX写入的数据存入内部锁存器,以确定端口的工作状态或者将写入的数据送到外部数据总线。PORTX寄存器的初始值为0x00。PINX用来访问端口X的逻辑值,且只允许读操作。从PINX读入的数据只是X口引脚的逻辑 状态。其初始值为高阻态。引脚配置

    21、为输入时,若 PORTxn 为 1“ ,上拉电阻将使能。如果需要关闭这个上拉电阻, 可以将 PORTxn 清零,或者将这个引脚配置为输出。复位时各引脚为高阻态,即使此时并没有时钟在运行。当引脚配置为输出时,若 PORTxn 为 1“ ,引脚输出高电平(1“) ,否则输出低电平(“0“)。在 ( 高阻态 ) 三态 (DDxn, PORTxn = 0b00) 输出高电平 (DDxn, PORTxn = 0b11) 两种状态之间进行切换时,上拉电阻使能 (DDxn, PORTxn = 0b01) 或输出低电平.这两种模式必然会有一个发生。通常,上拉电阻使能是完全可以接受的,因为高阻环境不在意是强高电

    22、平输出还是上拉输出。如果使用情况不是这样子,可以通过置位 SFIOR 寄存器的 PUD 来禁止所有端口的上拉电阻.在上拉输入和输出低电平之间切换也有同样的问题。用户必须选择高阻态 (DDxn, PORTxn = 0b00) 或输出高电平 (DDxn, PORTxn=0b10) 作为中间步骤*/void IO_change(void)/高阻态DDxn=0;PORTxn=0;/禁止所有端口的上拉电阻SFIOR|=1PUD;/输出高电平DDxn=0xff;PORTxn=0xff;/使能所有端口的上拉电阻SFIOR&=(1PUD);void IO_change_A(void)/高阻态DDxn=0;PO

    23、RTxn=0;/上拉电阻使能 (DDxn, PORTxn = 0b01) 或输出低电平 (DDxn, PORTxn = 0b10)DDxn=0;PORTxn=0xff;/*DDxn=0xff;PORTxn=0;*/输出高电平DDxn=0xff;PORTxn=0xff;void IO_changge_B()/上拉输入DDxn=0;PORTxn=0xff;/高阻态 (DDxn, PORTxn = 0b00) 或输出高电平 (DDxn, PORTxn=0b11)DDxn=0;PORTxn=0;/*DDxn=0xff;PORTxn=0xff;*/输出低电平DDxn=0xff;PORTxn=0;/*读取

    24、引脚的数据*/void read_PINX(void)/*PUD 上拉电DDxn PORTxn (in SFIOR) I/O 阻 说明X Input No 高阻态 (Hi-Z)Input Yes 被外部电路拉低时将输出电流Input No 高阻态 (Hi-Z)Output No 输出低电平 ( 吸收电流 )X Output No 输出高电平 ( 输出电流 )不论如何配置 DDxn ,都可以通过读取PINxn 寄存器来获得引脚电平.PINxn 寄存器的各个位与其前面的锁存器组成了一个同步器,这样就可以避免在内部时钟状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定.引入了延迟是必然的。

    25、*/unsigned char i;/* 定义上拉电阻和设置高电平输出 */* 为端口引脚定义方向 */PORTB = (1PB7)|(1PB6)|(1PB1)|(1PB0);DDRB = (1DDB3)|(1DDB2)|(1DDB1)|(1DDB0);/* 为了同步插入 nop指令 */_NOP();/* 读取端口引脚 */i = PINB;/*未连接引脚的处理*/*如果有引脚未被使用,建议给这些引脚赋予一个确定电平。虽然如上文所述,在深层休眠模式下大多数数字输入被禁用,但还是需要避免因引脚没有确定的电平而造成悬空引脚在其它数字输入使能模式 ( 复位、工作模式、空闲模式 ) 消耗电流。最简单

    26、的保证未用引脚具有确定电平的方法是使能内部上拉电阻。但要注意的是复位时上拉电阻将被禁用。如果复位时的功耗也有严格要求则建议使用外部上拉或下拉电阻。不推荐直接将未用引脚与 VCC 或 GND 连接,因为这样可能会在引脚偶然作为输出时出现冲击电流。AVR熔丝位配置详解 AVR开发前准备熔丝位(Fuse)快速入门AVR 熔丝位(Fuse)快速入门 熔丝位 熔丝的作用AVR通过熔丝来控制芯片内部的一些功能,比如JTAG,时钟的使用,掉电检测电压,是否允许调试等。AVR Studio 中 STK500 处理熔丝位有巨大的优势:它是以功能组合让用户配置。 这种方式与小马(PnoyProg2000,SL-I

    27、SP)相比,具有以下的优势(优势是如此明显,可以用“巨大优势”来形容):1有效避免因不熟悉熔丝位让芯片锁死 (这是初学者的恶梦), 笔者曾经锁死过三片Atmega16。2不需要靠记忆与查文档,就能配置熔丝位(这也是初学者的恶梦)3动手之前:请你一定弄清楚了,你这样改会有什么后果,除非你有很多钱不在乎多锁死几个芯片。备份你的熔丝位状态,在点击Program之前再次检查熔丝位设置正确与否,不要误点了某项而没有注意到。由于ISP下载需要芯片本身提供时钟信号。一定注意,如果没有接外部晶振,一定不能编程熔丝位使用外部晶振。一旦那样做,就不能再进入编程了,也就是芯片被锁死。建议新手不要随意设置芯片的熔丝位

    28、,等对熔丝位比较了解了再进行操作。当芯片锁死已成事实,只要能够为芯片提供相对应的时钟源即可。如选择了Ext. RC Osc而又没有外部 RC(阻容) 振荡器时,可参考手册的接一个很简单的RC振荡电路!再将熔丝位配置改回正确的配置就可搞定!通过下图的方法打开连接:使用操作界面如下: (注意:下图中,打勾的表示选中,代表0。没有打勾的表示1)。上图的资料有很多相关项,你需要认识以下的代码,以理解意思。英文翻译说明如下:英文中文On-Chip Debug Enabled片内 调试 使能JTAG Interface EnabledJTAG 接口 使能Serial program downloading

    29、 (SPI) enabled串行编程下载(SPI) 使能 (ISP下载时该位不能修改)Preserve EEPROM memory through the Chip Erase cycle;芯片擦除时EEPROM的内容保留Boot Flash section size=xxxx words引导(Boot)区大小为xxx个词Boot start address=$yyyy;引导(Boot)区开始地址为 $yyyyBoot Reset vector Enabled引导(Boot)、复位 向量 使能Brown-out detection level at VCC=xxxx V;掉电检测的电平为 VCC=xxxx 伏Brown-out detection enabled;掉电检测使能Start-up time: xxx CK + yy ms启动时间 xxx 个时钟周期 + yy 毫秒Ext. Clock;外部时钟Int. RC Osc.内部 RC(阻容) 振荡器Ext. RC Osc.外部 RC(阻容) 振荡器Ext. Low-Freq. Crystal;外部 低频 晶体Ext. Crystal/Resonator Low Freq外部晶体/陶瓷振荡器 低频Ext. Crystal/Resonator Medium Freq


    注意事项

    本文(AVR的IO口详解及正确的熔丝配置.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开