嵌入式课程设计报告.doc

上传人:laozhun 文档编号:2393772 上传时间:2023-02-17 格式:DOC 页数:19 大小:3.32MB
返回 下载 相关 举报
嵌入式课程设计报告.doc_第1页
第1页 / 共19页
嵌入式课程设计报告.doc_第2页
第2页 / 共19页
嵌入式课程设计报告.doc_第3页
第3页 / 共19页
嵌入式课程设计报告.doc_第4页
第4页 / 共19页
嵌入式课程设计报告.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《嵌入式课程设计报告.doc》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告.doc(19页珍藏版)》请在三一办公上搜索。

1、 课 程 设 计 报 告课程设计名称:嵌入式技术基础与实践 系 别: 三系 学生姓名: 石亦哲 班 级: 08计本(2) 学 号: 080303223 成 绩: 指导教师: 张兵 开课时间: 2010-2011 学年 下 学期目 录第一章 系统概要.11.1系统背景11.2系统功能1第二章 系统硬件设计22.1 系统原理图22.2 单片机(MCU)模块.22.2.1 MC9S08AW60单片机性能概述22.2.2 内部结构简图32.3 串行通信模块32.3.1 MAX232引脚图32.3.2串行通信的电路原理42.4 液晶显示模块5第三章 系统软件设计63.1 MCU方(C)程序63.1.1串

2、行通信子程序93.1.2 LCD子程序12第四章 系统测试14第五章 总结展望155.1 总结155.2 展望15参考文献15第一章 系统概要1.1 系统背景此系统是飞思卡S08的MCU,AW60作为主控制器,由定时器模块和LCD显示模块这2个模块组合而成。其中的定时器模块是MCU中一个十分重要的组成部分,它不但有计数/定时功能,另外还有进行输入捕捉,模拟PWM等功能。而LCD作为电子信息产品的主要显示器件,相对于其他类型的显示部件来说也有其自身的特点,这些特点主要包括:(1)低电压微功耗;(2)平板型结构;(3)使用寿命长;(4)被动显示;(5)显示信息量大且易于色彩化;(6)无电磁辐射等,

3、而由这2个系统组成的电子钟也同时具备了相应的功能。1.2 系统功能LCD功能概述点阵字符型LCD是专门用于显示数字,字母,图形符号及少量自定义符号的液晶显示器。这类显示器把LCD控制器,点阵驱动器,字符存储器,显示体及少量的阻容元件等集成一个液晶显示模块。鉴于字符型液晶显示模块目前在国际上已经规范化,其电特性及接口特性是统一的,因此,只要设计出一种型号的接口电路,在指令上稍加修改即可使用各种规格的字符型液晶显示模块。AW60定时接口的功能概述S08系列的MCU定时器还具有输入捕捉,输出比较,PWM脉冲输出等功能,定时器的这些功能可以应用于不同的场合:利用输入捕捉测量脉宽,测量频率吗,输出特定的

4、波形,直接输出脉宽调度波(PWM);使用输入捕捉配合输出比较还可以用来输出同步波形以及用于延时。电子钟功能概述电子钟具有开关计时,定时,以及设定时间的功能,并可以通过LCD显示时间。第二章 系统硬件设计2.1 系统原理图该电路系统是飞思卡S08的MCU,AW60作为主控制器,由定时器模块和LCD显示模块这2个模块组合而成。定时器模块是MCU中一个非常重要的部分,它不仅有计数/定时功能,还能进行输入捕捉,模拟PWM等功能。LCD作为电子信息产品的主要显示器件,相对于其他类型的显示部件来说有其自身的特点。其连接如下图所示:2.2 单片机(MCU)模块2.2.1 MC9S08AW60单片机性能概述S

5、08是单芯片8位微控制器解决方案。MC9S08AW60/AW48/AW32/AW16是低成本、高性能8位微处理器单元(MCU)S08家族中的成员。家族中所有的MCU实用增强型S08核,且使用不同的模块、存储空间、存储器类型和封装类型。1.AW60系列主要常规模块和特点(1)最高达40MHz的CPU工作频率和20MHz的内部总线工作频率;时钟源选项包括晶振、谐振器、外部时钟或内部产生的时钟。(2)相比HC08CPU指令集,S08CPU增加了BUGND指令。(3)单线后台调试模式接口;增强的断点能力,允许单一的断点设置在线调试(在片内调试模块加了多于两个的断点)(4)内含32个中断/复位源;内含2

