C18编译器 培训资料课件_第1页
C18编译器 培训资料课件_第2页
C18编译器 培训资料课件_第3页
C18编译器 培训资料课件_第4页
C18编译器 培训资料课件_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

813

C18©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C181MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18

C编译器动手实验培训课程综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C182MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18综述实验1:工具的集成周边外设的访问存储器的组织中断实验2:周边外设中断中断优先级EEDATA大数据存储目标实验3:中断优先级和多个周边外设的控制扩展的模式MPLAB®

C18工具综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C183MPLAB®

C18

C

CompilerHands-On

TrainingPIC18系列的C编译器兼容

ANSI:1989标准包括周边许多标准C函数运行时间库支持浮点算术运算支持32位浮点格式浮点格式为Microchip专用有Float和Double两种类型实际都是32位格式描述MPLAB®

C18工具综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C184MPLAB®

C18

C

CompilerHands-On

TrainingLittle-endian

数据存储方式低字节放在低地址,高字节放在高地址支持软件堆栈编译器尽量使用软件堆栈操作腾出硬件堆栈资源给用户使用支持嵌入行内汇编MPLAB-C18

特点©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C185MPLAB®

C18

C

CompilerHands-On

Training对ANSI标准的扩充增加的关键词_asm,

_endasmfar,nearram,

rom不支持64位浮点数可以选择禁止自动整型数升级一般C的数学运算操作数都用16位或更多位数对于单片机这样做可能浪费资源C18在缺省条件下不会自动进行整型数升级©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C186MPLAB®

C18

C

CompilerHands-On

Training数据类型和类型修饰©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C187MPLAB®

C18

C

CompilerHands-On

Training标准数据类型类型 位长表达范围voidcharintfloatdouble—8163232—-128

to

+127-32768

to

327671.7549435e-38

to

6.80564693e+381.7549435e-38

to

6.80564693e+38数据类型和类型修饰©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C188MPLAB®

C18

C

CompilerHands-On

Training数据类型修饰short适用于

int

型变量

(short

int)定义16位整型数long适用于

int

型变量

(long

int)定义32位长整型数long

shortANSI标准的扩展定义24位整型数对应于“far

rom”型指针24位的指针可以寻址整个程序空间(2M字节)©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C189MPLAB®

C18

C

CompilerHands-On

Training数据类型和类型修饰©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1810MPLAB®

C18

C

CompilerHands-On

Training数据类型修饰near数据空间

–对应的变量放在快速存取区(access

memory)程序空间

生成16位的地址指针far数据空间

–对应的变量放在普通数据区(通

过选择bank存取)程序空间

生成24位的地址指针位变量的定义©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1811MPLAB®

C18

C

CompilerHands-On

Training使用标准C的位域结构形式Struct

