导航:首页 > 源码编译 > 飞思卡尔编译错误

飞思卡尔编译错误

发布时间:2025-08-03 16:38:20

㈠ 飞思卡尔 mc9s12xs128 单片机 怎样才可以 在EPROM 或者在 FASH 中 保存运行的参数

有相关资料可以参考的,你搜一下flash to epprom相关资料:
用Flash模拟EEPROM
本程序利用S08系列单片机的片内Flash模拟EEPROM。解决部分8位机没有EEPROM导致在运用上的局限。本程序提供一个初始化函数和三个功能函数。用户必须在调用功能函数前调用调用初始化函数。三个功能函数分别是字节写入、字节读取、EEPROM全擦除。用户必须保证调用功能函数前有至少30Bate的栈空间。
本程序参考飞思卡尔公司提供的《在 HCS08 微控制器上使用 FLASH 存储器模拟 EEPROM》。并在源程序的基础上精简了部分功能,减少了RAM使用量。并尝试使用分页机制确定EEPROM地址。
接口函数的EEPROM地址寻址由页地址和页内偏移量组成。即把用户定义的EEPROM分为若干个大小为256字节的页。其地址与FLASH地址的换算关系为:
FLASH真实地址=EEPROM空间起始地址+页地址×256+页内偏移地址
用户在使用EEPROM是只用确定数据保存在EEPROM的相对地址即可。接口函数原型为:
EEPROM_WRITE_DATA(数据,页地址, 页内偏移地址);
Char EEPROM_READ_DATA(页地址, 页内偏移地址);

1. 程序流程分析与设计。
由于S08系列单片机在Flash写入时序中不能进行任何的Flash读操作,Flash写入指令必须放到RAM中执行并关闭所有可屏蔽中断。程序流程如图13-1-?。

字节写入/.全擦除程序流程 字节读取程序流程
图13-1-?
2.程序源代码。此程序在CodeWarrior 6.0继承编译环境中编译通过

/*****************************************************/
//河南工业大学Freescale MCU&DSP联合实验室
// 文件名:flash_program.h
// CPU :MC9S08AW60
// 版 本:v1.0
// 日 期:2008年8月12日
// 调试环境:CodeWarrior 6.0
// 作 者:曾 滔
// 描 述: 头文件,用于保存初始化EEPROM设定、用户定制参数、编译器参数等信息。
/*****************************************************/
#include <hidef.h>
#include "derivative.h"
#include <stdio.h>

/*************flash编程指令(请勿改动)*****************/
#define BLACK_CHECK 0x05 //查空指令
#define BITE_PROGRAM 0x20 //字节编程指令
#define BURST_PROGRAM 0x25 //快速编程指令
#define PAGE_ERASE 0x40 //页擦除指令(1页=512字节)
#define MASS_ERASE 0x41 //全擦除指令

/******用户定制参数(根据单片机型号和用户flash使用情况定制)**********/
#define EEPROM_START_ADDRESS 0xE000 //EEPROM区起始地址。512B的倍数
#define EEPROM_PAGE_NUM 8 //EEPROM页数。1page=256B
#define BUS_FREQUENCY 2000 //总线频率。单位(KHz)

/********************编译器相关参数**************************/
#define INT8U unsigned char //无符号字节变量。根据编译器更改。默认CodeWarrior 6.0
#define INT16U unsigned short int //无符号字变量。根据编译器更改。默认CodeWarrior 6.0
/***********EEPROM API函数原型***********/
//初始化程序。此函数必须在使用EEPROM前调用。建议用户在系统初始化是调用。
void INIT_EEPROM(void);
//EEPROM擦除函数。擦除所有EEPROM数据。
void EEPROM_ERASE(void);
//EEPROM字节写入函数。写入一个字节到EEPROM指定区域。
void EEPROM_WRITE_DATA(INT8U data,INT8U EEPROM_page,INT8U offset_address)
//EEPROM读出函数。读出一个指定的区域所保存的字节的到函数返回值。
char EEPROM_READ_DATA(INT8U EEPROM_page,INT8U offset_address);
/****************************END************************************/

/*****************************************************/
//河南工业大学Freescale MCU&DSP联合实验室
// 文件名:flash_program.c
// C P U :MC9S08AW60
// 版 本:v1.0
// 日 期:2008年8月12日
// 调试环境:CodeWarrior 6.0
// 作 者:曾 滔
// 描 述:提供了一个初始化函数和三个功能函数供用户调用,没有可更改参数。
/*****************************************************/
#include "flash_program.h"