6、KB的片内RAM;内含60KB的片内在线可编程Flash存储器,带有块保护和安全选项。(5)可选的计算机正常操作(COP)复位;低电压检测与复位或中断;非法操作码检测与复位;非法地址检测与复位。(6)ADC:多达16个通道,10位A/D转换器与自动比较功能;两个串行通信接口SCI模块与可选的13位中断;一个串行外设接口SPI模块;集成电路互连总线I2C模块运行高达100kbps的最高总线负载;8引脚键盘中断KBI模块。(7)Timers:1个2通道和1个6通道16位定时器/脉冲宽度调制器模块。具有输入捕捉、输出比较、脉宽调制功能。2.2.2 内部结构简图1. 内部结构简图BDM6通道定时器/P

7、WMSCI1IICSIPLLGPIOJTAG2通道定时器/PWMSCI2DBGA/DKBI HCS08内核 CPURTI COP IRQ LVDBDC 存储器2KB RAM64KB Flash图2-1给出了AW60的内部结构框图,它对于我们理解和应用AW60MCU有重要作用,在学习了基本的应用方法后,应反过来熟悉这个内部结构图,以便更好的理解AW60MCU的基本原理。从内部结构框图可以看出,AW60主要有以下几个部分:S08CPU、存储器、定时器接口模块、定时器模块、看门狗模块、通用IO模块、串口通信模块(SCI)、串行外设接口(SPI)模块、IIC模块、A/D转换模块、键盘中断模块、时钟发生

8、模块、复位与中断模块等。2.3 串行通信模块2.3.1 MAX232引脚图在MCU中,若用RS-232总线进行串行通信,则需要外界电路实现电平转换。在发送端,需要用驱动电路将TTL点评转换成RS-232电平;在接收端,需要用接收电路将RS-232点评转换为TTL电平。电平转换器不仅可以由晶振管分立元件构成,也可以直接使用集成电路。目前使用MAX232芯片的较多,该芯片使用单一+5V电源供电实现电平转换。下图给出了MAX232的引脚说明。各引脚含义简要说明如下。Vcc(16脚):正电源端,一般接+5V。GND(15脚):地。Vs+(2脚):Vs+=2Vcc1.5V=8.5V。Vs-(6脚):Vs

9、-=2Vcc1.5V=11.5V。C2+、C2-(4、5脚):一般接1F的电解电容。C1+、C1-(1、3脚):一般接1F的电解电容。输入输出引脚分两组,基本含义如表6所示。在实际使用时,若只需要一路串行通信借口,可以使用其中的任何一组。表6 MAX232芯片输入输出引脚分类与基本接法组别TTL电平引脚方向典型接口232电平引脚方向典型接口11112输入输出接MCU的TxD接MCU的RxD1314输入输出连接到接口,与其它设备通过232相接2109输入输出接MCU的TxD接MCU的RxD87输入输出连接到接口,与其它设备通过232相接2.3.2 串行通信的电路原理从基本原理的角度看,串行通信接

10、口SCI的主要功能是:接收时,把外部的单线输入的数据变成一个字节的并行数据送入MCU内部;发送时,把需要发送的一个字节的并行数据转换为单线输入。为了设置波特率,SCI应具有波特率寄存器。为了能够设置通信格式、是否校验、是否允许中断等,SCI应具有控制寄存器。而要知道串口是否有数据可收、数据是否发送出去等,需要有SCI状态寄存器。当然,若一个寄存器不够用,控制与状态寄存器可能有多个。而SCI数据寄存器存放要发送的数据,也存放接受的数据,这并不冲突,因为发送与接收的实际工作是通过“发送移位寄存器”和“接收以为寄存器”完成的。编程时,程序员并不直接与“发送移位寄存器”和“接收移位寄存器”打交道,只与

11、数据寄存器打交道,所以MCU中并没有设置“发送移位寄存器和“接收移位寄存器”的映像地址。发送时,程序员通过判定状态寄存器的相应位,了解是否可以发送一个新的数据。若可以发送,则将待发送的数据放入“SCI数据寄存器”中就可以了,剩下的工作由MCU自动完成:将数据从“SCI数据寄存器”送到“发送移位寄存器”,硬件驱动将“发送移位寄存器”的数据一位一位地按照规定的波特率移到发送引脚TxD,供对方接收。接收时,数据一位一位地从接收引脚RxD进入“接收移位寄存器”,当收到一个完成字节时,MCU会自动将数据送入“SCI数据寄存器”,并将状态寄存器的相应位改变,供程序员判定并取出数据。2.4 液晶显示模块点阵

