飞思卡尔DG128_PE编程入门教程
飞思卡尔DG128相关例程及资料

to the project. Keep in mind that we provide this as an example of how to
get up and running quickly with CodeWarrior. There are certainly other
files
//------------------------------------------------------------------------
// Adding your own code
//------------------------------------------------------------------------
the application. The menu Run > Halt or F6 stops the application.
In the debugger menu Component > Open you can load additional components.
//------------------------------------------------------------------------
- the linker .prm file
- Linker Map: the .map file generated by the linker
- Libraries: needed library files (ANSI, derivative header/implementation files)
飞思卡尔16位单片机9S12XS128使用和程序

飞思卡尔16位单片机9S12XS128使用收藏最近做一个关于飞思卡尔16位单片机9S12XS128MAA的项目,以前未做过单片机,故做此项目颇有些感触。
现记录下这个艰辛历程。
以前一直是做软件方面的工作,很少接触硬件,感觉搞硬件的人很高深,现在接触了点硬件发现,与其说使用java,C#等语言写程序是搭积木,不如说搞硬件芯片搭接的更像是在搭积木(因为芯片是实实在在拿在手里的东西,而代码不是滴。
还有搞芯片内部电路的不在此列,这个我暂时还不熟悉)。
目前我们在做的这个模块,就是使用现有的很多芯片,然后根据其引脚定义,搭接出我们需要的功能PCB板,然后为其写程序。
废话不多说,进入正题。
单片机简介:9S12XS128MAA单片机是16位的单片机80个引脚,CPU是CPU12X,内部RAM 8KB,EEPROM:2KB,FLASH:128KB,外部晶振16M,通过内部PLL可得40M总线时钟。
9S12XS128MAA单片机拥有:CAN:1个,SCI:2个,SPI:1个,TIM:8个,PIT:4个,A/D:8个,PWM:8个下面介绍下我们项目用到的几个模块给出初始化代码1、时钟模块初始化单片机利用外部16M晶振,通过锁相环电路产生40M的总线时钟(9S12XS128系列标准为40M),初始化代码如下:view plaincopy to clipboardprint?/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}}/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}}上面的代码是汇编写的,这个因为汇编代码量比较少,所以用它写了,具体含义注释已经给出,主函数中调用此函数即可完成时钟初始化,总线时钟为40M.2、SCI模块初始化单片机电路做好了当然少不了和PC之间的通信,通信通过单片机串口SCI链接到PC 端的COM口上去。
飞思卡尔单片机快速上手指南说明书

Freescale Semiconductor, Inc.Document Number: 用户指南 Rev. 0, 09/2014Confidentiality statement, as appropriate to document/part status.___________________________________________________________________飞思卡尔单片机快速上手指南作者:飞思卡尔半导体IMM FAE 团队飞思卡尔半导体是全球领先的单片机供应商,其单片机产品包含多种内核,有数百个系列。
为支持用户使用这些产品,飞思卡尔提供了丰富的网站资源、文档及软硬件工具,另外,我们还有众多的第三方合作伙伴及公共平台的支持。
对于不熟悉飞思卡尔产品和网站的初学者来说,了解和使用这些资源这无疑是一个令人望而生畏的浩瀚工程。
本指南的目的,就是给初学者提供一个指导,让他们不被这些海量信息淹没;用户根据本指导提供的操作步骤,能迅速找到所需的资源,了解如何使用相关的工具。
在本指南中,我们以飞思卡尔的新一代Kinetis 单片机K22系列为例,介绍了如何获取与之相关的资源,如何对其进行软硬件设计和开发。
实际上,这些方法也适用于其它的单片机系列。
当然,对于其它有较多不同之处的产品,我们也会继续推出相应的文档,供广大用户参考。
目录1 如何获取技术资料与支持 ..........................................................2 2 如何选择产品、申请样片及购买少量芯片和开发工具 ........... 93 飞思卡尔单片机的开发环境、开发工具和生态系统 ............. 224 如何阅读飞思卡尔的技术文档 ................................................ 45 5 飞思卡尔单片机硬件设计指南 ................................................ 55 6飞思卡尔单片机软件开发指南 (67)飞思卡尔单片机快速上手指南, Rev. 1, 09/20142Freescale Semiconductor, Inc.1 如何获取技术资料与支持1.1 概述当用户使用飞思卡尔单片机芯片时,如何获取芯片的数据手册(Datasheet )、参考设计(Reference Manual )和官方例程等资源呢?另外当用户遇到了技术问题该如何获得帮助和解答呢?这里以Kinetis 的K22系列芯片为例为大家介绍如何解决这些问题。
飞思卡尔单片机程序调试方法说明