const INT8U FLASH_CODE[]={ // ; flash操作代码
0x45, 0x18, 0x26, // LDHX #$1826 ; FCMD地址写入H:X
0xA6, 0x00, // LDA #$00 ; 0x00为命令占位符
0xF7, // STA ,X ; 将命令写入FCMD命令缓存器
0x5A, // DECX ; 指针指向 FSTAT
0xF6, // LDA ,X ;
0xAA, 0x80, // ORA #$80 ;
0xF7, // STA ,X ; 置位FSTAT_FCBEF。启动flash写入命令
0xF6, // LDA ,X ; 等待3个时钟周期(请勿删除此代码)
0xF6, // LDA ,X ; 读取FSTAT
0xA5, 0x30, // BIT #$30
0x26, 0x05, // BNE *+6 ; 错误则返回
//LOOP
0xF6, // LDA ,X ; 等待写操作结束
0xA5, 0x40, // BIT #$40
0x27, 0xFB, // BEQ *-3 ; 跳转到LOOP
//EXIT:
0X81 //RTS ; 返回
};
/*********************初始化函数**********************************/
#if BUS_FREQUENCY >= 12000
void INIT_EEPROM(void){FCDIV=(((BUS_FREQUENCY/(8*175)))|0x40)-1;}
#endif
#if BUS_FREQUENCY < 12000
void INIT_EEPROM(void){FCDIV=(BUS_FREQUENCY/175)-1;}
#endif

/***********************EEPROM字节写入函数****************************/
void EEPROM_WRITE_DATA(INT8U data,INT8U EEPROM_page,INT8U offset_address)
{

INT16U address; //存放写入地址
INT8U code_space[23]; //初始化代码空间

if(EEPROM_page>=EEPROM_PAGE_NUM)return; //地址错误返回,保护用户代码
address=offset_address+EEPROM_page*256+EEPROM_START_ADDRESS; //地址转化
(void)memcpy(code_space,FLASH_CODE,23); //复制flash操作代码到RAM

code_space[4] = BITE_PROGRAM; //修改命令占位符为写入命令

DisableInterrupts; //关中断
if (FSTAT&0x10){ //清错误标志
FSTAT = FSTAT|0x10;
}
_asm
{ //写入初始化
LDHX address;
LDA data;
STA ,X; //写入缓存
TSX;
JSR 2,x; //跳入RAM执行
}
EnableInterrupts; //开中断
__RESET_WATCHDOG();
}

/********************EEPROM字读取入函数********************************/
char EEPROM_READ_DATA(INT8U EEPROM_page,INT8U offset_address){

unsigned short int address; //地址变量
char rusult; //数据变量
address=offset_address+EEPROM_page*0x100+EEPROM_START_ADDRESS; //地址转换
asm{
LDHX address;
LDA ,X; //读取地址到数据变量
STA rusult;
}
__RESET_WATCHDOG();
return(rusult); //返回
}

/**********************EEPROM擦除函数********************************/
void EEPROM_ERASE(void)
{
INT16U address;
INT8U i; //循环变量
INT8U code_space[23];

for(i=0;i<(EEPROM_PAGE_NUM/2);i++){ //分页擦除

address=i*0x200+EEPROM_START_ADDRESS;

(void)memcpy(code_space,FLASH_CODE,23); //复制flash操作代码到RAM

code_space[4] = PAGE_ERASE; //修改命令占位符为擦除命令

DisableInterrupts; //关中断

if (FSTAT&0x10){ //清错误标志
FSTAT = FSTAT | 0x10;
}
_asm
{
LDHX address; //擦除地址写入缓存
STA ,X;
TSX;
JSR 3,x; //跳入RAM执行
}
EnableInterrupts; //开中断
__RESET_WATCHDOG();
}
}
/****************************END************************************/

/*****************************************************/
// 版权所有(c)河南工业大学
// 文件名:mian.c
// C P U :MC9S08AW60
// 版 本:v1.0
// 日 期:2008年8月12日
// 调试环境:CodeWarrior 6.0
// 作 者:曾 滔
// 描 述: 测试Flash模拟EEPROM程序。
/*****************************************************/
#include <hidef.h>
#include "derivative.h"
#include "flash_program.h"

void main(void){
char temp;
PTADD=0XFF;

INIT_EEPROM(); //初始化Flash控制寄存器。
do{
EEPROM_WRITE_DATA(88,0,0); //写入一个字节。
temp=EEPROM_READ_DATA(0,0); //读取一个字节
}while(temp!=88); //若写入失败则再次写入
PTAD_PTAD0=1;

do{
EEPROM_ERASE();
}while(EEPROM_READ_DATA(0,0)!=0xff); //擦除Flash

PTAD_PTAD1=1;
for(;;)__RESET_WATCHDOG(); //死循环
}

㈡ 单片机工作总结

单片机工作总结

