嵌入式技术基础与实践.doc

上传人:飞****2 文档编号:60947842 上传时间:2022-11-19 格式:DOC 页数:14 大小:3.52MB
返回 下载 相关 举报
嵌入式技术基础与实践.doc_第1页
第1页 / 共14页
嵌入式技术基础与实践.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《嵌入式技术基础与实践.doc》由会员分享,可在线阅读,更多相关《嵌入式技术基础与实践.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 课 程 设 计 报 告课程设计名称:嵌入式技术基础与实践 系 别 : 三 系 学 生 姓 名: 班 级: 09通信工程 学 号: 成 绩: 指 导 教 师: 王志超 开 课 时 间: 2012-2013学年 1 学期 第一章 嵌入式系统的需求分析HC08和HCS08单片机是Freescale(飞思卡尔)公司于2000年前后推出的新一代单片机。HC08、HCS08系列单片机使用相当的广泛,集成度高不需外扩,减少外扩带来的干扰,符合嵌入式单片机的要求,性能稳定、性价比高。飞思卡尔半导体是全球领先的半导体公司,为汽车、消费、工业、网络和无线市场设计并制造嵌入式半导体产品。在全球30多个国家和地区拥

2、有设计、研发、制造和销售机构。飞思卡尔半导体是全球最大的半导体公司之一。Freescale公司(2004年7月之前称为Motorola公司的半导体事业部)为全球提供的各种MCU已 突破170片,广泛用于各大品牌的产品:摩托罗拉手机、索尼电子、惠尔普电器、罗技(Logitech)键盘与鼠标、美国力健(Lifefitness)心血管与力量训练器材、思科(Cisco)路由器、Bose音响、Trane供暖与制冷设备以及奔驰、宝马、福特、现代和通用汽车。然而我国国内大多数“熟悉”单片机的人却不知晓这一底细,国内的微控制器市场从20世纪80年代开始,一直由Intel公司推出的MCS-51占据着绝对的统治地

3、位。人们又逐渐发现,从进口的电子信息类产品,特别是各类通信产品中,其中有MCU的,多数使用了Freescale的产品,而不是MCS-51。因此学习Freescale HCS08是非常重要,本报告描述一个Freescale HCS08单片机实验系统软件实例,通过各个不同模块,验证单片机各模块工作是否正常。可以独立工作观察MCU工作是否正常,也可以通过串行通信与PC机连接,实现与PC机的相互控制。 嵌入式系统设计的学习,首先把嵌入式系统软件与硬件基础打好了,再根据实际需要,选择一种实时操作系统(RTOS)进行学习实践。使用RTOS也是视实际情况而定,使用RTOS适合实时多任务多线程的情况。 在此设

4、计,MCU与PC机间通信的数据是几种不同外设,为了区分,需给不同的外设数据前标识不同的标识符,用于确定不同外设的数据。编程之前确定每个模块硬件正常与否,测试方法参考“实验指导”教材相应章节。编程设计方法:MCU端每个模块程序编写完成后,及时用串行通信软件通过SCI连接PC机调试MCU端程序。MCU的每个模块调试成功后,再使用高级语言开发编写PC端的相应通信模块程序,直至综合实验系统完全实现。 完成普通I/O口输入输出、驱动LCD显示、串行通信数据接收与发送、定时器计时、PWM、键盘输入、AD转换、FLASH读写模块等功能。第二章 系统构成2.1 硬件原理图图C-1 系统硬件原理图(最小系统)系

5、统使用MC9S08AW60 MCU 为核心,其最小原理图见图C-1 所示。 (1)用 PTC 口的 2 引脚连接1 号小灯; (2)用 PTD 口的 1 引脚连接拨码开关; (3)用 PTE 口的 0 引脚、 1 引脚分别连接SCI 串行通信的发射口、接收口; (4)用 PTA 口的 07 引脚连接LCD 的数据口, PTC 口的 4、6 引脚、 PTF 口的 6 引脚连接LCD 的控制引脚RS、RW、E,共 3 个引脚驱动LCD 显示; (5)用 PTD 口的 2、3、7 引脚以及 PTG 口的 04 引脚共 8 个引脚连接键盘;其中 PTD 口的 2、3、7 引脚和 PTG 口的 4 引脚

6、定义为输入线, PTG 口的 03 引脚定义为输出线,利用扫描方式获取健值; (6)用 PTD 口的 6 引脚定义为AD 采样线,MCU 读取该引脚,显示对象的量化值; (7) PTE 口的 2 引脚输出PWM 波,控制连接在该引脚小灯的亮度。 具体连线方式见图C-2。 图C-2 系统连线图2.2 软件结构图 软件包括MCU端与PC端2部分组成,下面分别介绍2部分软件的结构。2.2.1 MCU端软件结构 图C-3 MCU端软件结构图 根据需求分析,选择MCU端所需资源,MCU可以开关控制、小灯显示、LCD显示、LED显示、键盘输入、AD转换、定时器溢出计时、产生PWM波、FLASH读写、SCI

