IAR_for_AVR

-
IAR_for_AVR
ar for avr学习笔记(3)--位操作 3.1.在c语言里对位的操作如一般如下 PORTB|-(1<<2);/置 PORTB的第2位-1 PORTB&=(1<<2);//置 PORTB的第2位=0 PORTB|=(1<<2);//取反 PORTB的第2位 While( PORTE&(1<<2);//判断1 While(!( PORTB&(1<<2));//判断为0 3.2.IAR编译器对位的支持更强大,除了上面的方法外还有以下更简单的操作 方法: PorTB Bit2=1;//置 PORTB的第2位=1 PORTB Bit2-0;//置 PORTB的第2位=0 portb Bit2= POrTB Bit2;//取反 PORTB的第2位 While( PORTB Bit2);或者 while( PORTB Bit2=1);//判断1 while( porTB Bit2--0);//判断0 PORTO Bit4= PORTB Bit2;/把 PORTB的第2位传送到PORC的第4位 3.3.位变量定义 由于iar使用了扩展语言,它对位域的支持变为最小为char类型,我们可以很 方便地用米定义位变量 采用结构体来定义位变量: struc t unsigned char bit0: 1; unsigned char bit1: 1 unsigned char bit2: 1 unsigned char bit3: 1 unsigned char bit4: 1 unsigned char bit5: 1 unsigned char bit6: 1 unsigned char bit7: 1 }t; 然后就可以用以下位变量了 t, bit0=1 t bito=t bito 但是采用以上结构体做出来的位变量只可以访问讠的位,不能够直接访问变量t, 和标准的ⅠAR位操作也不一样。采用联合体来定义效果更佳。 t includeiom8. h> unl on unsigned char t struct unsigned char t bito: 1 t bitl: 1 t bit2: 1 L bit3: 1 t bit4: 1 tbit5:⊥ t bit6: 1 t bit7: 1 void main(void tbit0=1;//访问变量t的位 t bito=t bito PORTB-t;//直接访问变量t 位变暈也可以自接定义在工作寄存器里。 3.4bool数据类型在C++语言里是默认支持的。 如果你在C代码的头文件里包含 stool. h,bool数据类型也可以使用在C 语言里。也可以使用布尔值 false和true。不过是占用8位1个字节。 t inc ludesiom8. h> t include<stdbool. h> bool y-0;//定义位变量 void main(void) y=!y;//取反位变量 PORTB Bit3=y;//传递位变量 iar for aVR学习笔记(4)- Flash操作 FLASH常用类型的具体操作方法 4.1. FLASH区域数据存储。 用关键字 flash控制来存放, flash关键字写在数据类型前后效果一样 flash unsigned char a;//定义一个变量存放在 flash空间 unsigned char flash a;/效果同上 flash unsigned char p[];/定义一个数组存放在 flash空间 对亍 flash空间的变量的读操作同SRAM数据空间的操作方法样,编译器会自 动用 LPM,ELPM指令来操作。 例 t includeiom8. h> flash unsigned char p] flash unsi gned char a nain(Vo1 PORTB=p[1];//读 flash数组变量的操作 PORTB=a;//读 flash变量的操作 由于在正常的程序中,f1ash空间是只读的,所以没有赋值的变量是没有意义的 定义常数在 flash空问,只要给变量赋与初值就可以了。由于常数在 flash空 闾的地址是随机分配的,读取变呈才可以读取到常数值 10 IAR-AVR-C编译器简要指南 flash uni gned char a-9;//定义一个常数存放在 EEPROM空间 flash unsigned char p[=1, 2,3, 4,5,6,7,8 //定义一个组常数放在 flash空间 例 t includeiom8.. h> flash unsigned char p[]=[1, 2, 3, 1, 5, 6, 7, 81 flash unsi gned char a=g void main(void) PORTB=a;//读取 flash空间值9 PORTO=p[O];//读取 flash空间值 4.1.2 flash空间绝对地址定位 lash unsigned char a@0x8;//定义变量存放在 flash空间0X08单元f1 ash unsigned char p[]@0x22//定义数组存放在fash空间,开始地址为0X 22单元 flash unsigned char a@0x08=9;//定义常数存放在 flash空间0X0单元 flash unsigned char p[ 0x22=1,2,3, 4,5,6,7,8 /定义一个组常数存放在 EEPROM空间开始地址为0X22单元 由于常数在fash空间的地址是已经分配的,读取 flash空间值可以用变量和 地址 4.2.与 flash有关的指针操作。 flash关键字控制指针的存放和类型 4.2.1指向 flash空间的指针 flash指针(控制类型属性) unsigned char flash*p;//定义指向 flash空间地址的指针,8位。 unsigned int flash*p;/定义个指向 flash空间地址的指针,16位。 unsigned int farflash*p;//定义指向 flash空间地址的指针,24位 unsigned int hugeflash*p;/定义指向 flash空间地址的指针,24位。 unsigned char flash*p;/定义一个指向 flash室间地址的指针,指针本 身存放在SAM中。P的值代表 flash空间的某地址。*表示 flash空间该地 址单元存放的内容。例:假定p10,表示 flash空间地址10单元,而 flash m 空间10单元的内容就用*米读取。 例 t inc ludeiom8. h> char flash t( 0x10 char flash *p void main(void) PORTB=*p;//读取 flash空间10单元的值 PORTB=*(p43);/读取 flash空间0x13单元的值 4.2.2.存储于 flash空间的指针数据指针 就象存储与 flash空间的数据一样控制存储属性 flash unsi gned char*p;//定义指向SARM空间地址的指针,指针本身存 放在 flash中 4.3.控制数据和指针存放的 flash定义必须是全局变量,控制类型属性(好 像只有指针)可以是局部变量。 t include<iom8. h> flash unsigned char p;/控制存放 void main(void) unsigned char flash*t;//控制属性 PORTB=p PORTB=冰1 4.4.root关键字保证没有使用的函数或者变量也能够包含在目标代码中 定义存放在『lash空间的数据在程序编译时会自动生成代码嵌入到lash代 码中,对于程序没有使用也要求编译的数据(比如可以在代码中嵌入你的版本号, 时间等)必须加关键字root限制。 例 #<iom. h> root flash unsigned char p 0x10=0x56 oid main(void) 程序没有使用P变量,编译也会生成该代码。 020000020000FC 1000000016C018951895189518951895189518955F 10001000569518951895189518951895189518953A 10002000189518951895089500008895 FECFOFE94A 100030000DBFOOEOOEBFCOESDOEO03DOF4DFF4DF76 06004000F3CF0lE008957A 0400000300000000F9 00000001FF 1.5. flash操作宏数:在 comp a90. h intrinsics.h头文件里有详细说明。 flash空间具正常情况下有只读性能,对于读fash数据编译器会自动编译对 应的LPM,ELPM指令,但对丁 flash空间的自编程写命令SPM就没有对应的C指 令了,这里不讲解详细的自编程方法,只是讲解一下对f1ash的读写函数。 直接在程序屮读取 flash空间地址数据:要包含 intrinsics.h头文件 load program memory(const unsigned char flash *) //61K] /从指定 flash空间地址读数据。该函数在 intrinsics.h头文件里有详细说明 在 comp a90.h文件有它的简化书写LPM(ADDR)。注意汇编指令 LPm Rd,Z中的 是一个指针。所以用( const unsigned char flash*)来强制转换为指向fl ash空问地址指针。故该条宏函数的正确写法应该如下: load program memory((const uns igned char flash *)ADDR) 例 t includeiom8. h> include <intrinsics. h void main(void) i PORTB- load prograM Memory((const unsigned char flash *)0x12) 该条函数书写不方便,在 comp a90.h文件有简化: # define lpm(ADDR)1 oad program memory(ADDR)稍微方使一点。改为 #define LPM (addr) load program memory ((const unsigned char Clash水)ADDR就更方便了,直接使用数据就可以了。 例: t includesiom8. h> t inc lude<comp a90.h> t includesintrinsics void main(void) PORTB=LM(0x12);//从指定 flash空间地址单元0x12屮读数据 extended load program memory(const unsigned char farflash * +) //128K空间ELPM(ADR);//128K空间 参照上面的理解修改可以书写更简单。 4.6.自编程函数: SPM GET LOCKBITS(;//读取缩定位 SPM GET FUSEBITSO;//读取熔丝位 SPM ERASE(Addr);//16位页擦除 SPM FILLTEMP(Adr,Word);/16位页缓冲 SPM PAGEWRITE(Addr;)//16位页写入 SPM2 1 ERASE(Adr);//24位页擦除 SPM24 FILLTEMP(Addr,Data);//24位页缓冲 SPM24 PAGEWRITE(Addr)//24位页写入 iar for avr学习笔记(5)-SRAM操作 SARM数据类型的具体操作方法 SARM空间是AVR单片机最重要的部分,所有的操作必须依赖该部分来完成。 变量在SARM空间的存储模式有tiny, small large三种,也就是对应于tiny, near fαr三中存储属性。一旦选择为哪种存储模式,对应的数据默认属性 也就确定了,但可以采用tiny, near far关键字来更改。 对于程序屮的局部变量,编译器会自动处理的,我们也不可能加什么储存属性 但IAR提供了强大的外部变量定义 5.1.定义变量在工作寄存器 IAR编译器内部使用了部分工作寄存器,留给用户的只有R4R15供12个寄存器 供用户使用,要使用工作寄存器必须在工程选项里打开锁定选项 例 定义两个变量使用工作寄存器Rl4,R15。 #i ncludesiom8 h regvar no init char g@ 15 regvar no init char P@ 14 void main(void) g++ P 在工程选项里c/c++ complier>code里打开要使川的寄存器R14-R15。 Options for node Hh ategory Fac c tory settings Ⅳy General Options DC I List P-eproce Utilizat Bu|d点c v PLace strinz literals and constants in initialized F Link 厂点.买只点点点,,黑点用,mm D Force generation of all global and static E200 jTAGICE Register utilization JT|CEmk‖ Number of registers to lock for 2[R14.R1 SImulator d Use ICCA90 1 x calling convention Third-Party River Cancel 编译结果就如下,看看是不是直接使川了寄存器做为数据应川 / 4 void main(void) maln CFI Block cfiblocko using cficommonO CFI Function main //5{g++; REQUIRE Register R14 is global regvar REQUIRE ?Register Rls is global regvar INC RI5 /6P++;} INC R11 RET 注意:定义在寄存器里变量不能带冇初始值。最好不要使用超过9个寄存器变量, 不然可能引起潜在的危险,因为建立库的时候没有锁定任何寄存器。 5.2.定义变量的绝对地址没有特性的变量是随机分配的,要给变量分配地址 必须加以特性修饰注意在定义地址的时候干丿不要和片内寄存器地址重合了。 5.2.1定义没有存储特性的绝对地址变量必须加 no ini t或者 const对象特性 no init char t@0x65;//定义在I/0地址以外 const char t@0x65;//定义只读变量的地址 例 t include<ioin8 h1

