飞思卡尔单片机LED控制例程详解
飞思卡尔单片机LED控制例程详解-推荐下载
准备工作: 硬件:Freescale MC9S08JM60 型单片机一块; 软件:集成开发环境 codewarrior IDE; 开发板上有两个 LED 灯,如下图所示:
实验步骤: 1. 首先,确保单片机集成开发环境及 USBDM 驱动正确安装。其中 USBDM 的安装步骤如下: 假设之前安装过单片机的集成开发环境 6.3 版本:CW_MCU_V6_3_SE; 运行 USBDM_4_7_0i_Win,这个程序会在 c 盘的程序文件夹下增加一个目录 C:\Program
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
飞思卡尔单片机快速上手指南说明书
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)功能,从开始处运行程序,到正在执行的断点暂停。
飞思卡尔单片机S12使用方法及程序
飞思卡尔单片机S12使用方法及程序单片机简介: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口上去。
飞思卡尔MC9S12单片机实验程序
PORTB=0xff; //led灯全暗
TIOS=0x00; //设置定时器通道0为输入捕捉
TSCR1=0x80; //定时器使能
TSCR2=0x01; //设置自由计数器2分频,且禁止定时器溢出中断
TCTL4=0x02; //捕捉器仅下降沿捕捉
TIE=0x01; //允许定时器通道0的中断
}
}
void main(void) {
DDRB=0xff;
PORTB=0x00;
for(;;)
{
fun();
}
}
SCI
#include <hidef.h>
#include <mc9s12db128.h>
#pragma LINK_INFO DERIVATIVE "mc9s12db128b"
unsigned char pp=0xf0; //欲发送的数字
/*********串口初始化*********/
void init() {
DDRB=0xff;
PORTB=0xff; //开始led灯暗,即数据尚未接收
SCI0BD=52; //初始化波特率为9600
SCI0CR1=0x00; //八位无奇偶校验模式
SCI0CR2=0x2c; //接收中断允许
}
/**************写数据***********/
void interrupt 20 funck() {
unsigned char k;
k=read();
PORTB=~k;
}
SPI
不会,以后补充。
LED
#include <hidef.h> /* common defines and macros */
飞思卡尔电机控制模块详解
M=2.一、关键点1、MC 模块驱动电机的PWM 波频率在20K 左右时效果比较好。
DITH 位等于0时,计算方法如下:DITH=1时,其中,左对齐和有对齐方式下 M=1,中间对齐是2、MC 模块定时计数器的中断最好禁止,如果开启,在相应的中断服务程序中至少要添加一条“清楚中断标志位”的指令。
3、电机控制模块共8个通道,每个通道有2个Pin 脚组成。
4、Fast 位控制精度,7位或者11位。
5、给周期寄存器写入数值,可启动 MC 计数器,写0关闭所有通道的计数器。
6、MCAM[1:0]写入0x00可关闭某个channel ,写入非零值不是启动MC 计数器,而是控制对齐方式。
为了精确周期寄存器的值应尽量大,Ftc 应尽量小。
二、寄存器寄存器讲解讲解讲解::1 MCCTL0 (Motor Controller Control Register 0)第7位保留;第6、5位是MCPRE[1:0]控制电机控制器定时计数器时钟f TC 预分频系数。
如下:第4位 MCSWAI 置1,等待模式中电机控制器正常运行,清0,在等待模式中电机控制模块时钟关闭。
第3位,FAST ,清0,电机控制器PWM 模块占空比寄存器分辨率设置为11位,置1,电机控制器PWM 模块占空比寄存器分辨率设置为7位。
第2位,DITH ,清零,电机控制器dith 特性禁止,置1电机控制器dith 特性使能。
第1位保留;第0位MCTOIF ,为1表示,电机控制模块定时计数器溢出;为0,表示自上次复位或清零以来,电机控制模块定时计数器没有发生溢出。
2 MCCTL1 (Motor Controller Control Register 1)第7位,RECIRC控制PWM波极性。
0表示—,1表示+ ;第6到第1位系统保留;第0位,MCTOIE,为0表示Motor Controller Timer Counter Overflow Interrupt禁止,为1标志使能。
飞思卡尔单片机的程序
#include "derivative.h"//-----------------------------------------------------static void SCI_Init(void){SCI0CR2=0x2c; //enable Receive Full Interrupt,RX enable,Tx enableSCI0BDH=0x00; //busclk 8MHz,19200bps,SCI0BDL=0x1aSCI0BDL=0x68; //SCI0BDL=busclk/(16*SCI0BDL)//busclk 8MHz, 9600bps,SCI0BDL=0x34//busclk 8MHz, 9600bps,SCI0BDL=0x68//busclk 24MHz, 9600bps,SCI0BDL=0x9C} //busclk 32MHz, 9600bps,SCI0BDL=0xD0//busclk 40MHz, 9600bps,SCI0BD =0x104//-----------------------------------------------------static void Port_Init(void){DDRA = 0xff; //LCD1100,PA0--4,PA67 D1D2PORTA= 0x00;DDRB = 0xff; //LED PTB0--7,PORTB= 0xff; //LEDs onDDRE = 0xFF; //MOTOR CONTROLPORTE= 0x00; //PDDRH = 0x00; // PORTH inputPTIH = 0X00; // KEY,PH0--5PERH = 0xff; // PORTH pull upPPSH = 0x00; // Port H Polarity Select Register-falling edgePIEH = 0x02; // PORTH interrut disable but 1,DDRJ = 0X01; // PJ0判断行同步脉冲到达//PPSJ = 0x01; // Port J Polarity Select Register-rising EDGEPPSJ = 0x00; // Port J Polarity Select Register-falling EDGEPIEJ = 0X00; // VIDEO SYNC INTERRUPT DISABLED,BUT NOT IN MAIN() PERJ = 0xff;DDRP = 0xff;PERP = 0xff;PTP_PTP0 = 0;}//-----------------------------------------------------static void PWM_Init(void){//SB,B for ch2367//SA,A for ch0145PWMPRCLK = 0X55; //clockA,CLK B 32分频:500khzPWMSCLA = 0x02; //对clock SA 进行2*PWMSCLA=4分频;pwm clock=clockA/4=125KHz;PWMSCLB = 0X02; //clk SB=clk B/(2*pwmsclb)=125KHZ//pwm1PWMCNT1 = 0;PWMCAE_CAE1=0;PWMPOL_PPOL1=0;PWMPER1 =125;PWMDTY1 =100;PWMCLK_PCLK1 = 1;PWME_PWME1 = 0;}void AD_Init(void){A TD0CTL1=0x00; //7:1-外部触发,65:00-8位精度,4:放电,3210:chA TD0CTL2=0x40; //禁止外部触发, 中断禁止A TD0CTL3=0xa0; //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转A TD0CTL4=0x01; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]A TD0CTL5=0x30; //6:0特殊通道禁止,5:1连续转换,4:1多通道轮流采样A TD0DIEN=0x00; //禁止数字输入}//-----------------------------------------------------//IOC7/PT7用于计算CS3144产生的脉冲数static void IOC_Init(void){TCTL3=0xc0;//c-输入捕捉7任何沿有效,TCTL4=0xc0;//40表示ICx禁止, 1表示上升沿, 2表示下降沿, 3表示任何沿TIE =0x00;//每一位对应相应通道中断允许,0表示禁止中断TIOS =0x00;//每一位对应通道的: 0输入捕捉,1输出比较TCTL3_EDG7x=1;//c-输入捕捉7任何沿有效,}//产生40ms的定式中断,读取IOC7的计数值static void Timer_Init(void){//TSCR1=0X80;//TIMER INT ENABLED//TSCR1=0x90;//计数器使能TEN|快速清零TFFCATSCR1=0X00; //禁止TIM//TSCR2=0X80;//DIV 1->2.5ms,enable time overflow interrrupt//TSCR2=0X82;//DIV 4->10ms//TSCR2=0X83;//DIV 8->20ms//TSCR2=0X84;//DIV 16->40msTSCR2=0X85;//DIV 32->80ms//TSCR2=0X86;//DIV 64->160ms//TSCR2=0X87;//DIV 128->320ms,enable time overflow interrruptTCNT =0; //PACTL=0X50; //PT7 PIN,PACN32 16BIT,FALLing edge,NOT INTERRUPT //PBCTL=0X40;//PBCN10 16BIT,INT DISABLED//ICPAR=0; //8BIT DISABLED}//-----------------------------------------------------// setup of the RTI interrupt frequencystatic void RTI_Init(void){//RTICTL=0x10; //2^10x40ms=4.96s//RTICTL=0X74; //SET PRESCALER,div rate=(m+1)x2^(n+9),(m=1-7,n=0-15)//tick=16Mhz/((4+1)x2^(7+9))=48.83,(/sec)//16000000/64k=244.140625 ,与晶振频率相关,与分频无关RTICTL=0x77; //8x2^16 =>32,75ms,30.5175Hz//RTICTL=0x7f; //16x2^16 =>,65.536ms,15.26Hz//RTICTL=0x1F; //16x2^10--1ms//CRGINT=0X80; //enable RTI InterruptCRGINT=0X00; //disable RTI Interrupt}static void Time_Start(void){RTI_Init();CRGINT=0X80; //enable RTI Interrupt}//-----------------------------------------------------// PLL初始化子程序BUS Clock=16Mvoid setbusclock(void){CLKSEL=0X00; // disengage PLL to systemPLLCTL_PLLON=1; // turn on PLLSYNR=0x00 | 0x01; // VCOFRQ[7:6];SYNDIV[5:0]// fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)// fPLL= fVCO/(2 × POSTDIV)// fBUS= fPLL/2// VCOCLK Frequency Ranges VCOFRQ[7:6]// 32MHz <= fVCO <= 48MHz 00// 48MHz < fVCO <= 80MHz 01// Reserved 10// 80MHz < fVCO <= 120MHz 11REFDV=0x80 | 0x01; // REFFRQ[7:6];REFDIV[5:0]// fREF=fOSC/(REFDIV + 1)// REFCLK Frequency Ranges REFFRQ[7:6]// 1MHz <= fREF <= 2MHz 00// 2MHz < fREF <= 6MHz 01// 6MHz < fREF <= 12MHz 10// fREF > 12MHz 11// pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;POSTDIV=0x00; // 4:0, fPLL= fVCO/(2xPOSTDIV)// If POSTDIV = $00 then fPLL is identical to fVCO (divide by one)._asm(nop); // BUS CLOCK=16M_asm(nop);while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;CLKSEL_PLLSEL =1; //engage PLL to system;}//-----------------------------------------------------#pragma CODE_SEG DEFAULTvoid Init_Dev(void){setbusclock();Port_Init();SCI_Init();PWM_Init();AD_Init();Timer_Init();Time_Start();IOC_Init();}//-----------------------------------------------------。
飞思卡尔智能车电路详解(全)
之
硬件电路设计
安徽大学 创新实验室整理
模块 黑线检测模块 测速模块 电机驱动模块 电源模块
单片机控制模块
黑线检测模块
• 光电组:反射式红外传感器、 激光传感器 • 摄像头组:CMOS、CCD
红外传感器RPR220
具体使用注意点
• 发光二极管部分在恒流情况下最大工作电 流为50mA。 • 标准检测距离只有7mm。 • 光敏三极管引脚正极反用。
5V电源部分
LM2575芯片手册上的常用电路
小车使用的LM2575电路
在利用LM2575设计电路时, 应注意以下几点
(1)电感的选择: 根据输出的电压档次、最大输入电压Vin(MAX)、最大负载 电流I load(MAX)等参数选择电感时可参照相应的电感曲线图 来查找所需采用的电感值。 (2)输入输出电容的选择: 输入电容应大于47μF,并要求尽量靠近电路。而输出电容 推荐使用的电容量为100μF~470μF,其耐压值应大于额定输出 的1.5~2倍。对于5V电压输出,推荐使用耐压值为16V的电容。 (3)二极管的选择 : 二极管的额定电流值应大于最大负载电流的1.2倍,但考虑 到负载短路的情况,二极管的额定电流值应大于LM2575的最大 电流限制;另外二极管的反向电压应大于最大输入电压的1.25 倍。
LM2575芯片特点
• 优点: 转换效率高,芯片发热现象不明显,避 免因温度过高影响单片机稳定工作。
• 缺点: 压降大,当电池开路电压低于7.4V左右 时输出电压达不到5V;外围电路较复杂。
LM 2940
参数说明
• 输入端电容为0.47uF,但市场上此容值的电 解电容只有耐压50V的,超过了比赛对电容 的要求,所以实际制做过程中我们采用了 1uF/25V来代替。 • 输出端为抗干扰还可以串入磁珠。
利用飞思卡尔S12X单片机的XGATE操控LED灯
利用飞思卡尔S12X单片机的XGATE操控LED灯实飞思卡尔在08年就已经推出了HCS12X系列的16位MCU,而这款单片机的典型特点就是采用了双核架构(MPCore),增加了一个RISC核的高效协处理器(英文名叫co-processor,呵呵,潮一把)——XGATE模块,专门负责处理中断任务,也就是说它的使命就是将主核CPU从执行耗时的中断处理程序的工作中解放出来,而专注于执行与应用相关的任务,这种强大的组合实现了最佳的实时事件处理,而且由于XGATE采用的是RISC 指令核,代码高效且主频可以达到主核的2倍,真是牛逼啊,呵呵。
简单的介绍完毕,如果想进一步深入研究的话建议可以买本邵贝贝老师写的《嵌入式系统中的双核技术》里面对XGATE介绍的还是挺细致的,然后再结合HCS12X系列的datasheet(建议到FSL官网上下一个,本文附件为Xgate的部分中文说明手册需结合datasheet)。
其实XGATE简单的用起来的话还是挺容易的,下面就以MC9S12XDP512这款片子为例通过一个简单的IO中断改变LED亮灭的例程(IO中断采用PTH口,LED采用上拉到PORTA口的方式)说说使用XGATE处理中断的完整流程,为了生动些,就主要以图为主了(开发环境采用CW5.0):(1)建立工程,主要注意以下三步就成,其他均默认即可,其中第三幅图建议选择XGATE IN RAM,提高code 执行速度。
(2)建好的例程里,其实在XGATE模块里是默认加了一个软件中断的SoftwareTrigger0_Handler,按照设置它的方法设置用户定义的中断就可以,不过这需要一定基础,咱还是一步步来吧,心急吃不了热豆腐啊,呵呵。
在工程栏里的source文件组下,main.c为主函数文件(这里需要对XGATE进行一下设置);xgate.cxgate文件为XGATE 的主文件,在其中编写我们需要的中断服务程序;xgate.h文件是对XGATE用到的一些声明了,下面就开始以PTH口中断管理PORTA口的LED亮灭为例一步一步的来了(注意我写的中文注释部分,也就是需要添加的地儿):在main.c里在xgate.cxgate文件里,首先需要添加#include <mc9s12xdp512.h>头文件,应为要用到PORTA和H口得定义,这个一定不要忘了。
(整理)飞思卡尔8位单片机MC9S08JM60开发板实践教程
第一章搭建实验环境系统时钟设置#include "App\Include\App.h"#ifndef _MCG_C#define _MCG_C//oscillator 12MHZ 倍频为24MHZ()先8分频后16倍频void S_MCGInit(void){/* the MCG is default set to FEI mode, it should be change to FBE mode*//************************************************************************** ***********MCGC2[7:6] BDIV总线频率分频因子–选择由MCGC1寄存器中CLKS位决定的时钟源的分频。
这控制总线频率。
00 编码0 –时钟1分频01 编码1 –时钟2分频(复位后默认)10 编码2 –时钟4分频11 编码3 –时钟8分频[5] RANGE频率范围选择–选择外部振荡器或者外部时钟源的频率范围。
1 选择1MHz到16MHz外部振荡器的频率范围。
(1MHz到40MHz的外部时钟电源)的高频率范围0 选择32kHz到100kHz外部振荡器的频率范围。
(32kHz到1MHz的外部时钟电源)的低频率范围[4] HGO高增益振荡器选择–控制外部振荡器操作模式。
1 配置外部振荡器为高增益运行0 配置外部振荡器为低功耗运行[3] LP低功耗选择–控制在忽略模式中FLL(或者PLL)是否为无效1 FLL(或PLL)在忽略模式(低功耗)中为无效的。
0 FLL(或PLL)在忽略模式中为无效的。
[2] EREFS外部参考时钟选择–为外部参考选择时钟源1 选择振荡器0 选择外部时钟源[1] ERCLKEN外部参考时钟使能–使能外部参考时钟作为MCGERCLK1 MCGERCLK激活0 MCGERCLK 无效[0] EREFSTEN外部参考时钟停止使能MCGC2 0b0011 0110 激发外部时钟(晶振)(没有使能)*************************************************************************** ***********/MCGC2=MCGC2_RANGE_MASK|MCGC2_HGO_MASK|MCGC2_EREFS_MASK|MCGC2_ERCLK EN_MASK;while(!MCGSC_OSCINIT);//MCGSC寄存器中OSCINIT(第1位)为1,表示由EREFS位选择的晶振被初始化。
飞思卡尔单片机教程
注 : A/D模块的时钟频率要在500KHz和2MHz之间, 所以在选择分频因子时一定要注意。
采样时间选择
SMP [1 :0]
采样时间
00
2个 A/D时钟周期
01
4个A/D时钟周期
ATDclock= ( (BusClock) / (PRS+1) ) /2
10
8个A/D时钟周期
11
16个A/D时钟周期
设CCBCA = 000,转换序列从通道
0开始;ATD0DR0,
ATD0DR1,ATD0DR2存放转换结果
设CCBCA = 0 10,转换序列从通道 2开始。 仍然是ATD0DR0,
ATD0DR1,ATD0DR2存放转换结果
S8C 、S4C 、S2C 、S1C:定义转换队列的长度 。默认长度为4。 FIFO: 结果寄存器先进先出模式 。1=FIFO模式 ,转换结果是连续 存放的;0=非FIFO模式 ,转换结果放在对应的寄存器中。 FRZ1、FRZ0:背景调试冻结模式允许 。这两个控制位就决定了,
{ while (ATD1STAT0_SCF ==0) ;
ad_value [0] = ATD1DR0; ad_value [4] = ATD1DR4;//使用 PORTB= (byte) ad_value [4] ;
}}
void ATDInit(void)
{ATD1CTL2=0xC0;//AD模块上电,快速清零,无等待模式,禁止外部触发, 中断禁止 // ADPU AFFC AWAI ETRIGLE --- ETRIGP ETRIGE ASCIE ASCIF
PRS=3
ATD1CTL5=0xA4; //右对齐无符号 ,单通道采样 ,通道0
飞思卡尔8位单片机实用教程说明书
图书基本信息书名:《飞思卡尔8位单片机实用教程》13位ISBN编号:978712108999210位ISBN编号:7121089998出版时间:2009-6出版社:曾周末、李刚、陈世利、 周鑫玲 电子工业出版社 (2009-06出版)页数:222版权说明:本站所提供下载的PDF图书仅提供预览和简介以及在线试读,请支持正版图书。
更多资源请访问:前言飞思卡尔原是全球领先的半导体公司,为汽车、消费电子、工业控制、网络和无线市场设计并制造嵌入式半导体产品。
飞思卡尔系列单片机由于其低成本和高性能的特点越来越受到用户的青睐。
本书介绍的MC9S08QG8单片机采用高性能、低功耗HCS208飞思卡尔8位微控制器为内核,是一款集成度很高、功能丰富、适用于各种应用的低价位单片机。
本书将给大家介绍它的一些主要功能及特性,包括灵活多样的低功耗模式、3.3V电压下的Flash编程、片内调试仿真器、高速ADC、IC总线、片内比较器等。
本书共12章,深入浅出地从一般单片机的基础知识人手,引出飞思卡尔8位单片机基础知识、最小系统设计,进而有步骤地、详略得当地介绍飞思卡尔8位单片机的寄存器与片内存储器、指令系统与汇编程序设计、中断系统等基本功能,并在之后的章节中,详细而又有针对性地一一介绍了集成在这款单片机内部的其他功能模块,比如定时器和比较器、异步串行通信、SPI、IC、模/数转换等功能模块。
本书还介绍了飞思卡尔单片机与MCS51单片机的区别,学过5l单片机的人会很快掌握其要点。
在本书最后一章里,有针对性地介绍了S08系列单片机c语言编程,并详细介绍了Code Warrior IDE调试软件的使用方法。
本书给出的所有例题都在实验板上运行验证过。
总之,本书力求通过最简洁的语言和表述方式、最通俗易懂的应用举例,向广大读者全面地介绍MC9S080G8单片机的功能及特性,以求能够为大专院校的学生及各相关领域的工作者提供一些帮助。
参加本书编写的还有天津大学精仪学院的薛彬、汤其剑、刘世廷、高雅彪、叶德超、黄邦奎、孙晔等研究生。
飞思卡尔单片机各种功能程序
流水灯四种效果:#include <hidef.h> /* common defines and macros */ #include <stdlib.h>#include <mc9s12xdp512.h> /* derivative information */ #pragma LINK_INFO DERIV ATIVE "mc9s12xdp512"#include "main_asm.h" /* interface to the assembly module */ unsigned char temp;//unsigned char pa @0x200;//unsigned char pb @0x202;unsigned char key;static void delay(void) {volatile unsigned long i;for(i=0;i<100000;i++);}static unsigned char random;static void Random(void) {random = (unsigned char)rand();}void effect1() {unsigned char c;for(c=0;c<=6;c++) {delay();PORTB = ~(1<<c);}for(c=7;c>=1;c--) {delay();PORTB = ~(1<<c);}}void effect2() {unsigned char c;for(c=0;c<=6;c++) {delay();PORTB = ~(3<<c);}for(c=7;c>=1;c--) {delay();PORTB = ~(3<<c);}}void effect3() {unsigned char c,t=0xfe;for(c=0;c<=7;c++) {PORTB = t;delay();t<<=1;}}void effect4() {unsigned char c,t=0;for(c=0;c<=7;c++) {PORTB=t;delay();t = (t<<1)+1;;}}void main(void) {unsigned char x;DDRA=0xf0;DDRB=0xff;for(;;) {x=PORTA&0x03;switch(x) {case 0:effect1(); break;case 1:effect2(); break;case 2:effect3(); break;case 3:effect4(); break;}}/* wait forever *//* please make sure that you never leave this function */ }//行列反转法unsigned char key_scan() //键盘扫描函数{ unsigned char x,row=4,col=4,key=16;PUCR|=0x01; //等同于PUCR=PUCR|0x01,PUCR寄存器的第0位设置为1,即允许PORTA端口的上拉电阻。
单片机飞思卡尔开发工具使用入门讲解学习
Crystal
单片机原理与应用
Page
一、概述
3.实验目标板
Signal connector
PWM D/A convert
7Seg Numeric LED
keypad
Connect points Pulse generator
RS232 driver
Analog voltage generator
单片机原理与应用
Page
二、创建工程 C/C++ Options
第7步:选择V5.0中的用户自定义模式
单片机原理与应用
Page
二、创建工程 PC-Lint
第8步:选择不使用PC-Lint(TM)链接工具软件,点击“完 成”按钮,Code Warrior集成开发环境就会自动生成整个工 程的文件系统。
LED(light emitting diode/发光二极管) 将电转化为可见光
PN节结构,正向导通发光,反向截至熄 灭。
多种颜色,多种尺寸,多种封装 控制流经电流决定其亮度,需要使用限
流电阻 LED具有一定的响应速度
单片机原理与应用
Page
五、并行口及驱动 8.Turn on LED
单片机原理与应用
单片机飞思卡尔开发工具使用入 门
本章要点
一、概述
二、创建工程 三、编写程序 四、编译调试 五、并行口及驱动 六、实验扩展
单片机原理与应用
一、概述
CodeWarrior IDE
main(fad) { return(0); }
build
010010001 110010010 001010010
USB cable
Jutch the debugger
飞思卡尔单片机LED控制例程详解
我的第一个LED程序准备工作:硬件:Freescale MC9S08JM60型单片机一块;软件:集成开发环境codewarrior IDE;开发板上有两个LED灯,如下图所示:实验步骤:1.首先,确保单片机集成开发环境及USBDM驱动正确安装。
其中USBDM的安装步骤如下:⏹假设之前安装过单片机的集成开发环境6.3版本:CW_MCU_V6_3_SE;⏹运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\ProgramFiles\pgo\USBDM 4.7.0,在这个目录下:1〉C:\ProgramFiles\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件USBDM_JMxxCLD_V4.sx是下载器的固件文件;2〉C:\Program Files\pgo\USBDM 4.7.0\USBDM_Drivers\Drivers下有下载器的usb 驱动所以在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动安装位置到以上目录即可。
⏹运行USBDM_4_7_0i_Win之后,还会在目录:C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi 下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior 集成开发环境下对usb下载器的调试、下载的支持。
2.新建一个工程,工程建立过程如下:⏹运行单片机集成开发环境codewarrior IDE⏹出现如下界面●Create New Project :创建一个新项目工程●Load Example Project :加载一个示例工程●Load Previous Project :加载以前创建过的工程●Run Getting started Tutorial:运行CodeWarrior软件帮助文档●Start Using CodeWarrior:立刻使用CodeWarrior⏹点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口可以选择最后一个开源下载器HCS08 Open Source BDM。
飞思卡尔单片机烧写程序步骤
创建一个工程
选择单片机的型号,我一直用的是mc9s12xs128的单片机,然后在“choose your default connection:”里面选择最后一个“TBDML”,TBDML是一个仿真器,飞思卡尔单片机用的BDM 仿真器,选择好后下一步
这一步就是建立工程的名字和位置,左边选择语言类型,选择C即可,设置好名字和位置后点下一步
这个窗口指的是要不要从一个位置添加先前存在的工程,不用添加,直接下一步
直接下一步
这一步需要注意,在“Select the floating point format supported…….”里选择第二项,如上图,是选择浮点类型长度,选别的可能编译的时候出错,我也不知道为什么
这一步直接默认
直接点完成
即可完成工程的建立
工程建立后自动出来这个画面
在左边栏里,双击main.c会出来主程序,在里面写程序即可,写好后点一下这个按钮,生成一系列文件,如果没有错误,就不会有提示,遇到warming,一般没什么大问题,只要不是error就行,
然后烧写程序点绿色箭头,烧程序单片机通电。
先确保你的电脑装好仿真器的驱动,在资源管理器里面查看
同上显示的话表示正常,如果有黄色感叹号,则需要重新安装驱动。
飞思卡尔单片机应用实验指导书
飞思卡尔单片机应用实验指导书机械工程学院机械电子工程教研室实验一飞思卡尔嵌入式实验系统入门—GPIO控制实验一、实验目的:熟悉CodeWarrior集成开发环境及飞思卡尔嵌入式实验开发系统掌握AW60的GPIO结构及控制方法掌握CodeWarrior工程结构及创建汇编工程熟悉汇编指令及应用汇编语言编程方法二、实验内容1.运用CodeWarrior新建工程,进行工程程序编辑、编译、下载、调试2.利用飞思卡尔嵌入式实验开发系统根据实验需要进行硬件连接3.根据连接在PTD口上的两个拨动开关的状态,控制接中PTB口上的八个LED处在以下四种不同状态:八个LED亮—灭循环;四个灯交替亮—灭;一个LED左移流水灯;两个LED右移流水灯。
实验接线原理图图1-1 I/O 口实验接线图三、实验步骤1.将飞思卡尔嵌入式实验开发系统实验箱接上电源,写入器BDM 接头插接入核心卡BDM 座,USB 头接入PC 机USB 口。
2.PC 机上启动CodeWarrior ,新建工程LED.mcp(注意设置工程保存路径) 3.观察工程文件结构,查看相应文件。
4.在main.asm 中编辑工程主文件 5.编辑相关子程序6.编译,如果有错误修改,直至编译通过 7.链接、下载,调试观察LED 灯现象四、思考题1.CodeWarrior 建立工程有什么工程框架文件,这些文件的作用?2.嵌入式开发系统有哪些主要元器件?3.如果采用模块化设计方法,将系统初始化、LED 灯控制、延时程序等各自形成文件,GNDPTB 口 Vcc工程应用这些文件时应注意什么?4.上拉电阻和下拉电阻分内置的和外接的,内置的电阻一般只有几K或十几K,外接电阻可以是几M、十几M甚至更大。
当要求功耗较低时,应该怎样选择内置的还是外接的电阻?5.该实验的开关通过I/O口控制小灯的程序,分别叙述断点调试和单步调试的步骤,其中包含:利用汇编语言时,注意观察寄存器值的变化并记录寄存器中每次的值实验二串口通信(SCI)实验一、实验目的:1.进一步熟悉嵌入式开发系统环境、汇编、C语言、调试方式。
飞思卡尔单片机讲诉PPT课件
DSP型:运算速度快,可用于运算量特别大的场合。(工业控制、汽车电子、 消费类电子产品、电动机变频控制、音频压缩与解码、数字相机和图
像处理等)
工业级嵌入式单片机的产品有较长的寿命,10~20年。从技术上看,8位、16位 和32位单片机各有其相应的应用领域和定位。技术的进步体现为使用更精密的 制造工艺,从而使芯片面积更小、功耗更低、价格更便宜。
外部总线、串行通信、位操作、控制功能指令 • 第三代(1982一l990年)8位机巩固和16位机推出
增强外部电路功能,强化智能控制 • 第四代(1990年以后)全面发展
高速、大寻址范围、强运算能力
1.3 F单ree片scal机e单历片机史发及展历新程技术
位数
位数指CPU数据总线的位数。
M.Core
为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格 要求的专用计算机系统。
单片机生产厂商
1.2 单片机应用
汽车电子
无线通信
医疗器械
过程控制
智能机器人
高铁
航海
航空
智能楼宇
1.3 单1.1片计算机机历的分史类与及发新展 技术
计算机的发展
• 世界上第一台(1946年)电子数字计算机 • 第一代(1946一1958年)电子管数字计算机 • 第二代(I958一1964年)晶体管数字计算机 • 第三代(1964一l971年)集成电路计算机 • 第四代(197l年以后)大规模集成电路计算机
CISC(Complex Instruction Set Computer):
双核:Xgate协处理器管理I/O;
复杂指令集计算机
PowerPC: Motorola\IBM\Apple、RISC(汽车电子、通信) ARM:英国著名的芯片设计公司、RISC、耗电少、成本低、功能强(移动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我的第一个LED程序准备工作:硬件:Freescale MC9S08JM60型单片机一块;软件:集成开发环境codewarrior IDE;开发板上有两个LED灯,如下图所示:实验步骤:1.首先,确保单片机集成开发环境及USBDM驱动正确安装。
其中USBDM的安装步骤如下:⏹假设之前安装过单片机的集成开发环境6.3版本:CW_MCU_V6_3_SE;⏹运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\ProgramFiles\pgo\USBDM 4.7.0,在这个目录下:1〉C:\ProgramFiles\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件USBDM_JMxxCLD_V4.sx是下载器的固件文件;2〉C:\Program Files\pgo\USBDM 4.7.0\USBDM_Drivers\Drivers下有下载器的usb 驱动所以在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动安装位置到以上目录即可。
⏹运行USBDM_4_7_0i_Win之后,还会在目录:C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi 下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior 集成开发环境下对usb下载器的调试、下载的支持。
2.新建一个工程,工程建立过程如下:⏹运行单片机集成开发环境codewarrior IDE⏹出现如下界面●Create New Project :创建一个新项目工程●Load Example Project :加载一个示例工程●Load Previous Project :加载以前创建过的工程●Run Getting started Tutorial:运行CodeWarrior软件帮助文档●Start Using CodeWarrior:立刻使用CodeWarrior⏹点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口可以选择最后一个开源下载器HCS08 Open Source BDM。
注:由于本书配套使用MC9S08JM60型单片机,因此选择CPU型号为MC9S08JM60,若使用其他型号的单片机,请选择其它型号单片机,新建一个工程;并且,由于单片机的驱动为USB接口,因此选择HCS08 Open Source BDM。
若无硬件,选择Full Chip Simulation 进行仿真,也可进行实验;本实验仅讨论有硬件情况下的程序编写和烧录;⏹下一步后出现编程语言选择和指定项目名称以及存放位置界面⏹选择C语言,项目名称自己决定,该实验暂时命名“LED闪烁”,选择保存位置,后面的选项暂时跳过,点击“完成”,文件展开如下:⏹点击“make”快捷按钮正确编译后,左边的钩钩全部消失,同时在Code和Data列出现了相关的代码和数据量。
至此,一个工程新建完毕,我们注意到左边的File下有Sources,Includes, Libs, Project Settings 等文件夹,这里我们需要了解前面两个文件夹即可。
⏹首先:源文件Sources下有一个main.c文件,这个C文件是我们将要写代码的位置,这是程序编译的起点;⏹其次:Includes下有两个头文件,这里对我们将编写的基本语句进行定义,使我们的语言能够被计算机识别。
就像我们在学C语言时,涉及到输入流cout和输出流cin如何被计算机识别时,需要包含头文件“iostream.h”的作用相同,这些头文件用于定义这些符号的作用,使计算机识别转换为二进制符号;3.既然工程新建完毕,现在可以开始第一个程序的编写。
但是在程序编写之前,我们需要了解硬件电路的连接方式,使自己的意愿通过软件正确的传达给硬件;如上图所示,PTB0,PTB1是单片机的两个端口,外部电路分别接一个电阻和一个LED 灯,再接到5V电源上。
由于单片机输出电平为数字电平0或1,即我们所说的5V高电平和地电平,根据所学电路基本知识,我们知道,要想使LED灯亮,我们的端口PTB0和PTB1只能为低电平,即输出为0。
注:尽管不同型号的单片机的端口数量不同,各自功能也不尽相同,但核心思想都是通过设置或者检测端口上的高低电平,达到测试和控制信号的目的。
在这节中,我们介绍端口最基本也最重要的Input/Output输入/输出功能。
至此,我们现在还需要知道的事情是如何告知单片机输出地电平点亮LED灯,这将涉及到如何对单片机进行控制。
我们需要了解两个概念:数据寄存器和数据方向寄存器;它们的关系如下图所示:以B端口为例,其输入输出方向和数据高低电平由两个寄存器控制,PTBD(端口B数据寄存器PORT B DATA REGISTER)和PTBDD(端口B数据方向寄存器PORT B DATA DIRECTION REGISTER ),每个寄存器由8位组成,因此可以控制8个端口B0-B7,上图仅表示了一个端口B0的控制情况,其它7个端口相同。
若PTBDD的最低位设置为1,下方Output导通,而Input功能被屏蔽,再通过PTBD的最低位设置为0或1决定PTB0输出电平状态,其它7位设置方式相同;写成C语言为:PTBDD_PTBDD0=1; PTBD_PTBD0=1或者0;这里表示对寄存器的某一位进行单独设置;若同时设置8个端口为输出,低电平时:PTBDD=0XFF;PTBD=0X00;注:这里方向每位都设置为1,每位输出低电平;⏹若PTBDD最低位设置为0,上方Input导通,Output被屏蔽,此时PTBD的值将由端口接入电平决定,而此时我们只需读取PTBD的值,可知外部输入电平的状态;4.经过上述对软件和硬件的分析,可以开始编写程序:⏹双击main.c打开文件如图所示:这些语句是系统自动生成的基本程序框架:⏹开头包含两个头文件语句,我们简单知道它是对我们下面将要编写的基本语句进行定义,帮助计算机识别的作用即可;⏹从主函数void main(void )可知:第一个void表示该函数的返回值为空,main函数标志计算机编译入口,一个工程文件里只允许有一个main函数,括号内的void表示参数为空,可省略;⏹第一句表示使能中断,这里我们忽略删掉,为避免不必要的麻烦,将其改为DisableInterrupts;表示禁止中断。
⏹单片机函数有一个特点,最后必须以一个无限循环结尾,否则程序不能正确运行,因此,这个for循环不可删除;里面那句喂狗语句暂时忽略不动;⏹在main中输入如下语句:⏹点击make:用于检查程序语法错误;注:检查语法错误并不意味着可以检查逻辑错误,如将端口输出数据设置错误,这种错误在编写程序的时候需要考虑清楚;⏹若没有显示错误,则可点击debug,出现下载器配置界面,如果没出现说明下载器没有正确安装。
选择“5V”是打算让下载器给目标板供电5V。
确保其它选项都对后,选择“ok”继续“ok”后程序下载到单片机中。
在调试界面里点击运行按钮,让程序全速运行后应该看到两个LED同时点亮。
现在,我们的第一个程序编写并运行成功,由这个程序,我们对单片机的输入输出有了初步的认识,并知道如何新建一个工程文件,并烧录至单片机中运行;LED闪烁程序在上一个程序中,我们实现了点亮两个LED灯,为加强程序功能,我们将编写一个LED闪烁程序;准备硬件和软件以及新建工程的过程和上一程序相同,故不赘述;在这节,我们只介绍如何编程;⏹程序思路如下:每间隔一段时间,使两个LED灯重复点亮,熄灭,点亮,熄灭的过程;那么这里会用到一个延时函数,否则单纯的设置LED的点亮熄灭状态,频率太高,人眼将无法分辨,会误以为始终处于点亮状态,这点读者可以自行证明,在此不详细说明。
因此,我们需要用到一个延时,然后点亮LED,再延时,熄灭LED如此循环,实现闪烁。
这个程序如下图所示,为便于理解,我们将简单介绍几个概念:⏹可以注意到,这个程序的第一句是SOPT1=0X00,这个语句也是对某一个寄存器进行设置,在这里我们只要知道,这是一句是关看门狗动作。
简单来说,看门狗是一个计数器,在程序运行时,会自动启动一个计数器,并且这个计数器会按照一定频率向上进行计数,所以为了防止计数值溢出,我们的for循环中默认加上一句喂狗语句__RESET_WATCHDOG();其作用是每隔一段时间对计数器进行清零,否则当看门狗加到上限值溢出后,程序将不会按照原本意愿运行。
⏹在这个程序中我们的__RESET_WATCHDOG();由于delay的两次长时间延时,这句话以秒级的频率被执行,此时看门狗已经溢出,因此若不将看门狗关闭,灯不会一直闪烁,这一现象读者可自行检验。
因此,若将看门狗关闭,for循环中的喂狗语句可注释掉。
⏹前面一节介绍过,main函数是程序执行入口,而这个程序中,我们在main函数前编写了delay空循环函数,是单片机编程最常用的子函数之一,为的是让CPU进行等待,什么都不做。
Delay在这里被称为一个子函数,可写在main函数的前面,也可写在后面。
但是写在main函数的后面时,前面需要进行声明,让CPU预先知道函数的存在。
⏹为使上述程序更加简洁,我们可以将for循环中语句改成如下形式:这样LED闪烁一次,意味着for循环被执行了两次,有利于减少每一次for循环的时间,在执行多个任务时,有利于保证系统响应的实时性。
⏹在本次实验中:我们了解了看门狗的作用,以及使用delay函数进行编程的基本方法,这是以后经常会用到的使用语句;。