7、串行通信数据发送与接收等。 MCU端软件结构图,如图C-3所示。 硬件组建的方法:测试所选择的每个模块,成功一个添加一个,同时做好测试软件的备份,并注释日期。模块验证的方法见各实验的章节。 2.2.2 PC端软件结构 图C-4 PC端软件结构图 PC端使用C#编程,以串行通信为核心,使用串行通信与MCU进行通信实现,对MCU的控制和对MCU反馈信息进行处理,并反映在用户界面上。 根据MCU提供的功能,编写程序匹配其工作。PC端程序包括串行通信数据输入输出、开关小灯控制、AD转换数据显示、Time(定时器)、PWM控制、FLASH读写、键盘数据显示模块。软件结构图如图C-4所示。 第三章 MCU

8、方的程序设计 本章节将详细介绍MCU端的主程序和中断程序,利用各个模块完成本实验的各个功能,其中包括串行通信数据输入输出、LCD显示、键盘、AD转换、PWM、定时器计时、FLASH读写。 程序基于C语言编写,使用面向硬件对象模块封装的思想。面向硬件对象模块的封装是对系统中的每个硬件对象建立相对应的头文件和硬件驱动程序文件。头文件中主要包含该硬件的接口和相应的寄存器设置参数,硬件驱动程序文件主要是对该硬件的驱动,同时标注出各个功能模块的功能,入口,出口和堆栈深度。所以编程人员可以不用了解模块的编程方法,即可利用这些模块程序。于是剩下的编程工作只是面向总体各模块配合以及PC显示与控制的主程序和中断

9、程序的编程。硬件模块封装屏蔽了具体硬件对象的差异性,提高了程序的移植性和复用性。 各个模块的驱动程序见随书光盘。 3.1 串行通信数据接收与发送 interrupt void SCI1_Recv(void) uint8 f,i,flag; /标志是否接受到数据 DisableInterrupt(); /禁止总中断 /接收32个字节的数据 f = SCIReN(1,1, SerialBuff); /若收到数据,则发送接到的数据 if (f = 0) if(SerialBuff0=130 & SerialBuff0=137 ) flag=SerialBuff0; if(flag=130) /lig

10、ht模块 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 = SCIRe1(1,&i); else if(flag=135)/LED标志 /接收4个字节的数据 i=SCIReN(1,4, LE

11、DBuff); 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端的定时器 1s 产生1次中断实现计时功能,MCU初始时钟的设定通过PC端发送而确定,MCU内部的定时器 1 实现计时,该定时器同时用作产生PWM波。 定时器溢出中断服务程序: inter

12、rupt void isrT1Out(void) INT8U temp; DisableMCUint(); /禁止总中断 SecAdd1(); /1s到,递增时,分,秒缓冲区的值 SCIsend1(132); /发送串口的标志 SCIsendN(3, time); temp = T1SC; /1.读取定时器1状态和控制寄存器T1SC T1SC &= (1 TOFBit); /2.向定时器溢出标志位TOF写0 EnableMCUint(); /开放总中断 3.3 主程序 主程序是完成系统各模块的初始化,完成各模块控制工作。 /主函数 void main() /仅在本函数中用 uint8 i; u

13、int8 flag; uint8 ma; uint8 LCDi=0; /定义初始显示缓存并赋初值 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

14、_PORT,Light_Run,Light_OFF); /(2) 灯的引脚初始化 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,表示没有命令发送过来 Lig

15、htBuff = 3; /(3) 数码管状态初始化 LEDBuff0=8; 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

16、,130); /发送串口的标志 SCISend1(1, LightBuff); 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); pw

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

18、 = 0; tmrStr = string.Empty; commandType = 0; else if (commandType = 133) /PWM测试模块 /高端不作处理仅留一接口在此 else if (commandType = 134) /键盘测试模块 byte kbKey = data; for (byte j = 0; j = 4) ledCount = 0; else if (commandType = 137) /AD转换模块 int ADValue = data; SCIUpdateRevtxtbox(tbADValue, ADValue.ToString(); 4.2

19、 PC端其它发送以及处理子程序 PC机与MCU端通信,可以将PC端控制指令发送给MCU端,从而控制MCU相应模块的工作状态。其他子程序:private void btnTimeUpdate_Click(object sender, EventArgs e)private void btnLCDSend_Click(object sender, EventArgs e)private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)private void cbADNum_SelectedIndexChanged(object s

20、ender, EventArgs e)private void btnFlashSend_Click(object sender, EventArgs e)private void btnFlashRead_Click(object sender, EventArgs e)private void gbKeyBoard_Click(object sender, System.EventArgs e)private void btnSwKey_Click(object sender, EventArgs e)private void cbADNum_SelectedIndexChanged(object sender, EventArgs e)private void LEDOpr(byte i, byte j, string str)private void btnLED_Click(object sender, EventArgs e)public static bool GetBit(byte b, int index)第五章 心得体会

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