《嵌入式技术基础与实践》实验报告_第1页
《嵌入式技术基础与实践》实验报告_第2页
《嵌入式技术基础与实践》实验报告_第3页
《嵌入式技术基础与实践》实验报告_第4页
《嵌入式技术基础与实践》实验报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2009级计算机科学与技术学院嵌入式技术基础与实践实验报告飞思卡尔S08系列单片机实验系统综合实验的开发学号:姓名:袁杰2012年6月10日目录第1章 需求分析1第2章 系统构成22.1 硬件原理图22.2 软件结构图22.2.1 MCU端软件结构32.2.2 PC端软件结构4第3章 MCU方的程序设计53.1 串口数据接收与发送53.2 时钟控制53.3主程序9第4章 PC方程序控制134.1 串口数据接收与发送14第5章 总结与体会18第6章 使用说明19第1章 需求分析HC08和HCS08单片机是Freescale公司于2000年前后推出的新一代单片机。S08是HCS08的简写,表示增强

2、型HC08。从1993年起,Freescale公司为全球提供的8位微控制器已超过50亿片,然而我国国内大多数“熟悉”单片机的人却不知晓这一底细,国内的微控制器市场从20世纪80年代开始,一直由Intel公司推出的MCS-51占据着绝对的统治地位。人们又逐渐发现,从进口的电子信息类产品,特别是各类通信产品中,其中有MCU的,多数使用了Freescale的产品,而不是MCS-51。因此学习Freescale S08是非常重要,本报告描述一个Freescale S08单片机实验系统软件实例(Light.mcp),通过各个不同模块,验证单片机各模块工作是否正常。可以独立工作观察MCU工作是否正常,也可

3、以通过串口与PC机连接,实现与PC机的相互控制。设计时首先设计MCU与PC机间的标志符号位,用于确定双方通讯数据的含义。MCU端程序编写完成后,使用串口调试器观察输出数据,输入控制数据观察MCU工作状态。使用串口调试器调试成功后,再使用C#编写与其匹配的可视化程序。实现非联机验证最小系统、普通I/O口输入输出、驱动LCD显示模块功能。联机验证串口数据接收与发送、小灯测试、LCD及LED、时钟计时、PWM、键盘输入、AD转换、FLASH读写模块功能。第2章 系统构成2.1 硬件原理图图2.1 AW60硬件原理图(最小系统)系统使用MC9S08AW60型MCU为核心,AW60芯片的硬件最小系统包括

4、:电源及其滤波电路、复位电路、晶振电路及PLL电路滤波电路、写入器接口电路。其引脚包括:电源信号引脚、复位信号引脚、主要功能模块引脚和其它引脚。2.2 软件结构图软件包括MCU端与PC端2部分组成,下面分别介绍2部分软件的结构。2.2.1 MCU端软件结构图2.2 MCU端软件结构图根据需求分析,对需要测试的功能进行编程,MCU端包含LED小灯、LCD显示、开关量输入、键盘输入、AD转换、PWM、FLASH读写、串口数据发送与接受等模块。MCU端软件结构图,如图2.2所示。在脱离PC端控制的情况下LED小灯、LCD显示可以得到验证,如果需要验证键盘输入、AD转换与串口数据发送与接收必须与PC端

5、联机操作。2.2.2 PC端软件结构图2.3 PC端软件结构图PC端使用C#编程,以串口通讯为核心,使用串口与MCU进行通讯实现,对MCU的控制和对MCU反馈信息进行处理,并反映在用户界面上。根据MCU提供的功能,编写程序匹配其工作。PC端程序包括串口数据输入输出、开关状态反馈、小灯控制、AD转换数据显示、时钟、PWM控制、FLASH读写、键盘数据显示模块。软件结构图如图2.3所示。第3章 MCU方的程序设计本章节将详细介绍MCU端的各个功能模块,其中包括串口数据输入输出、LCD显示、键盘、AD转换、PWM、时钟计时、FLASH读写。程序基于C语言编写,使用面向硬件对象模块封装的思想。面向硬件

6、对象模块的封装是对系统中的每个硬件对象建立相对应的头文件和硬件驱动程序文件。头文件中主要包含该硬件的接口和相应的寄存器设置参数,硬件驱动程序文件主要是对该硬件的驱动,同时标注出各个功能模块的功能,入口,出口和堆栈深度。这样做剩下的编程工作就只是面向变量和PC的编程,屏蔽的具体硬件对象的差异性,提高了程序的移植性和复用性。3.1 串行通信数据接收与发送MCU端使用串口中断,实现对串口数据的接收与发送。串口是MCU与PC通讯的唯一通道,在串口中断处理子程序中,将处理由PC端发送的控制指令与数据。标志位确定PC端发送指令的类型,并加以处理,使用MCU内部标志位确定所需要做的工作,在中断结束后使用主程

