凌阳SPCE061A USB下载方法
- 格式:pdf
- 大小:416.50 KB
- 文档页数:5
USBASP 下载线使用说明 1. 1.Progisp1.67 Progisp1.67软件安装(1在上右击, ,释放到D 盘(2打开 D:\progisp167, 在图标上右击, 创建“桌面快捷方式” 。
2. 驱动安装:(1把 USBasp 插入 USB口(2找到软件所在的位置,在其中找到驱动: (3下一步,安装(4完成(5安装完成后,我们再插拔 USBasp 下载线的时候会听到一个叮咚的声音。
同时我们也可以在电脑硬件看到:Basp 下载线使用:(1下载软件推荐使用 AVR_fighter、 progisp 等,其他的可以到网上找找,还有多种类似下载软件。
关于跳线帽:J1程序低速下载,一般断开。
J2:短接为给目标板提供电源(目标板电流小于 500mA 。
J3为固件升级使用,一般断开。
USBasp下载线图片:(2 ISP接口图及实物对应图其中 3、 4、 6、 8为空, 2为 VCC 、 10为 GND 。
(3支持器件清单 :51系列:AT89S51、 AT89S52AVR 系列:ATTiny12(L、 ATTiny13(V、 ATTiny15(L、 ATTiny24(VATTiny25(V、 ATTiny26(L、 ATTiny2313(V、 ATTiny44(VATTiny45(V、 ATTiny84(V、 ATTiny85(V、 AT90S2313(L、 AT90S2323(LAT90S2343(L、 AT90S1200(L、 AT90S8515(L、 AT90S8535(LATMEGA48(V、 ATMEGA8(L、 ATMEGA88(V、 ATMEGA8515(LATMEGA8535(L、 ATMEGA16(L、 ATMEGA162(V、 ATMEGA163(LATMEGA164(V、 ATMEGA165(V、 ATMEGA168(V、 ATMEGA169(VATMEGA169P(V、 ATMEGA32(L、 ATMEGA324(V、 ATMEGA325(VATMEGA3250(V、 ATMEGA329(V、 ATMEGA3290(V、 ATMEGA64(LATMEGA640(V、 ATMEGA644(V、 ATMEGA645(V、 ATMEGA6450(VATMEGA649(V、 ATMEGA6490(V、 ATMEGA128(L、 ATMEGA1280(VATMEGA1281(V、 ATMEGA2560(V、 ATMEGA2561(V、 AT90CAN32AT90CAN64、 AT90CAN128、 AT90PWM2(B、 AT90PWM3(B等(4)S51_ISP 连接图(5)AVR(ATmega16)_ISP 连接图3.Progisp1.67 软件使用 3.Progisp1.67 1 (1)双击桌面快捷方式图标,打开如下界面:芯片加密位点击此处选择烧录芯片熔丝位设置处调入 Flash 烧录改此处 16 进制值也可设置熔丝位消息窗点击此处擦除芯片点击此处烧录件文此击点修 2 AVR (2)选择芯片,设置熔丝,详细设置请见《AVR 熔丝位的设置》。
语音控制是最为直接的人机对话方式,而小车以其生动、典型、学习形式喜闻乐见、涉及知识面广等特点,可作为电子类专业同学们学习、实践的良好载体。
凌阳SPCE061A单片机,具有简单的语音处理功能,不需要外挂语音处理芯片,因此采用SPCE061A作为主控芯片。
1、智能小车总体结构框图:智能小车主要由语音接收、语音处理、语音播报和机械控制四大部分组成,如图1所示。
图1智能小车总体结构框图系统以SPCE061A单片机为核心,实时接收来自控制人的语音命令,提取其特征码,与预先存储在ROM中的特征码比较,若相符则进行如下操作:(1)通过语音播报电路重复当前命令。
(2)根据命令控制驱动电路及转向电路执行相应操作。
2、语音信号接收模块SPCE06lA语音单片机片内集成有7通道10位电压A/D转换器和单通道声音A/D转换器,以及2个10位D/A转换输出通道。
声音A/D转换器输入通道内置麦克风放大器并具有自动增益控制(AGC)功能,专门用于对输入的语音信号进行采样,并使进入该通道的模拟信号维持在最佳电平。
因此外围电路可设计的相对简单,如图2所示。
话筒的偏压由SPCE06lA的VMIC、VCM脚提供。
声音输入模块只需外接1个话筒、5个电阻和5个电容。
图2语音接收模块3、语音播报模块语音播报由双通道10位D/A输出接口DAC1外接扬声器来实现,采用PNP三极管8550作为功放,具体电路参见图3。
图3语音播报模块4、机械控制模块结构及工作原理小车为轮式结构,机械控制模块分为转向机构和驱动机构。
转向机构由步进电机、转向架和两个前轮组成。
单片机接收到转向命令后控制步进电机正向或反向旋转一定角度,电机通过齿轮、齿条系统带动转向架摆动一定角度,最终带动与转向架固定在一起的前轮偏摆一定角度,从而实现精确转向。
考虑到小车在转向时内、外侧车轮的转弯半径不同,所以内外侧驱动轮的转速也应不同。
所以驱动机构采用双电机驱动方案,包括两个电机和两个后轮,如图4所示。
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 非特定人语音识别使用本系统前根本不需要先学习,便能直接使用。
一套最佳的语音识别系统是不须经过学习便能进行语音识别,但通常辩识率都比较低。
另外以说话方式的连续是否又可分为非连续语音识别和连续语音识别。
对于非连续语音来说,识别所说的每一个字必须分开辨认;而连续语音识别可以一般自然流利的说话方式来进行人性化的语音识别,但由于关系到相连音的问题,很难达到好的辨认效果。
永伟USB下载遥控器(V6版本)操作说明获取更多信息或帮助,请登陆遥控器数据中心.快速入门第1步1. 准备USB下载遥控器,先不要装电池.2. 插入到电脑的USB口.3. 下载软件并安装到电脑(WINDOWS操作系统.)第2步1. 读取信息.2. 从数据库选择遥控数据.3. 下载.图 1 主界面图 2编程下载目录1. 简述2. 下载遥控器3. 注册和登录4. 识别(读取)5. 下载编程6. 遥控码学习7. 管理遥控数据库8. 遥控码搜索9. 编辑按键遥控码,键名和位置10. 打印11. 其他常用功能12. 其他13. 常见问题1. 简述1) 电脑下载遥控器是传统万能遥控器的升级产品. 它们的主要区别是遥控器数据源.万能遥控器本身包含所有的遥控器数据, 电脑下载遥控器的遥控数据是存储在电脑或服务器.所以, 电脑下载遥控器没有过时之风险.2) 软件电脑硬件需求:● CPU: 800MHZ 以上● RAM: 256M字节以上●硬盘, 4G 字节以上●操作系统:Win 2000, Windows XP, Windows Vista, Win 7, Win 8.3) 性能●强大的数据库−系统数据库,经常更新系统数据库包含全球TV, DTT, SAT, DVD, VCR, HIFI, 空调等电器品牌、型号和对应遥控器数据.−上传数据库(共享数据库)全球客户上传的遥控器数据.●强大的遥控码管理−从原始或其他遥控器学习采集遥控数据.−遥控码搜索 --- 键码搜索, 发码搜索和学习搜索.−单个按键码独立编辑功能.●低功耗− 3 *1.5V 电池供电. 可正常使用1-2年.●遥控距离− >8m 在同一使用空间内(无遮挡).2. 遥控器这种遥控器外观和万能遥控器和学习遥控器相似, 不同点是没有设置键(用于设置万能遥控器内的代码或学习遥控器的学习设置.) 它的特点是任何位置的按键可以任意设置任何键码, 弥补了万能遥控器的不足, 又比学习遥控器操作简单方便. 因为学习结果保存在电脑软件里,一次学习可以反复使用. 从而实现遥控器的自我定义。
Sunplus SPCE061A 微控制器如何编程与我的第一个程序为什么要编程程序,是人们为了告诉微处理器要做什么事而编写的,微处理器能够理解的一串指令,有时也叫代码、程序。
语言的意义电脑软件都是用各种电脑语言(也叫程序设计语言)编写的。
最底层的叫机器语言,它由一些0和1组成,可以被某种电脑直接理解,但人就很难理解。
上面一层叫汇编语言,它只能由某种电脑的汇编器软件翻译成机器语言程序,才能执行。
人能够勉强理解汇编语言。
人常用的语言是更上一层的高级语言,比如C, Java, Fortran, BASIC。
这些语言编写的程序一般都能在多种电脑上运行,但必须先由一个叫作编译器或者是解释器的软件将高级语言程序翻译成特定的机器语言程序。
SPCE061A的编译器与语言 SPCE061A的编译器内核是GCC编译器,现在已升级到“unSP IDE1.16.1”。
unSP IDE 1.16.1能很好的支持C语言和汇编语言,并提供了良好的用户界面。
C语言和汇编语言在开发单片机时各有哪些优缺点?汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。
其主要优点是占用资源少、程序执行效率高。
但是不同的CPU,其汇编语言可能有所差异,所以不易移植。
C语言是一种结构化的高级语言。
其优点是可读性好,移植容易,是普遍使用的一种计算机语言。
缺点是占用资源较多,执行效率没有汇编高。
如何编程熟悉SPCE061A各模块的基本功能。
熟悉常用的一些汇编指令和伪指令。
善于总结。
为更好的理解编程过程,下面将结合遥控的编解码思路和设计流程进行讲解。
遥控的编解码思路和设计流程<1> 一、问题分析:一般来说完整的遥控码分为头码、地址码、数据码和校验码四个组成部分。
头码根据不同的厂家各不相同,地址码和数据码都由逻辑“1”和逻辑“0”组成。
编码的设计目的,就是按照编码规则发送不同的码值。
遥控的编解码思路和设计流程<2>二、分解问题任何智能系统都是由很多分支系统组成,首先我们要善于分析和理清各分支系统之间的关系。
基于凌阳单片机的语音控制小车摘要声音控制功能是凌阳单片机的一个特色,通过这个功能更能够实现普通单片机无法实现的一些任务,本设计是通过凌阳单片机的语音处理功能实现语音控制小车的前进和方向,并让小车作出相应的回答,设计系统主要包括三大部分,其中两部分为硬件部分:凌阳单片机的小系统,包括I/O端口、DAC转换、ADC转换等等;另一部分是控制板部分,用于控制电机的旋转方向;第三部分为软件部分。
关键词:语音控制小车;声控;小车;SPCE061ABased on Ling Y ang monolithic integrated circuit's voice control carAbstractThe phonic control function is a Ling Y ang monolithic integrated circuit's characteristic, suffices some duties which through this function realizes the ordinary monolithic integrated circuit to be unable to realize, this design is realizes the voice control car's advance and the direction through the Ling Y ang monolithic integrated circuit's pronunciation processing function, and lets the car make the corresponding reply, the design system mainly includes three major parts, two parts for hardware part: The Ling Y ang monolithic integrated circuit's small system, including the I/O port, DAC transforms, ADC transformation and so on; Another part is the control panel part, uses in controlling electrical machinery's hand of rotation; The third part is the software part.Key word: V oice control car;V oice control;Car;SPC061A目录1 引言 (1)2方案论证 (2)2.1方案论证 (2)3语音控制小车设计要求 (3)3.1功能要求 (3)3.2备注 (3)3.2.1 参数说明 (3)3.2.2 注意事项 (3)3.3扩展功能 (3)4 凌阳芯片的介绍 (4)4.1SPCE061A芯片的特点及其功能 (4)4.2SPCE061A芯片内核结构 (5)5硬件系统设计 (6)5.1系统的总体方案 (6)5.1.1 16位微处理器芯片的外围结构 (6)5.261板的各部分硬件模块 (7)5.2.1 麦克录音输入及AGC电路 (7)5.2.2 数摸转换电路 (7)5.2.3 按键,LED和复位电路 (8)5.2.4 电源电路 (8)5.2.5 下载线接口电路和在线调制电路 (9)5.2.6 16位微处理器的连接电路 (9)5.3车体介绍 (10)5.4小车的行走原理 (10)5.5控制电路原理板 (11)5.6控制电路原理 (12)5.6.1 后轮电机驱动电路原理 (12)5.6.2 前轮电机驱动电路原理 (13)6 系统软件设计 (14)6.1系统主程序设计流程图 (14)6.2语音识别 (15)7硬件制作及系统调试 (17)7.1硬件制作 (17)7.2调试和下载程序 (17)7.3调试小车 (17)7.4初试小车 (17)7.5重新调试 (18)结束语 (19)致谢 (20)参考文献 (21)附录附录1 电路原理图(61板)附录2 电路原理图(控制板)附录3 元件清单附录4 PCB图附录5 小车图片附录6 主控制源程序基于凌阳单片机的语音控制小车1 引言语音控制技术是一门新兴技术,可以通过语音直接控制电子产品,摆脱了遥控器的束缚。
USB 下载器在使用前需要安装驱动程序:
1、将USB 下载器插入电脑的USB 接口,系统会出现下图的提示:
2、当出现“找到新的硬件向导”对话框时,选择“从列表或指定位置安装(高级)”选项,如下图所示,并点击“下一步”;
3、在光盘中找到“USB 下载器驱动”文件夹,并点击“下一步”;
指定“USB 下载器”所在位置
4、指定好驱动程序的路径后,系统开始安装驱动程序,如下图所示;
5、驱动程序安装好以后,系统给出安装成功对话框,点击“完成”。
USB驱动程序安装成功后,接下来需要安装单片机程序下载软件。
1、在光盘中找到“progisp166”文件夹,并运行“progisp166.exe”
2、点击“接受”;
3、选择需要安装单片机下载软件的“目标文件夹”,点击“安装”;
安装后,系统自动进入“PROGISP”软件,并在桌面上添加图标,如下图;
4、按照下图的方式,设置软件参数;
当选择“数据自动重载”时,只要“PROGISP”软件开着,只需要调入一次“*.HEX”文件,之后在修改程序后,无需再调入程序文件,而直接点击“自动”按钮即可。
切忌:不要选择“锁定芯片”,否则AT89S52芯片将不能再写入程序!
5、在“文件”中选择“调入Flash(F)”调入需要向单片机写入的程序,然后每次点击“自动”即可。
基于凌阳SPCE061A单片机的智能充电器的设计
别文群;王留芳
【期刊名称】《广东轻工职业技术学院学报》
【年(卷),期】2006(005)001
【摘要】基于单片机SPCE061A控制电路,研制了一种电动车用智能充电器.详细叙述了硬件电路的工作原理、SMBus通信线路以及软件实现.实验结果表明:该充电器能正确监控和测量蓄电池状态,充电效果好,性能可靠,能减少充电损耗,延长蓄电池的使用寿命.
【总页数】3页(P9-11)
【作者】别文群;王留芳
【作者单位】广东轻工职业技术学院,教务处,广东,广州,510300;上海交通大学,上海,200030
【正文语种】中文
【中图分类】TM91
【相关文献】
1.基于凌阳SPCE061A单片机的语音导引系统的设计与总结报告 [J], 余彦霖
2.基于凌阳SPCE061A单片机的语音识别系统设计 [J], 刘萌;郑煊
3.基于凌阳SPCE061A单片机的智能小车的设计 [J], 吴荣芳;刘冀伟
4.基于凌阳SPCE061A单片机的音控小车的设计 [J], 郭娜娜;侯媛彬;王磊
5.基于凌阳SPCE061A单片机智能小车的设计 [J], 冉伟刚
因版权原因,仅展示原文概要,查看原文内容请购买。
USB下载线驱动安装方法
1.把USB下载线接到电脑上会自动弹出如下的窗口,选择“从列表或指定位置安装(高级)”项。
2.然后点击“下一步”,出现如下窗口。
选择“在搜索中包括这个位置”。
3.点击“浏览”,出现如下窗口,选择驱动所在的目录。
4.选择之后返回到如下窗口,点击“下一步”。
5.然后出现如下窗口,点击“浏览”。
6.选择驱动文件所在的位置。
7.完成安装。
USB下载线驱动使用方法
PROGISP软件界面如上图所示。
1.在“编程器及接口”栏选择“USBASP”选项。
2.在“选择芯片”栏选择你所使用的芯片类型。
3.点击“芯片识别”栏的“RD”来测试是否检测的到芯片。
如果检测不到会出现如下窗口。
(出现这种情况请找出原因)
4.然后点击“调入flash”,选择你所要烧写的程序。
5.最后点击“自动”。
本实验程序是凌阳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目前做了这么多实验,实验程序共享给大家!希望大家能够把单片机学好!^_^ ^_^ ^_^ ^_^ ^_^。
中国地质大学(武汉)机械与电子信息学院电子信息工程系毕业设计开题报告学生姓名:刘培权指导老师:胡志敏开题时间:2011年02月29日课题名称超声波倒车雷达撰写提纲:1)研究意义及背景;2)拟采用的方案;3)拟解决的主要问题一、研究意义及背景随着社会经济发展,汽车逐渐普及进入寻常百姓家庭,行车安全也成了各个车主最关心的问题。
驾驶员在行车过程中,需要密切关注路况及周围障碍,后视镜虽然给了驾驶员很大的帮助,但还是存在一定的视野死角,在泊车时这个问题表现得尤为突出。
为弥补这一缺陷,加装倒车雷达成了许多车主的选择。
倒车雷达,可以使泊车更轻松。
倒车雷达又称泊车辅助系统,是汽车泊车安全辅助装置,能以声音或者更为直观的显示告知驾驶员周围障碍物的情况。
超声波倒车雷达,采用超声波测距原理,一般由超声波传感器、控制器和显示器等部分组成。
驾驶者在倒车时,启动倒车雷达,在控制器的控制下,由装置于车尾的探头发送超声波,遇到障碍物,产生回波信号,传感器接收到回波信号后经控制器进行数据处理,判断出障碍物的位置,由显示器显示距离并发出警示信号,从面使驾驶者倒车时做到心中有数,使倒车变得轻松自如。
二、拟采用的方案1、方案概述选用spec061A单片机,利用其具备的单芯片语音功能,串接三个超声波测距模组,组成一个超声波测距倒车雷达系统。
2、设计要求:a)可以语音提示0.35-1.5m范围内的障碍物;b)利用3个LED二极管表示三个传感器范围是否有障碍物,障碍物越近,LED闪烁频率越高。
3、技术方案a)硬件设计:系统以spec061A单片机为核心,选用凌阳科技教育推广中心的spec061A 精简开发板,三个超声波测距模组依次排布,组成线阵的传感器阵列;另外,接有一块CD4052模拟开关制作的转接板,发光二极管显示模块。
系统组成如图:b)软件设计:根据系统工作的主要流程是在不断地对三组超声波沿距模组进行测距操作,并将第次测距的结果进行处理,心更新对就的LED显示频率设置,心及在符合要求的条件下进行语音提示播报,系统主程序流程图如下所示:程序运行时,系统先调用初始化函数,初始化系统设置及超声波测距设置,再调用测距函数进行一次测距操作,函数返回测量结果。