凌阳单片机
1_凌阳单片机课件 ch1

2019/12/19
113 2
第一章结束!
2019/12/19
14
2019/12/19
45
1.2 单片机系统的应用
工业 控制 领域
数据 采集 领域
智能 仪表 及接口
2019/12/19
各类 功能 模块
56
1.3 凌阳单片机简介
1.3.1 8位单片机
凌阳8位单片机的CPU内核均为6502兼容型。凌阳8位单片机 分为四种:SPL系列,SPC系列,SPF系列以及其它系列。
2019/12/19
1121
1.4 内容安排
本书分为上下两篇,第2章到第5章为上篇,第6章到第10章为 下篇,第11章是实验指导。上篇主要讲凌阳单片机的原理和集成 开发;下篇主要是凌阳单片机的应用。
上篇分别介绍SPCE061A和SPMC75系列凌阳单片机的硬件结 构、指令系统、集成开发环境IDE和精简开发板-61板。下篇分 为以SPMC75F2413A单片机为核心的或以SPCE061A为核心的侯 媛彬教授指导的三篇本科优秀毕业设计论文、凌阳单片机在大学 生电子竞赛中的应用、凌阳单片机在电子产品中的应用实例。其 中优秀毕业设计论文一篇“模糊全自动微机控制模拟洗衣机设计” 获陕西省自动化学会2008年首届本科毕业设计大赛一等奖、另一 篇“基于嵌入式煤矿浴室三维定位模拟系统设计与制作” 2011 年获陕西省自动化学会第四届本科毕业设计大赛特等奖。
2019/12/19
12
单片机主要特点: 可靠性高
性价比高
体积小易于构成 嵌入式系统
单片机特点
完备的软硬件 开发手段
专用性强
选择灵活
2019/12/19
23
1.1.2 单片机的发展
凌阳单片机课程设计指导

凌阳单片机课程设计指导一、课程目标知识目标:1. 理解凌阳单片机的基本组成、工作原理及功能特点;2. 学会使用凌阳单片机的开发环境,掌握其编程语言;3. 掌握凌阳单片机在嵌入式系统中的应用。
技能目标:1. 能够独立设计简单的基于凌阳单片机的嵌入式系统;2. 能够编写、调试凌阳单片机的程序,实现基本功能;3. 能够运用所学知识解决实际问题,提高创新实践能力。
情感态度价值观目标:1. 培养学生对单片机技术的兴趣和爱好,激发学习热情;2. 培养学生的团队协作精神,提高沟通与交流能力;3. 增强学生的自信心,培养勇于克服困难、不断进取的品质。
课程性质:本课程为实践性较强的课程,以学生动手实践为主,结合理论讲解,培养学生对单片机技术的应用能力。
学生特点:学生具备一定的电子技术基础和编程能力,对单片机有一定了解,但实际操作经验不足。
教学要求:教师需结合学生特点,以实例教学为主,注重理论与实践相结合,引导学生主动参与,提高学生的动手实践能力。
教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的达成。
通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高学生的综合素质。
二、教学内容根据课程目标,教学内容分为以下三个部分:1. 凌阳单片机基础知识- 章节一:单片机概述- 单片机的定义、分类及发展历程- 凌阳单片机的特点及应用领域- 章节二:凌阳单片机硬件结构- 内部结构、外部接口及功能模块- 存储器、时钟、定时器等硬件资源2. 凌阳单片机编程与开发- 章节三:编程语言与开发环境- 语法规则、编程技巧- 开发工具的使用及配置- 章节四:程序设计与调试- 基本指令、程序结构- 调试方法及技巧3. 凌阳单片机应用实践- 章节五:典型应用案例分析- 常见模块的接口与编程- 实际项目中的应用案例- 章节六:创新设计与实践- 学生自主创新设计项目- 动手实践,实现功能要求教学进度安排:1. 基础知识部分(4课时)2. 编程与开发部分(6课时)3. 应用实践部分(6课时)教学内容确保科学性和系统性,结合教材章节,循序渐进地组织教学,使学生在掌握理论知识的基础上,提高实践能力。
凌阳SPCE061A单片机原理及应用说明书