217KB
IAR_for_AVR_学习笔记
2014-02-27IAR_for_AVR_学习笔记 bool 数据类型在C++语言里是默认支持的。如果你在C 代码的头文件里包含st dbool.h, bool 数据类型也可以使用在C 语言里。也可以使用布尔值 fal
手把手教你蓝牙协议栈入门
2020-07-16本课程定位是:引领想学习蓝牙协议栈的学生或者从事蓝牙,但是对蓝牙没有一个系统概念的工程师快速入门 课程是多年从事蓝牙经验总结出来的,希望能让你看完有一种醍醐灌顶的感觉。 不要在摸着石头过河了·学习完这些你肯定还是要继续学习蓝牙协议栈,但是至少懂了蓝牙的一些概念以及适合高效的学习方法 本课程一共分为4个小节: 1)蓝牙教程计划.mp4 ,主要介绍下我们的视频规划以及后续的蓝牙教程规划 2)蓝牙的前生后世.mp4 主要介绍下蓝牙的产生背景概念,以及蓝牙从开始产生到现在最新的5.2的发展过程,新赠的功能特性 3)市面蓝牙架构调查.mp4 主要介绍市面蓝牙产品的架构以及HCI蓝牙芯片的详细架构,让你对蓝牙有一个整体的认识,对于后续做蓝牙产品选型大有帮助 4)快速学习蓝牙文档介绍_工具介绍.mp4 主要介绍HCI蓝牙芯片的协议栈以及profile获取途径以及学习蓝牙的高效工具,引领你快速找到适合自己的方法来学习蓝牙
2.28MB
A题文献(建模方法和思路).rar
2020-02-152020年美赛A题鱼类栖息地预测模型、公式、建模思路指导。
程序员的数学:微积分
2019-09-28本课程介绍程序员必备的数学基础内容,在取材上侧重人工智能、数据分析等热门领域
程序员的数学:线性代数
2019-09-26编程的基础是计算机科学,而计算机科学的基础是数学。因此,学习数学有助于巩固编程的基础,写出更健壮的程序。程序员的数学系列课程主要讲解程序员必备的数学知识,借以培养程序员的数学思维。学习者无需精通编程,也无需精通数学。从概率统计、线性代数、微积分、优化理论、随机过程到当前大热的机器学习,讲师幽默风趣,课件精致美观,深入浅出带你重学数学,时间不可重来,知识可以重学!
535KB
2021年数据建模美赛必备LATEX模板
2018-01-272021数模美赛LATEX模板,美赛必备,CTeX,Texlive都可以用~~~~~年份可以任意修改
Python金融数据分析入门到实战
2019-09-26会用Python分析金融数据 or 金融行业会用Python 职场竞争力更高 Python金融数据分析入门到实战 掌握金融行业数据分析必备技能 以股票量化交易为应用场景 完成技术指标实现的全过程 课程选取股票量化交易为应用场景,由股票数据的获取、技术指标的实现,逐步进阶到策略的设计和回测,由浅入深、由技术到思维地为同学们讲解Python金融数据分析在股票量化交易中的应用。 以Python为编程语言 解锁3大主流数据分析工具 Python做金融具有先天优势,课程提取了Python数据分析工具NumPy、Pandas及可视化工具Matplotlib的关键点详细讲解,帮助同学掌握数据分析的关键技能。 2大购课福利
852KB
python京东茅台脚本.zip
2021-01-04最近热门的python京东茅台脚本
24.46MB
图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目
2019-01-04图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写
JAVA入门精品课程
2018-12-20课程目标: 1、让初学者从小白开始,善于运用知识点,解脱学习的苦恼 2、能够学习更多的工作中使用技巧,成为编程高手
256KB
维纳滤波实现的图像复原
2018-03-29维纳滤波器实现图像的复原,并采用了自相关算法进行处理,使得恢复效果更好
爬虫微课5小时 Python学习路线
2018-07-10Python爬虫技术视频教程,该课程每堂课都有一个作业,包含的项目案例有家长帮142600条数据爬取与分析,全球天气数据抓取与分析,淘宝商品信息数据众数分析,12306余票查询,python软件打包exe与发布。学完此课程能让你对整个数据爬取数据分析有一个全新的了解,适当的深入则可以做这方面的工作
Python初级入门精讲
2017-11-22本课程为Python全栈开发初级入门篇-语言基础章节,学习完本篇章可对python语言有初步的掌握与理解,本课程侧重于初级学员,课程内容详细有针对性,务求各种类型的学员都可以掌握python开发。
-
学院
hadoop自动化运维工具Ambari应用实践
hadoop自动化运维工具Ambari应用实践
-
学院
智联万物,京东IoT技术创新与实践
智联万物,京东IoT技术创新与实践
-
博客
volatile、jvm、hashmap、http、socket
volatile、jvm、hashmap、http、socket
-
博客
2021-01-18
2021-01-18
-
下载
2021高考必刷题合订本——高考化学.zip
2021高考必刷题合订本——高考化学.zip
-
下载
booster-master.zip
booster-master.zip
-
下载
Design Patterns: Elements of Reusable Object-Oriented Software
Design Patterns: Elements of Reusable Object-Oriented Software
-
下载
Oracle数据库实验报告
Oracle数据库实验报告
-
博客
Vue中-下拉框可以选择可以填写
Vue中-下拉框可以选择可以填写
-
博客
用python轻松搞定虎牙直播颜值区美女主播照片
用python轻松搞定虎牙直播颜值区美女主播照片
-
学院
【数据分析-随到随学】Python数据获取
【数据分析-随到随学】Python数据获取
-
下载
Hyper-V.bat
Hyper-V.bat
-
下载
apiclode APP开发封装的核心文件
apiclode APP开发封装的核心文件
-
博客
给定一个类,判断它是使用JDK动态代理还是cglib代理,分别使用JDK动态代理或cglib代理去实现切面的功能。
给定一个类,判断它是使用JDK动态代理还是cglib代理,分别使用JDK动态代理或cglib代理去实现切面的功能。
-
学院
大数据Hive on MR/TEZ与hadoop的整合应用
大数据Hive on MR/TEZ与hadoop的整合应用
-
下载
附件4:《80岁母亲给4个儿子的遗书:谢谢你们照顾我,但我后悔生下你们!》.pdf
附件4:《80岁母亲给4个儿子的遗书:谢谢你们照顾我,但我后悔生下你们!》.pdf
-
学院
【数据分析-随到随学】数据分析建模和预测
【数据分析-随到随学】数据分析建模和预测
-
下载
2021高考必刷题合订本——高考物理.zip
2021高考必刷题合订本——高考物理.zip
-
博客
免费且支持远程连接的MySql空间
免费且支持远程连接的MySql空间
-
学院
【数据分析-随到随学】量化交易策略模型
【数据分析-随到随学】量化交易策略模型
-
下载
piecetable.zip
piecetable.zip
-
学院
【2021】UI自动化测试Selenium3
【2021】UI自动化测试Selenium3
-
学院
备战2021软考网络规划设计师顺利通关培训套餐
备战2021软考网络规划设计师顺利通关培训套餐
-
博客
Mysql批量修改字符集
Mysql批量修改字符集
-
博客
VS CODE 好用的快捷键
VS CODE 好用的快捷键
-
下载
WeChatSetup.exe
WeChatSetup.exe
-
下载
dac7750.c C程序
dac7750.c C程序
-
博客
2021-01-18
2021-01-18
-
学院
Selenium3分布式与虚拟化
Selenium3分布式与虚拟化
-
学院
(新)备战2021软考网络规划设计师终极解密套餐
(新)备战2021软考网络规划设计师终极解密套餐