{unsigned

timeOut:

1;//超时标志unsigned

keyDown:

1;//按键标志unsigned

switch1:

1;//开关1状态标志unsigned

switch2:

1;//开关2状态标志unsigned

batLow:

1;//电池电压低标志unsigned:

3;//3个标志位无定义}

runFlagBits;使用位变量runFlagBits.keyDown实验1:

工具的集成©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1812MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

IDE和ICD2步骤:建立一个新的项目并验证编译/编程/调试©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1813MPLAB®

C18

C

CompilerHands-On

Training项目建立

欢迎©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1814MPLAB®

C18

C

CompilerHands-On

Training项目建立第一步:选择芯片型号©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1815MPLAB®

C18

C

CompilerHands-On

Training©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1816MPLAB®

C18

C

CompilerHands-On

Training项目建立第三步:命名项目输入或浏览选择项目文件夹你的项目文件名©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1817MPLAB®

C18

C

CompilerHands-On

Training项目建立第四步:添加现有的文件选择现成的C源程序,加入到本项目中若没有现成的源程序,此处可以留空,待以后在项目管理窗口内添加©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1818MPLAB®

C18

C

CompilerHands-On

Training项目建立第五步:汇总结束检查项目设置情况©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1819MPLAB®

C18

C

CompilerHands-On

Training项目建立成功项目管理窗口点击鼠标选中本栏,©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1820MPLAB®

C18

C

CompilerHands-On

Training按鼠标右键可以添加文件。同样适用其它栏目。MPLAB

C18项目中必须添加的

文件C源程序(Source

Files)连接描述文件(Linker

Scripts)项目建立使用Linker

Scripts文件在项目中添加

Linker

Scripts文件Linker

Scripts文件的位置©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1821MPLAB®

C18

C

CompilerHands-On

Training项目建立使用Linker

Scripts文件18f6620.lkr

非ICD调试时的连接描述文件18f6620i.lkr

用ICD调试时的连接描述文件©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1822MPLAB®

C18

C

CompilerHands-On

Training©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1823MPLAB®

C18

C

CompilerHands-On

Training编译环境设定源程序编译选项设定项目环境设定©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1824MPLAB®

C18

C

CompilerHands-On

Training编译环境设定C:\MCC18\h\C:\MCC18\lib\C:\MCC18\lkr\浏览选择相应的文件夹©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1825MPLAB®

C18

C

CompilerHands-On

Training©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1826MPLAB®

C18

C

CompilerHands-On

Training项目编译如果你的源程序如下面最简之范例,编译应该成功#include

<p18f6620.h>unsigned

char

x1,x2,x3;void

main(void){x1

=

1;x2

=

2;x3

=

x1+x2;while

(1)

{x3++;}}©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1827MPLAB®

C18

C

CompilerHands-On

Training课程综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1828MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18综述实验1:工具的集成周边外设的访问存储器的组织中断实验2:周边外设中断中断优先级EEDATA大数据存储目标实验3:中断优先级和多个周边外设的控制扩展的模式SFR的访问:

字节©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1829MPLAB®

C18

C

CompilerHands-On

Training特殊功能寄存器可以在C代码中直接访问,例如TRISD

=

0x0f;if

(PORTB

==

0x55)

{...}位掩码操作会产生PIC18的位操作:PORTD|=0x40;//bsfPORTD,6PORTD&=0xfe;//bcfPORTD,0SFR的访问:

多字节©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1830MPLAB®

C18

C

CompilerHands-On

Training许多多字节寄存器可以以一个实体来访问

例如:if

(CCPR2

==

5)

{...}mult_result

=

PROD;注意:

需要顺序访问的多字节变量(例如:Timers)-顺序是不保证的SFR的访问:

位©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1831MPLAB®

C18

C

CompilerHands-On

Training位

可以用这种语法来引用:SFRbits.bitname例如:PORTBbits.RB0

=

1;INTCONbits.GIEH

=

0;行内汇编语法:指定所有的操作数使用C风格的注释标号需要加冒号使用C标准的数写法(0x12或18,而不

是H’12’)注意:

带有行内汇编的函数,优化会被禁止©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1832MPLAB®

C18

C

CompilerHands-On

Trainingvoid

add5(

void

)

{static

char

local=0;_asm//

foo

+=

5movlbfoomovlw0x5addwf

foo,1,1_endasm}课程综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1833MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18综述实验1:工具的集成周边外设的访问存储器的组织中断实验2:周边外设中断中断优先级EEDATA大数据存储目标实验3:中断优先级和多个周边外设的控制扩展的模式存储器片段©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1834MPLAB®

C18

C

CompilerHands-On

Training一个片段是将被连接器放置到一起的目标聚集所有的数据和代码会被分配到这些片段中这些片段被连接器分配到存储器区域里片段的类型©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1835MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18使用四种片段类型未初始化的数据初始化的数据udataint

x;idataint

y

=

5;romdata在程序存储器里的数据rom

int

z

=

12;code

程序void

foo

(void){}活动片段©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1836MPLAB®

C18

C

CompilerHands-On

Training任一类型的片段都是活动的宣告会被放入对适当类型的活动片段中对于每个C文件,对每种类型的一个默认片段

会被建立。.<type>_<object-filename>例如

.code_foo.o,

.idata_bar.o片段的指定©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1837MPLAB®

C18

C

CompilerHands-On

Training要指定一个片段,使用:#pragma

type

[access]

[name[=address]]例如,#pragma

code

my_code_scn#pragma

idata

access

my_idata_scn=0x20省略类型定义后的任何东西都会返回到默认片

段。例如,#pragma

udata课程综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1838MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18综述实验1:工具的集成周边外设的访问存储器的组织中断实验2:周边外设中断中断优先级EEDATA大数据存储目标实验3:中断优先级和多个周边外设的控制扩展的模式PIC18

向量©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1839MPLAB®

C18

C

CompilerHands-On

Training连接器描述向量区从Linker

0到0x000029复位向量在

0编译器启动代码放置在这儿中断向量在0x000008通常在这儿放置分支跳转到中断处理函数使能中断©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1840MPLAB®

C18

C

CompilerHands-On

Training通过全局中断使能位和特定中断源的使能位来启动中断全局中断使能位是INTCON寄存器中的GIEH位各中断源的使能位在INTCONx

和PIEx寄存器中当一个中断发生时,代码执行会跳转到地址0x000008中断的处理©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1841MPLAB®

C18

C

CompilerHands-On

Training硬件保存和恢复BSR,STATUS和WREGINTCONx和PIRx寄存器中的中断标志位用来

区分多个中断源中断返回通过RETFIE编译器中断支持©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1842MPLAB®

C18

C

CompilerHands-On

Training编译器中断的管理有三个部分:指定中断函数,用语法:#pragma

interrupt建立向量函数保留编译器管理的资源建立一个中断服务函数©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1843MPLAB®

C18

C

CompilerHands-On

Training使用下面语法来宣告一个中断函数:#pragma

interrupt

name

[save=var1,…,varN]使用一个唯一的临时数据段使用

retfie来返回简单的现场保护建立一个中断服务向量©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1844MPLAB®

C18

C

CompilerHands-On

Training在中断服务向量地址建立一个函数:#pragma

code

high_vector_scn=0x0008void

high_isr

(void);void

high_vector

(void){_asmgoto

high_isr_endasm}#pragma

code中断服务程序里的现场保护©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1845MPLAB®

C18

C

CompilerHands-On

Training中断服务ISR

示例©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1846MPLAB®

C18

C

CompilerHands-On

Training宣告一个中断处理使成为一个函数调用:#pragma

interrupt

isr

save=section(“.tmpdata”),

PRODvoid

isr

(void){int

result;result

=

poll_device();/*

do

stuff

w/

result

*/...}目标板描述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1847MPLAB®

C18

C

CompilerHands-On

TrainingPIC18F8720

演示板PORTD连接了

8

个LEDADC的模拟通道0(AN0)连接了一个电位器外部中断0(RB0)连接右上角的按键手动复位(MCLR)连接左下角的按键课程综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1848MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18综述实验1:工具的集成周边外设的访问存储器的组织中断实验2:周边外设中断中断优先级EEDATA大数据存储目标实验3:中断优先级和多个周边外设的控制扩展的模式实验2:

周边外设中断©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1849MPLAB®

C18

C

CompilerHands-On

Training关键概念:对于周边外设的控制,可直接用字节和位操作访问SFR编译器中断处理在PORTD移位一个高位来顺序循环点亮LED使用TMR2中断来控制灯移动的速度课程综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1850MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18综述实验1:工具的集成周边外设的访问存储器的组织中断实验2:周边外设中断中断优先级EEDATA大数据存储目标实验3:中断优先级和多个周边外设的控制扩展的模式PIC18

中断优先级高优先级中断向量地址在

0x000008WREG,STATUS和BSR被自动保护低优先级中断向量地址在0x000018没有硬件的现场保护可被中断嵌套©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1851MPLAB®

C18

C

CompilerHands-On

Training使能中断优先级©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1852MPLAB®

C18

C

CompilerHands-On

Training默认是优先级禁止的,所有的中断都是高优

先级的RCON寄存器里的IPEN位用来使能中断优先级1

=中断优先级允许0

=中断优先级禁止中断优先级的选择©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1853MPLAB®

C18

C

CompilerHands-On

Training每一个支持中断优先级的中断源都有一个相

关的IP位来做优先级选择1

=高优先级0

=低优先级例如,要设置TMR2中断到低优先级INTCON2bits.TMR2IP

=

0;

/*

低优先级

*/注意外中断INT0一直是高优先级的中断#pragma

interruptlow©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1854MPLAB®

C18

C

CompilerHands-On

Training宣告一个低优先级的中断服务要使用语法:#pragma

interruptlow

name

[save=[var1…varN]]使用一个唯一的临时数据片段用

RETFIE返回简单的现场保护用软件来保存

WREG,BSR和STATUS低优先级中断示例©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1855MPLAB®

C18

C

CompilerHands-On

Training#pragma

interruptlow

low_isrvoid

low_isr

(void){/*

process

interrupt

*/}Delay延时库函数©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1856MPLAB®

C18

C

CompilerHands-On

TrainingDelay延时库函数程序:Delay1TCY()Delay10TCY()Delay10TCYx(n)

//Delay100TCYx(n)//Delay1KTCYx(n)

//Delay10KTCYx(n)////延时1个指令周期//

延时10个指令周期

延时10*n个指令周期延时100*n个指令周期

延时1000*n个指令周期延时10000*n个指令周期延时在计算上包括在前面函数调用的时间课程综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1857MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18综述实验1:工具的集成周边外设的访问存储器的组织中断实验2:周边外设中断中断优先级EEDATA大数据存储目标实验3:中断优先级和多个周边外设的控制扩展的模式EEDATA

读顺序©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1858MPLAB®

C18

C

CompilerHands-On

Training确保EEPGD位被清零,来做EEDATA访问把地址存到EEADR将RD位置1来启动读从EEDATA寄存器读结果EEDATA读C程序示例©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1859MPLAB®

C18

C

CompilerHands-On

Training/*

确认访问

EEDATA

*/EECON1bits.EEPGD

=

0;/*

设置要读位置的地址

*/EEADDR

=

address;/*

初始化读,读过程花一个指令周期

*/EECON1bits.RD

=

1;/*

取得结果

*/myvar

=

EEDATA;EEDATA

写顺序©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1860MPLAB®

C18

C

CompilerHands-On

Training确保EEPGD被清零来

做EEDATA访问确保WREN被置1来使能EEDATA写入要写的地址放到EEADR把要写入的值放到EEDATA向EECON2写入0x55向EECON2写入0xAA将WR位置1来启动写周期等待EEIF标志位置位清EEIF标志位在步骤5-7过程中,中断应该被禁止EEDATA写入C程序示例©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1861MPLAB®

C18

C

CompilerHands-On

TrainingEECON1bits.EEPGD

=

0;

/*EECON1bits.WREN

=

1;

/*EEADR

=

addr;

/*EEDATA

=

value;

/*EECON2

=

0x55;

/*指向EEDATA写使能

*/设置地址

*/设置要写的值

预写顺序

*/*/*/EECON2

=

0xaa;EECON1bits.WR

=

1;

/*启动写

*/while

(!PIR2bits.EEIF)/*等待结束

*/;PIR2bits.EEIF=0;/*清标志位*/课程综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1862MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18综述实验1:工具的集成周边外设的访问存储器的组织中断实验2:周边外设中断中断优先级EEDATA大数据存储目标实验3:中断优先级和多个周边外设的控制扩展的模式大数据存储目标©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1863MPLAB®

C18

C

CompilerHands-On

Training通过指针访问一个

>

256字节的目标是支持的要建立一个多Bank的目标分配目标到它自己的片段section建立一个指向目标的指针来作访问在连接器描述文件linker

script里建立一个新的区

域把这个目标的片段section

指派到这个新的区域里大目标示例C文件©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1864MPLAB®

C18

C

CompilerHands-On

Training#pragma

udata

buffer_scnstatic

char

buffer[0x180];#pragma

udatachar

*buf_ptr

=…&buffer[0];//

使用示例buf_ptr[5]

=10;if(

buf_ptr[275]>127

)…大目标示例Linker

Script文件改动之前DATABANK

NAME=gpr2DATABANK

NAME=gpr3©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1865MPLAB®

C18

C

CompilerHands-On

TrainingSTART=0x200START=0x300END=0x2FFEND=0x3FFSTART=0x200END=0x37fSTART=0x380END=0x3FF改动之后DATABANK

NAME=bigbufPROTECTEDDATABANK

NAME=gpr3...SECTION

NAME=buffer_scn

RAM=bigbuf课程综述©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1866MPLAB®

C18

C

CompilerHands-On

TrainingMPLAB®

C18综述实验1:工具的集成周边外设的访问存储器的组织中断实验2:周边外设中断中断优先级EEDATA大数据存储目标实验3:中断优先级和多个周边外设的控制扩展的模式实验3:

嵌套的中断的周边外设查询的控制©

2004

Microchip

Technology

Incorporated.

All

Rights

Reserved.813C1867MPLAB®

C18

C

CompilerHands-On

Training关键概念中断优先级EEDATA的访问多中断驱动和周边外设的查询访问采样ADC来调整移动LED的重复计数器时钟选择FOSC/32AN0是模拟输入200指令周期延时从开始采样到开始转换外中断(INT0)用来改变LED移动的方向

注意INT0一直是高优先级的中断设置TMR2到低优先级保存/恢复

方向数据到EEDATA课程综述©

2004

M

温馨提示

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

评论

0/150

提交评论