7、序完成相应操作。串口中断处理程序:/isrSCIre:接收中断处理函数-*/功能:接收1个字节数据, 发送接到的数据 */ 总中断关闭,但是接收标志还是有,则直接识别缓冲区,就取走就行。 */参数:无 */返回:无 */内部调用函数:SCIreN, SCIsendN */-*interrupt void isrSCIre(void) uint8 f,i,flag; /标志是否接受到数据 DisableInterrupt(); /禁止总中断 /接收32个字节的数据 f = SCIReN(1,1, SerialBuff); /若收到数据,则发送接到的数据 if (f = 0) if(SerialB

8、uff0=130 & SerialBuff0=137 ) flag=SerialBuff0; if(flag=130) /light模块 LightBuff=SCIRe1(1,&i); else if(flag=131) /LCD标志 /连续接收可以,代码如下 LCDLen=SCIRe1(1,&i); /LCD显示字符长度 SCIReN(1,LCDLen,ShowBuff);/LCD显示的内容 else if(flag=132)/时钟标志 /接收3个字节的数据 SCIReN(1,3, time); else if(flag=133) /LED标志 /pwm处理模块 pwmDutyPC = SC

9、IRe1(1,&i); else if(flag=135)/LED标志 /接收4个字节的数据 i=SCIReN(1,4, LEDBuff); if(i=0) SCISend1(1,135); SCISendN(1,4, LEDBuff); for(i=0;i4;i+) LEDBuffi+=0; else if(flag=137) /AD模块 chanelNum = SCIRe1(1,&i); else SCISendN(1,1, SerialBuff); EnableInterrupt(); /开放总中断3.2 时钟控制MCU端实现精度为1秒的时钟计时功能,可以通过PC端发送指令设定当前时间,

10、每秒通过串口发送时钟数据。使用MCU内部定时器0实现计时,定时器0同时作为PWM使用,所以内部需要解决冲突问题。中断服务中尽量减少其工作量,所以只对秒信号进行处理,其他计时工作使用主程序完成。 isrT1OV:定时器溢出中断处理函数:/isrT1OV:定时器1溢出中断处理函数-*/功能:以秒为最小单位计时,并清定时器1溢出标志位 */内部调用: */ SecAdd1:以秒为最小单位递增时,分,秒缓冲区的值 */-*interrupt void isrT1OV(void) uint8 temp; DisableInterrupt(); /禁止总中断 SecAdd1(time); /1s到,递增时

11、,分,秒缓冲区的值 SCISend1(1,132); SCISendN(1,3, time); temp = AW60_TPM_CSTR(2); /1.读取定时器1状态和控制寄存器T1SC AW60_TPM_CSTR(2) &= AW60_TPM_CSTR_TOF; /2.向定时器溢出标志TOF写0 EnableInterrupt(); /开放总中断 键盘中断处理函数:/isrKeyBoard:键盘中断处理函数-*/功能:识别按键并发送键值,把键值转换成对应的定义值,再从串口发送出去 */调用函数: */ (1)扫描法读取键值函数(KBscanN) */ (2)键值转为定义值函数(KBdef)

12、 */ (3)串行发送一个字节数据(SCIsend1) */ (4)键盘初试化(KBInit) */-*interrupt void isrKeyBoard(void) uint8 value; uint16 i; for(i=0; i1000; i+); DisableInterrupt(); /关总中断 DisableKBint(); /屏蔽键盘中断 value = KBScanN(10); /扫描键值,存于value中 if(value!=0xFF) SCISend1(1,134); SCISend1(1,KBDef(value);/键值转化为定义值并发送 KBInit(); /键盘初始

13、化键盘中断 EnableKBint(); /开放键盘中断 EnableInterrupt();/开总中断3.3主程序主程序作用是将系统初始化,并且根据标志处理各工作/-*/ 工 程 名: Light */ 程序描述: MCU综合实验,控制系统各个模块工作 */ 目 的: Freescale AW系列MCU C语言综合程序 */ 说 明: 包含串口数据输入输出、LCD显示、键盘、AD转换、PWM、时钟计时、FLASH读写等模块 */-苏州大学飞思卡尔嵌入式系统实验室2012年-*void main() /仅在本函数中用 uint8 i; uint8 ma; uint8 LCDi=0; /定义初始

14、显示缓存并赋初值 const uint8 DisPalyInit = Wait Receiving. Soochow 2010.09; LCDLen=0; chanelNum = 30; /为30,说明没有收到AD转换的客户端信息 pwmDutyPC =101; /1 关总中断 DisableInterrupt(); /禁止总中断 /1.1 芯片初始化 MCUInit(); /2. 模块初始化 SCIInit(1,SYSTEM_CLOCK,9600); /(1) 串口初始化 Light_Init(Light_Run_PORT,Light_Run,Light_OFF); /(2) 灯和蜂鸣器的引

15、脚初始化 KBInit(); /(3) 按键初始化 TPMinit(2); /(4) 定时器2初始化 LEDinit(); PWM(1,0,0x800,0);/定时器2通道0初始输出占空比为0周期为1s的PWM波 ADCInit();/AD初始化 /3. LCD显示初始化 LCDshow(uint8 *)DisPalyInit); /4. 内存初始化 /(1) 时分秒缓存初始化(00:00:00) time0 = 0; time1 = 0; time2 = 0; /(2) 小灯状态初始化3,表示没有命令发送过来 LightBuff = 3; /(3) 数码管状态初始化 LEDBuff0=8;

