AVR studio + WinAVR: AVR studio 原厂IDE ,调试软件(含汇编器) WINAVR(也就是GCC了):编译器 GCC AVR 的编译器是开源的ATMEL AVR开发工具。GCC AVR包含以下组件:C/C++ 编译器,汇编编译器,模拟仿真,编程器,硬件调试器(支持JTAGICE mkII)。 这个是完全开放的,也是免费的!但是学他,就有一些麻烦,但是我强烈建议你去学他!因为是免费,而且会不断升级,外国特别多人用他,国内也开始用的人多了 IAR for AVR: 开发环境和编译器 在所有第三方提供的C编译器中 IAR AVR的功能、代码效率、稳定性都是最好的。 目前最新版本的IAR AVR包含以下组件:C/C++ 编译器,汇编编译器,C-SPY 模拟仿真,硬件调试器(支持 JTAGICE mkII). ICC AVR : ImageCraft公司的.ICC最容易上门,界面友好,使用特别简单,建议从ICC学起(但是他只是提供45天的试用),这一步也是为你进入AVR准备好了 ICC AVR C编译器是AVR初学者的首选 C编译器,因为ICC AVR的自助生成代码向导功能非常好用。ICC AVR Demo版本为45天完全版,45天后转为2K限制版。 下载软件: SLISP双龙下载软件 SLISP是双龙公司开发的ISP编程软件。是国内ISP软件中的佼佼者。 PIC:PIC单片机(PIC16F73/74 PIC18F6490)、MPLAB IDE、PICC/PICC18编译器;Protel AVR:AVR单片机、AVR studio、WinAVR/IAR、SL SLIP,M8/M88/M16/M169/M32 ———-AVR烧写 SL SLIP
校验芯片ID码 R5焊接上把CLK和VCC短路了导致不能烧写程序 —熔丝配置 熔丝 AVR的熔丝设置是可以反复修改的,不象保险丝那样烧断了就不能复原。通过设置熔丝可以修改芯片的运行时钟、启动时间、看门狗等。最常修改的就是时钟设 置,一般来说,新买回来的AVR芯片都是默认使用内部的RC振荡时钟,不需要接晶振、电容等外部器件。比如ATmega8515默认的内部RC振荡 1MHz时钟;ATmega48/88/168默认的是内部RC振荡8MHz时钟,经8分频后得到1MHz时钟。 请注意,上图中,打“√”表示“0”,否则就是“1”。按F1键可以查看帮助文件 其中 CKSEL3~0 就是时钟选项,通过它可以选择内部、外部时钟,时钟频率等。 通过上图可以看出,如果我们要使用外部晶振,那么CKSEL3~1 = 111 就可以了,这个时候CKSEL0、SUT1、SUT0只是启动延时的选项,要求不严格的话使用默认选择就可以了。 如果不小心把熔丝设置错了,芯片就有可能被锁死,所以大家在初次设置熔丝的时候请小心一下。当然芯片锁死的解锁方法也是很多的,用并行高压编程器是 最直接的方法,还有一个比较有效的方法就是使用一个有源时钟接在被锁芯片的 XTAL1 上,再用ISP下载线把熔丝设置成默认设置就可以了。 mega8熔丝位:1:未编程(不选中)0:编程(选中) *************************************** 熔丝位 说明 缺省设置 *************************************** RSTDISBL: 复位或I/O功能选择 1 1:复位功能;0:I/O功能(PC6) WDTON: 看门狗开关 1 1:看门狗打开(通过WDTCR允许);0:看门狗禁止 SPIEN: SPI下载允许 0 1:SPI下载禁止;0:SPI下载允许(注:当使用SPI编程时,该项不可用) EEAVE: 烧录时EEPROM数据保留 1 1:不保留;0:保留 BODEN: BOD功能控制 1 1:BOD功能禁止;0:BOD功能允许 BODLEVEL: BOD电平选择 1 1:2.7V电平;0:4.0V电平 BOOTRST: 复位入口选择 1 1:程序从0x0000地址开始执行;0:程序从引导区确定的入口地址开始执行 *************************************** BOOTSZ1/0: 引导程序大小及入口 00 00:1024Word/0xc00; 01:512Word/0xe00; 10:256Word/0xf00; 11:128Word/0xf80 *************************************** BLB02/01: 程序区指令位选择 11 11:SPM和LPM指令都允许执行 10:SPM指令禁止写程序区 01:引导区LPM指令禁止读取程序区内容;如果中断向量定义在引导区,则禁止该中断在程序区执行。 00:SPM指令禁止写程序区;引导区LPM指令禁止读取程序区内容;如果中断向量定义在引导区,则禁止该中断在程序区执行。 *************************************** BLB12/11: 引导区指令位选择 11 11:SPM和LPM指令都允许执行 10:SPM指令禁止写引导区 01:程序区LPM指令禁止读取引导区内容;如果中断向量定义在程序区,则禁止该中断在引导区执行。 00:SPM指令禁止写引导区;程序区LPM指令禁止读取引导区内容;如果中断向量定义在程序区,则禁止该中断在引导区执行。 *************************************** LB2/1: 程序区加密位选择 11 11:未加密 10:程序和EEPROM编程功能禁止,熔丝位锁定 00:程序和EEPROM编程及校验功能禁止,熔丝位锁定 (注:先编程其他熔丝位,再编程加密位) *************************************** CKSEL3/0: 时钟源选择 0001 CKOPT: 晶振选择 1 SUT1/0: 复位启动时间选择 10 *************************************** CKSEL3/0=0000:外部时钟,CKOPT=0:允许芯片内部XTAL1管脚对GND接一个36PF电容;CKOPT=1:禁止该电容 —————- CKSEL3/0=0001-0100:已经校准的内部RC振荡,CKOPT总为1 0001:1.0M 0010:2.0M 0011:4.0M 0100:8.0M —————- CKSEL3/0=0101-1000:外部RC振荡,CKOPT=0:允许芯片内部XTAL1管脚对GND接一个36PF电容;CKOPT=1:禁止该电容 0101:<0.9M 0110:0.9-3.0M 0111:3.0-8.0M 1000:8.0-12.0M —————- CKSEL3/0=1001:外部低频晶振,CKOPT=0:允许芯片内部XTAL1/XTAL2管脚对GND各接一个36PF电容;CKOPT=1:禁止该电容 —————- CKSEL3/0=1010-1111:外部晶振,陶瓷振荡子,CKOPT=0:高幅度振荡输出;CKOPT=1:低幅度振荡输出 101X:0.4-0.9M 110X:0.9-3.0M 111X:3.0-8.0M *************************************** SUT1/0: 复位启动时间选择 当选择不同晶振时,SUT有所不同。 三、时钟选择一览表 时钟源 启动延时 熔丝 外部时钟 6 CK + 0 ms CKSEL=”0000” SUT=”00” 外部时钟 6 CK + 4.1 ms CKSEL=”0000” SUT=”01” 外部时钟 6 CK + 65 ms CKSEL=”0000” SUT=”10” 内部RC振荡1MHZ 6 CK + 0 ms CKSEL=”0001” SUT=”00” 内部RC振荡1MHZ 6 CK + 4.1 ms CKSEL=”0001” SUT=”01” 内部RC振荡1MHZ 6 CK + 65 ms CKSEL=”0001” SUT=”10” 内部RC振荡2MHZ 6 CK + 0 ms CKSEL=”0010” SUT=”00” 内部RC振荡2MHZ 6 CK + 4.1 ms CKSEL=”0010” SUT=”01” 内部RC振荡2MHZ 6 CK + 65 ms CKSEL=”0010” SUT=”10” 内部RC振荡4MHZ 6 CK + 0 ms CKSEL=”0011” SUT=”00” 内部RC振荡4MHZ 6 CK + 4.1 ms CKSEL=”0011” SUT=”01” 内部RC振荡4MHZ 6 CK + 65 ms CKSEL=”0011” SUT=”10” 内部RC振荡8MHZ 6 CK + 0 ms CKSEL=”0100” SUT=”00” 内部RC振荡8MHZ 6 CK + 4.1 ms CKSEL=”0100” SUT=”01” 内部RC振荡8MHZ 6 CK + 65 ms CKSEL=”0100” SUT=”10” 外部RC振荡≤0.9MHZ 18 CK + 0 ms CKSEL=”0101” SUT=”00” 外部RC振荡≤0.9MHZ 18 CK + 4.1 ms CKSEL=”0101” SUT=”01” 外部RC振荡≤0.9MHZ 18 CK + 65 ms CKSEL=”0101” SUT=”10” 外部RC振荡≤0.9MHZ 6 CK + 4.1 ms CKSEL=”0101” SUT=”11” 外部RC振荡0.9-3.0MHZ 18 CK + 0 ms CKSEL=”0110” SUT=”00” 外部RC振荡0.9-3.0MHZ 18 CK + 4.1 ms CKSEL=”0110” SUT=”01” 外部RC振荡0.9-3.0MHZ 18 CK + 65 ms CKSEL=”0110” SUT=”10” 外部RC振荡0.9-3.0MHZ 6 CK + 4.1 ms CKSEL=”0110” SUT=”11” 外部RC振荡3.0-8.0MHZ 18 CK + 0 ms CKSEL=”0111” SUT=”00” 外部RC振荡3.0-8.0MHZ 18 CK + 4.1 ms CKSEL=”0111” SUT=”01” 外部RC振荡3.0-8.0MHZ 18 CK + 65 ms CKSEL=”0111” SUT=”10” 外部RC振荡3.0-8.0MHZ 6 CK + 4.1 ms CKSEL=”0111” SUT=”11” 外部RC振荡8.0-12.0MHZ 18 CK + 0 ms CKSEL=”1000” SUT=”00” 外部RC振荡8.0-12.0MHZ 18 CK + 4.1 ms CKSEL=”1000” SUT=”01” 外部RC振荡8.0-12.0MHZ 18 CK + 65 ms CKSEL=”1000” SUT=”10” 外部RC振荡8.0-12.0MHZ 6 CK + 4.1 ms CKSEL=”1000” SUT=”11” 低频晶振(32.768KHZ) 1K CK + 4.1 ms CKSEL=”1001” SUT=”00” 低频晶振(32.768KHZ) 1K CK + 65 ms CKSEL=”1001” SUT=”01” 低频晶振(32.768KHZ) 32K CK + 65 ms CKSEL=”1001” SUT=”10” 低频石英/陶瓷振荡器(0.4-0.9M) 258 CK + 4.1 ms CKSEL=”1010” SUT=”00” 低石英/陶瓷振荡器(0.4-0.9M) 258 CK + 65 ms CKSEL=”1010” SUT=”01” 低石英/陶瓷振荡器(0.4-0.9M) 1K CK + 0 ms CKSEL=”1010” SUT=”10” 低石英/陶瓷振荡器(0.4-0.9M) 1K CK + 4.1 ms CKSEL=”1010” SUT=”11” 低石英/陶瓷振荡器(0.4-0.9M) 1K CK + 65 ms CKSEL=”1011” SUT=”00” 低石英/陶瓷振荡器(0.4-0.9M) 16K CK + 0 ms CKSEL=”1011” SUT=”01” 低石英/陶瓷振荡器(0.4-0.9M) 16K CK + 4.1ms CKSEL=”1011” SUT=”10” 低石英/陶瓷振荡器(0.4-0.9M) 16K CK + 65ms CKSEL=”1011” SUT=”11” 中石英/陶瓷振荡器(0.9-3.0M) 258 CK + 4.1 ms CKSEL=”1100” SUT=”00” 中石英/陶瓷振荡器(0.9-3.0M) 258 CK + 65 ms CKSEL=”1100” SUT=”01” 中石英/陶瓷振荡器(0.9-3.0M) 1K CK + 0 ms CKSEL=”1100” SUT=”10” 中石英/陶瓷振荡器(0.9-3.0M) 1K CK + 4.1 ms CKSEL=”1100” SUT=”11” 中石英/陶瓷振荡器(0.9-3.0M) 1K CK + 65 ms CKSEL=”1101” SUT=”00” 中石英/陶瓷振荡器(0.9-3.0M) 16K CK + 0 ms CKSEL=”1101” SUT=”01” 中石英/陶瓷振荡器(0.9-3.0M) 16K CK + 4.1ms CKSEL=”1101” SUT=”10” 中石英/陶瓷振荡器(0.9-3.0M) 16K CK + 65ms CKSEL=”1101” SUT=”11” 高石英/陶瓷振荡器(3.0-8.0M) 258 CK + 4.1 ms CKSEL=”1110” SUT=”00” 高石英/陶瓷振荡器(3.0-8.0M) 258 CK + 65 ms CKSEL=”1110” SUT=”01” 高石英/陶瓷振荡器(3.0-8.0M) 1K CK + 0 ms CKSEL=”1110” SUT=”10” 高石英/陶瓷振荡器(3.0-8.0M) 1K CK + 4.1 ms CKSEL=”1110” SUT=”11” 高石英/陶瓷振荡器(3.0-8.0M) 1K CK + 65 ms CKSEL=”1111” SUT=”00” 高石英/陶瓷振荡器(3.0-8.0M) 16K CK + 0 ms CKSEL=”1111” SUT=”01” 高石英/陶瓷振荡器(3.0-8.0M) 16K CK + 4.1ms CKSEL=”1111” SUT=”10” 高石英/陶瓷振荡器(3.0-8.0M) 16K CK + 65ms CKSEL=”1111” SUT=”11” 注:1、出厂默认设置 注意:CKOPT=1(未编程)时,最大工作频率为8MHZ 内部RC振荡1MHZ 6 CK + 4.1 ms CKSEL=”0001” SUT=”01” ATMEGA8熔丝位编程状态:1.未编程(检查框不打勾)2.编程(检查框打勾) 注意: 1、LT-48/48XP中,也有检查框打勾表示1的,但在熔丝名称后有“=1”的说明。2、AVR系列MCU的熔丝,全部是壳多次编程的,不是OPT熔丝。 二、熔丝位的作用: 1、功能熔丝 熔丝 说明 默认设置 1 0 RSTDISBL PIN1用作复位引脚 PIN1用作IO口,复位为内部复位 1 WDTON 看门狗完全由软件控制 看门狗始终工作,软件只可以调节溢出时间 1 SPIEN 禁止串行编程 允许串行编程 0 EESAVE 擦除时不保留EEPROM数据 擦除时保留EEPROM数据 1 BODEN BOD功能禁止 BOD功能允许 1 BODLEVEL BOD门槛电平2.7V BOD门槛电平4.0V 1 BOOTRST 复位后从0地址执行 复位后从BOOT区执行(参考BOOTSZ0/1) 1 2、BOOT区配置熔丝BOOTSZ1 BOOTSZ BOOT区大小 BOOT区地址 默认 0 0 1024WORD 0×0C00 默认 0 1 512WORD 0×0E00 1 0 256WORD 0×0F00 1 1 128WORD 0×0F80 问题:烧程序烧一次可以,下一次就不可以了 是外部晶振的问题,不是芯片的问题 第一次它是采用内部晶振烧成的,下一次它就采用外部的了