飞思卡尔单片机程序调试方法说明对于飞思卡尔单片机编程,常用的调试方法有3种:调试方法1:在线调试法(Debug模式)CodeWarrior 10.3 开发环境下,可启动Debug模式,利用step into, step over, step return ,run to line 按钮,程序中设置断点,修改变量的值,查看寄存器的值等,进行调试。
有关调试窗口的按钮定义和调试方法,可查看帮助中debug View 和Debug information的说明。
调试方法2:串口调试法通过将程序运行过程中的数据、变量值等发送到PC机上查看,同时也可从PC机上通过串口发送数据到单片机,修改程序运行的参数(或步骤)进行调试。
智能车运行过程中常用用串口调试的方法。
调试方法3:硬件调试法通过连接在芯片外部的硬件或电路的变化或响应,查看程序运行的结果或状态(例如,在程序的某一位置点亮小灯、开蜂鸣器、发数据到LCD等)。
理解和掌握概念:单步调试相信任何调试人员对单步调试非常的熟悉。
CodeWarrior(与Eclipse基本一致)提供step into、step over、step return三个命令来支持单步调试。
三者的具体区别是:step into(快捷键F5)就是单步执行,遇到子函数就进入并且继续单步执行;step over(快捷键F6)是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。
step return(快捷键F7)就是单步执行到子函数内时,用step return就可以执行完子函数余下部分,并返回到上一层函数。
说的通俗点就是,step into:进入子函数,step over:越过子函数,但子函数会执行,step return:跳出子函数。
此外,Eclipse还提供了Run to line(快捷键Ctr + R)功能,从开始处运行程序,到正在执行的断点暂停。
飞思卡尔智能车dg128单片机控制程序代码

void AD_Init(void)
{
ATD0CTL2=0xC0; //AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止
ATD0CTL3=0x44; //每次转换8个序列, FIFO, Freeze模式下继续转
ATD0CTL4=0x02; //10位精度, 采样时间为2个AD时钟周期,ATDClock=4MHz
//设置舵机
PWMCTL_CON01=1; //使得通道0,1成为16位pwm
PWMPER0 =0x75;
PWMPER1 =0x30; //舵机的频率是: 24M/8/30000=100Hz,T=10ms
PWMDTY01=4500; // 对应为4500/30000的占空比,待调整
Infrared_detect();
data_handle();
motor_ctl();
steer_ctl();
}
}
void interrupt 26 MDC_ISR(void)
{
static unsigned int number_count=0; static unsigned int start=0; static
go=2;
if(begin>=150)
go=3;
}
}
}
//-----系统初始化-----------------------
void system_init(void) //system initiat
void speed_ctl(void); //速度控制
void motor_ctl(void); //电机控制
void PACBInit(void);
飞思卡尔DG128_PE编程入门教程

飞思卡尔DG128—PE编程入门教程(1)首先打开CodeWarrior 5.0 开发环境,然后在弹出的选项中选择新建工程注释:如果没有弹出这个对话框,可以在下面的File中选择New Project新建一个工程。
(2) 选择开发芯片的型号(这里我们使用的是MC9S12DG128)接着选择TBDML,这个是我们使用在线调试功能的选项。
(3) 选择工程的生成路径,注意:如果我们不使用PE编程功能的话,在这步结束后,可以直接选择完成按钮来完成工程的新建。
(4) (PE编程功能的步骤)下一步,这个对话框我们什么都不用选择,直接点击下一步。
(5)选择下面这个选项来启动PE编程功能。
(6) 红色边框中选项的功能为是否启动浮点数据的使用,默认第一个是不启用;第二个是启用,float数据为32位,double为32位;第三个是启用,float 数据为32位,double数据为64位。
(7)最后一步什么都不要设置,直接点击完成。
(8) 以上步骤我们完成了一个DG128工程的新建步骤。
PE的使用步骤:(1) 新建工程后,会自动弹出个芯片封装型号的选择,选择后点击OK。
(注意:我们学校使用的芯片是112管脚,所以注意选择红线标注的选项)(2) 点击OK后,就会出现我们要编程的环境了。
如下所示:(3)红色标注的地方就是该工程的工作区。
细心的同学就会发现,它生成的文件中没有我们需要写的源文件XXX.c 。
那我们现在就来生成这些文件,找到下图的选项Processor Expert 。
然后点击第二个选项的Generate Code ' XXX .mcp' (这里的XXX 表示该工程名称)。
下面是自动生成的文件。
这时候发现软件为我们自动的生成了一个Project.c (Project 是我这个工程建立的文件命,不同的工程文件名将导致这个名字不同)的文件。
这个就是我们将要编写的源文件了,它里面包含了主函数main()。
飞思卡尔单片机教学