12、字符型LCD是专门用于显示数字、字母、图形符号及少量自定义符号的液晶显示器。这类显示器把LCD控制器、点阵驱动器、字符存储器、显示体及少量的阻容元件等集成一个液晶显示模块。鉴于字符型液晶显示模块目前在国际上已经规范化,其电特性及接口特性是统一的,因此,只要设计出一种型号的接口电路,在指令上稍加修改即可使用各种规格的字符型液晶显示模块。点阵字符型液晶显示模块的控制器大多数为日立公司生产的HD44780及其兼容的控制电路,如SED1278(SEIKO EPSON)、KS0066(SAMSUNG)、NJU6408(NER JAPANRADIO)等。字符型液晶显示模块的主要特点如下:161514131

13、21110090807060504030201Core2LCD_D7LCD_D6LCD_D5LCD_D4LCD_D3LCD_D2LCD_D1LCD_D0LCD_ELCD_RWLCD_RSVccGNDPTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTF6PTC6PTC4AW60MCU控制液晶显示接口接线图1.液晶显示屏是以若干5*8或5*11点阵块组成的显示字符群。每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。2.主控制电路为HD44780(HITACHI)及其他公司的兼容电路。从程序员的角度来说,LCD的显示接口与编程是面向HD44780的,只要了解HD44780的

14、编程结构即可进行LCD的显示编程。3.内部具有字符发生器ROM,可显示192种字符(160个5*7点阵字符和32个5*10点阵字符)。4.具有64字节的字符发生器RAM,可以定义8个5*8点阵字符或4个5*11点阵字符。5.具有64字节的数据显示RAM,供显示编程时使用6.标准接口特性,与MC9S08系列MCU容易接口。7.模块结构紧凑、轻巧、装配容易。8.单+5V电源供电(宽温型需要加-7V驱动电源)。9.低功耗、高可靠性。第三章 系统软件设计3.1 MCU方(C)程序Main.c:#include Includes.h#include SCI.h#include LCD.h#include

15、 time.huint8 g_time6;/在此添加全局变量定义void main(void) uint8 remember; uint8 g_DispalyInit=00:00:00; uint32 mRuncount=0; uint8 g_SCIFlag=0; DisableInterrupt(); /禁止总中断 /2 芯片初始化 MCUInit(); /3 指示灯初始化 TPMinit(TPM_NUM_1); LCDinit(); SCIInit(SCI_NUM_1,SYSTEM_CLOCK,9600); g_time0=0; g_time1=0; g_time2=0; g_time3=

16、0; g_time4=0; g_time5=0; remember=g_time5; EnableSCIReInt(); EnabletimerInt(TPM_NUM_1); EnableInterrupt(); SCISendN(SCI_NUM_1,8,g_DispalyInit); LCDshow(g_DispalyInit); while(1) g_SCIFlag=SCIReN(SCI_NUM_1,8,g_DispalyInit); if(g_time5!=remember & !(GPIO_Get(Con_Run_PORT,Con_Run) if(1= g_SCIFlag) SCISe

17、ndN(SCI_NUM_1,8,g_DispalyInit); g_DispalyInit0=g_time0+0; g_DispalyInit1=g_time1+0; g_DispalyInit3=g_time2+0; g_DispalyInit4=g_time3+0; g_DispalyInit6=g_time4+0; g_DispalyInit7=g_time5+0; LCDshow(g_DispalyInit); SCISendN(SCI_NUM_1,6,g_time); remember=g_time5; Time.c:#include time.hvoid TPMinit(uint8

18、 TPMNo) if(TPMNo2) TPMNo=2; else if(TPMNo=10) *(p+5)=0; *(p+4)+=1; if(*(p+4)=6) *(p+4)=0; *(p+3)+=1; if(*(p+3)=10) *(p+3)=0; *(p+2)+=1; if(*(p+2)=6) *(p+2)=0; *(p+1)+=1; if(*p)*10+*(p+1)=24) *p=0; *(p+1)=0; if(*(p+1)9) *(p+1)=0; *p+=1; Isr.c:#include Includes.h#include time.h#include SCI.h/此处为用户新定义中

