第九章 AVR C语言的应用.PDF_第1页
第九章 AVR C语言的应用.PDF_第2页
第九章 AVR C语言的应用.PDF_第3页
第九章 AVR C语言的应用.PDF_第4页
第九章 AVR C语言的应用.PDF_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章 AVR C语言的应用 9 1 第九章 AVR C语言的应用 本章程序是用IAR C正版软件编译通过的,并可产生*.HEX烧录文件,用其它C语言 编译是有差异的,不一定能通过,请用户注意这点!本章最后附几种C语言的比较,不仿一 读 更详细资料参阅光盘文件min+; temp-t_count+; 带参数的函数调用 使用参数将数据传递到函数中去 char add(char number1, char number2) return number1+number2; 函数间参数的传递通过 R16-R23 来实现 循 环 死循环 for(; ;) 循环 char counter = 100; do while(-counter) ; 预减变量Pre-decrement代码效率最高 优化代码的选项 代码大小优化编译 使用局部变量 使用允许的最小数据类型 将全局变量收集到结构中去 死循环使用 for(;) 使用预减的 do while; C AVR的程序设计 内 容, 安装必须的工具 第九章 AVR C语言的应用 9 7 9.2 C编译的介绍 练习 边学边做 用 C 编程 设置编译和链接文件 用 C 访问外围 中断处理 高级调试,使用不同的 AVR 外围 定时器/计数器 UART 外部中断Tool flow 器件: AT90S8515 C Compiler C 编译器 AVR Studio AVR 仿真调试器 SL-AVR AVR 下载编程测试器 测试程序:死循环 读 Port D 的值 (按键输入口) 将其值写到 Port B (LED, 输出口) 测试程序(设文件名为 920.c) #include /* 定义 AT90S8515 */ void main(void) char c; DDRB = 0xFF; /* PortB all outputs */ for(;) /* Eternal loop */ c = PIND; /* Read Port D */ PORTB = c; /* 回写到 Port B */ 9.2.1. 安装C编译器 根据 IAR Readme 要求,从光盘安装编译器, 文件安装好后,可把图标移到桌面成快捷工作图 标,如图 921 正版软件有加密狗,只有把狗插在打印口上, 双击快捷图标,才能进入工作窗口 9.2.2 设置 C 编译器 启动 IAR 嵌入式工作台 可双击快捷图标, 进入 I A R 编译器窗口 图 9 2 1 快捷工作图标 1 . 创建工程文件: 按序操作, - F i l e N e w P r o j e c t 创建新工程文件, 如图 9 2 2 新建工程文件窗口 选择 C P U 为 A 9 0 , 并输入工程文件名, 如: 9 2 0 第九章 AVR C语言的应用 9 8 图922 新建工程文件窗口 2 . 编辑 C 源程序文件设置, 关于 C 语言知识, 请参阅有关书籍 图923 编辑源程序文件 第九章 AVR C语言的应用 9 9 3 . 编辑 C 源程序, 设置编译器选项 按序操作: Project - Options 选择源文件对应器件( 本例为 M a x 6 4 K b y t e d a t a , 8 K b y t e c o d ( 8 5 1 5 , 4 4 1 4 . . . ) ) 及内存模式 ( S m a l l ) , 见 图 9 2 4 图 9 2 4 编辑源程序设置选项 4 . 设置链接器文件 X L I N K 选项 在图 9 2 5中选择 X L I N K选项, 为生成下载文件, 必须设定为 i n t e l - e x t e n d e d 输出格式 ( r e l e a s e o n l y ) ; 图 9 2 5 X L I N K 选项, 生成下载文件 第九章 AVR C语言的应用 9 10 5 . 设置链接器文件 X L I N K 选项, 选择处理器配置, 设定内存模式见图 9 2 6 图 9 2 6 处理器配置及内存模式选项 6 . 生成调试文件选项, 见图 9 2 7 图 9 2 7 为生成调试文件选项 以上选项可以统统选完后, 一次 O K 第九章 AVR C语言的应用 9 11 7 . 将源程序加入到工程文件 按序操作 - P r o j e c t - F i l e s . , 见图 9 2 8 选择源程序, 按 A d d按钮, 把上部窗口程序加到下部窗口, 如有几个文件需链接, 都应加到下部窗 口然后按 O K 按钮, 设置编译器选项结束, 显示工程文件窗口图 9 2 9 图 928 将源程序加入到工程文件 8 . 对工程文件进行链接编译 如图 9 2 9 , 双击 * . C 文件, 将会弹出源程序窗口 图 929 对工程文件进行链接编译 按序操作, Project Make 或键 F9,或快捷工具条图标如有编译错误提示,请修改程序或检 查编译器选项是否有问题,请改正,再编译,直到无错误报告,见图 929 报文窗口 第九章 AVR C语言的应用 9 12 9. 查看编译生成的文件 根据编译器的选项要求,程序编译后生成程序调试文件 *.d90,编程下载文件 *.a90 等, 见图 9210 图 9210 编译生成的文件 9.2.3 使用AVR Studio调试 如程序编译通过,可进入程序调试C 语言的调试,见第三章 3.2 模拟调试窗口 1. 启动 AVR Studio ,双击桌面快捷图标 2. 装入调试文件 (TestProg.d90) - File - Open 如图 9211 选择 AT90S8515 (只需在开始时选择一次) 加入视图VIEW I/O (PinB, PortD) Processor Watch c PORTB PIND 单步执行, Toggle PIND bits 图 9211 “Debug”调试窗口 9.2.4 对器件编程 选择编程下载窗口 (见第三章图 3.30 AVR下载窗口) 第九章 AVR C语言的应用 9 13 9.3 测试应用程序 Main函数 “main” 是所有 C 程序的入口点 不要加入参数也不要返回值 语法: void main(void) /* 代码 */ 访问外围 所有 I/O 寄存器在头文件里都被定义为特殊功能寄存器 象普通变量一样访问 #include /* 定义 8515 */ void main(void) DDRD = 0xFF; /* Port D 输出 */ 9.3.1 读/写口 #include /* 定义 AT90S8515 */ void main(void) char c; DDRB = 0xFF; /* PortB 输出 */ for(;) /* 死循环 */ c = PIND; /* 读 Port D */ PORTB = c; /* 回写到 Port B */ 9.3.2 延时函数 #include /* 定义 8515 */ void delay(unsigned int delayValue) unsigned int i; for(i=0;i 右移; 按位与; 按位或; 按位异或; ; i + + 相当于 i = i + 1 ; i - - 相当于 i = i - 1 * / # i n c l u d e ; / * 器件配置文件 * / # d e f i n e B I T ( x ) ( 1 ( x ) ) ; / * 左移 * / v o i d d e l a y ( v o i d ) u n s i g n e d c h a r i , j ; f o r ( i = 1 ; i ; i + + ) f o r ( j = 1 ; j ; j + + ) ; v o i d l e d _ p b ( v o i d ) u n s i g n e d c h a r i ; D D R B = 0 x f f ; / * 设 P B 口输出 * / f o r ( i = 0 ; i 8 ; i + + ) / * 硬件设定低电平灯亮, L E D 的 1 位亮灯从 B 口 P B 0 P B 7 * / 第九章 AVR C语言的应用 9 15 P O R T B = B I T ( i ) ; / * L E D 亮灯 1 位 * / d e l a y ( ) ; / * 延时 * / v o i d m a i n ( v o i d ) / * 主函数 * / w h i l e ( 1 ) / * 循环 * / l e d _ p b ( ) ; 9 . 3 . 5 4个口 L E D亮灯变速移位 / * 文件名: S L A V R 9 3 5 . A S M * / / * 请修改程序, 改变移位方向, 2 位或 3 位或一隔一亮灯移位等 * / # i n c l u d e / * 预处理命令, 头文件 * / # d e f i n e B I T ( x ) ( 1 ( x ) ) ? * 定义位函数, 可修改移位方向 * / v o i d d e l a y ( u n s i g n e d c h a r t ) ; / * 延时函数 * / u n s i g n e d c h a r i ; u n s i g n e d c h a r j ; f o r ( i = 0 ; i t ; i + + ) f o r ( j = 1 ; j ; j + + ) ; v o i d l e d _ p b ( u n s i g n e d c h a r t ) ; / * L E D 移位函数 * / u n s i g n e d c h a r i ; D D R B = 0 x f f ; / * 设 P B 口为输出 * / f o r ( i = 0 ; i 8 ; i + + ) / * 硬件设定低电平灯亮, L E D 的 1 位亮灯从 B 口 P B 0 P B 7 * / P O R T B = B I T ( i ) ; / * L E D 亮灯 1 位 * / d e l a y ( t ) ; / * 延时 * / P O R T B = 0 x f f ; / * 关 P B 口 * / v o i d l e d _ p d ( u n s i g n e d c h a r t ) ; / * L E D 的 1 位亮灯从 D 口 P D 0 P D 7 移位函数 * / u n s i g n e d c h a r i ; D D R D = 0 x f f ; f o r ( i = 0 ; i 8 ; i + + ) / * L E D 的 1 位亮灯从 D 口 P D 0 P D 7 * / P O R T D = B I T ( i ) ; d e l a y ( t ) ; 第九章 AVR C语言的应用 9 16 P O R T D = 0 x f f ; v o i d l e d _ p c ( u n s i g n e d c h a r t ) ; / * C 口 P C 0 P C 7 移位函数 * / u n s i g n e d c h a r i ; D D R C = 0 x f f ; f o r ( i = 0 ; i 0 ; i - - ) / * L E D 的 1 位亮灯从 A 口 P A 7 P A 0 * / P O R T A = B I T ( i - 1 ) ; d e l a y ( t ) ; P O R T A = 0 x f f ; v o i d m a i n ( v o i d ) ; / * 主函数 * / u n s i g n e d c h a r d t ; w h i l e ( 1 ) / * 循环 * / f o r ( d t = 5 ; d t 2 0 0 ; d t + = 2 5 ) l e d _ p b ( d t ) ; / * L E D 发光二极管一亮灯沿四个口移位变速循环 * / l e d _ p d ( d t ) ; l e d _ p c ( d t ) ; l e d _ p a ( d t ) ; 9 . 3 . 6 音符声程序 第九章 AVR C语言的应用 9 17 / * 源程序 S L A V R 9 3 6 . A S M * / / * 可改变 t 函数, 改变发音快慢 * / # i n c l u d e / * 预处理命令 * / # d e f i n e u c h a r u n s i g n e d c h a r # d e f i n e u i n t u n s i g n e d i n t v o i d d e l a y ( u c h a r t ) u c h a r i , j ; f o r ( i = 0 ; i t ; i + + ) f o r ( j = 1 ; j 1 5 0 ; j + + ) ; v o i d s o u n d _ p c 0 ( u c h a r t ) u i n t i ; D D R C = 0 x f f ; P O R T C = 0 x f f ; f o r ( i = 0 ; i 3 5 0 - t * t ; i + + ) / * 改变发音快慢 , 另见 S L A V R 9 3 6 B . A S M 程序* / P O R T C = ( 1 0 ) ; d e l a y ( t ) ; v o i d m a i n ( v o i d ) / * 主函数 * / u c h a r d t ; f o r ( ; ; ) f o r ( d t = 1 ; d t 1 4 ; d t + + ) / * 改变发音数量 * / s o u n d _ p c 0 ( d t ) ; 9 . 3 . 7 8字循环移位显示程序 / * 源程序 S L A V R 9 3 7 . A S M * / / * 在 S L - A V R 开发实验器 L E D 数码管上, 8 字符循环移位显示程序* / # i n c l u d e / * 器件配置文件* / # d e f i n e u c h a r u n s i g n e d c h a r / * 定义缩写* / # d e f i n e u i n t u n s i g n e d i n t v o i d d e l a y ( u i n t t ) u i n t i ; f o r ( i = 0 ; i t ; i + + ) ; v o i d i n i t _ d i s p ( v o i d ) / * B 口, D 口初始化* / 第九章 AVR C语言的应用 9 18 D D R B = 0 x f f ; D D R D = 0 x f f ; P O R T B = 0 x 7 f ; / * B 口送 8 字符, 字形可修改* / v o i d s c a n ( v o i d ) / * 位选扫描* / u c h a r i , j ; f o r ( i = 0 ; i 6 ; i + + ) / * i + + 可修改为一位隔一位或隔 2 位显示或改变移位方向* / j = 1 5 0 ; / * 可改变移位速度* / d o P O R T D = ( 0 x 0 1 i ) ; d e l a y ( 1 5 0 ) ; / * 可改变 L E D 显示亮度* / P O R T D = 0 x f f ; d e l a y ( 2 1 0 0 ) ; / * 可改变 L E D 显示亮度* / w h i l e ( - - j ) ; v o i d m a i n ( v o i d ) / * 主程序* / i n i t _ d i s p ( ) ; / * 初始化* / f o r ( ; ; ) s c a n ( ) ; / * 位选扫描* / 9 . 3 . 8 按键加 1计数显示程序 / * 在 S L - A V R 开发实验器上, 用 S H I F T 键, 按 1 次键加 1 计数显示程序* / # i n c l u d e / * 头文件* / # d e f i n e u c h a r u n s i g n e d c h a r / * 缩写定义* / # d e f i n e u i n t u n s i g n e d i n t f l a s h u c h a r D A T A _ 7 S E G = 0 x 3 f , 0 x 0 6 , 0 x 5 b , 0 x 4 f , 0 x 6 6 , 0 x 6 d , 0 x 7 d , 0 x 0 7 , 0 x 7 f , 0 x 6 f , 0 x 7 7 , 0 x 7 c , 0 x 3 9 , 0 x 5 e , 0 x 7 9 , 0 x 7 1 ; / * L E D 字形表* / u c h a r l e d 6 ; / * 显示缓冲* / u i n t c o u n t ; / * 延时子程序* / v o i d d e l a y ( u i n t t ) u i n t i ; f o r ( i = 0 ; i t ; i + + ) ; v o i d i n i t _ d i s p ( v o i d ) / * 初始化 B 口, D 口* / 第九章 AVR C语言的应用 9 19 D D R B = 0 x f f ; D D R D = 0 x 7 f ; P O R T D | = 0 x 8 0 ; v o i d d i s p ( v o i d ) / * 键盘显示* / u c h a r i ; f o r ( i = 0 ; i 6 ; i + + ) P O R T D = ( 0 x 0 1 i ) ; P O R T B = D A T A _ 7 S E G l e d i ; d e l a y ( 1 0 0 0 ) ; P O R T B = 0 x 0 0 ; P O R T D = 0 x f f ; v o i d b e _ p c 0 ( v o i d ) / * 发出一声响子程序* / u i n t i ; D D R C | = 0 x 0 1 ; f o r ( i = 0 ; i 3 5 0 ; i + + ) P O R T C = 0 x 0 1 ; d e l a y ( 3 5 0 ) ; v o i d c o n v ( v o i d ) / * 计数值转换成十进制数* / l e d 5 = 0 ; l e d 4 = c o u n t / 1 0 0 0 0 ; l e d 3 = c o u n t / 1 0 0 0 % 1 0 ; l e d 2 = c o u n t / 1 0 0 % 1 0 ; l e d 1 = c o u n t / 1 0 % 1 0 ; l e d 0 = c o u n t % 1 0 ; v o i d m a i n ( v o i d ) / * 主程序* / i n i t _ d i s p ( ) ; / * 初始化 B 口, D 口* / c o u n t = 0 ; / * 开始计数值是零* / c o n v ( ) ; / * 转换* / f o r ( ; ; ) w h i l e ( ( P I N D / * 显示* / b e _ p c 0 ( ) ; / * 发出一声响* / c o u n t + + ; / * 计数器加 1 * / c o n v ( ) ; / * 转换成十进制数* / w h i l e ( ( P I N D / * 显示* / 几种 C 语言的比较测试报告 詹卫前 自 A T M E L 的 A T 9 0 系列单片机诞生以来 有很多第三方厂商为 A T 9 0 系列开发了用 于程序开发的 C 语言工具本报告测试了以下四家厂商的 C 语言工具I A R 的 I C C 9 0 I m a g e C r a f t 的 I C C A V RC o d e V i s i o n A V R 和 S P J 的 A V R C其中 I A R 的 I C C 9 0 是与 A T M E L 的 A T 9 0系列单片机同步开发的是一个老牌的 C语言工具而其余三家是后来独立 开发的 在这四种 C语言工具中以 S P J的 A V R C最不理想其 I D E工作环境不可与前三 种相提并论而且它的编译器工作方式与 C o d e V i s i o n A V R相类似 经初步测试其生 成的代码也不很理想其版本更新的速度也较慢所以没作进一步详细的测试下 面的比较只是对前三种 C 语言工具的比较 一I D E 工作环境的比较 I A R 的 I C C 9 0 由于诞生的比较早 再加上其 I D E 为了和 I A R 其它系列单片机的开发 环境相兼容 应该说其 I D E 环境不如 I C C A V R 和 C o d e V i s i o n A V R 在使用上也没有其余 两个方便但它也有自己的特点即 I A R 有自己的源程序调试工具软件 C - S P Y 而其 余两家均只能通过生成 C O F F 格式文件在 A T M E L 的 A V R S t u d i o 环境中进行源程序调 试而 I A R 在两个调试环境中均可以正常工作 在 I D E 工作环境方面的差异主要有以下几个方面 应用程序向导 串行通信调试终端 工具配置菜单 工程属性窗口 一应用程序向导 I A R 没有应用程序向导而 I C C A V R 与 C o d e V i s i o n A V R 都具有应用程序向导它 们的共同点有 可以根据选择的器件来产生 I / O端口定时器中断系统U A R T S P I 模拟量 比较器片外 S R A M 配置的初始化代码 都可以根据选定的晶振频率和设定的波特率来计算波特率发生器 U B R R 的常数 都可以自动生成相应的 C 语言文件 它们的区别是 I C C A V R 除自动计算波特率外 还可以根据定时器的工作方式自动计算有关寄存器 第九章 AVR C语言的应用 9 21 的定时常数而 C o d e V i s i o n A V R 则需要用户手工计算后再输入相应的文本框中 C o d e V i s i o n A V R 除了可以产生 M C U 本身所固有的硬件的初始化代码外还可以产生一 些常用的外部硬件设备的初始化代码如 I 2 C 总线接口D a l l a s 的单总线接口字符 型 L C D 接口实时时钟 D S 1 3 0 2 的接口等等 二串行通信调试终端 I C C A V R 和 C o d e V i s i o n A V R 都有一个终端调试程序 用户可以根据需要自由地设置 波特率数据位和停止位奇偶校验等参数然后用于通信程序的调试 在终端的功能方面 C o d e V i s i o n A V R 要强一些 其既可以十六进制数的形式进行发 送接受和显示数据又可以文本的形式来发送接受和显示数据而 I C C V A R只可 以文本的形式来发送接受和显示数据 I A R 没有终端调试窗口 三工具配置菜单 在工具配置菜单方面 C o d e V i s i o n A V R 和 I C C A V R 比 I A R 出色 I A R 在菜单中只增加 了一个配置菜单命令用户可以将一些工具软件的启动命令加入其中 I C C A V R 在 I A R 的基础上增加了一些项目如 A V R 资源计算器支持 S T K 2 0 0 / 3 0 0 接口 的在线编程I S P 和基于串口通信的 I S P 编程 C o d e V i s i o n A V R 除了具有用户可自己配置工具的特点外增加了调试菜单命令和 工具栏图标但其只可以使用 A T M E L 的 A V R S t u d i o 调试器C o d e V i s i o n A V R 支持的在 线编程器种类较多其支持 S T K 2 0 0 / 3 0 0 / 5 0 0 D T 0 0 6 V T E C - I S P和 A T C P U / M e g a 2 0 0 0 六种编程器 四工程属性窗口 I A R 的工程属性窗口可设置的项目较多 但对初学者使用反而不如C o d e V i s i o n A V R 和 I C C A V R 方便主要有以下几点原因 1 I A R的属性窗口不可以设置到具体的器件型号和准确地配置片外 S R A M 而 C o d e V i s i o n A V R 和 I C C A V R 可以设置到具体的器件型号并且可以对片外 S R A M 进行较 准确的配置这样在使用时有些区别如我们使用 A T 9 0 S 8 5 1 5器件并且不使用片外 S R A M在 I A R 的初始化程序中一定要加一行 M C U C R = 0 x 0 0否则在程序运行时 8 5 1 5 的 P O R T A和 P O R T C两个端口会输出总线信号而 C o d e V i s i o n A V R和 I C C A V R只需在工 程属性窗口中设置即可其余的工作由编译器自动完成 2 如果用户需要修改 C 编译器的堆栈空间大小I A R 的属性窗口对此无能为力 它需要修改相应的 X C L 文件才能达到目的 而 C o d e V i s i o n A V R 在工程属性窗口中可以 直接修改软件堆栈的空间大小 I C C A V R 在工程属性窗口中可以直接修改硬件返回堆栈 的空间大小而 I C C A V R的 R A M除了用作硬件返回堆栈全局变量和堆外剩余的内 存均是软件堆栈 3 在一些应用中用户可能需要使用自己的启动文件I A R同样需要修改相应的 X C L 文件才能达到目的 而 C o d e V i s i o n A V R 和 I C C A V R 在工程属性窗口中可以直接指定 使用外部启动文件 4 当用户使用自己的库文件时I C C A V R可以直接指定相应的库文件I A R需要 修改相应的 X C L 文件才能使用相应的库文件 而 C o d e V i s i o n A V R 必须在头文件或 C 语 言文件中使用预处理命令# p r a g m a l i b r a r y 才可以使用相应的库文件 5 在 I A R 和 I C C A V R 中还有一项功能即空余程序存贮空间的填充功能用户使 用这个功能可以在空余的程序存贮器中填入特定的数据字节如设置软件陷井等 而 C o d e V i s i o n A V R 没有这个功能但 C o d e V i s i o n A V R 有另外一个特点它自动将所有 没有使用的中断向量均指向了复位向量入口这也是一种抗干扰措施 第九章 AVR C语言的应用 9 22 6 I A R 中有一个函数_ _ l o w _ l e v e l _ i n i t ( v o i d ) 当程序在某些时候不需要初始化 全部内存或需要初始化指定的端口时可在 i n t _ _ l o w _ l e v e l _ i n i t ( v o i d ) 中加入自己 的代码让函数返回一个非 0 数值这是另外两个软件所不具有的也弥补了其不能 方便地指定自定义启动文件的缺点 二C 语法扩充 由于 P C 机为冯- 依曼结构而 M C S 5 1 和 A V R 均为哈佛结构另外单片机的程序存贮器 都是存放在 R O M中的因此几种 C语言都进行了不同的语法扩充 以适应结构的变 化 1 I A R 和 C o d e V i s i o n A V R 都定义了新的数据类型 s f r b 和 s f r w 使 C 语言可以直 接访问 M C U 的有关寄存器如 s f r b D D R D = 0 x 1 1 而 I C C A V R没有定义 s f r b和 s f r w数据类型而是采用强制类型换和指针的概念 来实现访问 M C U 的寄存器如 # d e f i n e D D R D ( * ( v o l a t i l e u n s i g n e d c h a r * ) 0 x 3 1 ) 前者s f r b 定义中的0 x 1 1 为D D R D 寄存器的I O 地址 而后者定义中的0 x 3 1 为D D R D 寄存器在数据内存中的映射地址 2 由于 A V R单片机内部有三种类型的存贮器 R A M E E P R O M和 F L A S H存贮器为 了能有效地访问这些存贮器三种 C 语言分别进行了不同的语法扩充 I A R 中只扩充了一个关键词 f l a s h 由于 A V R 的内部 R A M 数量有限使用 f l a s h 关键 词可以将使用 c o n s t 类型定义的常量分配进 F L A S H 存贮器 以节省 R A M 的使用 在 I A R 中对片内 E E P R O M 的访问只能通过函数_ E E P U T 和_ E E G E T 进行访问 在 I C C A V R 中 对 c o n s t 类型进行了扩充 编译器自动将 c o n s t 类型数据分配进 F L A S H 存贮器中 对片内E E P R O M 存贮器 C 语言可以通过头文件e e p r o m . h 中的函数对E E P R O M 中某一个具体地址进行访问I C C A V R 同时也扩充了一个新的 e e p r o m 存贮区域可以 在 e e p r o m 区域中定义变量然后再通过 f o r ( a = 1 ; a ; a + + ) f o r ( b = 1 ; b ; b + + ) ; v o i d L E D _ O n ( i n t i ) P O R T B = ( 1 i ) ; D e l a y ( ) ; v o i d m a i n ( v o i d ) i n t i ; M C U C R = 0 x 0 0 ; D D R B = 0 x F F ; P O R T B = 0 x F F ; w h i l e ( 1 ) f o r ( i = 0 ; i 0 ; i - - ) L E D _ O n ( i ) ; f o r ( i = 0 ; i 0 ; i - = 2 ) L E D _ O n ( i ) ; 编译后生成的程序代码 编译器 程序代码字节数 I A R 4 1 3 I C C A V R 3 1 1 C o d e V i s i o n A V R 3 2 7 K E I L 5 1 1 3 6 L E D 变化的速度明显慢得多 注对于 K E I L P O R T B 换成 P 1 又比如对 A T M E L 文档中的例子程序 第九章 AVR C语言的应用 9 26 i n t m a x ( i n t * a r r a y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论