189 8069 5689

单片机音符Java代码 单片机java编程

java解析单片机的代码

从C语言到单片机的汇编(或者说是机器代码)是需要编译的,这个编译的过程本身是需要最早开发的人做大量的基础工作,比如要让电脑知道C语言中的if是“如果”的意思,编译时要根据情况、适当的转为汇编中的判断或跳转指令。

在镇坪等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、成都做网站 网站设计制作按需开发网站,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站,成都外贸网站建设,镇坪网站建设费用合理。

所以,简单说,就是没有人做基于JAVA的单片机开发环境。但是单片机的BASIC语言的开发环境却不少,像主流的PIC、AVR都有好几种。我用过PIC的,写起来很有意思,拿来做单片机入门不错。复杂程序不行。

你能问出这个问题,说明你还是没有理解编程语言的本质和他们的关系。

简单的单片机音乐程序

#include REG52.H

#include "SoundPlay.h"

void Delay1ms(unsigned int count)

{

unsigned int i,j;

for(i=0;icount;i++)

for(j=0;j120;j++);

}

unsigned char code Music_Two[] ={ 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,

0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,

0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,

0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03,

0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01,

0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,

0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01,

0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,

0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,

0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,

0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,

0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01,

0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,

0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00,

0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03,

0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03,

0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03,

0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03,

0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03,

0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E,

0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E,

0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03,

0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03,

0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03,

0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03,

0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02,

0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01,

0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03,

0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,

0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,

0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,

0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02,

0x10,0x03, 0x15,0x00, 0x00,0x00 };

//***********************************************************************************

main()

{

InitialSound();

while(1)

{

Play(Music_Girl,0,3,360);

Delay1ms(500);

Play(Music_Same,0,3,360);

Delay1ms(500);

Play(Music_Two,0,3,360);

Delay1ms(500);

}

}

/**************************************************************************

SOUND PLAY FOR 51MCU

COPYRIGHT (c) 2005 BY JJJ.

-- ALL RIGHTS RESERVED --

File Name: SoundPlay.h

Author: Jiang Jian Jun

Created: 2005/5/16

Modified: NO

Revision: 1.0

*******************************************************************************/

/*说明**************************************************************************

曲谱存贮格式 unsigned char code MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important)

音高由三位数字组成:

个位是表示 1~7 这七个音符

十位是表示音符所在的音区:1-低音,2-中音,3-高音;

百位表示这个音符是否要升半音: 0-不升,1-升半音。

音长最多由三位数字组成:

个位表示音符的时值,其对应关系是:

|数值(n): |0 |1 |2 |3 | 4 | 5 | 6

|几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n

十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音

百位是符点位: 0-无符点,1-有符点

调用演奏子程序的格式

Play(乐曲名,调号,升降八度,演奏速度);

|乐曲名 : 要播放的乐曲指针,结尾以(0,0)结束;

|调号(0-11) : 是指乐曲升多少个半音演奏;

|升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度;

|演奏速度(1-12000): 值越大速度越快;

***************************************************************************/

#ifndef __SOUNDPLAY_H_REVISION_FIRST__

#define __SOUNDPLAY_H_REVISION_FIRST__

//**************************************************************************

#define SYSTEM_OSC 12000000 //定义晶振频率12000000HZ

#define SOUND_SPACE 4/5 //定义普通音符演奏的长度分率,//每4分音符间隔

sbit BeepIO = P3^7; //定义输出管脚

unsigned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表

unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }; //1~7在频率表中的位置

unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };

unsigned char Sound_Temp_TH0,Sound_Temp_TL0; //音符定时器初值暂存

unsigned char Sound_Temp_TH1,Sound_Temp_TL1; //音长定时器初值暂存

//**************************************************************************

void InitialSound(void)

{

BeepIO = 0;

Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256; // 计算TL1应装入的初值 (10ms的初装值)

Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256; // 计算TH1应装入的初值

TH1 = Sound_Temp_TH1;

TL1 = Sound_Temp_TL1;

TMOD |= 0x11;

ET0 = 1;

ET1 = 0;

TR0 = 0;

TR1 = 0;

EA = 1;

}