总结是对过去一定时期的工作、学习或思想情况进行回顾、分析,并做出客观评价的书面材料,它可以促使我们思考,因此十分有必须要写一份总结哦。我们该怎么去写总结呢?下面是我帮大家整理的单片机工作总结,希望对大家有所帮助。

单片机工作总结1

单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在里面的应用很多。学习单片机最好先从汇编语言入手,虽然汇编语言是低级语言 ,编程效率低,但它比C语言占用内存小,执行速度快等优点,在刚接触单片机时更容易学习。由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有什么捷径可循。

刚开始学习的时候,对单片机没有什么认识,不知道什么是单片机,更不知道它有什么作用。通过学习才大体知道了单片机的一些知识。由中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口、定时器/计数器以及串行通信接口等集成在一块芯片上,构成了一个单片微型计算机,简称为单片机。它的应用范围很广,在工业自动化中应用有数据采集、测控技术。在智能仪器仪表中应用有数字示波器、数字信号源、数字万用表、感应电流表,自动取款机等。在消费类电子产品中应用有洗衣机、电冰箱、空调机、电视机、微波炉、手机、IC卡、汽车电子设备等。在通讯方面应用有调制解调器、程控交换技术、手机、小灵通等。在武器装备方面应用有飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。刚开始学习是总觉得指令语句太过复杂,怎么也记不住,这时只能多练、多记,刚开始连一个最简单的控制一盏小灯的亮灭的程序都不会写,只能抄写别人做成功的程序,一遍一遍的写,直到能熟练的独自将程序写出来,从简单的入手,逐步的积累,对单片机就会有新的认识,能够自己独立的写一些小的程序,能够将小的程序结合到一起,拼接成较为复杂一些的程序。刚接触KEIL时确实很让人头疼,使用 KEIL不会建项目、不会使用实验板。遇到困难要一件件攻克,不会建项目,就到教学视频里找,仔细看一下,做几次就懂了。然后可以参考已经成功的程序,抄过来,写一个最简单的,让它运行起来,先培养一下自己的感觉,知道写程序是怎么一回事,无论写大程序还是小程序,要做的工序不会差多少,总得建个项目,再配置一下项目,然后建个程序,加入项目中,再写代码、编译、生成HEX,刷进单片机中、运行。

我的英文得到了提高,自己也爱上了单片机,下面是我学习单片机中的一些经验总结:

1. 万事开头难,要勇敢的迈出第一步。开始时候是有点难度,但不要为自己找借口,要勇敢的迈出第一步,以后的路就会慢慢地顺起来了。

2. 知识点用到才学,不用的暂时放在一边。这个世界,如果每样东西都学,自己就会太累,但这并不是说有些东西可以不学,像在哪里都可以用到的时序图等就要好好的研究一下了。

3. 程序不要光看别人的而不写,一定要自己看了别人怎么写后自己再写一遍,最好这时什么都不要参考,凭自己的印象去写,遇到错误时再好好看下,可以收到事半功倍效果。

4. 必须学会掌握调试程序的方法,自己的程序遇到错误时一定要自己慢慢的把它调出来,有些人写好程序后发现问题,就到q群里或论坛上发表帖子,等着别人来回答,这对自己是没有好处的。

5. 找到解决问题的思路比找到代码更重要,世界上的事情千变万化,就像不可能找到两片相同的叶子一样,世界上也找不到使用同一个代码的项目,所以要学会自己分析问题,找出解决问题的方案。

6. 开动脑筋,运用多种方法,不断优化自己的程序,这是锻炼你写程序能力的一个很好的方法,这对于提高元器件执行的效率也是很重要的。

7. 看别人的代码,学习别人的思路。这是一种很有用的方法,可以把别人的思路与自己的相比较,发现自己的优缺点。

8. 着重培养自己解决问题的能力,而不是看自己写过多少代码或者做过什么,这个最好的方法就是做一些具体的项目,从中培养自己解决问题的能力。

9. 尝试写一下综合应用的程序,这个是很重要的,因为独立可以的综合在一起后并不一定可以正常工作。

10. 如果有可能,多学习一下计算机专业的课程,例如数据结构,毕竟单片机与程序的设计也是不能分开的,这是一个综合的科目。

11. 面对一个新的项目,要先自己想下怎么做,而不是单单地找别人的代码,这是很重要的,因为只有这样做,自己才能独立去思考一个新的东西,也更有可能创造出一个更好的程序。 有时候单片机的学习很单调,有些知识学起来很抽象,不容易理解,只能慢慢适应,一边学习理论知识,一边编写程序,将程序刷入单片机进行调试,通过这种方式才能更快速的学习单片机。同事也会从学习中体会成功的喜悦。

