导航:首页 > 操作系统 > s08单片机

s08单片机

发布时间:2025-01-29 15:34:29

A. 飞思卡尔 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(); //死循环
}

B. 飞思卡尔单片机芯片mc9s08和mc9s12有什么区别

最简单的理解 前者是8位的单片机 后者是16位单片机

C. 请问冯·诺依曼结构和哈佛结构有什么异同谢谢!

共同点:使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存。

区别:

1、性质不同:冯·诺依曼体系结构冯·诺伊曼理论的要点是计算机的数制采用二进制,计算机应该按照程序顺序执行。哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。

2、特点不同:哈佛结构将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。诺依曼结构的计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器,计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行。

3、组成不同:哈佛结构的计算机由CPU、程序存储器和数据存储器组成。诺依曼结构指令由操作码和地址码组成。

(3)s08单片机扩展阅读:

哈佛结构使用注意事项:

1、运算器:一个用于信息加工的部件,用来对二进制的数据进行算术运算和逻辑运算,也叫算数逻辑运算部件,其核心部分是加法器。

2、控制器:负责从存储器中取出指令,并对指令进行译码,根据指令的要求,按时间的先后顺序,负责向其他各部件发出控制信号,保证各部件协调一致地工作,一步步地完成各种操作。控制器主要由指令寄存器、译码器、程序计数器、操作控制器等组成。

3、存储器:哈佛结构是计算机记忆或暂存数据的部件。计算机中的全部信息,包括原始的输入数据,经过初步加工的中间数据及最后处理完成的有用信息都存放在存储器中。指挥计算机运行的各种程序,即规定对输入数据如何进行加工处理的一系列指令都存放在存储器中。存储器分为内存储器和外存储器。

4、输入设备:给计算机输入信息的设备。是重要的人机接口,负责将输入的信息转换成计算机能识别的二进制代码,送入存储器中保存。

D. BDCBDC 后台调试控制器

在飞思卡尔单片机的设计中,一个重要的组成部分是后台调试控制器(BDC)。它作为HCS08内核中的关键组件,负责管理设备的后台模式功能。这个控制器在软件开发的背景下扮演着至关重要的角色,它与片上集成的ICE(In-Circuit Debugger,即片上调试模块)协同工作。



BDC的主要任务是监控和控制MCU(微控制器)的运行状态,帮助开发者深入了解其内部操作。通过与DBG的连接,开发者能够设置断点、检查寄存器状态、跟踪程序流程,甚至进行实时的内存读写,从而有效地进行故障诊断和性能优化。它为开发者提供了一个强大的工具,使得复杂的问题分析和调试变得更加直观和高效。

(4)s08单片机扩展阅读

向中兴公司1、Being Data Center(BDC) - v1.0Being Data Center(BDC) - v1.0 运动数据处理中间件是负责对知康能耗仪LivePod原始数据进行解析、验证、分析和计算,并最终通过WEB Severics/API等接口提供给业务系统。

阅读全文

与s08单片机相关的资料

热点内容
linux如何打开软件 浏览:395
基于51单片机的热水器 浏览:698
图片压缩成一张图怎么解压 浏览:777
还原文件夹英文 浏览:367
按摩手掌解压视频国外 浏览:608
空气能压缩机价格 浏览:532
php不能上传大文件 浏览:240
消毒水清洁解压 浏览:1000
cpdf阅读 浏览:467
android方案公司 浏览:182
linux编写makefile 浏览:488
考研程序员有什么好处 浏览:225
毕向东android 浏览:259
27安全算法 浏览:352
丰田空调压缩机型号 浏览:835
程序员那么可爱25集文字预告 浏览:556
linux读写文件命令 浏览:695
完美的伤害算法 浏览:574
usch算法 浏览:606
如何给excel某列表格加密 浏览:161