void BeepTimer0(void) interrupt 1 //音符发生中断

{

BeepIO = !BeepIO;

TH0 = Sound_Temp_TH0;

TL0 = Sound_Temp_TL0;

}

//**************************************************************************

void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)

{

unsigned int NewFreTab[12]; //新的频率表

unsigned char i,j;

unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;

unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;

for(i=0;i12;i++) // 根据调号及升降八度来生成新的频率表

{

j = i + Signature;

if(j 11)

{

j = j-12;

NewFreTab[i] = FreTab[j]*2;

}

else

NewFreTab[i] = FreTab[j];

if(Octachord == 1)

NewFreTab[i]=2;

else if(Octachord == 3)

NewFreTab[i]=2;

}

SoundLength = 0;

while(Sound[SoundLength] != 0x00) //计算歌曲长度

{

SoundLength+=2;

}

Point = 0;

Tone = Sound[Point];

Length = Sound[Point+1]; // 读出第一个音符和它时时值

LDiv0 = 12000/Speed; // 算出1分音符的长度(几个10ms)

LDiv4 = LDiv0/4; // 算出4分音符的长度

LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准

TR0 = 0;

TR1 = 1;

while(Point SoundLength)

{

SL=Tone%10; //计算出音符

SM=Tone/10%10; //计算出高低音

SH=Tone/100; //计算出是否升半

CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出对应音符的频率

if(SL!=0)

{

if (SM==1) CurrentFre = 2; //低音

if (SM==3) CurrentFre = 2; //高音

Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值

Sound_Temp_TH0 = Temp_T/256;

Sound_Temp_TL0 = Temp_T%256;

TH0 = Sound_Temp_TH0;

TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿

}

SLen=LengthTab[Length%10]; //算出是几分音符

XG=Length/10%10; //算出音符类型(0普通1连音2顿音)

FD=Length/100;

LDiv=LDiv0/SLen; //算出连音音符演奏的长度(多少个10ms)

if (FD==1)

LDiv=LDiv+LDiv/2;

if(XG!=1)

if(XG==0) //算出普通音符的演奏长度

if (SLen=4)

LDiv1=LDiv-LDiv4;

else

LDiv1=LDiv*SOUND_SPACE;

else

LDiv1=LDiv/2; //算出顿音的演奏长度

else

LDiv1=LDiv;

if(SL==0) LDiv1=0;

LDiv2=LDiv-LDiv1; //算出不发音的长度

if (SL!=0)

{

TR0=1;

for(i=LDiv1;i0;i--) //发规定长度的音

{

while(TF1==0);

TH1 = Sound_Temp_TH1;

TL1 = Sound_Temp_TL1;

TF1=0;

}

}

if(LDiv2!=0)

{

TR0=0; BeepIO=0;

for(i=LDiv2;i0;i--) //音符间的间隔

{

while(TF1==0);

TH1 = Sound_Temp_TH1;

TL1 = Sound_Temp_TL1;

TF1=0;

}

}

Point+=2;

Tone=Sound[Point];

Length=Sound[Point+1];

}

BeepIO = 0;

}

//**************************************************************************

#endif

Java C语音 程序 单片机

/ /项目名称:Car_Demo

/ /说明:参与实施汽车语音控制

/ /库:CMacro1016.lib

/ / bsrv222SDL.lib

/ / sacmv26e。库

/ /组成文件:main.c中

/ / Flash.asm,hardware.asm,ISR.asm

/ /的hardware.h,s480.h,hardware.inc

/ /硬件连接:IOA0 ----- KEY1

/ / IOA1 ----- KEY2

/ / IOA2 ----- KEY3

/ / IOB8 ---- - 远期

/ / IOB9 -----倒车

/ / IOB10 ----左

/ / IOB11 ----右转

/ /保养纪录:2005年-12-12 V1.0

/ / ===================================== ===================

#包括“s480.h”

#包括“bsrsd.h”