好了,自己的单片机的学习心得也就这么几句,若有不对的地方,请多包涵,也愿学习单片机的人能学有所成。

单片机工作总结2

作为一个刚刚从事单片机工作不久的我来说,对于单片机我了解了一段时间,但总感觉无从入手,理论性的东西看了几遍也不会把它用到实处,通过这次彩灯控制实验,我也对单片机有了一定的了解。单片机是一门非常重视实践的技术,不能总是看书,但要学习它首先应看书,对单片机引脚、内部结构、寄存器和原理有一定地了解和感官认识,它的是怎样工作的,能干些什么?以前看学长做的流水灯我还不知道原理,现在总算清楚了。

在短短的几周工作时间里,真的学了很多,对我来说,编程是个问题,但我知道这是任重而道远的。我上的第一节课是关于流水灯左右循环移动在实验箱上的实现,这个程序老师教了但还是搞不懂,后来通过同学之间相互探讨,终于理解了,最重要的还是C语言没学好,二进制转换为十六进制是很普通的但我还是不会,现在已经掌握了。‘纸上得来终觉浅,绝知此事要躬行。’在短暂的学习过程中,我深深感觉到自己在实际应用中的专业知识的匮乏,总以为自己还可以,一旦接触到实际,才知道自己知道的是多么少,这时才真正领悟到“学无止境”的含义。

“千里之行,始于足下。”这是一个短暂而充实的话。每看懂一个程序自己试着学人家编,去修改,去记录,终于能略懂,这确实让人深有体会。兴趣是最好的老师,这样才能坚持,要在以后积累很多经验。主要肯不耻下问,那就会学到很多东西。最后一句:基础很重要,实践也同样重要。必须要有学习单片机的热情,这样才能学好单片机。谢谢老师几周以来的指导。

单片机工作总结3

经过一周的课程设计,我收获颇多,有深刻的心得体会。实训让我们受益匪浅。首先是关于单片机方面的。我们学到了许多关于单片机系统开发的知识,从最开始选题到最后的结题,更使我们得到了充分的锻炼。其次,它让我体会到了什么才是teamworkspirit。一如:团队管理的经验、团队意识的提升和协调能力等等,这些都会让我们终身受益。

通过此次课程设计,使我更加扎实的掌握了有关电子线路单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查我终于找出了问题所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践才能出真知,实践才是检验真理的唯一标准,唯有通过亲自动手制作,才能令我们掌握的知识不再是一些纸上谈兵的东西。

在这次的课程设计中,我们遇到了很多困难,过程很艰难,但是我们都克服了,这是对我们自己的肯定。我们不断发现错误,不断改正,不断领悟,不断获取。我们也曾灰心,也曾茫然,也曾不知所措,从一开始的自信满满,到最后的紧张繁杂,所有的这些都令我们回味无穷,这已经成为了我们人生的一个宝藏。我想今后的学习和工作也是这样的,汗水见证着成功,我想十年过后,但我们都已经走入了社会,在某个阳光明媚的夏日,午后醒来,突然想起大学经历的时候,最先映入脑海里的就是这门课程吧,就是这些为了一个共同的目标,相互合作,共同奋斗的日子吧。

不可否认,单片机是一门比较难的专业学科。但是经过这一学期的学习,我们觉得单片机这门课很好,让我们在设计中掌握课程,具有很强的实用性。在社会上,单片机也应用极其广泛。通过这次课程设计,我掌握了常用元件的识别和测试;熟悉了常用仪器、仪表;了解了电路的连线方法;以及如何提高电路的性能等等。我相信在接下来的日子里,我会更深刻地去研究它,发掘它。

在这次的实训里,我觉得过得很充实。实训,不仅培养了我们独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。汗水,是我们努力的过程,更是成功的使者。它是希望的凝聚。

回首此次实训,我们真的学到了很多很多。巩固了以前所学过的知识,将理论与实际结合起来,不断提高自己的实际动手能力和独立思考的能力,并学会去使用知识。当然不仅仅是这些课本上的知识,更重要的是一些课本上没有但是也很重要的知识,像是团队合作精神等。当我们都已经走入了社会,在某个阳光明媚的夏日,午后醒来,突然想起大学经历的时候,回忆起这些泛着汗水的时光的时候,定然会被我们的团队感动。

成功后会很喜悦,但过程一样令我们回味无穷。此次设计也让我明白了思路即出路,学问学问,有学必问。只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识。亲历亲为,亲手实践才是硬道理。希望这样的实训能够继续下去,并不断地前进,帮助更多的学生更好地学习单片机,并能够在使用中发现它的无穷魅力!

单片机工作总结4

