凌阳单片机SPCE061A
- 格式:ppt
- 大小:1.74 MB
- 文档页数:35
凌阳SPCE061A十六位程序(通过硬件反复调试)下面这些凌阳SPCE061A十六位单片机的程序都是我在开发板上通过硬件反复调试通过的,大家可随便拿去用,有问题可与我联系哦,我在51hei的id是ikedge. 第一个能用的程序:点亮IOA的低八位//新建一个***.asm文件.include hardware.inc; //头文件的格式.PUBLIC _main //全局.code //定义在代码段_main:r1=0x00FF[P_IOA_Dir]=r1 //方向输出r1=0x0055[P_IOA_Buffer]=r1 //输出r1=0x00FF[P_IOA_Attrib]=r1 //同向输出用4HZ的中断闪烁led.include hardware.inc;.PUBLIC _main.code_main:r1=0x00FF[P_IOA_Dir]=r1r1=0x0055[P_IOA_Buffer]=r1r1=0x00FF[P_IOA_Attrib]=r1INT IRQr3=0x0008[P_INT_Ctrl]=r3 //打开IRQ5中断//r2=0x002D//[P_TimerA_Ctrl]=r2 //选择2Hz的中断.TEXT.public _IRQ5_IRQ5:r4=0x00FF[P_IOA_Dir]=r4r4=0x00AA[P_IOA_Buffer]=r4r4=0x00FF[P_IOA_Attrib]=r4RETI;经过修改的十六位控制八位流水灯.include hardware.inc;.PUBLIC _main//.PUBLIC _loop.code_main:// r1=0x00FF// [P_IOA_Dir]=r1// r1=0x0055// [P_IOA_Buffer]=r1// r1=0x00FF// [P_IOA_Attrib]=r1r4=0x0001INT IRQ //打开中断开关r3=0x1000[P_INT_Ctrl]=r3 //打开IRQ1对应的timerA的中断[P_TimerA_Ctrl]=r2 //选择4096Hz频率自加溢出的中断//r2=0xf000 //1secondr2=0xfe57 //0.1second//r2=0xe000 //2second//r2=0xf800 //0.5second//r2=0xfffe[P_TimerA_Data]=r2 //置初值f800/634Loop_loop:r5 = 0x0001[P_Watchdog_Clear] = r5goto _loop.TEXT.public _IRQ1_IRQ1:r1=0x00FF[P_IOA_Dir]=r1r1=0x00FF[P_IOA_Attrib]=r1r4=r4 LSL 1CMP r4 ,0x0000jz _loop1jmp _loop2_loop1:r4=0x0001_loop2:[P_IOA_Data]=r4r1=0x1000[P_INT_Clear]=r1//r5 = 0x0001// [P_Watchdog_Clear] = r5 RETI;使用系统时钟计数的流水灯.include hardware.inc;.PUBLIC _main//.PUBLIC _loop.code_main:// r1=0x00FF// [P_IOA_Dir]=r1// r1=0x0055// [P_IOA_Buffer]=r1// r1=0x00FF// [P_IOA_Attrib]=r1//r1=0x0073 //fosc频率是40.96M CPU频率是fosc/8 //r1=0x0033 //fosc频率是20.48M CPU频率是fosc/8 r1=0x0013 //fosc频率是24.576M CPU频率是fosc/8 //r1=0x0063 //fosc频率是32.768M CPU频率是fosc/8//r1=0x00f3 //fosc频率是49.152M CPU频率是fosc/8//r1=0x00f0 //fosc频率是49.152M CPU频率是fosc [P_SystemClock]=r1r4=0x0001INT IRQ //打开中断开关r3=0x1000[P_INT_Ctrl]=r3 //打开IRQ1对应的timerA的中断r2=0x0031 //选择fosc/256的频率自加[P_TimerA_Ctrl]=r2 //选择4096Hz频率自加溢出的中断//r2=0xf000 //1second//r2=0xfe57 //0.1second//r2=0xe000 //2second//r2=0xf800 //0.5secondr2=0x0000[P_TimerA_Data]=r2 //置初值f800/634Loop_loop:r5 = 0x0001[P_Watchdog_Clear] = r5goto _loop.TEXT.public _IRQ1_IRQ1:r1=0x00FF[P_IOA_Dir]=r1r1=0x00FF[P_IOA_Attrib]=r1r4=r4 LSL 1r4=r4&0x00ffCMP r4 ,0x0000jz _loop1jmp _loop2_loop1:r4=0x0001_loop2:[P_IOA_Data]=r4r1=0x1000[P_INT_Clear]=r1//r5 = 0x0001// [P_Watchdog_Clear] = r5 RETI;IOB08作为PWM输出.include hardware.inc;.PUBLIC _main//.PUBLIC _loop.code_main:r1=0xFFFF[P_IOB_Dir]=r1r1=0xFFFF[P_IOB_Attrib]=r1r1=0x0000[P_IOA_Buffer]=r1//r1=0x0073 //fosc频率是40.96M CPU频率是fosc/8 //r1=0x0033 //fosc频率是20.48M CPU频率是fosc/8 r1=0x0013 //fosc频率是24.576M CPU频率是fosc/8 //r1=0x0063 //fosc频率是32.768M CPU频率是fosc/8//r1=0x00f3 //fosc频率是49.152M CPU频率是fosc/8//r1=0x00f0 //fosc频率是49.152M CPU频率是fosc [P_SystemClock]=r1r4=0x0001INT IRQ //打开中断开关r3=0x1000[P_INT_Ctrl]=r3 //打开IRQ1对应的timerA的中断r2=0x0071 //选择fosc/256的频率自加[P_TimerA_Ctrl]=r2 //选择4096Hz频率自加溢出的中断//r2=0xf000 //1second//r2=0xfe57 //0.1second//r2=0xe000 //2second//r2=0xf800 //0.5secondr2=0xfff0[P_TimerA_Data]=r2 //置初值f800/634Loop_loop:r5 = 0x0001[P_Watchdog_Clear] = r5goto _loop.TEXT.public _IRQ1_IRQ1:r1=0x00FF[P_IOA_Dir]=r1r1=0x00FF[P_IOA_Attrib]=r1r4=r4 LSL 1r4=r4&0x00ffCMP r4 ,0x0000jz _loop1jmp _loop2_loop1:r4=0x0001_loop2:[P_IOA_Data]=r4r1=0x1000[P_INT_Clear]=r1//r5 = 0x0001// [P_Watchdog_Clear] = r5RETI;// 工程名称:ADC_LINE.scs// 功能描述: 通过改变LINE_IN端口的模拟电压来改变IOB口输出的数据,// 采用自动方式即定时器A溢出执行ADC转换,可以通过发光// 二极管的点亮了解转换的数据值。
SPCE061A是凌阳公司设计的一种16位单片机,该款单片机资源丰富,具有极高的性价比,该单片机内置有2路DA转换,8路AD转换及在线仿真,并且有16×16位的乘法运算和内积运算的DSP功能,这为它进行复杂的语音数字信号的压缩编码与解码提供了便利,还可以做数字滤波器。
这些特点为我们进行在语音处理尤其是语音识别领域的应用提供了便利。
语音识别技术在各个层面均有广泛的应用前景。
电脑软件领域,例如:语音命令、语音输入,对话系统、查询系统、教学软件、游戏软件等;消费性电子产品领域,例如:电子记事本、声控玩具、语音拔号功能的手机等;工业产品领域,例如:车用移动电话、车用导航系统等;电话系统领域,例如:语音识别总机服务、语音拔号、语音订票订位等。
1 语音识别基本原理语音识别就是让机器听得懂人们所讲的话,基本框架如图1和图2所示。
图1是语音训练模型的部分:将已知的语音信号经由端点侦测(End Point Detection)及特征参数求取(Feature Extraction)而产生标准的语音参考样本。
将待测的语音信号,经与图1同样的处理步骤求得特征参数后再与前述的标准语音参考样本对比,找出最相似的参考样本作为辨识的结果。
2 语音识别分类若依使用者的限制而言可分为特定人语音与非特定人语音识别。
2.1 特定人语音识别使用特定人语音识别系统前,须先把使用者的语音参考样本存入当成比对的资料库,即特定人语音识别系统在使用前就必须先进行图1的训练学习步骤。
2.2 非特定人语音识别使用本系统前根本不需要先学习,便能直接使用。
一套最佳的语音识别系统是不须经过学习便能进行语音识别,但通常辩识率都比较低。
另外以说话方式的连续是否又可分为非连续语音识别和连续语音识别。
对于非连续语音来说,识别所说的每一个字必须分开辨认;而连续语音识别可以一般自然流利的说话方式来进行人性化的语音识别,但由于关系到相连音的问题,很难达到好的辨认效果。
智能数字万用表的设计摘 要:本智能数字万用表由凌阳SPCE061A 单片机、MC14433——321位A/D 转换电路、自动量程转换电路、交直流转换电路和大、小电阻测量电路组成,能够对交流电压、直流电压、大电阻和小电阻进行精确测量。
使用凌阳SPCE061A 单片机作为控制模块,实现量程自动转化;使用MC14433实现A/D 转换;使用简易软键盘、凌阳SPLC501液晶显示模组实现输入和显示;使用单片机读取MC14433的数字信号来控制模拟开关,从而改变反馈电阻的大小实现档位的不同选择;本设计能够准确对被测量进行测量,所有性能指标符合要求。
关键词:数字万用表 单片机 MC14433 交直流电压测量 电阻测量一、方案论证1.交流电压的测量:由于交流电压不能直接测量,必须转换为直流电压。
转换方案有3种:方案一、热电偶测量法:根据交流有效值的物理定义来实现测量的,利用热电偶电路平衡原理通过两端的电势比较得到有效值。
但热电偶转换线性度差,且热电偶具有配对较难、响应速度慢、负载能力差等缺点。
方案二、模拟运算法:根据有效值的数学定义,用集成器件乘法器、开放器等依次对被测信号进行平方、平均、开方等计算直接得到交流输入信号的有效值。
这种方案测量的动态范围小、精度不高且输入信号的幅度变小时,平均器输出电压的平均值下降值很快、输出幅度很小。
方案三、交流整形电路:使用AD637等集成有效值转换芯片,把交流电压信号转换为幅值等于交流有效值的直流电压信号,在对直流电压进行测量,这种方案电路简单、响应速度快、失真度小、工作稳定可靠。
综上,采用方案三进行交流电压的测量。
2.小电阻的测量:由于小电阻在通入电压后发热,测量出的电阻值会产生较大的误差,对于小电路有3种方案测量:方案一、直流电桥测量法。
直流电桥又分直流单电桥和直流双电桥。
采用这两种方法测量时很多操作需要手动,并且对元件精度要求高,通过数字电位器来改变需要的电阻参数,索然可以实现数控,但数字电位器的每一级步进电阻值不确定,调节困难,用单片机处理计算复杂并且测量时操作不便。
使用SPCE061A实现的模拟交通灯控制摘要:本文主要介绍了利用凌阳十六位SPCE061A单片机以及模拟交通灯控制板而设计的一个模拟交通灯控制的实现方案。
关键词:SPCE061A 模拟交通灯控制1 引言SPCE061A是凌阳公司设计的一种新型的十六位单片机,该款单片机资源丰富,具有极高的性价比。
该单片机内置有32位IO端口,2路D/A转换,8路A/D转换及在线仿真等丰富的功能,这些都为我们实现模拟交通灯控制提供了良好的条件。
本系统由一块61板和一块模拟交通灯控制板组成,可以模拟比较复杂的路口交通灯控制。
2 61A板电路特性简介·基本外围电阻电容;·麦克输入的电路和DAC输出的外围电路;·32个I/O口全部引出;·电源部分采用的是电池供电,也可以外接5V的稳压源,通过SPY0029稳压到3.3V;·PROBE接口在线调试;·一路DAC输出;·复位电路;·三个按键K1、K2、K3分别接IOA0、IOA1和IOA2,另一端接高电平;用于作演示,也为自己设计电路提供方便;·一个红色电源指示灯和一个绿色睡眠指示灯;·音频输出将SPEAKER的两端引出,使用者只需外接一个0.5W@8Ω的喇叭即可听到悦耳的声音。
3 系统总体方案介绍3.1 总结构框图图3.1 模拟交通灯控制系统结构图本系统由一块61板和一块自制的模拟交通灯控制板组成。
61板和模拟交通灯控制板通过排线连接。
这里先简单介绍系统的结构,具体电路请参考后面的电路原理图。
系统以一片SPCE061A为核心,检测键盘模块和流量检测模块。
根据检测结果按照程序设定的方式去控制红绿灯模块、倒计时数码管模块和放音模块。
3.2模拟交通灯控制板简介下图是模拟交通灯控制板布局示意图。
图中的表示2位7段的LED数码管(用作倒计时显示),表示双色LED(用作红黄绿灯),表示小按键(用来模拟车流)。
SPCE061A语音型单片机自主实验高等工程学院39032415李柏2010-10-30、11-6一、S PCE061A芯片简介SPCE061A实验箱是以台湾凌阳16位单片机SPCE061A为核心设计的实验培训系统能完成教学大纲所规定的各项基础实验和毕业设计并能感受到凌阳独具特色的语音处理功能该系统集成度高驱动能力大扩展方便语音处理功能强大是各高校学生学习凌阳单片机必备的实验工具也是验证教学从事科研专案的开发科技制作及竞赛的实用教学设备特别是其独具的语音实验处理功能为相关教学和专案研发赋予许多新的内容和功能从而更实用更符合潮流更具有竞争力。
PCE061A 是继μ’nSP™(Microcontroller and Signal Processor)系列产品SPCE500A等之后凌阳科技推出的又一款16位结构的微控制器。
与SPCE500A不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH)。
较高的处理速度使μ’nSP™能够非常容易地、快速地处理复杂的数字信号。
因此,与SPCE500A相比,以μ’nSP™为核心的SPCE061A微控制器是适用于数字语音识别应用领域产品的一种最经济的选择。
其主要性能如下,内置2K字SRAM;内置32K FLASH;具有2个16位可编程定时器/计数器(可自动预置初始计数值);2个10位DAC(数-模转换)输出通道;32位通用可编程输入/输出端口;14个中断源可来自定时器A / B,时基,2个外部时钟源输入,键唤醒等等。
使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据;具有WatchDog功能。
图1 实验箱整体图二、工作记录10月30日主要内容:运行example文件夹中的诸多例程。
具体实验步骤:1、使用数据线连接单片机与电脑主机,单片机与电源,打开相应开关。
2、打开,进入IDE界面。
第7章 凌阳音频压缩算法7.1 背景介绍7.1.1 音频的概述(特点、分类)我们所说的音频是指频率在20 Hz~20 kHz的声音信号,分为:波形声音、语音和音乐三种,其中波形声音就是自然界中所有的声音,是声音数字化的基础。
语音也可以表示为波形声音,但波形声音表示不出语言、语音学的内涵。
语音是对讲话声音的一次抽象。
是语言的载体,是人类社会特有的一种信息系统,是社会交际工具的符号。
音乐与语音相比更规范一些,是符号化了的声音。
但音乐不能对所有的声音进行符号化。
乐谱是符号化声音的符号组,表示比单个符号更复杂的声音信息内容。
7.1.2 数字音频的采样和量化将模拟的(连续的)声音波形数字元化(离散化),以便利数字计算机进行处理的过程,主要包括采样和量化两个方面。
数字音频的质量取决于:采样频率和量化位数这两个重要参数。
此外,声道的数目、相应的音频设备也是影响音频质量的原因。
7.1.3 音频格式的介绍音频文件通常分为两类:声音文件和MIDI文件(1)声音文件:指的是通过声音录入设备录制的原始声音,直接记录了真实声音的二进制采样数据,通常文件较大;(2)MIDI文件:它是一种音乐演奏指令序列,相当于乐谱,可以利用声音输出设备或与计算机相连的电子乐器进行演奏,由于不包含声音数据,其文件尺寸较小。
1)声音文件的格式WAVE文件——*.WAVWAVE文件使用三个参数来表示声音,它们是:采样位数、采样频率和声道数。
在计算机中采样位数一般有8位和16位两种,而采样频率一般有11025Hz(11KHz),22050Hz(22KHz)、44100Hz(44KHz)三种。
我们以单声道为例,则一般WAVE文件的比特率可达到88K~704Kbps。
具体介绍如下:(1) WAVE格式是Microsoft公司开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范;(2) 用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。
本实验程序是凌阳SPCE61A单片机的程序代码!希望大家能够把单片机学好,部分程序有C语言版本的,有一部分没有,我认为C语言版本的其实是按照汇编版的改编的,都是大同小异,所以后面一部分中断程序就没有写C语言版本的!望理解^_^//使用汇编语言实现A 口的输出.RAM.CODE.public _main.define P_IOA_Dir 0X7002.define P_IOA_Attrib 0X7003.define P_IOA_Data 0X7000.define P_watchdog_clear 0X7012 _main:R1=0x00FF //初始化[P_IOA_Dir] = R1[P_IOA_Attrib] = R1R1 = 0x0000[P_IOA_Data] = R1LP1: [P_IOA_Data] = R1R1 += 1CALL delayR2 = 0X0001 //清狗[P_watchdog_clear] = R2JMP LP1delay: .PROCBP = 0LPN: BP += 1CMP BP,0X9000JNZ LPNRETF.ENDP//使用C语言实现A 口的输出#define P_IOA_Data (volatile unsigned int *)0x7000 #define P_IOA_Dir (volatile unsigned int *)0x7002 #define P_IOA_Attrib (volatile unsigned int *)0x7003 #define P_watchdog_clear (volatile unsigned int *)0X7012 int main (void){unsigned int i = 0 ,j = 0;*P_IOA_Dir = 0xffff;*P_IOA_Attrib = 0xffff;*P_IOA_Data = 0x0000;while (1){for (i = 0;i <= 255;++i){for (j = 0 ; j <= 2222; ++j) //延时,可以更改*P_IOA_Data = i ;*P_watchdog_clear = 0x0001;}}}//使用汇编语言实现A 口作为输入口、B 口作为输出口.RAM.CODE.public _main.define P_IOA_Dir 0X7002 //定义地址.define P_IOA_Attrib 0X7003.define P_IOA_Data 0X7000.define P_IOB_Dir 0X7007.define P_IOB_Attrib 0X7008.define P_IOB_Data 0X7005.define P_watchdog_clear 0X7012_main:R1=0x0000 //A口初始化[P_IOA_Dir] = R1[P_IOA_Attrib] = R1[P_IOA_Data] = R1R1=0x00FF //B口初始化[P_IOB_Dir] = R1[P_IOB_Attrib] = R1R1=0x0000[P_IOB_Data] = R1LPP:R1 = [P_IOA_Data] //键盘程序调用取键值CMP R1,0JZ LP2CALL delayR2 = [P_IOA_Data]CMP R1,R2JZ LP2[P_IOB_Data] = R1delay: .PROCBP = 0LPN: BP += 1CMP BP,0X9000JNZ LPNRETF.ENDPLP2: R1 = 0X0001 //清狗[P_watchdog_clear] = R1JMP LPP//使用C 语言实现A 口作为输入口、B 口作为输出口#define P_IOA_Data (volatile unsigned int *)0x7000 #define P_IOA_Dir (volatile unsigned int *)0x7002 #define P_IOA_Attrib (volatile unsigned int *)0x7003 #define P_IOB_Data (volatile unsigned int *)0X7005 #define P_IOB_Dir (volatile unsigned int *)0X7007 #define P_IOB_Attrib (volatile unsigned int *)0X7008 #define P_watchdog_clear (volatile unsigned int *)0X7012 int f (unsigned int t){unsigned int s;t = *P_IOA_Data;if (t == 0 )return t;else{delay();s = *P_IOA_Data;if (t ==s)return t;elsereturn 0;}}void delay (void){unsigned int m;for(m = 0;m<100; ++m){*P_watchdog_clear = 0x0001;}}int main (void){unsigned int i,t;*P_IOA_Dir = 0x0000; // //A口初始化*P_IOA_Attrib = 0x0000;*P_IOA_Data = 0x0000;*P_IOB_Dir = 0x00FF; //B口初始化*P_IOB_Attrib = 0x00FF;*P_IOB_Data = 0x0000;while (1){t = *P_IOA_Data; //取键值i = f(t); //返回键值if (i == 0)*P_IOB_Data = i;else{*P_IOB_Data = i;}*P_watchdog_clear = 0x0001;}}//使用汇编语言实现A 口的输出//系统时钟.RAM.CODE.public _main.define P_IOA_Dir 0X7002 .define P_IOA_Attrib 0X7003.define P_IOA_Data 0X7000 .define P_SystemClock 0X7013 .define P_watchdog_clear 0X7012_main:R1 = 0X0000 //24.576MHZ[P_SystemClock] = R1R1=0x00FF //初始化[P_IOA_Dir] = R1[P_IOA_Attrib] = R1R1 = 0x0000[P_IOA_Data] = R1LP1: [P_IOA_Data] = R1CALL delayCALL delayR1 = 0XFFFF[P_IOA_Data] = R1CALL delayCALL delaydelay: .PROCBP = 0xFFFFLPN: BP -= 1JNZ LPNRETF.ENDPR2 = 0X0001 //清狗[P_watchdog_clear] = R2JMP LP1//系统时钟//使用C语言实现A 口的输出#define P_IOA_Data (volatile unsigned int *)0x7000 #define P_IOA_Dir (volatile unsigned int *)0x7002 #define P_IOA_Attrib (volatile unsigned int *)0x7003 #define P_SystemClock (volatile unsigned int *)0X7013 #define P_watchdog_clear (volatile unsigned int *)0X7012 int main (void){unsigned int i,j;*P_IOA_Dir = 0x00FF;*P_IOA_Attrib = 0x00FF;*P_IOA_Data = 0x0000;*P_SystemClock = 0x0000;while (1){for (i = 0;i < 2222;++i)for (j = 0;j < 22;++j){*P_IOA_Data = 0x0000 ;*P_watchdog_clear = 0x0001;}for (i = 0;i < 2222;++i)for (j = 0;j < 22;++j){*P_IOA_Data = 0xFFFF ;*P_watchdog_clear = 0x0001;}}}//使用汇编语言定时器TimerA.RAM.CODE.public _main.define P_IOB_Dir 0x7007.define P_IOB_Attrib 0x7008.define P_IOB_Data 0x7005.define P_watchdog_clear 0x7012.define P_TimerA_Data 0x700A.define P_TimerA_ctrl 0x700B_main:R1=0x0FFF //B口初始化同相低电平输出[P_IOB_Dir] = R1[P_IOB_Attrib] = R1R1=0x0000[P_IOB_Data] = R1R1 = 0x0215 // 输入256HZ 输出1秒占空比8/16[P_TimerA_ctrl] = R1R1 = 0xFFEF //计数初值[P_TimerA_Data] = R1LP1:R2 = 0x0001 //清狗[P_watchdog_clear] = R2 JMP LP1//使用C语言定时器TimerA#define P_IOB_Data (volatile unsigned int *)0X7005 #define P_IOB_Dir (volatile unsigned int *)0X7007#define P_IOB_Attrib (volatile unsigned int *)0X7008#define P_watchdog_clear (volatile unsigned int *)0X7012#define P_TimerA_Data (volatile unsigned int *)0X700A #define P_TimerA_ctrl (volatile unsigned int *)0X700Bint main (void){*P_IOB_Dir = 0x0F00; //B口初始化同相低电平输出*P_IOB_Attrib = 0x0F00;*P_IOB_Data = 0x0000;*P_TimerA_ctrl = 0x0215; // 输入256HZ 输出1秒占空比8/16*P_TimerA_Data = 0xFFEF; //计数初值while (1){*P_watchdog_clear = 0x0001;}}// 使用汇编语言A/D转换.RAM.CODE.public _main.define P_IOA_Dir 0X7002 //定义地址.define P_IOA_Attrib 0X7003.define P_IOA_Data 0X7000.define P_IOB_Dir 0X7007.define P_IOB_Attrib 0X7008.define P_IOB_Data 0X7005.define P_watchdog_clear 0X7012.define P_ADC_MUX_Ctrl 0X702B.define P_ADC_Ctrl 0X7015.define P_ADC_MUX_Data 0X702C_main:R1=0x0000 //A口初始化悬浮输入口[P_IOA_Dir] = R1[P_IOA_Data] = R1R1=0x00FF[P_IOA_Attrib] = R1[P_IOB_Dir] = R1 //B口初始化同相低电平输出口[P_IOB_Attrib] = R1R1=0x0000[P_IOB_Data] = R1R1=0x0001 //选择通道LINE_IN为IOA0[P_ADC_MUX_Ctrl] = R1R1=0x0001 //允许A/D转换[P_ADC_Ctrl] = R1ZH:R1 = [P_ADC_MUX_Data] //判断是否转换完成? 读取P_ADC_MUX_Data的值TEST R1,0x8000JZ ZHR1 = [P_ADC_MUX_Data]R1 = R1 LSR 4R1 = R1 LSR 2[P_IOB_Data] = R1R1 = 0X0001 //清狗[P_watchdog_clear] = R1JMP ZH// 使用C语言A/D转换#define P_IOA_Data (volatile unsigned int *)0x7000#define P_IOA_Dir (volatile unsigned int *)0x7002#define P_IOA_Attrib (volatile unsigned int *)0x7003#define P_IOB_Data (volatile unsigned int *)0X7005#define P_IOB_Dir (volatile unsigned int *)0X7007#define P_IOB_Attrib (volatile unsigned int *)0X7008#define P_watchdog_clear (volatile unsigned int *)0X7012#define P_ADC_MUX_Ctrl (volatile unsigned int *)0X702B#define P_ADC_Ctrl (volatile unsigned int *)0X7015#define P_ADC_MUX_Data (volatile unsigned int *)0X702Cint main (void){unsigned int i ;unsigned int j ;*P_IOA_Dir = 0x0000 ; //A口初始化悬浮输入口*P_IOA_Data = 0x0000 ;*P_IOA_Attrib = 0x00FF ;*P_IOB_Dir = 0x00FF ; //B口初始化同相低电平输出口*P_IOB_Attrib = 0x00FF ;*P_IOB_Data = 0x0000 ;*P_ADC_MUX_Ctrl = 0x0001; //选择通道LINE_IN为IOA0*P_ADC_Ctrl = 0x0001 ; //允许A/D转换for(i = 0;i < 5;++i) ; //等待while(1){i = *P_ADC_MUX_Data ; //判断是否转换完成? 读取P_ADC_MUX_Data的值i = i & 0x8000 ;if(i == 0);else{j = *P_ADC_MUX_Data;j >>= 6 ; //右移6位*P_IOB_Data = j ;}*P_watchdog_clear = 0X0001 ; //清狗}}//使用汇编语言实现A 口作为输入口、B 口作为输出口触键唤醒.RAM.CODE.public _main.define P_IOA_Dir 0X7002 //定义地址.define P_IOA_Attrib 0X7003.define P_IOA_Data 0X7000.define P_IOB_Dir 0X7007.define P_IOB_Attrib 0X7008.define P_IOB_Data 0X7005.define P_watchdog_clear 0X7012.define P_INT_Ctrl 0X7010.define P_IOA_Latch 0X7004.define P_SystemClock 0X7013.define P_INT_Clear 0X7011_main:R1=0x00FD //设置IOA1为带下拉电阻的输入口,其他IOA口都设置为输出口[P_IOA_Dir] = R1[P_IOA_Attrib] = R1R1=0x0000[P_IOA_Data] = R1R1=0x00FF //B口初始化初始化IOB口为同相低电平输出口[P_IOB_Dir] = R1[P_IOB_Attrib] = R1R1=0x0000[P_IOB_Data] = R1INT OFFR1 = 0X0080 //开启唤醒中断[P_INT_Ctrl] = R1R1 = 0X0000 //熄灭灯[P_IOB_Data] = R1R1 = [P_IOA_Latch] //锁存IOA数据[P_IOA_Data]INT IRQR1 = 0X0007 //睡眠[P_SystemClock] = R1LP2: R1 = 0X0001 //清狗[P_watchdog_clear] = R1JMP LP2.TEXT.PUBLIC _IRQ3_IRQ3:INT OFFPUSH R1,R4 TO [SP]R1 = 0X0080 //是否是触键唤醒TEST R1,[P_INT_Ctrl]JZ EXITR1 = 0XFFFF //点亮8颗灯[P_IOB_Data] = R1EXIT:R1 = 0X0080 //清中断[P_INT_Clear] = R1POP R1,R4 FROM [SP]INT IRQRETI.END//使用C 语言实现A 口作为输入口、B 口作为输出口#define P_IOA_Data (volatile unsigned int *)0x7000#define P_IOA_Dir (volatile unsigned int *)0x7002#define P_IOA_Attrib (volatile unsigned int *)0x7003#define P_IOB_Data (volatile unsigned int *)0X7005#define P_IOB_Dir (volatile unsigned int *)0X7007#define P_IOB_Attrib (volatile unsigned int *)0X7008#define P_watchdog_clear (volatile unsigned int *)0X7012#define P_INT_Ctrl (volatile unsigned int *)0X7010#define P_IOA_Latch (volatile unsigned int *)0X7004#define P_SystemClock (volatile unsigned int *)0X7013#define P_INT_Clear (volatile unsigned int *)0X7011int main(void){unsigned int i ;ASM (" INT OFF ") ;*P_IOA_Dir = 0x00FD ; //设置IOA1为带下拉电阻的输入口,其他IOA口都设置为输出口*P_IOA_Attrib = 0x00FD;*P_IOA_Data = 0x0000;*P_IOB_Dir = 0x00FF ; //B口初始化初始化IOB口为同相低电平输出口*P_IOB_Attrib = 0x00FF;*P_IOB_Data = 0x0000;*P_INT_Ctrl = 0X0080; //开启唤醒中断*P_IOB_Data = 0X0000; //熄灭灯i = *P_IOA_Latch ; //锁存IOA数据ASM (" INT IRQ ") ; //开中断*P_SystemClock = 0X0007; //睡眠while(1){*P_watchdog_clear = 0X0001 ; //清狗}}unsigned int t;void IRQ3(void)__attribute__((ISR));void IRQ3(void){t = *P_INT_Ctrl ;if (t == 0X0080 ){*P_IOA_Data = 0XFFFF ;*P_INT_Clear = 0X0080;}else*P_INT_Clear = 0X0080;}//使用汇编语言:IRQ6 中断.DEFINE P_IOA_DATA 0x7000.DEFINE P_IOA_DIR 0x7002.DEFINE P_IOA_ATTRI 0x7003.DEFINE P_IOB_DATA 0x7005.DEFINE P_IOB_DIR 0x7007.DEFINE P_IOB_ATTRI 0x7008.DEFINE P_INT_CTRL 0x7010.DEFINE P_INT_CLEAR 0x7011.DEFINE P_WatchDog_Clear 0x7012.DEFINE P_Timebase_setup 0x700e.RAM.VAR G_Time1.VAR G_Time2.CODE.PUBLIC _main_main:INT OFFR1 = 0xFFFF //设置IOA口为同相高电平输出口[P_IOA_ATTRI] = R1[P_IOA_DIR] = R1[P_IOA_DATA] = R1R1 = 0xFFFF //设置IOB口为同相高电平输出口[P_IOB_ATTRI] = R1[P_IOB_DIR] = R1[P_IOB_DATA] = R1R1 = 0x0003[P_Timebase_setup] =R1R1 = 0x0003 //开中断IRQ6_C_Tmb1和IRQ6_C_Tmb2 [P_INT_CTRL] = R1R1 = 0x0000[G_Time1] = R1[G_Time2] = R1INT I RQL_Loop:R1 = 0x0001[P_WatchDog_Clear] = R1JMP L_Loop.TEXT.PUBLIC _IRQ6_IRQ6:PUSH R1,R5 to [sp] //压栈保护R1 = 0x0001TEST R1,[P_INT_CTRL] //比较是否为IRQ6_C_Tmb2的中断源JNZ L_IRQ6_C_Tmb2 //是,则转至对应程序段L_IRQ6_C_Tmb1: //否,则进入IRQ6_C_Tmb1程序段;R2 = [G_Time1]R2 += 0x0001[G_Time1] = R2CMP R2,64 //比较是否为1秒;JBE L_LED1_OFF //小于等于则LED灭;R1 = 0xfff0 //大于则LED亮;[P_IOA_DATA] = R1CMP R2,128 //比较是否为两秒;JBE L_LED1_RET //小于等于则LED继续亮;R2 = 0x000 //否则,G_Time1单元清零,返回中断;[G_Time1] =R2JMP L_LED1_RETL_LED1_OFF:R1 = 0xFFFF[P_IOA_DATA] = R1L_LED1_RET:R1 = 0x0002[P_INT_CLEAR] = R1R1 = 0x0001[P_WatchDog_Clear] = R1POP R1,R5 FROM [sp]RETIL_IRQ6_C_Tmb2:R2 = [G_Time2]R2 += 0x0001[G_Time2] = R2CMP R2,64 //比较是否为0.5秒;JBE L_LED2_OFF //小于等于则LED灭;R1 = 0xfff0 //大于则LED亮;[P_IOB_DATA] = R1CMP R2,128 //比较是否为1秒;JBE L_LED2_RET //小于等于则LED继续亮;R2 = 0x0000 //否则,G_Time2单元清零,返回中断;[G_Time2] = R2JMP L_LED2_RETL_LED2_OFF:R1 = 0xFFFF[P_IOB_DATA] = R1L_LED2_RET:R1 = 0x0001[P_INT_CLEAR] = R1POP R1,R5 from [sp] RETI//使用汇编语言IRQ4.define P_IOA_DATA 0x7000.define P_IOA_DIR 0x7002.define P_IOA_ATTRI 0x7003.define P_IOB_DATA 0x7005.define P_IOB_DIR 0x7007.define P_IOB_ATTRI 0x7008.define P_INT_CTRL 0x7010.define P_INT_CLEAR 0x7011.define P_watchdog_clear 0x7012.RAM.VAR G_Time1.VAR G_Time2,G_Time4.CODE.public _main_main:INT OFFR1 = 0xFFFF //IOA口为同相高电平输出口;[P_IOA_ATTRI] = R1[P_IOA_DIR] = R1R1 = 0x0000[P_IOA_DATA] = R1R1 = 0x0070 //开中断IRQ4_4KHz、IRQ4_2KHz和IRQ4_1KHz[P_INT_CTRL] = R1R1 = 0x0000[G_Time1] = R1[G_Time2] = R1[G_Time4] = R1INT IRQL_Loop:R1 = 0x0001 //清狗等待中断[P_watchdog_clear] = R1JMP L_Loop.TEXT.PUBLIC _IRQ4_IRQ4:PUSH R1,R5 to [sp] //压栈保护;R1 = 0x0010TEST R1,[P_INT_CTRL] //比较是否为1KHz的中断源;JNZ LED2kHZ_OFF //是,则转至对应程序段;R1 = 0x0020TEST R1,[P_INT_CTRL] //否,则比较是否为2KHz的中断源;JNZ IRQ4_2k //是,则转至对应程序段;L_IRQ4_4k: //否,则进入4KHz程序段;R2 = [G_Time4]R2 += 0x0001[G_Time4] = R2CMP R2,1024 //比较JBE LED4kHZ_OFF //小于等于则LED灭;R1 = 0x00f0 //大于则LED亮;[P_IOA_DATA] = R1CMP R2,2048 //比较JBE LED2kHZ_OFF //小于等于则LED继续亮;R2 = 0x0000 //否则,G_Time4单元清零,返回中断;[G_Time4] = R2JMP LED2kHZ_OFFLED4kHZ_OFF:R1 = 0x0000[P_IOA_DATA] = R1LED2kHZ_OFF:R1 = 0x0040POP R1,R5 from [sp]RETIIRQ4_2k:R2 = [G_Time2]R2 += 0x0001[G_Time2] = R2CMP R2,1024 //比较JBE LED2kHZ_OFF //小于等于则LED灭;R1 ^= 0x000C //大于则LED亮;[P_IOA_DATA] = R1CMP R2,2048 //比较;JBE LED2kHz_RET //小于等于则LED继续亮;R2 = 0x0000 //否则,G_Time2单元清零,返回中断;[G_Time2] = R2JMP LED2kHz_RETLED2kHZ_OFF:R1 = 0x0000[P_IOA_DATA] = R1LED2kHz_RET:R1 = 0x0020POP R1,R5 from [sp]RETILED2kHZ_OFF:R2 = [G_Time1]R2+ = 0x0001[G_Time1] = R2CMP R2,1024 //比较;JBE LED1kHZ_OFF //小于等于则LED灭;R1 = 0x0003 //大于则LED亮;[P_IOA_DATA] = R1CMP R2, 2048 //比较;JBE LED1kHz_RET //小于等于则LED继续亮;R2 = 0x0000 //否则,G_Time1单元清零,返回中断;[G_Time1] = R2JMP LED1kHz_RETLED1kHZ_OFF:R1 = 0x0000[P_IOA_DATA] = R1LED1kHz_RET:R1 = 0x0010POP R1,R5 from[sp] RETI//使用汇编语言外部中断EXT1、EXT2.define P_IOA_Dir 0X7002 //定义地址.define P_IOA_Attrib 0X7003.define P_IOA_Data 0X7000.define P_IOB_Dir 0X7007.define P_IOB_Attrib 0X7008.define P_IOB_Data 0X7005.define P_FeedBack 0X7009.define P_INT_Ctrl 0x7010.define P_INT_clear 0x7011.define P_Timebase_setup 0x700E.define P_watchdog_clear 0X7012.RAM.CODE.PUBLIC _main_main:INT OFFR1 = 0xFFFF //IOA口为同相低电平输出[P_IOA_Attrib] = R1[P_IOA_Dir] = R1R1 = 0x0000[P_IOA_Data] = R1R1 = 0x0000 //IOB2 、IOB3 口为上拉电阻输入[P_IOB_Attrib] = R1[P_IOB_Dir] = R1R1 = 0x0001[P_IOB_Data] = R1R1 = 0X000C //设置IOB 口为特殊功能[P_FeedBack] = R1R1 = 0X0300 //开启IRQ3_EXT1,IRQ3_EXT2 中断[P_INT_Ctrl] = R1INT IRQLP1:R1 = 0X0001[P_watchdog_clear] = R1JMP LP1//外部中断.TEXT.PUBLIC _IRQ3_IRQ3:INT OFFPUSH R1,R4 TO [SP]R1 = 0X0200 //是否是EXT2 中断TEST R1,[P_INT_Ctrl]JNZ IRQ3_EXT2 // 是否是EXT2,是则跳转到EXT2R1 = 0X0100TEST R1,[P_INT_Ctrl]JNZ IRQ3_EXT1 // 是否是EXT1,是则跳转到EXT1R1 = 0X0380[P_INT_clear] = R1POP R1,R4 FROM [SP]RETIIRQ3_EXT1:R1 = 0X00F0[P_IOA_Data] = R1R1 = 0X0100[P_INT_clear] = R1POP R1,R4 FROM [SP]INT IRQRETIIRQ3_EXT2:R1 = 0X000F[P_IOA_Data] = R1R1 = 0X0200[P_INT_clear] = R1 POP R1,R4 FROM [SP] INT IRQRETI//使用汇编语言外部中断IRQ0 1 2.define P_IOA_Dir 0X7002 //定义地址.define P_IOA_Attrib 0X7003.define P_IOA_Data 0X7000.define P_IOB_Dir 0X7007.define P_IOB_Attrib 0X7008.define P_IOB_Data 0X7005.define P_FeedBack 0X7009.define P_INT_Ctrl 0x7010.define P_INT_clear 0x7011.define P_watchdog_clear 0X7012.define P_TimerA_Data 0x700A.define P_TimerA_ctrl 0x700B.define P_TimerB_Data 0x700C.define P_TimerB_ctrl 0x700D.RAM.CODE.PUBLIC _main_main:INT OFFR1 = 0xFFFF //IOA口为同相低电平输出[P_IOA_Attrib] = R1[P_IOA_Dir] = R1R1 = 0x0000[P_IOA_Data] = R1R1 = 0xFFFF //IOB口为同相低电平输出[P_IOB_Attrib] = R1[P_IOB_Dir] = R1R1 = 0x0000[P_IOB_Data] = R1R1 =0x0034 //4096hz[P_TimerA_ctrl] = R1R1 = 0xDFFF[P_TimerA_Data] = R1R1 =0x0004 //4096hz[P_TimerB_ctrl] = R1R1 = 0xEFFF[P_TimerB_Data] = R1R1 = 0x5400 //开启IRQ3_EXT1,IRQ3_EXT2 中断[P_INT_Ctrl] = R1INT IRQLP1:R1 = 0X0001[P_watchdog_clear] = R1JMP LP1//外部中断.TEXT.PUBLIC _IRQ0_IRQ0:INT OFFPUSH R1,R4 TO [SP]R1 = 0x4000 // 中断[P_INT_clear] = R1POP R1,R4 FROM [SP]INT IRQRETI.TEXT.PUBLIC _IRQ1_IRQ1:INT OFFPUSH R1,R4 TO [SP]R1 = [P_IOA_Data]R1 ^= 0x000F[P_IOA_Data] = R1R1 = 0x1000[P_INT_clear] = R1POP R1,R4 FROM [SP]INT IRQRETI.TEXT.PUBLIC _IRQ2_IRQ2:INT OFFPUSH R1,R4 TO [SP]R1 = [P_IOB_Data]R1 ^= 0x000F[P_IOB_Data] = R1R1 = 0x0400[P_INT_clear] = R1POP R1,R4 FROM [SP]INT IRQRETI目前做了这么多实验,实验程序共享给大家!希望大家能够把单片机学好!^_^ ^_^ ^_^ ^_^ ^_^。
SPCE061A单片机实验指导书电子工程系SPCE061A单片机实验指导书编写说明本实验指导书是针对“单片机原理及其接口技术”课程实验教学大纲编写的,其中的所有实验是在凌阳十六位单片机SPCE061A实验板(61板)的基础上进行,由于该实验板采用了开放式的设计方法,除语音部分(麦克风和放音喇叭及其驱动电路部分)已设计在实验板上外,所由其它资源全部留给用户自由使用,对于开设设计性、综合性实验提供了必要的空间。
本实验指导书共包括10个实验,其中所有实验均为设计性、综合性实验。
在实验指导书中只给出实验要求,并提供相关的实验板和相应的元器件,要求同学根据实验要求,设计出满足实验要求的实验原理、硬件电路设计,实际连线,编写相关程序、调试,并对实验结果进行记录、分析。
目录实验一SPCE061A开发环境实验实验二普通IO口实验实验三定时/计数器实验实验四系统时钟实验实验五FIQ中断实验实验六信号发生器实验实验七 A/D转换实验实验八七段数码LED显示实验实验九录放音实验实验十键扫描显示程序实验一 SPCE061A开发环境实验【实验目的】1)熟悉µ’nSP™ IDE环境及在该环境下用汇编语言和C语言编写的应用程序。
2)熟悉简单的µ’nSP™汇编语言指令和C语言程序的编写方法。
【实验设备】1)装有WINDOWS系统和µ’nSP™ IDE仿真环境的PC机一台。
2) µ’nSP™十六位单片机61开发板一个【实验步骤】1)将µ’nSP™ IDE打开后,建立一个新工程。
2)在该项目的源文件夹(SOURCE FILES)下建立一个新的汇编语言文件。
3)编写汇编代码。
4)编译程序,软件调试,观察并跟踪其结果,查看各个寄存器状态【程序范例1】//===============================================================//// Program: 计算1 to 100累加值// Output: [sum] = 5050(十进制) 或13BA(十六进制)//===============================================================//.RAM // 定义预定义RAM 段.var R_Sum; // 定义变量.CODE //定义代码段.public _main; // 对main程序段声明_main: r1 = 0x0001; // r1=[1..100]r2 = 0x0000; // 寄存器清零L_SumLoop:r2 += r1; // 累计值存到寄存器r2r1 += 1; // 下一个数值cmp r1,100; // 加到100否jna L_SumLoop; // 如果r1 <= 100 跳到L_SumLoop[R_Sum] = r2; // 在R_Sum中保存最终结果L_ProgramEndLoop: // 程序死循环jmp L_ProgramEndLoop;【程序范例】//===============================================================//// Program: 计算1 to 100累加值// Output: [sum] = 5050(十进制) 或13BA(十六进制)//===============================================================//int main(){int i, Sum=0;for (i=0;i<=100;i++)Sum = Sum + i; // Sum 是累加的结果while(1){ }; // 程序死循环// 用变量Watch 窗口看Sum 的值}【程序练习】在µ’nSP™ IDE下用汇编语言使用冒泡法编写一个排序程序。
凌阳SPCE061A驱动液晶1602的程序凌阳SPCE061A驱动液晶1602的程序/*本程序由网上两份51单片机的1602驱动程序修改而成,原来的程序不用的部分全部注释掉了。
本程序IOA0~7接1602数据端口,IOB0------RS,IOB1-----RW,IOB2------E,15,16脚不接。
1----GND 2-------VCC,*///先定义接口//# include#include "SPCE061A.H"/*****************************************P1------DB0~DB7 P2.0------RSP2.1------RWP2.2------E*****************************************//*# define LCD_DB P1sbit LCD_RS=P2^0;sbit LCD_RW=P2^1;sbit LCD_E=P2^2;*//******定义函数****************/# define uchar unsigned char# define uint unsigned int//LCD显示内容,定义到代码段uchar LcdBuf1[]= {"welcom!"};uchar LcdBuf2[]= {"MCU-STUDY-BOARD"};void LCD_init(void);//初始化函数void LCD_write_command(uchar command);//写指令函数void LCD_write_data(uchardat);//写数据函数void LCD_disp_char(ucharx,uchary,uchardat);//在某个屏幕位置上显示一个字符,X(0-16),y(1-2)//void LCD_check_busy(void);//检查忙函数。
单片机原理与应用凌阳SPCE061A教学设计1. 概述单片机作为嵌入式系统的核心部件,其在各种电子设备中应用广泛。
本教学涉及的单片机型号为凌阳SPCE061A。
本教学设计旨在通过系统化的教学方式,使学生快速掌握该单片机的工作原理和应用。
2. 教学目标本教学设计旨在达到以下教学目标:•熟悉单片机工作原理•能够使用Keil软件进行开发•熟悉单片机的编程语言•能够进行基本的单片机应用开发3. 教学内容3.1 单片机原理•单片机的发展历史•单片机的分类、特点和应用领域•单片机的系统结构、工作原理及其组成部分的功能和特点3.2 单片机编程语言•单片机开发语言C和汇编语言的比较•C语言的基本语法和数据类型•C语言对单片机的控制语句和运算符的使用3.3 Keil软件开发环境•Keil软件的安装和配置•Keil仿真器的使用•Keil软件的功能和使用方法3.4 单片机应用实例•按键控制LED灯的亮灭•LED灯的闪烁和流水灯效果•蜂鸣器的发声和播放音乐4. 教学方法本教学采用“理论讲解+实践操作”相结合的方法,重点讲解单片机的工作原理和编程语言,并通过实例操作让学生更好地理解掌握。
5. 教学评价本教学采用多种评价方式,包括学习笔记、实验报告、课堂测试等。
学生需要通过这些评价方式来检测和提升自己的学习成果。
6. 教学建议针对本教学的教学内容和方式,我们建议学生在学习之前需要掌握一定的电路基础知识,同时具备一定的计算机应用能力。
7. 教学资源教学资源主要包括教学PPT、实验手册、实验材料等。
学生需要认真阅读这些教学资源,并充分利用这些资源来进行自主学习和实践操作。
8. 结语通过本教学设计的学习,相信学生们能够初步掌握单片机的工作原理和应用,同时能够通过自主学习和实践操作,不断提升自己的技术水平。
解读SPCE061A单片机语音控制电风扇电路随着电子业的发展,智能化家电将是发展的必然趋势,语音控制也必将进入实用阶段。
在现有市场上多功能电风扇的基础上,我们提出了一种新型的语音智能电风扇,使电风扇更加人性化。
本设计以凌阳16位SPCE061A单片机为核心,设计完成了一个语音控制智能电风扇。
随着人们生活水平的提高,人们也不再满足手动的那些机械方面的操作,只要站在房间的某个角落,通过人的语音识别与控制,就能实现对电风扇的控制,这种功能方便了人们的生活,特别是对于残疾人更加方便快捷,易于使用。
值得今后市场的大面积普及,研究语音控制电风扇具有广阔的应用前景。
操作人发出语音指令,系统接受后在内部进行处理、查询,产生响应控制信号,从而控制PWM口的脉宽来调节可控硅的导通角大小,从而实现电机调速的目的。
根据开始录制的语音命令来控制风扇的启动、加快转速,减小转速,匀速运行等。
系统总体框图如下:系统总体框图图中的语音输入部分MIC_IN、滤波电路、声音输出部分的功率放大环节等已经做到了精简开发板61板上,为我们使用提供了方便。
在电机的驱动方面,通过单片机的PWM触发脉冲宽度来直接控制晶闸管来控制速度。
麦克风录音输入ADC及AGC电路凌阳的SPCE061A是16位单片机,具有DSP功能,其中内嵌有高速AD转换器,有很强的信息处理能力,最高时钟可达到49M,具备运算速度高的优势等等,这为语音的播放、录放、合成及辨识提供了条件。
本系统接入MIC 电路,MIC 为录制语音辨识命令服务。
MIC 采集的语言先通过内置自动增益控制放大器,再经过SPCE061A 内置的八通道10 位模数转换器转换位数字量信号,硬件ADC 最高采样速率可达96KHZ。
电机驱动电路对该部分电路的设计,主要应解决两个问题:弱电(凌阳单片机系统)和强电(AC220V)的隔离。
对此,采用了如下图所示的电路,其中MOC3041 是具有双向晶闸管输出的光电隔离器,T1 是功率双向可控硅,RL 是负载,在MOC3041 内部不仅有发光二极管,而且还有过零检测电路和一个小功率双向可控硅。