沿锁存。LSTRB:在外部使用2片8位宽度存储器时和ADDR0,R/W配合使用。可可转转到到9页页图图。。
模式选择和PORTE复用 TEST:保留脚,接地 XIRQ:非屏蔽中断 IRQ:可屏蔽中断
RAM
EEPROM
Flash/ROM
外部扩展存储器
低
§3-5 复位及时钟—复位
上电复位
单片机自动检测VDD端的正跳变,启动自动工作。
外部复位
通过RESET引脚加一低电压,拉低超过一定时间 后可实现复位。
看门狗复位
帮助系统在软件跑飞后自动复位。
时钟监视器复位
利用内部的RC电路来保证时钟频率满足要求。
MC9S12DG128拥有128K的FLASH,8K的RAM,2K的EEPROM。
用于给单片机内部提供合适的电源电压,9S12单片机内核使用2.5V供电.VDD1\2,VSS1\3,VDDPLL若使用电压调整模块,这些引脚
电压调整模块及相关引脚 只用接去耦电容.注意VDD1.2的箭头是向外出的.
电压调整模块
存储器容量寄存器
RAM_SW2-RAM_SW0:分配系统RAM存储空间
寄存器区映射寄存器-INITRG
指定内部寄存器区基址的高5位。 则最小基址是$0000,最大基址为$7FFF(D7=0决定)。
使用时,一般定位在$0000开始的1K中。 因为前256个字节可以用直接地址(8 bit地址)访问,如果
Z: 0标志,当运算结果为0时,该位置1。
V: 2补码运算溢出标志,当运算结果出现2补码溢出时,该位置1。
飞思卡尔单片机 DG128 Timer寄存器说明