从刚开始接触单片机,到现在已经有4年的时间了,在这期间学习和使用了51单片机、飞思卡尔单片机,lpc2138,pic16f887等系列的单片机,每接触一款单片机,都会经历熟悉其基本开发,然后将其用于项目中的过程,对于如何学习一款单片机,自己做了如下的总结。

大家都知道,51单片机是最容易入门的,不仅因为其编程简单,更重要的是网上的资料非常丰富。所以一般学习单片机开发的都将51单片机作为入门开发的首选。我学习51单片机的时候是采用这样的一个步骤进行学习的:

第一步(熟悉的过程):买了一款51单片机开发板,然后就开始了我的学习之旅,刚开始的时候没有去看视频教程,而是对着一本实验教材进行学习,那本实验教材的名字记不清楚了,但是其内容就是围绕单片机的led灯进行控制,将51单片机内部的各个功能部件全部都使用到了,这样就能使我在很短的时间内,通过控制led灯的亮、灭熟悉了51单片机的内部的各种资源,这时对51单片机也就没有感到陌生了。所以,个人觉得,学习单片机,要从实验入手,先熟悉单片机再说,开发语言开始使用的是c语言。

第二步(进阶的过程):有了第一步的基础之后,接下来的便是进阶的过程,当时,我看的是郭天祥十天学会单片机的视频教程,因为这个教程从基础到复杂的编程慢慢深入,讲的比较的全面,而且也生动,所以那一阶段,也是我学习单片机进步最快的阶段,每次听课的时候,按照上面的实验,以及课堂上面调试程序时出现的一些问题,自己认真的在电脑上进行调试,并分析产生故障的原因,让我有了一定的开发基础。在看完了视频教程之后,后面又对基础的知识进行了下补习,主要是看单片机原理性的教材,因为有些细节性的东西还是要从教材上面获得。