19、断处理函数的存放处/未定义的中断处理函数,本函数不能删除interrupt void isrT1Out(void) uint8 temp; DisableInterrupt(); if(!(GPIO_Get(Con_Run_PORT,Con_Run) SecAdd1(g_time); TPM_CSTR(1) &=(TPM1SC_TOF_MASK); EnableInterrupt(); interrupt void isrSCIre(void) uint8 temp; DisableInterrupt(); /temp=SCIReN(1,6,g_time); EnableInterrupt()

20、;interrupt void isrDummy(void)/中断处理子程序类型定义typedef void( *ISR_func_t)(void);/中断矢量表,如果需要定义其它中断函数,请修改下表中的相应项目const ISR_func_t ISR_vectors 0xFFCC = isrDummy, / 0xFFCC /时基中断 isrDummy, / 0xFFCE /IIC中断 isrDummy, / 0xFFD0 /ADC转换中断 isrDummy, / 0xFFD2 /键盘中断 isrDummy, / 0xFFD4 /SCI2发送中断 isrDummy, / 0xFFD6 /SCI

21、2接收中断 isrDummy, / 0xFFD8 /SCI2错误中断 isrDummy, / 0xFFDA /SCI1发送中断 isrSCIre, / 0xFFDC /SCI1接收中断 isrDummy, / 0xFFDE /SCI1错误中断 isrDummy, / 0xFFE0 /SPI中断 isrDummy, / 0xFFE2 /TPM2溢出中断 isrDummy, / 0xFFE4 /TPM2通道1输入捕捉/输出比较中断 isrDummy, / 0xFFE6 /TPM2通道0输入捕捉/输出比较中断 isrT1Out, / 0xFFE8 /TPM1溢出中断 isrDummy, / 0xFF

22、EA /TPM1通道5输入捕捉/输出比较中断 isrDummy, / 0xFFEC /TPM1通道4输入捕捉/输出比较中断 isrDummy, / 0xFFEE /TPM1通道3输入捕捉/输出比较中断 isrDummy, / 0xFFF0 /TPM1通道2输入捕捉/输出比较中断 isrDummy, / 0xFFF2 /TPM1通道1输入捕捉/输出比较中断 isrDummy, / 0xFFF4 /TPM1通道0输入捕捉/输出比较中断 isrDummy, / 0xFFF6 /ICG的PLL锁相状态变化中断 isrDummy, / 0xFFF8 /低电压检测中断 isrDummy, / 0xFFFA

23、 /IRQ引脚中断 isrDummy / 0xFFFC /SWI指令中断 /RESET是特殊中断,其向量由开发环境直接设置(在本软件系统的Start08.o文件中);3.1.1串行通信子程序SCI.h:#ifndef SCI_H#define SCI_H#include MC9S08AW60.h#include Type.h#define SCI_BDH(x) (*(vuint8 *)(0x00000038+(x-1)*8)#define SCI_BDL(x) (*(vuint8 *)(0x00000039+(x-1)*8)#define SCI_C1(x) (*(vuint8 *)(0x00

24、00003A+(x-1)*8)#define SCI_C2(x) (*(vuint8 *)(0x0000003B+(x-1)*8)#define SCI_S1(x) (*(vuint8 *)(0x0000003C+(x-1)*8)#define SCI_S2(x) (*(vuint8 *)(0x0000003D+(x-1)*8)#define SCI_C3(x) (*(vuint8 *)(0x0000003E+(x-1)*8)#define SCI_D(x) (*(vuint8 *)(0x0000003F+(x-1)*8)#define EnableSCIReInt() SCI1C2 |=(S

25、CI1C2_RIE_MASK)#define DisableSCIReInt() SCI1C2 &=(SCI1C2_RIE_MASK)#define SCI_NUM_1 1#define SCI_NUM_2 2void SCIInit(uint8 SCINo,uint8 sysclk,uint16 baud);void SCISend1(uint8 SCINo,uint8 ch);void SCISendN(uint8 SCINo,uint16 n,uint8 ch);uint8 SCIRe1(uint8 SCINo,uint8 *p);uint8 SCIReN(uint8 SCINo,uin

26、t16 n,uint8 ch);void SCISendString(uint8 SCINo,char *p);#endifSCI.c:#include SCI.hvoid SCIInit(uint8 SCINo, uint8 sysclk, uint16 baud) uint16 ubgs; ubgs=0; if(SCINo2) SCINo=2; ubgs=sysclk*(10000/(baud/100)/16; SCI_BDH(SCINo)=(uint8)(ubgs&0xFF00)8); SCI_BDL(SCINo)=(uint8)(ubgs&0x00FF); SCI_C1(SCINo)=