***如有印装问题可调换***
本社图书封面为激光防伪覆膜,谨防盗版。
前言
近几年来,“后 PC 时代”的提法不时见诸报端。863 计算机首席专家高文教授曾经说 过:所谓后 PC 时代,是英文 Pervasive Computing 的中文意译,Pervasive 的原意是普遍的、 蔓延的、渗透的,所以 Pervasive Computing 应译为渗透到各个方面的计算。因此,后 PC 时代是指计算机无处不在,将渗透到我们生活的方方面面。后 PC 时代的绝大多数计算机会 以非计算机的形式出现。例如,电视机、电冰箱、机器人、数控设备等,其中心控制部件 是计算机,但它几乎都是以嵌入式系统的形式存在的,而不是像 PC 机一样摆放在计算机工 作台上的。作为嵌入式系统主要部件的单片机已成为一个重要的研究领域。
中国版本图书馆 CIP 数据核字(2003)第 105077 号
策 划 陈宇光
责任编辑 曹华 陈宇光
出版发行 西安电子科技大学出版社 西安市太白南路 号
电话
邮编
经 销 新华书店
印 刷 西安兰翔印刷厂
版次
年 月第 版
年 月第 次印刷
开本
毫米× 毫米
印张
字数
千字
印 数~ 册
定价
元
·
XDUP 1592001-1
转换
i
4.4.2 A/D 转换器设置............................... 62 4.4.3 A/D 转换器的物理性能 ................... 63 4.5 DAC 音频输出........................................ 66 4.5.1 硬件组成.......................................... 66 4.5.2 寄存器设置 ...................................... 67 4.6 串行设备输入/输出端口 SIO.................. 68 4.6.1 寄存器设置 ...................................... 69 4.6.2 应用举例.......................................... 70 4.7 通用异步串行通信口 UART................... 72 4.7.1 UART 数据帧格式........................... 72 4.7.2 工作寄存器设置............................... 72 4.8 工作方式 ................................................ 76 4.8.1 睡眠方式.......................................... 76 4.8.2 低电压监测/低电压复位
凌阳61单片机使用指南

凌阳单片机资料使用指南1.1 初次接触单片机-使用《跟我学SPCE061A 单片机》\61教学与创新\2教材与教案\跟我学SPCE061A单片机《跟我学SPCE061A单片机》无论有没有学过单片机,都可以从里面学习到有关凌阳SPCE061A单片机的基础知识。
初学单片机的朋友,在学习时常会碰到些一时间无法理解的概念、原理等;对于这些不解,可以从微机原理、数字电路、模拟电路以及C语言编程类的书籍、资料中找到答案,假如之前没有学过这些知识呢?怎么办?其实不用太在意,最好找时间自己学习一下,对于初学者,最重要的是这些知识中的相关概念的理解,找一找,问一问,总会找到答案的。
当然,最好还是系统地去学,这样打好了基础,在往深层次发展时才不会感到步履艰难。
这就需要我们的学习下面的材料了!1.2 初次接触凌阳单片机-SPCE061A 30 课时PPT\61教学与创新\2教材与教案\SPCE061A教学30课时PPT 在这份PPT资料中,以图文、动画的形式向单片机爱好者展示SPCE061A的CPU特点、资源概况,各个硬件外设的工作机制以及使用方法,另外还介绍有关SPCE061A的开发工具介绍、汇编语言、极具特色的语音功能等等。
另外,这份PPT资料中,在每一页都写上了详尽的注释,在学习时留意看一下,会发现很多教材上所没有的东西的。
这个主要是提供给老师作为凌阳单片机教学和辅导来使用。
1.3 怎么样把凌阳单片机用起来呢?学以致用,学习单片机无非就是为了使用它。
很多同学学习单片机考试通过就算OK。
实际上我们认为这种观念是要不得的。
单片机绝不是一门等同于模电、数电等科的课程。
这是一种工具,是工具就要去用。
学过C语言,我们可以在单片机用C语言对硬件进行操作,来熟悉C语言的使用;学过PID算法、模糊控制,我们就可以在水温控制、电机控制等场合去体会控制算法对被控对象的影响;学过卷积(或内积)运算,我们就可以尝试编写软件滤波算法等。
SPCE061A是凌阳公司设计的一种16位单片机

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 非特定人语音识别使用本系统前根本不需要先学习,便能直接使用。
一套最佳的语音识别系统是不须经过学习便能进行语音识别,但通常辩识率都比较低。
另外以说话方式的连续是否又可分为非连续语音识别和连续语音识别。
对于非连续语音来说,识别所说的每一个字必须分开辨认;而连续语音识别可以一般自然流利的说话方式来进行人性化的语音识别,但由于关系到相连音的问题,很难达到好的辨认效果。
凌阳单片机的简介