第三步(项目实战的阶段):学习单片机的时候,虽然也编写了一些程序,但是那些都是一些很小的模块程序,并没有起到综合应用的目的,所以在这之后,我和另外一个学习硬件的同学一起组成了一个小的团队,进行项目实践开发,那时候,实验室的条件比价好,有很多的器件可以自己使用。所以,我们就设计了我们的第一个作品,基于单片机的`液体点滴监控系统。做这个系统时,就将以前单片机所学的知识,做了一个综合的应用,包括有lcd1602控制,串口的控制等。

经过以上三个步骤的学习之后,对于51单片机的开发基本上就算入门了。而对于其他类型的单片机,如飞思卡尔单片机,lpc2148arm7单片机,pic16f887等,虽然每个系列的功能不一样,但是最基本的编程思想还是一样的,不同的可能就是编译器,程序下载的软件等差别,所以有了51单片机的开发基础之后,学习其他单片机所采用的方法就是一个差异化的学习,学习各种单片机不同的地方,这样,就能很快的熟悉一款新的型号的单片机。

如在学习pic16f887这个系列的单片机时,我首先做的工作不是去阅读数据手册,而是先拿着demo代码,在编译软件中编译、链接、生成hex文件,然后将其下载到开发板中跑起来,这个过程主要就是学习其软件的基本操作,有了这个基础之后,就能自己进行编程、测试。之后就是熟悉其编程的模式,所谓其编程模式,就是寄存器的控制,中断程序的编写,熟悉了这个操作,也就能控制其他的功能模块了,如串口的控制、i2c硬件控制器的控制。这些基本的开发熟悉了之后,接下来便是学习差异的部分,例如pic单片机c语言中,其堆栈深度不能超过8级,超过了之后,将会使得程序出现跑飞的现象。而且内存的分配完全要靠自己来控制,分成了4个bank的数据,bank0,bank1,bank2,bank3等。这些就是每个系列单片机所独有的一些东西,这些东西需要详细的了解,因为它们可能为你的编程带来很大的便利。

以上就是我学习单片机的总结,如果大家有更好的学习方法,希望大家能够提出来,一起讨论,共同进步。

单片机系统学习总结[篇2]

人的一生是一个不断学习、不断成长的过程。转眼间,研究生的学习生涯结束了,走上新的工作岗位。回头看看,发现自己不知不觉已经走过了五年的单片机学习之旅。

在20xx年最初接触单片机的时候,在我心中觉得51就是单片机,单片机就是51,根本不知道还有其他单片机的存在。那时候老师只教会了我们汇编语言,根本不知道用c语言也可以进行单片机开发。幸运的是,我加入了单片机兴趣小组,在老师的指导下,做了一系列实验,有“基于ds18b20的温度采集系统”、“有基于164的移位寄存器的灯光控制系统”、“有步进电机和直流电机的控制系统”。这时候我才发现,这是学习单片机的一个最好途径——在实践中领悟理论,用理论指导实践。在上课的整整一个学期中,虽然老师讲得很详细,但是大部分概念都是到了实际动手做东西的时候才弄明白的。而且在经历了迷惑之后再搞清楚,印象就特别深刻。直到现在我对那些概念和接口都非常清晰。其实我也很庆幸学习和使用了两年多的汇编语言。由于有这些锻炼,我对单片机底层结构和接口时序就弄得很清楚。在使用c语言开发的时候,优化代码和处理中断也就不会太费劲。我觉得,虽然现在绝大部分单片机开发都使用c语言,甚至有些公司还推出了图形化编程的工具,这样对于项目的开展从时间上快了很多,在管理上也规范了不少,但是从学习和想深入掌握单片机精髓的角度来说,还是需要熟练掌握汇编语言的使用。

机会总是青睐于有准备的人。也许有了前面一段时间的理论和实践的积累,我才慢慢得到了一些参加科技竞赛和参与科研项目的机会。在参加第一届浙江省机械设计竞赛的时候,我们设计的由多单片机系统协调控制的“月球车”机器人夺得了唯一的一个特等奖。这个竞赛给我最大的收获是我对单片机的认识改变了,它不再仅仅是一门学科了,它是一个可以让你的创意得到充分发挥的平台。后来参与了“基于视频分划技术的钢卷尺自动切零位机”、“电能表涡杠涡轮啮合深度检测系统”、“基于公共电话网的水表集抄数据路由器”、“高精度电感微位移测量系统”等一些实际的项目。在这些过程中,我发现只是精通单片机技术还不能很好的解决问题。体会最深的是,单片机只有融合到各种应用领域中,才能展现它的最大活力。然而单片机仅仅是一个工具而已,要做好单片机系统还需要各种应用领域的专业知识的支持。例如,在“基于视频分划技术的钢卷尺自动切零位机”中,就需要搞清楚全电视信号的时序,弄明白钢卷尺切零位机的工作原理,懂得怎么利用叠加在视频信号中的横竖线来进行刻度的瞄准等。没有这些专业知识,就算单片机技术再厉害也不可能做好这个项目。脱离应用背景的单片机开发,就像一个没有灵魂的躯体一样。

随着arm的出现,我曾经认为,8位单片机可能在32位单片机的冲击下就此走进历史,可是很快就认识到我是错误的。随着技术的革新和时间的推移,各大单片机公司纷纷将单片机朝着片上系统这个方向发展,集成了现在各种流行的技术和常用的模块。我相信,在当前国内和国外的这个市场中,8位单片机应用的市场仍然是充满生机,活力无限。在市场的不断变化和技术的不断更新过程中,8位单片机也会顺应潮流不断革新。

从我五年走过的路来看,单片机学习的过程应该是一个循序渐进、不断学习、不断积累的过程,可以分为三个阶段。

第一阶段:掌握开发单片机的必备基础知识。首先是熟练掌握单片机的基本原理,其实各家各门的单片机其基本结构和原理都差不多,特别是共有的知识需要好好理解和掌握。例如,内核结构、内存分配、中断处理、定时计数、串行通信、端口复用等一些最基本的概念和原理。除此之外,我们还需要具备模拟电子、数字电子、c语言程序开发知识以及原理图和pcb设计等一些技能。在进行系统开发的时候,进行原理设计、pcb布板、程序编写、系统联调这些工作都是在所难免的。

第二阶段:在掌握好一款单片机原理和应用的基础上,开始学习其他各家单片机的独有技术,学不了那么多也要多了解了解。同时尽可能多地掌握单片机的一些外围器件和常用电路,以备不时之需。有时候客户要求低成本,那我们只好选用合钛、义隆、华邦等这类那个岛芯片;如果客户要求工业级的性能,那么我们就得从pic、nec、飞思卡尔、nxp等这些欧美和日式单片机中选择;若要进行功耗的开发,选用msp430系列应该有一定优势;在进行测量仪器设计的时候,c8051和ac842这类数模混合芯片就显得比较方便。所以说最好每个类型的单片机都会一两款,在实际项目选型中可以更加灵活。另外,要注意平时的技术积累。比如,在项目开发过程中将一些常用的接口程序和控制算法整理成模块或者函数,在其他的项目开发中,有同样或者接近的需求时马上就可以使用,又快又好。

第三阶段:在实际的项目开发过程中,不断深化单片机应用技术,不断积累应用行业的专业知识。例如,我完成了“高精度电感微位移测量系统”,就会对电感传感器的测量机理和信号特性、测量电路的设计、电磁兼容处理、误差修正和非线性处理等测控方面的专业技术有很深的认识。以后碰到类似的项目时,很多东西就可以直接利用了。有了扎实的单片机应用相关的基础知识,并且熟悉掌握了几款不同类型单片机的开发方法,再结合实际的应用背景,那么就可以随心所欲,设计出性能最优、结构最合理的单片机应用系统。这是我最大的奋斗目标,我觉得这也应该是单片机应用的最高境界吧。

在这五年的学习中,有感慨、有遗憾、有憧憬、有希望,更重要的是我对单片机应用这个领域充满热情。由于才疏学浅、涉世未深,希望能与行业里的各位老师多多交流,不断学习,不断成长。

单片机系统学习总结[篇3]

基于本人学习单片机的痛苦经历,特编写本教程,以此献给广大的单片机初学者,希望您能从中受益。

作者提示:本教程乃最通俗易懂之单片机教材也,如果您还是看不懂,请千万不要涉足此行,以免误入歧途,耽误您的前程*_*

拿到这本教程您首先就会想,什么是iap教学法?是不是一种什么全新的教学方法?当然不是,我可没有那么大的本事,其实这只是我杜撰的一个新名词,意思就是inapplicationsprogram(在应用中编程),当然这只是针对单片机教学,说法是否正确,还得您说了算。

至于为什么要提这种说法,那我倒想说几句。大家都知道,学习电子技术是一件非常无聊和枯燥的事情,为什么会有这种想法,就是因为我们传统的教学方法只重理论而忽略了实践,要一个人记住那些空洞而有无聊的理论知识实在不是一件容易的事,好在我们总算熬过来了,不管如何,也多多少少的学习了一些电子基础知识。

接下来我们应该进一步掌握些什么知识呢,凡涉足此行的朋友都知道,那就是单片机。不过这可不是一件容易的事,倒不是因为单片机很难学,而实在是我们身边很难找到一本专为单片机入门者而编写的教材。翻一下传统的单片机教材,都好象是为已经懂单片机的人而写的,一般总是以单片机的结构为主线,先讲硬件原理,然后是指令,接着讲软件编程,再是系统扩展和外围器件,最后举一些实例(随

,很少涉及单片机的基础知识,如果按照此种学习方法,想便说一点:很多书中的实例都是有错误的)

进行产品开发,就必须先把所有的知识全部掌握了才可以进行实际应用。孰不知,单片机不象模拟电路和数字电路那样,只要搞懂了电路原理,再按照产品要求设计好相应的电路就可以了。它是一种以简单的硬件结构,复杂而有灵活的软件系统来完成设计的通用性产品,不同的设计者只会使用其不同的功能,几乎没有人会把它的全部指令都使用起来,所以学习使用单片机只能靠循序渐进的积累,而不可能先把

。它全部掌握了再去做产品开发(当然天才就例外了*_*)

基于以上原因,本人想尝试一种全新的单片机教学方法,打破传统的循序渐进式的教学方法,以单片机的应用为蓝本,结合基本的工业控制系统和实践工作中的具体应用,不分先后顺序,将各条指令贯串于一个又一个的实验中,通过所见即所得的实验来讲解各种指令的编程方法,顺便讲解相关的基本概念,使您尽快地熟悉单片机应用的基本步骤,掌握软件编程的基本方法。

如果您学完了就能成为单片机的入门者,完全可以进行一般产品的开发;下册部分是单片机应用的提高部分,主要学习单片机的系统扩展(比如:rom和ram存储器的扩展,并行口的扩展,串行口的扩展,a/d和d/a与单片机的接口)以及相关开发工具和软件的使用(包括kellc51的应用与调试技巧,硬件仿真器的使用)等等,如果您学完了下册部分,那就得恭喜您成为了单片机开发的高手了,不过单片机的技术是在不断的发展和提高的,您也不要太骄傲哦!

为了尽量把最新的单片机知识和应用成果收录进我们的教程,希望您能不吝赐教,共同来努力把我们的教程不断的改进和完善。还是那句题外话,技术是靠不断的积累和交流才会进步的,固封自守只会更加落后。

由于时间和精力的限制,我还是希望在您学习本教程之前,自己先熟悉一点相关的电子技术知识,特别是数字电路基础,这对您学习中碰到的相关概念会有很大的帮助。

;

㈢ 单片机类型有哪些

按总线分有:8位机、16位机、32位机、64位机。

单片机的发展先后经历了4位、8位、16位和32位等阶段。8位单片机由于功能强,被广泛用于工业控制、智能接口、仪器仪表等各个领域,8位单片机在中、小规模应用场合仍占主流地位,代表了单片机的发展方向,在单片机应用领域发挥着越来越大的作用。

80年代初,Intel公司推出了8位的MCS-51系列的单片机。MCS-51单片机的逻辑部件,包括一个8位CPU及片内振荡器、 80514B掩膜ROM、87514KBEPROM、8031无ROM。

特殊功能寄存 器SFR128BRAM、定时器/计数器T0及T1、并行I/O接口:P0、P1、P2、P3;串行接口:TXD、RXD;中断系统:INT0,INT1。

(3)飞思卡尔编译错误扩展阅读

硬件特征

1、单片机的体积比较小, 内部芯片作为计算机系统,其结构简单,但是功能完善,使用起来十分方便,可以模块化应用。

2、单片机有着较高的集成度,可靠性比较强,即使单片机处于长时间的工作也不会存在故障问题。

3、单片机在应用时低电压、低能耗,是人们在日常生活中的首要选择, 为生产与研发提供便利。

4、单片机对数据的处理能力和运算能力较强,可以在各种环境中应用,且有着较强的控制能力。

㈣ 硬实时操作系统和软实时操作系统有什么不同

实时操作系统
英文称Real
Time
Operating
System,简称RTOS。
1、实时操作系统定义
什么东西一旦弄上实时两个字就是对响应时间有严格的要求。实时操作系统贵在实时,要求在规定的时间内完成某种操作。主要用在工业控制中,实时操作系统中一般任务数是固定的,有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则没有那么严,只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。
实时操作系统是保证在一定时间限制内完成特定功能的操作系统。例如,可以为确保生产线上的机器人能获取某个物体而设计一个操作系统。在“硬”实时操作系统中,如果不能在允许时间内完成使物体可达的计算,操作系统将因错误结束。在“软”实时操作系统中,生产线仍然能继续工作,但产品的输出会因产品不能在允许时间内到达而减慢,这使机器人有短暂的不生产现象。一些实时操作系统是为特定的应用设计的,另一些是通用的。一些通用目的的操作系统称自己为实时操作系统。但某种程度上,大部分通用目的的操作系统,如微软的Windows
NT或IBM的OS/390有实时系统的特征。这就是说,即使一个操作系统不是严格的实时系统,它们也能解决一部分实时应用问题。
2、实时操作系统的特征
通常,实时操作系统必须有以下特征:
1)多任务;
2)有线程优先级
3)多种中断级别
小的嵌入式操作系统经常需要实时操作系统。内核要满足实时操作系统的要求。但其它部件,如设备驱动程序也是需要的,因此,一个实时操作系统常比内核大。
3、实时操作系统的分类
软实时系统和硬实时系统。
实时系统对逻辑和时序的要求非常严格,如果逻辑和时序出现偏差将会引起严重后果。实时系统有两种类型:软实时系统和硬实时系统。
软实时系统仅要求事件响应是实时的,并不要求限定某一任务必须在多长时间内完成;而在硬实时系统中,不仅要求任务响应要实时,而且要求在规定的时间内完成事件的处理。通常,大多数实时系统是两者的结合。
事实上,没有一个绝对的数字可以说明什么是硬实时,什么是软实时。它们之间的界限是十分模糊的。这与选择什么样的CPU,它的主频、内存等参数有一定的关系[1]。另外,因为应用的场合对系统实时性能要求的不同而有不同的定义。因此,在现有的固定的软、硬件平台上,如何测试并找出决定系统实时性能的关键参数,并给出优化的措施和试验数据,就成为一个具有普遍意义并且值得深入探讨的课题。本文就是基于此目的进行讨论的。
因为采用实时操作系统的意义就在于能够及时处理各种突发的事件,即处理各种中断,因而衡量嵌入式实时操作系统的最主要、最具有代表性的性能指标参数无疑应该是中断响应时间了。中断响应时间通常被定义为:
中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间[2]。
中断延迟时间=MAX(关中断的最长时间,最长指令时间)
+
开始执行ISR的第一条指令的时间[2]。

阅读全文

与飞思卡尔编译错误相关的资料

热点内容
在文件夹中怎么新建256色位图 浏览:56
大话设计模式python 浏览:608
程序员干到多少岁 浏览:667
卡盟系统源码免费 浏览:163
程序员官网报名 浏览:106
国外程序员最好的网站 浏览:749
python中mesh库 浏览:761
安卓手机obe锁了怎么办 浏览:305
可编译的运行模块代码 浏览:318
android自定义控件方法 浏览:658
内网ubuntu怎么访问服务器地址 浏览:401
安卓手机如何用闪光灯投影 浏览:727
Python用字典做账号密码 浏览:399
程序员实力十大级别 浏览:285
编译过程包括五个阶段 浏览:41
opencv膨胀算法 浏览:802
现在绿本还需要解压吗 浏览:950
捏爆香皂解压 浏览:863
java类大小 浏览:202
安卓之父硬件怎么改 浏览:695