27、0b00000000; SCI_C2(SCINo)=0b00001100; void SCISend1(uint8 SCINo, uint8 ch) if(SCINo2) SCINo=2; while(!(SCI_S1(SCINo)&0b1000000); SCI_D(SCINo)=ch;uint8 SCIRe1(uint8 SCINo, uint8 *p) uint16 k; uint8 i; if(SCINo2) SCINo=2; for(k=0;k=0xfbbb) i=0xff; *p=0x01; return i;void SCISendN(uint8 SCINo, uint16 n,

28、 uint8 ch) uint16 i; if(SCINo2) SCINo=2; for(i=0;i2) SCINo=2; while(m2) SCINo=2; if(p=0) return; for(k=0;pk!=0;+k) SCISend1(SCINo,pk); 3.1.2 LCD子程序LCD.h:#ifndef LCD_H #define LCD_H #include MC9S08AW60.h #include Type.h #include GeneralFun.h#define LCDdata PTAD #define LCDdataD PTADD #define LCDctrl1

29、 PTCD #define LCDctrlD1 PTCDD #define LCDctrl2 PTFD #define LCDctrlD2 PTFDD #define LcdRS 4 #define LcdRW 6 #define LcdE 6 void LCDinit(void);void LCDcommand(uint8 cmd); void LCDshow(uint8 str); #endifLCD.c:#include LCD.hvoid LCDinit(void) uint16 i; LCDdataD=0b11111111; LCDctrlD1 |=(1LcdRS); LCDctrl

30、D1 |=(1LcdRW); LCDctrl1 &=(1LcdRS); LCDctrl1 &=(1LcdRW); LCDctrlD2 |=(1LcdE); LCDctrl2 |=(1LcdE); LCDcommand(0b00111000); LCDcommand(0b00001000); LCDcommand(0b00000001); for(i=0;i4000;i+) asm(NOP); LCDcommand(0b00000110); LCDcommand(0b00010100); LCDcommand(0b00001100);void LCDcommand(uint8 cmd) uint

31、16 i; for(i=0;i1000;i+) asm(NOP); LCDdata=cmd; LCDctrl2 |=(1LcdE); asm(NOP); asm(NOP); asm(NOP); LCDctrl2 &=(1LcdE); for(i=0;i1000;i+) asm(NOP);void LCDshow(uint8 str) uint8 i; LCDinit(); LCDctrl1 &=(1LcdRS); LCDctrl1 &=(1LcdRW); LCDcommand(0b10000000); LCDctrl1 |=1LcdRS; LCDctrl1 |=(1LcdRW); for(i=

32、0;i8;i+) LCDcommand(stri); LCDctrl1 &=(1LcdRS); LCDctrl1 &=(1LcdRW); LCDcommand(0b11000000); LCDctrl1 |=1LcdRS; LCDctrl1 &=(1LcdRW); 第四章 系统测试第五章 总结展望5.1 总结回顾起此次单片机课程设计,我仍感慨颇多,在接近两个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知

33、识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好。通过这次课程设计之后,也把以前所学过的知识重新温习了一遍。截止到现在,这个课程设计已经算是基本完成了。不过忙了一个半星期总该有个结果的,我想这次课程设计的作品我做的虽然并不是多么好,不过多多少少勉强能凑合过去的。不论是代码还是功能上基本还是一个自己马马虎虎接

34、受的水平,不过也是因为时间仓促,这次课程设计的界面花了太久的时间都是不应该的,感觉有些本末倒置了,不过好在并没有因此影响到编程的进程,应该还算还行的吧。在这次编程过程中,我要特别感谢我的指导老师张兵老师,从这学期刚开始时他就一直在帮助我以使我提高编程水平,是他为我的编程铺平了道路,耐心的指导我们,才能使我少犯错误、少走弯路,提升了我们对编程的兴趣,也提高了本身的专业素质。同样的我也要感谢我的朋友们对我的理解与支持。本学期的课程设计就算是结束了,马上开始就进入考试周了,我要好好复习,争取取得一个优异的成绩!5.2 展望嵌入式对于计算机科学来说是一门十分重要的核心学科。而课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程。”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。将嵌入式认真对待,将对于计算机的发展与进化,有着深刻和重大的意义。参考文献1.嵌入式技术基础与实践(第2版)王宜怀 张书奎 王林 吴瑾 著 清华大学出版社2.C程序设计(第3版) 谭浩强 著 清华大学出版社 3.数字电子技术 郭永贞 著 东南大学出版社4.计算机组成原理 唐朔飞 著 高等教育出版社5.汇编语言程序设计 王成瑞 著 高等教育出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号