BR /#定义P_IOA_Data(挥发性无符号整数*)0x7000处

#定义P_IOA_Dir(挥发性无符号整数*)0x7002

#定义P_IOA_Attrib(挥发性无符号整数*)0x7003

#定义P_IOB_Data(挥发性无符号整型*)0x7005

#定义P_IOB_Dir(挥发性无符号整数*)0x7007

#定义P_IOB_Attrib(挥发性无符号整数*)0x7008

#定义P_TimerA_Data(挥发性无符号整数*)0x700A

#定义P_TimerA_Ctrl(挥发性无符号整数*)0x700B

#定义P_TimerB_Data(挥发性无符号整数*)0x700C

#定义P_TimerB_Ctrl(挥发性无符号整数*)0x700D

#定义P_Watchdog_Clear(挥发性无符号整型*)0x7012

#定义P_INT_Mask(挥发性无符号整数*)0x702D

#定义P_INT_Clear(挥发性无符号整数*)0x7011

#定义名_ID量0x100

#定义COMMAND_GO_ID 0x101

#定义COMMAND_BACK_ID 0x102

#定义COMMAND_LEFT_ID #定义COMMAND_RIGHT_ID量0x104

#定义S_NAME 0 / /给我一个名字吧

#定义S_ACT1 1 / /前进

#定义S_ACT2 2 / /倒车,请注意

#定义S_ACT3 3 / /左

#定义S_ACT4 4 / /右转

#定义S_RDY 5 / /是啊

#定义S_AGAIN 6 / /请重复

#定义S_NOVOICE 7 / /没有听到任何声音

#定义S_CMDDIFF 8 / /代码字说啊

#定义S_NOISY 8 / /说什么暗语呀

#定义S_START 9 / /准备开始识别

#定义S_GJG 10 / /诱拐绑架

#定义S_DCZY 11 / /倒车,请注意

的extern unsigned int类型BSR_SDModel [100]; / /外部变量BSR_SDModel [100],读者自带

外部无效F_FlashWrite1Word(unsigned int类型地址,无符号整型值);

外部无效F_FlashErase(无符号整数部门);

无符号整型uiTimeset = 3; / /运行时间定时器,调节参数控制运行时间

无符号整型uiTimecont; / /运行时定时

/ / ================================== ===========================

/ /语法:无效延迟();

/ /功能:延时

/ /参数:无

/ /返回值:无

/ / ================ =============================================

无效延迟()