Timer寄存器说明1、定时器/计数器系统控制寄存器1(TSCR1)TSCR1 寄存器是定时器模块的总开关,它决定模块是否启动以及在中断等待、BDM 方式下的行为,还包括标志的管理方式。
其各位的意义如下:TEN:定时器使能位,此外它还控制定时器的时钟信号源。
要使用定时器模块的IC/OC 功能,必须将TEN 置位。
如果因为某种原因定时器没有使能,脉冲累加器也将得不到ECLK/64 时钟,因为ECLK/64 是由定时器的分频器产生的,这种情况下,脉冲累加器将不能进行引脚电平持续时间的累加。
0:定时器/计数器被禁止,有利于降低功耗。
1:定时器/计数器使能,正常工作。
TSWAI:等待模式下计时器关闭控制位。
【注意】定时器中断不能用于使MCU 退出等待模式。
0:在中断等待模式下允许MCU 继续运行。
1:当MCU 进入中断等待模式时,禁止计时器。
TSFRZ:在冻结模式下计时器和计数器停止位。
0:在冻结模式下允许计时器和计数器继续运行。
1:在冻结模式下禁止计时器和计数器,用于仿真调试。
【注意】TSFRZ 不能停止脉冲累加。
TFFCA:定时器标志快速清除选择位。
0:定时器标志普通清除方式。
1:对于TFLGl($0E)中的各位,读输入捕捉寄存器或者写输出比较寄存器会自动清除相应的标志位CnF。
对于TFLG2($0F)中的各位,任何对TCNT 寄存器($04、$05)的访问均会清除TOF 标志;任何对PACN3 和PACN2 寄存器($22,$23)的访问都会清除PAFLG 寄存器($21)中的PAOVF 和PAIF 位。
任何对PACN1 和PACN0 寄存器($24,$25)的访问都会清除PBFLG 寄存器($21)中的PBOVF 位。
【说明】这种方式的好处是削减了另外清除标志位的软件开销。
此外,必须特别注意避免对标志位的意外清除。
2、计时器系统控制寄存器2(TSCR2)寄存器偏移量:$000DTOI:定时器/计时器溢出中断使能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
飞思卡尔DG128—PE编程入门教程(1)首先打开CodeWarrior 5.0 开发环境,然后在弹出的选项中选择新建工程注释:如果没有弹出这个对话框,可以在下面的File中选择New Project新建一个工程。
(2) 选择开发芯片的型号(这里我们使用的是MC9S12DG128)接着选择TBDML,这个是我们使用在线调试功能的选项。
(3) 选择工程的生成路径,注意:如果我们不使用PE编程功能的话,在这步结束后,可以直接选择完成按钮来完成工程的新建。
(4) (PE编程功能的步骤)下一步,这个对话框我们什么都不用选择,直接点击下一步。
(5)选择下面这个选项来启动PE编程功能。
(6) 红色边框中选项的功能为是否启动浮点数据的使用,默认第一个是不启用;第二个是启用,float数据为32位,double为32位;第三个是启用,float 数据为32位,double数据为64位。
(7)最后一步什么都不要设置,直接点击完成。
(8) 以上步骤我们完成了一个DG128工程的新建步骤。
PE的使用步骤:(1) 新建工程后,会自动弹出个芯片封装型号的选择,选择后点击OK。
(注意:我们学校使用的芯片是112管脚,所以注意选择红线标注的选项)(2) 点击OK后,就会出现我们要编程的环境了。
如下所示:(3)红色标注的地方就是该工程的工作区。
细心的同学就会发现,它生成的文件中没有我们需要写的源文件XXX.c 。
那我们现在就来生成这些文件,找到下图的选项Processor Expert 。
然后点击第二个选项的Generate Code ' XXX .mcp' (这里的XXX 表示该工程名称)。
下面是自动生成的文件。
这时候发现软件为我们自动的生成了一个Project.c (Project 是我这个工程建立的文件命,不同的工程文件名将导致这个名字不同)的文件。
这个就是我们将要编写的源文件了,它里面包含了主函数main()。
大家不必理会其他文件夹中的文件,只要关心这三个文件即可。
下面说明一下这三个文件的使用。
1.Events.c这个文件中包含了中断事件代码,所以中断服务程序只能写在这个文件中,具体怎么写,后面将以一个定时器的使用来向大家介绍。
2.Project.c这个文件中包含了主函数main(),程序将从这里开始执行;注意:这个main函数中包含了一句PE_low_level_init();语句。
这条语句的功能是初始化PE。
所以大家不用管他,千万不要删除,否则将出现错误。
3.Events.h这个文件中包含了中断事件代码的一些声明。
下面将通过一个功能模块的添加和编程来向大家演示PE的使用。
一.首先来介绍下时钟模块的使用:点击这个选项;进入到PE工作区,这时候将看到我们的芯片型号,然后双击它。
提示:这里有个使用技巧,我们要编写的两个文件就包含在这个界面的文件夹中,即:Project.c:main和Events.c:event。
双击它既可进入需要编写的文件界面。
右边将出现时钟频率选择的选项,需要修改两处红框标注的地方。
第一处修改该外部晶振频率(此时晶振频率为9.8304MHZ);第二处修改该芯片的所要设定的总线频率,一般选为19.6608MHZ,此时使能PLL锁相环时钟。
这样我们就设置芯片执行的时钟频率。
二.IO口的使用1.这里学习如何添加要使用的功能模块,后面介绍的各个功能模块的添加方法一样,就不一一再演示了。
添加方法如下:然后右击选择Add Bean(s)…选项,此时将弹出如下对话框。
请注意第三个文件夹既可。
下面我们将这些文件夹展开。
(1) 串口功能:(2) AD功能:(3) IO口功能:(4) PWM功能:(5) 定时器功能(6) 定时脉冲采集我们这里要使用的是IO口功能,那么添加IO口功能函数这里有很多功能模块,那我们要怎么选择呢?仔细看下他们的名称就可以知道他们大概的作用。
第一个是1个IO口的控制模块,第二个是多个IO口的控制模块。
这些都是定义为输出,那输入的就是倒数第二个。
这里我们选择控制多个IO口,也就是第二个模块BitsI0,然后点击Add按键,接着关掉这个对话框,这时候界面如下所示:而且工作区中多了这个选项:这里可以选择要使用哪个IO端口,A口,B口,E口等等。
管脚也可选择,点击后面的添加,添加后如下:这里选择IO的工作模式,输入输出模式,是否上拉下拉。
这里设置初始化时的状态。
这里设置输出,初始值为0,也就是低电平。
然后点击编译下。
注意:在编译的过程中,系统会提示你是否要更新你的用户文件,就是Project.c和Events.c。
这个时候个人决定是否要更新。
这样设置完了IO的所有初始化工作,现在我们来学习如何使用这个模块。
点击那个IO口模块,将它展开。
显示出了很多函数,这很好,我们可以偷懒不用自己打键盘了。
大家可以这样偷懒下,点击住你要使用的函数,然后拖动他,将他放在这两个文件中。
此时放在主函数main中这时候缺少形参,传进这个函数的形参。
那我们怎么知道它需要的是什么参数呢?事情很简单,请双击下右边工作区中你拖动的函数。
如果发现你无法双击的话,那请先编译一下,然后就可以了。
这个就是函数的原型了,上面有它的说明,英文好点的同学自己看说明吧。
其实不用看说明我们靠经验也知道,这个函数是控制IO某一位的置位。
这里填入2。
下面简单介绍下各个函数的功能下,使用方法如上,说明双击函数,查看原型即可。
这两个函数第一个是获得当前IO口的输入还是输出模式。
第二个是设置IO口为输入还是输出模式。
第一个获得8个IO的状态。
第二个设置8个IO的状态第一个是获得IO状态,只是可选择要获得的是哪几个引脚的。
第二个是设置多个IO状态。
第三个也是设置单个IO状态。
第四个是IO状态清零。
第五个是反转IO状态。
这样就介绍完了IO的使用方法。
下面我们来学习其他模块的使用。
三.串口的使用依照前面介绍添加IO口模块的步骤来添加串口模块。
添加完后,接着的工作就是初始化他的功能。
这个功能很简单,我们只要设置下波特率即可,其实的参数我们使用默认的。
默认使用串口0(SCI0)。
下面来看看它的功能函数。
这里有很多函数前面有个红色的叉,这表示没有使能这个功能,大家如果要使用的话,请在叉那里点击一下,让它变成绿色的沟即可。
注意:由于这个串口发送的功能函数比较底层,使用起来没那么方便。
但是基本可以满足一般简单的需求,使用时将其拖拽到指定的代码区即可。
四.AD模块的使用首先,依照上述步骤添加好AD模块。
接着初始化功能。
AD功能我们大多数使用过的人都知道,其实只需要设置管脚、精度和采样周期就可以使用。
红色边框1这里可以添加所要使用的AD管脚。
如我们要使用两个AD口,那点击下+按钮,添加成两个AD口。
红色边框2是AD管脚的具体位置。
下面选择下AD的采集精度。
最后设置一下采样后的转化时间就可以使用了。
此时点击选择那个....选择转化时间。
弹出下面的对话框。
注意下:在左边用红色边框话那个是us微秒的单位,显示为乱码,这里可以自己填入时间,如果不知道要填的是多大的时间的话,那可以双击在右边红色边框内列表中的转化时间。
最后点击OK退出。
这里我大概初始化完成AD的功能。
下面了解他的功能函数。
Codewarrior IDE中生成的函数中,对用户而言,最有用的是下面两个函数。
byte AD2_Measure(bool WaitForResult);//开启AD转换byte AD2_GetV alue16(word *V alues);//获得AD采集结果,16位的数据输出。
举例说明:int sum;AD1_Measure(0);AD1_GetV alue16(&sum);sum >>= 4;//这里发现采集出来的值被左移了4位,所以要把它右移回来,这样才是正确的数值。
这个例子中将获得的采集值存入sum中。
注意了:在Events.c这个文件中,多加出来一个AD的中断函数,这个是PE默认生成的。
在初始化的时候可以关闭,不关闭也没关系,不写入代码即可。
五.PWM模块的使用依照上述步骤添加PWM模块。
这里只要设置这两个地方即可。
红色边框1是设置那个PWM管脚初始化。
红色边框2是设置PWM波的周期和占空比的(Period:周期Starting pulse width:占空比)先点击周期按钮选择周期。
左边的红色边框是要设置的单位,这里选择Khz为单位。
如果不知道要选择多少,可选择右边的红色边框。
占空比的设置同周期设置一样。
此时就设置完了PWM的功能。
功能函数如下:这里是默认使能的功能函数,先介绍下这几个函数的功能。
SetRatio16();功能是设置PWM的周期。
SetDutyUS() ;功能是设置占空比SetDutyMS() ;功能是设置占空比,与上面那个函数只是单位不同而已。
由于我们做智能车的时候,基本不去改动PWM的周期,需要我们改变的只有PWM的占空比,借此去控制舵机的转向和电机的转动。
SetDutyUS()和SetDutyMS()传入的参数一样,都是一个0到65535的数值。
六.定时器模块的使用首先我们来添加定时器的功能模块,接下来初始化。
这里有两个需要设置的地方。
红色边框1设置的中断源。
红色边框2设置的中断周期。
点击一下…按钮进入对话框选择中断时间。
这里我选择的是中断1ms中断一次。
如果要使用开启和关闭中断的功能函数,请选择这个选项然后点击这两个按键,使能这两个函数,其他的功能模块也可以这样。
最后编译一下文件。
这时候Events.c文件中就会出现多出一个中断函数。
中断程序就写在这里了。
以上就介绍一下飞思卡尔PE环境下基本模块的编程方法。
由于时间问题,未能更加详细讲述,可能会存在一些错误,请大家多多见谅。
改编:713_708_7052014年1月4日。