16、LEDBuff1=8; LEDBuff2=8; LEDBuff3=8; /5. 开放各模块中断 EnableSCIReInt(); /(1)开放SCI接收中断 EnableTimer(2); /(2)开放定时器1溢出中断 EnableKBint(); /6. 开放总中断 EnableInterrupt(); /主循环 while (1) if(LightBuff!=3) /不等于3表明PC机有命令发送过来,然后进行处理 Light_Change(Light_Run_PORT,Light_Run); SCISend1(1,130); /发送串口的标志 SCISend1(1,LightBuff);

17、 LightBuff = 3; if(LCDLen!=0) /接收在中断中进行 for(i=LCDLen;i32;i+) /为了满足32个字符 ShowBuffi=*; /LCD显示MCU从串口接收到的32个数据 LCDshow(uint8 *)ShowBuff); SCISend1(1,131); /发送LCD的标志 SCISendN(1,32, ShowBuff); /发回给PC机 LCDLen=0; if(pwmDutyPC101) PWM(1,0,0x800,pwmDutyPC); Delay(10); pwmDutyPC = 101; if(chanelNum30) ma = (ui

18、nt8)ADCAve(chanelNum, 50); SCISend1(1,137); SCISend1(1,ma); chanelNum = 30; LEDshow(LEDBuff); 第4章 PC方程序控制PC端程序以串口为核心,用户界面上划分多个区域,实现不同控制功能。PC端用户界面如图4.1,4.2所示(因为界面太大,分为2幅图片截取)。图4.1 PC端程序界面图4.2 PC端程序界面4.1 串口数据接收与发送串口接收数据子程序实现对于标志位的识别与处理,将MCU发送的数据进行分类,并且显示在用户界面上。/-* / * / 对 象:SCIPort * / 事 件:DataReceive

19、d * / 功 能:串口接收数据 * / 函数调用:(1)SCIReceiveData,串口接收函数 * / (2)SCIUpdateRevtxtbox,更新文本框中的内容 * / * / * / * /-* private void SCIPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) if (!SCIPort.IsOpen) this.TSSLState.Text = 串口没打开!; return; String str = String.Empty; bool Flag;/标记

20、串口接收数据是否成功 int len; /标记接收的数据的长度 /调用串口接收函数,并返回结果 Flag = sci.SCIReceiveData(SCIPort, ref PublicVar.g_ReceiveByteArray); if (Flag = true) /显示MCU端发来的数据,以便于调试 len = PublicVar.g_ReceiveByteArray.Length; /对于字符串形式,考虑到可能有汉字, /直接调用系统定义的函数,处理整个字符串 str = Encoding.Default.GetString(PublicVar.g_ReceiveByteArray);

21、 if (this.TbShowString.Text).Length 100) this.TbShowString.Text = string.Empty; this.TbShowDec.Text = string.Empty; this.TbShowHex.Text = string.Empty; else SCIUpdateRevtxtbox(TbShowString, str); /十进制和十六进制形式按字节进行处理 for (int i = 0; i = 130 & data 1 ? : : ) + (tmr = 3) SCIUpdateRevtxtbox(tbMCUTime, tm

22、rStr); tmrCount = 0; tmrStr = string.Empty; commandType = 0; else if (commandType = 133) /PWM测试模块 /高端不作处理仅留一接口在此 else if (commandType = 134) /键盘测试模块 byte kbKey = data; for (byte j = 0; j 16; j+) if (KBBoardj = (char)kbKey) kbj.Image = Image.FromFile(Application.StartupPath + .PicturesKeyDown.BMP); KBi = j; SCIUpdateRevtxtbox(tbKBShow, KBBoardj.ToString(); break; else if (commandType = 135) /LED测试模块 byte dtLED = data; for (byte j = 0; j =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论