{

无符号整数I;

就(i = 0; I 0X3FFF,我+ +)

{

* P_Watchdog_Clear = 0X0001;

/ / ============================== ===============================

/ /语法:无效PlaySnd(无符号SndIndex,无符号DAC_Channel);

/ /功能:语音播放功能

/ /参数:SndIndex播放语音资源索引号

/ / DAC_Channel播放通道选择

/ /返回值:无

/ / =============================================== ============== 无效PlaySnd(无符号SndIndex,无符号DAC_Channel)

{

BSR_StopRecognizer(); / /停止识别

SACM_S480_Initial(1); / /初始化为自动

SACM_S480_Play玩(SndIndex,DAC_Channel,3); / /开始播放语音

同时(!(SACM_S480_Status()&0X0001)= 0)/ /如果播放完毕?

SACM_S480_ServiceLoop(); / /解码,并填补了队列

* P_Watchdog_Clear = 0X0001; / /清除看门狗

}

SACM_S480_Stop(); / /停止播放

BSR_InitRecognizer(BSR_MIC); / /初始化识别器

}

/ / ============================== ===============================

/ /语法:INT TrainWord(INT的wordID,诠释SndID);

/ /功能:训练命令

/ /参数:

/ / SndID命令语气指数

/ /返回值的wordID指令编码:无

/ / ================================================= ============

整数TrainWord(无符号整数的wordID,无符号整型SndID)

{

int结果;

PlaySnd(SndID,3); / /导游培训,打相应的动作

指令,而(1)

{

结果= BSR_Train(的wordID,BSR_TRAIN_TWICE); / /训练两次,得到训练成绩

如果(结果== 0)打破;

开关(结果)

{

案例-1:/ /未检测到声音

PlaySnd(S_NOVOICE,3);

返回-1;

案例-2:/ /要培养第二

PlaySnd(S_AGAIN,3);

突破;

案例-3:/ /环境嘈杂

PlaySnd(S_NOISY,3);

返回-3;

案例-4:/ /数据库全

回报-4;

情况-5:/ /检测声音不同

PlaySnd(S_CMDDIFF,3);

返回-5;

情况-6:/ /错误号

回报-6;

默认:

突破;

返回0;

/ / =================================== ==========================

/ /语法:无效TrainSD();

/ /功能:训练功能

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

无效TrainSD()

{

同时(TrainWord(名_ID,S_NAME)= 0!); / /培训名称

而(TrainWord(COMMAND_GO_ID,S_ACT1)= 0);! / /训练第1节动作

同时(TrainWord(COMMAND_BACK_ID,S_ACT2)= 0);! / /培训前两个动作

同时(TrainWord(COMMAND_LEFT_ID,S_ACT3)= 0!); / /训练第3节动作

同时(TrainWord(COMMAND_RIGHT_ID,S_ACT4)= 0!); / /培训4的动作

}

/ / ============================= ================================

/ /语法:无效StoreSD();

/ /实现功能:存储语音模型功能

/ /参数:无

/ /返回值:无

/ / ============ ================================================= BR /无效StoreSD() {unsigned int类型ulAddr,我,命令号,g_Ret;

F_FlashWrite1Word(0xef00,加上0xAAAA);

F_FlashErase(0xe000);

F_FlashErase(0xe100);

F_FlashErase(0xe200);

ulAddr = 0xe000 ;/ / ********

为(命令号= 0x100的;命令号0x105;命令号+ +)

{

g_Ret = BSR_ExportSDWord(命令号);

而(g_Ret! = 0)/ /导出模型成功?

g_Ret = BSR_ExportSDWord(命令号);

就(i = 0; I 100; i + +)/ /保存语音模型SD1(0xe000 --- 0xe063)

{

F_FlashWrite1Word(ulAddr,BSR_SDModel [I]) ;

ulAddr + = 1;

/ / ========================= ====================================

/ /语法:无效StoreSD();

/ /功能:承载语音模型函数

/ /参数:无

/ /返回值:无 / / ============= ================================================ 无效LoadSD()

{unsigned int类型* P,K,JK,惩戒,g_Ret;

P =(INT *)0xe000;

为(JK = 0; JK 5; JK + +)

{

为(K = 0,K 100,K +)

{

RET = * P;

BSR_SDModel [K] = RET; / /加载语音模型

P + = 1;

g_Ret = BSR_ImportSDWord();

而(g_Ret! = 0)/ /加载成功的模式?

g_Ret = BSR_ImportSDWord();

/ / ============================== ===============================

/ /语法:无效的GoAhead();

/ /功能:正向功能

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

无效的GoAhead()/ /向前

PlaySnd(S_ACT1,3); / /提示

* P_IOB_Data = 0X0100; / /前进

* P_INT_Mask | = 0X0004; / /以下为中断定时器操作

__ asm的(“INT FIQ,IRQ”);

uiTimecont = 0;

/ / ======================================= ======================

/ /语法:无效的备份();

/ /功能:返回函数

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

无效的备份()/ /向后

PlaySnd(S_DCZY,3); / /提示 * P_IOB_Data = 0x0200; / /向后

* P_INT_Mask | = 0X0004; / /以下为中断定时器操作

__ asm的(“INT FIQ,IRQ”);

uiTimecont = 0;

/ / =================================== ==========================

/ /语法:无效TurnLeft();

/ /功能:打开左侧的功能

/ /参数:无

/ /返回值:无

/ / ============== ===============================================

无效TurnLeft()/ /左转

PlaySnd(S_GJG,3);

* P_IOB_Data = 0x0900; / /右转

延迟(); / /延迟

* P_IOB_Data =成0x0500; / /左转

* P_INT_Mask | = 0X0004; / /以下为中断定时器操作

__ asm的(“INT FIQ,IRQ”);

uiTimecont = 0;

/ / ======================================= ======================

/ /语法:无效TurnRight();

/ /功能:右转子程序

/ /参数:无

/ /返回值:无

/ / ============== ===============================================

无效TurnRight()/ /右转

PlaySnd(S_GJG,3); / /语音提示

* P_IOB_Data =成0x0500; / /左转

延迟(); / /延迟

* P_IOB_Data = 0x0900; / /右转

* P_INT_Mask | = 0X0004; / /以下为中断定时器操作

__ asm的(“INT FIQ,IRQ”);

uiTimecont = 0;

/ / =================================== ==========================

/ /语法:无效停止();

/ /功能:停车功能

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

无效停止()/ /停止

{

* P_IOB_Data值= 0x0000; / /停车

PlaySnd(S_RDY,3); / /语音提示

}

/ / =============================== ==============================

/ /语法:BSR无效(无效);

/ /功能:识别功能

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

BSR无效(无效)

{

int结果; / /识别结果存储

结果= BSR_GetResult(); / /得到识别结果

如果(结果 0)/ /语音触发?

* P_IOB_Data值= 0x0000; / /临时停车

开关(结果)

{

案名_ID:/ /识别命令

停止(名称); / /停机位

突破;

情况COMMAND_GO_ID:/ /找出第一个命令

的GoAhead(); / /执行一个动作:直

突破; 案例COMMAND_BACK_ID:/ /找出第二个命令

备份(); / /执行动作二:倒车

突破;

情况COMMAND_LEFT_ID:/ /找出第三个命令

TurnLeft(); / /执行三个动作:向左转

突破;

情况COMMAND_RIGHT_ID:/ /找出第四个命令

TurnRight(); / /执行动作四:右转

突破;

默认:

突破;

/ / ============================= ================================

/ /语法:IRQ5无效(无效);

/ /功能:中断服务子程序

/ /参数:无

/ /返回值:无

/ / ============== ===============================================

IRQ5无效(无效)的__attribute__((ISR)); / /运动定时控制

IRQ5无效(无效)

{

如果(uiTimecont + + == uiTimeset)

{

* P_IOB_Data值= 0x0000;

* P_INT_Clear = 0X0004;

/ / =================================== ==========================

/ /语法:INT主要(无效);

/ /功能:主要功能

/ /参数:无

/ /返回值:无

/ / ============== ===============================================

国际主要(无效)

{unsigned int类型BS_Flag; / /火车标志

* P_IOA_Dir =为0xFF00; / /初始化IOA,IOA07下拉输入

* P_IOA_Attrib =为0xFF00;

* P_IOA_Data值= 0x0000;

* P_IOB_Dir = 0x0f00; / /初始化IOB,IOB811与输出

* P_IOB_Attrib = 0x0f00;

* P_IOB_Data值= 0x0000;

BSR_DeleteSDGroup(0); / /初始化存储器RAM

BS_Flag = *(unsigned int类型*)0xe000; / /读取内存单元0xe000

如果(BS_Flag == 0xFFFF的)/ /没有受过训练(0xe000内容0xFFFF的)

{

TrainSD(); / /培训

StoreSD(); / /存储的训练结果(语音模式)

其他/ /训练(0xe000内容0x0055)

{

LoadSD(); / /语音识别模型加载

}

PlaySnd(S_START,3); / /开始识别

BSR_InitRecognizer(BSR_MIC)提示; / /初始化识别器

同时(1)

{

BSR();

如果((* P_IOA_Data)&0X0004)/ /如果再培训

{

F_FlashErase(0xe000);

而(1);

/ / ========================= ===================================

/ /文件名:flash.asm

/ /实现功能:SPCE061 32K闪存读卡器

/ /保养纪录:2003-6-9 V1 .0

/ / ================= ===========================================

。 INCLUDE hardware.inc

。 DEFINE C_FLASH_SIZE为0x8000

。 DEFINE C_FLASH_BLOCK_SIZE量0x100

。 DEFINE C_FLASH_MATCH加上0xAAAA

。 DEFINE C_FLASH_PAGE_ERASE 0x5511 / /擦除一个

。 DEFINE C_FLASH_MASS_ERASE 0x5522 / /

。 DEFINE C_FLASH_1WORD_PGM 0x5533 / /写一个字

。 DEFINE C_FLASH_SEQUENT_PGM 0x5544 / /写多个字

。 DEFINE C_FLASH_MAIN_BLOCK为0x5555

。 DEFINE C_FLASH_INFORM_BLOCK 0x5566

。代码

/ / =========================================== ================================================= BR / / /语法:无效F_FlashWrite1Word(INT地址,int值)

/ /描述:写一个字到FLASH

/ /参数:要写入的地址内存中的数据写入值地址数据

/ /返回:无

/ / ================================== ================================================== ===========

。公众_F_FlashWrite1Word

DEFINE P_Flash_Ctrl 0x7555

_F_FlashWrite1Word:.. PROC

推基点至[SP]

BP = SP +1

R1 = C_FLASH_MATCH / / AAAA

[P_Flash_Ctrl] = R1

R1 = C_FLASH_1WORD_PGM / / 5533

[P_Flash_Ctrl] = R1

R1 = [BP +4] / / flash地址

R2 = [BP + 4 ] / /数据

[R1 = R2

流行BP从[SP]

。 ENDP

/ / ======================================= ================================================== ====

/ /语法:F_FlashWrite(INT部门,诠释及次数,int的大小)

/ /说明:顺序写更多的字

/ /参数:扇区是起始地址将数据写入写入和NUM-大小的写入数据数

/ /返回的数据:无

/ / ================== ================================================== =========================

公众_F_FlashWrite

_F_FlashWrite:.. PROC

推基点至[SP]

BP = SP +1

R1 = [BP +4] / / flash基地址

R2 =

/数据/ R3 = [BP +5] / /多字节

R4 = C_FLASH_MATCH / / AAAA

[P_Flash_Ctrl] = R4

L_FlashWriteLoop:

R4 = C_FLASH_SEQUENT_PGM / / 5544

[P_Flash_Ctrl] = R4 R4 = [R2 +]

[R1 + +] = R4

R3 - = 1

JNZ L_FlashWriteLoop

[P_Flash_Ctrl] = R3 / /写从最终

弹出基点[SP]

RETF 。 ENDP

/ / ======================================= ================================================== ===

/ /语法:无效F_FlashErase(部门)

/ /说明:擦除256字节

/ /参数:起始地址扇区擦除页

/ /返回:无

/ / ============================================ ================================================ 公共_F_FlashErase

_F_FlashErase:.. PROC

推基点至[SP]

BP = SP + 1

R1 = C_FLASH_MATCH / / AAAA

[P_Flash_Ctrl] = R1

R1 = C_FLASH_PAGE_ERASE / / 5511

[P_Flash_Ctrl] = R1

R1 = [BP +4] / /擦除一个

[R1] = R1

从[SP]

。 ENDP

。完

/ / ======================================= =====================

/ /文件名:ISR.asm

/ /功能:语音播放/识别中断服务

/ /保养纪录:2003-9-9 V1.0

/ / ============================== ==============================

包括hardware.inc

公共_FIQ;。 ..

外部_BSR_FIQ_Routine

外部F_FIQ_Service_SACM_S480

_FIQ:..

推R1,R5为[SP]; / /注册推来保护

R1 = C_FIQ_TMA;

[P_INT_Clear] = R1;

致电_BSR_FIQ_Routine / /语音识别中断服务

致电F_FIQ_Service_SACM_S480; / /语音播放中断服务

流行R1,R5从[SP];

RETI;


网站栏目:单片机音符Java代码 单片机java编程
文章地址:http://cdxtjz.cn/article/hjcssh.html

其他资讯