第一章凌阳单片机简介1.1 单片机简介单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM,只读存储器ROM,多种I|O接口和中断系统,定时器,计数器等功能(可能还包括显示驱动电路,脉宽调制电路,模拟多路转换器,AD转换器等电路)集成在一块芯片上构成一个小而完善的计算机系统。
单片微型计算机简称单片机,是典型的嵌入式微控制器,常用英文字母的缩写MCU表示单片机,它最早是用在工业控制领域。
单片机有芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成复杂的而对体积要求严格的控制设备当中。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上,相当于一个微型的计算机,和计算机相比,单片机只缺少了I|O设备。
概括地讲:一个芯片就成了一台计算机。
它的体积小,质量轻,价格便宜,为学习应用和开发提供了便利条件。
同时学习是用单片机是了解计算机原理与结构的最佳选择。
1.2 凌阳公司简介全球第一大消费性芯片设计公司——凌阳科技,1990 年8 月成立于台湾。
凌阳科技的主要业务为研发、制造、销售高品质及高附加价值的消费性集成电路(IC)产品。
其主要产品包括:液晶IC、微控器IC、多媒体IC、语音、音乐IC 及各式ASICs,同时还提供高性能的外围电路,包括LCD、AGC、DTMF、A/D、D/A、UART、SPI、PCI、计数器和存储控制器等等。
2001 年凌阳科技在大陆隆重推出凌阳大学计划,计划内容包括:共建凌阳单片机实验室;支持大学采用61 板完成电子实习;支持大学采用61 板完成毕业设计等。
旨在提高在校生的动手能力,推动教学和新技术的同步发展。
1.3 凌阳 16 位单片机特点随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理、数据处理以及数字信号处理(DSP,Digital Signal Processing)等领域。
凌阳单片机

第1章SPCE061A 单片机简介1.1 凌阳16 位单片机随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理、数据处理以及数字信号处理(DSP,Digital Signal Processing)等领域。
凌阳的16 位单片机就是为适应这种发展而设计的。
它的CPU 内核采用凌阳最新推出的µ’nSP™(Microcontroller and Signal Processor)16 位微处理器芯片(以下简称µ’nSP™)。
围绕µ’nSP™所形成的16 位µ’nSP™系列单片机(以下简称µ’nSP™家族)采用的是模块式集成结构,它以µ’nSP™内核为中心集成不同规模的ROM、RAM 和功能丰富的各种外设接口部件,如图1.1所示。
图1.1 µ’nSP™家族的模块式结构µ’nSP™内核是一个通用的核结构。
除此之外的其它功能模块均为可选结构,亦即这种结构可大可小或可有可无。
借助这种通用结构附加可选结构的积木式的构成,便可形成各种不同系列派生产品,以适合不同的应用场合。
这样做无疑会使每一种派生产品具有更强的功能和更低的成本。
µ’nSP™家族有以下特点:‹ 体积小、集成度高、可靠性好且易于扩展第一章凌阳单片机简介2北阳电子内部技术资料2µ’nSP™家族把各功能部件模块化地集成在一个芯片里,内部采用总线结构,因而减少了各功能部件之间的连线,提高了其可靠性和抗干扰能力。
另外,模块化的结构易于系统扩展,以适应不同用户的需求。
‹ 具有较强的中断处理能力µ’nSP™家族的中断系统支持10 个中断向量及10 余个中断源,适合实时应用领域。
‹ 高性能价格比µ’nSP™家族片内带有高寻址能力的ROM、静态RAM 和多功能的I/O 口。
另外,µ’nSP™的指令系统提供具有较高运算速度的16 位×16 位的乘法运算指令和内积运算指令,为其应用增添了DSP 功能,使得µ’nSP™家族运用在复杂的数字信号处理方面既很便利,又比专用的DSP 芯片廉价。
凌阳61单片机使用指南

凌阳61单片机使用指南凌阳61单片机使用指南第一章:简介1.1 概述本章介绍凌阳61单片机的基本信息,包括产品特点、硬件规格等。
第二章:硬件连接2.1 引脚定义本节介绍凌阳61单片机各个引脚的功能和使用方式。
2.2 电源接口本节介绍凌阳61单片机的电源接口及相关注意事项。
2.3 外部设备连接本节介绍凌阳61单片机与外部设备的连接方式和通信协议。
第三章:软件开发3.1 开发环境搭建本节详细介绍凌阳61单片机软件开发所需的开发环境搭建步骤。
3.2 编程语言选择本节介绍凌阳61单片机支持的编程语言,并分析其特点和适用场景。
3.3 开发工具使用本节介绍凌阳61单片机的开发工具的使用方法和常用功能。
3.4 编程实例本节提供凌阳61单片机的编程实例,帮助读者快速上手开发。
第四章:调试与测试4.1 调试工具本节介绍凌阳61单片机调试工具的选择和使用方法。
4.2 常见问题解答本节了一些常见问题,并提供解决方案和调试方法。
第五章:附件本文档涉及的附件包括:- 凌阳61单片机引脚定义图- 凌阳61单片机外部设备连接示意图- 凌阳61单片机开发环境搭建视频教程附件可以通过邮件(exampl)向我们索取。
法律名词及注释:1.单片机:是一种集成电路中的集成块,由一个处理器核心、存储器和各种周边设备组成的微型计算机。
2.编程语言:用于编写计算机程序的一种形式化语言,用来精确地描述计算机操作的步骤。
3.通信协议:设备之间进行数据交换和通信时所约定的规则和格式,包括物理层传输、数据之间的转换和通信协议的解释等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一熟悉’nSP™ IDE环境下的汇编程序和C程序的编写1、实验目的熟悉汇编程序和C程序的编写。
编译程序,软件调试,观察并跟踪其结果,查看各个寄存器状态。
2、实验设备装有WINDOWS操作系统以及SunPlus IDE仿真开发环境的PC机一台;ì‘nSP™十六位单片机实验板及扩展板。
3、实验原理参照SPCE061A单片机教材和实验指导书熟悉凌阳单片机的开发环境。
4、实验步骤1) 将µ’nSP™IDE 打开后,建立一个新工程。
2) 在该项目的源文件夹(SOURCE FILES)下建立一个新的汇编语言文件。
3) 编写汇编代码和C程序。
4) 编译程序,软件调试,观察并跟踪其结果,查看各个寄存器状态,等等。
5、实验代码流程图:1)汇编程序代码:.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;2)C程序代码:int main(){int i, Sum=0;for (i=0;i<=100;i++)Sum = Sum + i; // Sum 是累加的结果while(1){ }; // 程序死循环} // 用变量Watch 窗口看Sum 的值6、实验结果及分析1)汇编程序结果按编译程序,点击图标就可以在光标所在地设置断点;点击图标就可以消除设置的断点,点击运行程序,可以打开watch窗口,查看变量的值,可以看寄存器的值。
Watch窗口:各寄存器的值如下:2)C程序结果Watch窗口:各寄存器的值:并了解到了C语言和汇编编程的区别和各自的优缺点。
实验二键盘与二极管实验1、实验目的通过本实验熟悉SunPlus SPCE061A单片机的I/O,定时器的使用方法。
中断系统的使用。
熟悉IDE开发环境的使用。
2、实验设备装有WINDOWS操作系统以及SunPlus IDE仿真开发环境的PC机一台;ì‘nSP™十六位单片机实验板及扩展板。
3、实验原理通过键盘扫描获得键值后分别控制二极管的亮灭;使用定时器产生不同的显示模式。
4、实验步骤1) 连接PC机与SunPlus061A仿真板,连接实验板与仿真板;2)运行IDE开发环境程序;建立新工程;3)往新工程里添加C文件,编写主程序框架;往工程里添加ASM文件,编写汇编子程序;4)往新工程中添加中断处理程序;添加头文件(hardware.inc等);5)程序编译调试,观察运行结果,寄存器状态等;脱机运行。
要求:对于每个不同的按键,分别有下列响应:1.全亮;2.逐个轮流点亮;3.交替闪亮;4.其他。
5、实验代码流程图:main.c:#define P_IOA_Data (volatile unsigned int *)0x7000#define P_IOA_Buffer (volatile unsigned int *)0x7001#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_Buffer (volatile unsigned int *)0x7006#define P_IOB_Dir (volatile unsigned int *)0x7007#define P_IOB_Attrib (volatile unsigned int *)0x7008#define P_Watchdog_Clear (volatile unsigned int *)0x7012extern unsigned GetKey(void);void Delay(){ //延时子程序unsigned int i;for(i=0; i<32768; i++){*P_Watchdog_Clear=0x0001; //清WatchDog}}int main(){unsigned Key = 0x0000,a=0x0055,b=0x00ff;unsigned LedControl = 0x0001;unsigned Key_next=0x0000;*P_IOA_Dir = 0x00ff; //设置A口低8位为同向低输出,高8位为同向上拉输入*P_IOA_Attrib = 0x00ff;*P_IOA_Data = 0xff00;while(1){Key = GetKey(); //取键值Key = Key >> 8; //取LED显示初值if (Key!=0)Key_next=Key;switch(Key_next){case 0x0000:break;case 0x0001: //第一个键,全亮*P_IOA_Data=0x00ff;Delay();break;case 0x0010://第五个键,循环亮*P_IOA_Data = LedControl; //送数据到A口LedControl = LedControl << 1;if(LedControl > 0x00FF)LedControl = 0x0001;Delay();break;case 0x0004://第三个键,一排排亮*P_IOA_Data=a;Delay();a=a^0x00ff;break;case 0x0008://第四个键,全亮和全灭*P_IOA_Data=b;Delay();b=b^0x00ff;break;}}}key.c(获取键函数):#define P_IOA_Data (volatile unsigned int *)0x7000#define P_IOA_Buffer (volatile unsigned int *)0x7001#define P_IOA_Dir (volatile unsigned int *)0x7002#define P_IOA_Attrib (volatile unsigned int *)0x7003#define P_Watchdog_Clear (volatile unsigned int *)0x7012#define KEY_ALL 0xff00 //使用IOA8~IOA15作为键盘输入口unsigned GetKey(void){unsigned KeyValue;//初始化IOA的相应端口为上拉输入*P_IOA_Dir&=~KEY_ALL;*P_IOA_Attrib&=~KEY_ALL;*P_IOA_Buffer|=KEY_ALL;//等待有键按下,即有端口变为0while(KeyValue==0){KeyValue=(*P_IOA_Data & KEY_ALL)^KEY_ALL;*P_Watchdog_Clear=1; //清看门狗}KeyValue=(*P_IOA_Data&KEY_ALL)^KEY_ALL;//等待按键抬起while((*P_IOA_Data&KEY_ALL)^KEY_ALL){*P_Watchdog_Clear=1;}return KeyValue;}6、实验结果及分析按IOA0键,8个灯全亮且常亮;按IOA4键,8个灯按顺序逐个轮流循环点亮;按IOA2键,1,3,5,7灯一起亮,然后2,4,6,8灯一起亮,这样两排交替闪亮;按IOA3键,8个灯同时亮或同时灭(交替闪亮)。
该实验主要是通过扩展板上的按键来实现各个功能,并可以通过改变地址来更改按键,是通过key.c函数来实现。
实验三实时时钟实验1、实验目的1) 了解SPCE061 PLL 振荡器的功能及其应用。
2) 掌握系统时钟单元P_SystemClock的设置方法。
3) 熟悉系统时钟和CPU时钟频率的编程方法。
2、实验设备1) 装有µ‘nSP™ IDE仿真环境的PC机一台。
2) µ‘nSP™十六位单片机实验箱一个。
3、实验原理在SPCE061A内,P_SystemClock(写)($7013H)单元控制着系统时钟和CPU时钟。
通过设置该单元的B5-B7位可以改变系统时钟的频率(Fosc=20/24/32/40/49MHz);将第0-2位置为―111‖可以使CPU时钟停止工作,系统切换至低功耗的备用状态。
在备用状态下,通过设置该单元的B4位可以接通或关闭32KHz实时时钟。
而且通过设置该单元的B3位可以使32768Hz时钟处自动弱振或强振状态。
本实验通过选择不同Fosc信号频率或改变CPUClk频率来观察发光二极管亮灭的快慢。
4、实验步骤1)根据实验内容连接硬件电路并检查。
2)画流程图并编写程序代码。
main.c:#define P_IOA_Data (volatile unsigned int *)0x7000#define P_IOA_Buffer (volatile unsigned int *)0x7001#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_Buffer (volatile unsigned int *)0x7006#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_SystemClock (volatile unsigned int *)0x7013#define C_FoscCLK_20 0x00; //Fosc=20.480MHz #define C_FoscCLK_24 0x20; //Fosc=24.576MHz #define C_FoscCLK_32 0x40; //Fosc=32.768MHz #define C_FoscCLK_40 0x60; //Fosc=40.960MHz #define C_FoscCLK_49 0x80; //Fosc=49.152MHz #define CPUCLK_Fosc 0x00; //CPUClk选Fosc#define CPUCLK_Fosc2 0x01; //CPUClk选Fosc/2 #define CPUCLK_Fosc4 0x02; //CPUClk选Fosc/4 #define CPUCLK_Fosc8 0x03; //CPUClk选Fosc/8 #define CPUCLK_Fosc16 0x04; //CPUClk选Fosc/16 #define CPUCLK_Fosc32 0x05; //CPUClk选Fosc/32 #define CPUCLK_Fosc64 0x06; //CPUClk选Fosc/64extern unsigned GetKey(void);void Delay(){ //延时子程序unsigned int i;for(i=0; i<32768; i++){*P_Watchdog_Clear=0x0001; //清WatchDog }}void Led(){unsigned a = 0x00FF; //LED亮*P_IOA_Data= a;Delay();a = 0x00; //LED灭*P_IOA_Data= a;Delay();}int main(){unsigned Key = 0x0000,r1;unsigned Key_next=0x0000;*P_IOA_Dir = 0x00ff; //设置A口低8位为同向低输出,高8位为同向上拉输入*P_IOA_Attrib = 0x00ff;*P_IOA_Data = 0xff00;while(1){Key = GetKey(); //取键值Key = Key >> 8; //取LED显示初值if (Key!=0)Key_next=Key;switch(Key_next){case 0:r1=C_FoscCLK_20;break;case 1:r1=C_FoscCLK_24;break; //Fosccase 2:r1=C_FoscCLK_32; break;case 4:r1=C_FoscCLK_40;break;case 8:r1=C_FoscCLK_49; break;}r1|=CPUCLK_Fosc8; //CPUClk*P_SystemClock=r1; //系统时钟选择设置,32768Hz时钟默认为自动弱振模式既B30为0Led();}*P_Watchdog_Clear=0x0001;}键盘扫描程序:#define P_IOA_Data (volatile unsigned int *)0x7000#define P_IOA_Buffer (volatile unsigned int *)0x7001#define P_IOA_Dir (volatile unsigned int *)0x7002#define P_IOA_Attrib (volatile unsigned int *)0x7003#define P_Watchdog_Clear (volatile unsigned int *)0x7012#define KEY_ALL 0xff00 //使用IOA8~IOA15作为键盘输入口unsigned GetKey(void){unsigned KeyValue;//初始化IOA的相应端口为上拉输入*P_IOA_Dir&=~KEY_ALL;*P_IOA_Attrib&=~KEY_ALL;*P_IOA_Buffer|=KEY_ALL;//等待有键按下,即有端口变为0while(KeyValue==0){KeyValue=(*P_IOA_Data & KEY_ALL)^KEY_ALL;*P_Watchdog_Clear=1; //清看门狗}KeyValue=(*P_IOA_Data&KEY_ALL)^KEY_ALL;//等待按键抬起while((*P_IOA_Data&KEY_ALL)^KEY_ALL){*P_Watchdog_Clear=1;}return KeyValue;}6、实验结果:逐次按键IOA0∽IOA3,系统频率依次升高,Led灯的闪烁频率加快。