单片机(飞思卡尔)课程设计报告书_第1页
单片机(飞思卡尔)课程设计报告书_第2页
单片机(飞思卡尔)课程设计报告书_第3页
单片机(飞思卡尔)课程设计报告书_第4页
单片机(飞思卡尔)课程设计报告书_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、. . . . 1 / 27课课 程程 设设 计计 报报 告告课程设计名称:课程设计名称: 系系 :学生:学生:班班 级:级:学学 号:号:成成 绩:绩:指导教师:指导教师:开课时间:学年学期开课时间:学年学期. . . . 2 / 27目目 录录第一章系统概要第一章系统概要 1 11.11.1 系统背景系统背景 1 1第二章系统硬件设计第二章系统硬件设计 2 22.12.1 系统原理图系统原理图 2 22.22.2 单片机(单片机(MCUMCU)模块)模块 3 32.2.1 MC9S08AW60 单片机性能概述 32.2.2 部结构简图 32.32.3 串行通信模块串行通信模块 4 42.3

2、.1 MAX232 引脚图 42.3.2 串行通信的电路原理 52.42.4 液晶显示模块液晶显示模块 6 6第三章系统软件设计第三章系统软件设计 8 83.13.1 MCUMCU 方(方(C C)程序)程序 8 83.1.1 串行通信子程序 143.1.2 LCD 子程序 18第四章系统测试第四章系统测试 2121第五章总结展望第五章总结展望 24245.15.1 总结总结 24245.25.2 展望展望 2424参考文献参考文献 2424. . . . 1 / 27第一章第一章 系统概要系统概要1.11.1 系统背景系统背景单片机(MCU)的基本定义是:在一块芯片上集成了中央处理器(CPU

3、) 、存储器(RAM/ROM 等) 、定时器/计数器与多种输入输出(I/O)接口的比较完整的数字处理系统。单片机自 1976 年由 Intel 公司推出 MCS-48 开始,迄今已有二十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为” 。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC 机外围以与网络通讯等广大领域。 Freescale 的 S08 系列 8 位 MCU 由于稳定性高、开发周期短、成本低、型号多样、兼容性好被广

4、泛应用。HC08 是 Freescale 的 08 系列之一 S08 表示增强型 HC08,它是在 HC08 基础上发展起来的,兼容 HC08 系列。S08 是 2004 年左右推出 8 位 MCU,资源丰富,功耗低,性价比很高,是 08 系列 MCU 发展趋势,其性能与许多 16 位 MCU 相当。 MC9S08AW60 是低成本、高性能 8 位微处理器S08 家族中的成员,本次课程设计就是以该芯片为基础,来进行嵌入式的设计。1.2 系统功能当按下启动键,电子时钟从当前设定值开始走时。按秒刷新,要求在 LCD屏上显示。若按启动键,则时间暂停,再按,时间继续按秒刷新。时间格式是”时:分:秒”

5、(00:00:00) 。通过向通用 I/O 端口的引脚输入高或低(1 或 0)电平,作为启动键,对电子钟进行控制电子钟开始运行、暂停和继续运行。显示数据时,先把要显示的数据送到数据寄存器中,再通过发送寄存器将数据输入要 LCD 中显示。. . . . 2 / 27第二章第二章 系统硬件设计系统硬件设计2.12.1 系统原理图系统原理图该系统由 AW60 最小系统电路为主要结构,利用串口进行数据的控制与采集。首先将开关接在 AW60 上的 PORT_D 口上,用于控制数字时钟系统的开关。然后将 LCD 的数据线 7-14 引脚(D0-D7)分别与 MCU 的 PTA0-PTA7 连接,LCD 的

6、控制线 RS、R/W、E(4、5、6 引脚)分别于 MCU 的 PTC4、PTC6、PTF6 连接,用于输出时间。数字时钟必须要有晶振电路,所以将该晶振电路与 AW60 的 PTG5 和. . . . 3 / 27PTG6 相连,用于时间的自加。由于在运行系统时,以防电流不稳定,所以在PTB0 端设置一个下拉电阻,稳定电流。2.22.2 单片机(单片机(MCUMCU)模块)模块2.2.12.2.1 MC9S08AW60MC9S08AW60 单片机性能概述单片机性能概述(1)最高达 40MHz 的 CPU 工作频率和 20Hz 的部总线工作频率表;时钟源选项包括晶振、谐振器、外部时钟或部产生的时

7、钟。(2)相比 HC08 CPU 指令集,S08 CPU 增加了 BGND 指令。(3)单线后台调试模式接口;增强的断点能力,允许单一的断点设置在线调试(在片调试的模块增加了多于两个的断点) 。(4)含 32 个中断/复位源;含 2KB 的片 RAM;含 60KB 的片在线可编程 Flash存储器,带有块保护和安全选项。(5)可选的计算机正常操作(COP)复位;低电压检测和复位或中断;非法操作码检测与复位;非法地址检测与复位。(6)ADC:多达 16 个通道,10 位 A/D 转换器与自动比较功能;两个串行通信接口 SCI 模块与可选的 13 位中断;一个串行外设接口 SPI 模块;集成电路互

8、连总线 I2C 模块运作高达 100kbps 的最高总线负载;8 引脚键盘中断 KBI 模块。(7)Timers:1 个 2 通道和 1 个 6 通道 16 位定时器/脉冲宽度调制器模板。具有输入、捕捉、输出比较、脉宽调制功能。2.2.22.2.2 部结构简图部结构简图1. 部结构简图如图所示,给出了 AW60 的部结构图,它对于我们理解和应用 AW60 MCU 有重要作用,在学习了基本有法后,应在反过来熟悉这个部结构图,以便更好地理解 AW60 MCU 的基本原理。从部结构图可以看出,AW60 主要有以下几个部分:S08 CPU、存储器、定时器接口模块、定时器模块、看门狗模块、通用 IO 模

9、块、串口通信模块(SCI) 、串行外设接口(SPI)模块、I2C(IIC)模块、A/D 转换. . . . 4 / 27模块、键盘中断模块、时钟发生模块、复位与中断模块等。2.32.3 串行通信模块串行通信模块2.3.12.3.1 MAX232MAX232 引脚图引脚图在 MCU 中,若用 RS-232 总线进行串行通信,则需外接电路实现电平转换。在发送端,需要用驱动电路将 TTL 电平转换成 RS-232 电平;在接受端,需要用接收电路将 RS-232 电平。转化为 TTL 电平。电平转换器不仅可以由晶振管分立元件构成,也可以直接使用集成电路。目前使用 MAX232 芯片较多,该芯片使用单一

10、+5V 电源供电实现电平转换。如图所示,给出了 MAX232 的引脚说明。各引脚含义简要说明如下:Vcc(16 脚):正电源端,一般接+5V。 GND(15 脚):地。VS+(2 脚):VS+=2VCC-1.5V=8.5V。 VS-(6 脚):VS-=-2VCC-1.5V=-11.5V。 C2+、C2-(4、5 脚):一般接 1F 的电解电容。. . . . 5 / 27 C1+、C1-(1、3 脚):一般接 1F 的电解电容。在正常情况下, (1)T1IN=5V,则 T1OUT=-9V;T1IN=0V,则 T1OUT=9V。 (2)将R1IN 与 T1OUT 相连,令 T1IN=5V,则 R

11、1OUT=5V;令 T1IN=0V,则 R1OUT=0V。 MAX232 芯片进行电平转换的基本原理:(1)发送过程:MCU 的 TxD(TTL电平)经过 MAX232 的 11 脚(T1IN)送到 MAX232 部,在部 TTL 电平被“提升”为 232 电平,通过 14 脚(T1OUT)发送出去。接受过程:外部 232 电平经过MAX232 的 13 脚(R1IN)进入到 MAX232 的部,在部 232 电平被“降低”为 TTL电平,经过 12 脚(R1OUT 送到 MCU 的 RxD,进入 MCU 部。2.3.22.3.2 串行通信的电路原理串行通信的电路原理从基本原理的角度看,串行通

12、信接口 SCI 的主要功能是:接收时,把外部的单线输入的数据变成一个字节的并行数据送入 MCU 部;发送时,把需要发送表 6 MAX232 芯片输入输出引脚分类与基本接法组别TTL电平引脚方向典型接口232电平引脚方向典型接口111(T1IN)12(R1OUT)输入输出接MCU的TxD接MCU的RxD1314输入输出连接到接口,与其它设备通过232相接210(T2IN)9(R2OUT)输入输出接MCU的TxD接MCU的RxD87输入输出连接到接口,与其它设备通过232相接. . . . 6 / 27的一个字节的并行数据转换为单线输入。为了设置波特率,SCI 应具有波特率寄存器。为了能够设置通信

13、格式、是否校验、是否允许中断等,SCI 应具有控制寄存器。而要知道串口是否有数据可收、数据是否发送出去等,需要有 SCI状态寄存器。当然,若一个寄存器不够用,控制与状态寄存器可能有多个。而SCI 数据寄存器存放要发送的数据,也存放接受的数据,这并不冲突,因为发送与接收的实际工作是通过“发送移位寄存器”和“接收以为寄存器”完成的。编程时,程序员并不直接与“发送移位寄存器”和“接收移位寄存器”打交道,只与数据寄存器打交道,所以 MCU 中并没有设置“发送移位寄存器和“接收移位寄存器”的映像地址。发送时,程序员通过判定状态寄存器的相应位,了解是否可以发送一个新的数据。若可以发送,则将待发送的数据放入

14、“SCI 数据寄存器”中就可以了,剩下的工作由 MCU 自动完成:将数据从“SCI 数据寄存器”送到“发送移位寄存器” ,硬件驱动将“发送移位寄存器”的数据一位一位地按照规定的波特率移到发送引脚 TxD,供对方接收。接收时,数据一位一位地从接收引脚 RxD 进入“接收移位寄存器” ,当收到一个完成字节时,MCU 会自动将数据送入“SCI 数据寄存器” ,并将状态寄存器的相应位改变,供程序员判定并取出数据。2.42.4 液晶显示模块液晶显示模块MCU控制液晶显示接口接线图LCD(YM1602C)16151413121110090807060504030201Core2LCD_D7LCD_D6LC

15、D_D5LCD_D4LCD_D3LCD_D2LCD_D1LCD_D0LCD_ELCD_RWLCD_RSVccGNDPTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTF6PTC6PTC4AW60. . . . 7 / 27点阵字符型 LCD 是专门用于显示数字、字母、图形符号与少量自定义符号的液晶显示器。这类显示器把 LCD 控制器、点阵驱动器、字符存储器、显示体与少量的阻容元件等集成一个液晶显示模块。鉴于字符型液晶显示模块目前在国际上已经规化,其电特性与接口特性是统一的,因此,只要设计出一种型号的接口电路,在指令上稍加修改即可使用各种规格的字符型液晶显示模块。 点阵字符型液晶

16、显示模块的控制器大多数为日立公司生产的 HD44780 与其兼容的控制电路,如 SED1278(SEIKO EPSON) 、KS0066(SAMSUNG) 、NJU6408(NER JAPANRADIO)等。字符型液晶显示模块的主要特点如下:1.液晶显示屏是以若干 5*8 或 5*11 点阵块组成的显示字符群。每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。2.主控制电路为 HD44780(HITACHI)与其他公司的兼容电路。从程序员的角度来说,LCD 的显示接口与编程是面向 HD44780 的,只要了解 HD44780 的编程结构即可进行 LCD 的显示编程。3.部具有字符发生器

17、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.低功耗、高可靠性。. . . . 8 / 27第三章第三章 系统软件设计系统软件设计3.13.1 MCUMCU 方(方(C C)程序)程序Main.c:Main.c:#include I

18、ncludes.h#include timer.h#include SCI.h#include LCD.h#include GPIO.h/在此添加全局变量定义uint8 g_time8 ;uint8 g_DisplayInit8 ;uint8 i;uint8 m;#define GPIO_Run_PORT PORT_E void main(void) uint8 remember; uint32 mRuncount = 0; m=1; /1 关总中断 DisableInterrupt(); /禁止总中断 /2 芯片初始化 MCUInit(); /3 指示灯初始化 Light_Init(Ligh

19、t_Run_PORT,Light_Run,Light_OFF); TPMinit(TPM_NUM_1); LCDinit();. . . . 9 / 27 SCIInit(SCI_NUM_1,SYSTEM_CLOCK,9600); g_time0 = 0; g_time1 = 0; g_time2 = :; g_time3 = 0; g_time4 = 0; g_time5 = :; g_time6 = 0; g_time7 = 0; remember = g_time7; m=GPIO_Get(Light_Run_PORT,0); EnableSCIReInt(); EnabletimerI

20、nt(TPM_NUM_1); EnableInterrupt(); SCISendN(SCI_NUM_1,8,g_time); / LCDshow(g_time); /4 主循环 while (1) m=GPIO_Get(GPIO_Run_PORT,0); mRuncount+; if(mRuncount=40000) mRuncount = 0; Light_Change(Light_Run_PORT,Light_Run); /*/ if(g_time7!=remember) / SecAdd1(g_time); for( i=0;i 2) TPMNo = 2; else if(TPMNo

21、9) *(p+7) = 0; *(p+6)+=1; if(*(p+6)5) *(p+6)=0; *(p+4) += 1; / if(*p=24) / *p = 0; if(*(p+4)9) *(p+4)=0; *(p+3)+=1; if(*(p+3)5) *(p+3)=0; *(p+1)+=1; if(*(p+1)9) *(p+1)=0; *p+=1; if(*(p+1)=4&*p=2) *(p+1)=0; *p=0; . . . . 15 / 27 3.1.13.1.1 串行通信子程序串行通信子程序SCI.h:SCI.h:#ifndef SCI_H #define SCI_H #in

22、clude MC9S08AW60.h #include Type.h #define SCI_BDH(x) (*(vuint8 *)(0 x00000038+(x-1)*8) #define SCI_BDL(x) (*(vuint8 *)(0 x00000039+(x-1)*8) #define SCI_C1(x) (*(vuint8 *)(0 x0000003A+(x-1)*8) #define SCI_C2(x) (*(vuint8 *)(0 x0000003B+(x-1)*8) #define SCI_S1(x) (*(vuint8 *)(0 x0000003C+(x-1)*8)#def

23、ine SCI_S2(x) (*(vuint8 *)(0 x0000003D+(x-1)*8)#define SCI_C3(x) (*(vuint8 *)(0 x0000003E+(x-1)*8)#define SCI_D(x) (*(vuint8 *)(0 x0000003F+(x-1)*8)#define EnableSCIReInt() SCI1C2 |=(SCI1C2_RIE_MASK)#define DisableSCIReInt() SCI1C2 &=(SCI1C2_RIE_MASK)#define SCI_NUM_1 1#define SCI_NUM_2 2void SC

24、IInit(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,uint16 n,uint8 ch);void SCISendString(uint8 SCINo,char *p);#endif. . . . 16 / 27SCI.c:SCI.c:#include SCI.hvoid SCII

25、nit(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&0 xFF00)8); SCI_BDL(SCINo)=(uint8)(ubgs&0 x00FF); SCI_C1(SCINo)=0b00000000; SCI_C2(SCINo)=0b00001100; void SCISend1(uint8 SCINo, uint8 ch) if(SCI

26、No2) 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=0 xfbbb) i=0 xff; *p=0 x01; return i;void SCISendN(uint8 SCINo, uint16 n, uint8 ch) uint16 i; if(SCINo2) SCINo=2; for(i=0;i2) SCINo=2; while(m2) SC

27、INo=2; if(p=0) return; for(k=0;pk!=0;+k) SCISend1(SCINo,pk); 3.1.23.1.2 LCDLCD 子程序子程序LCD.h: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 PTCD#define LCDctrlD1 PTCDD#define LCDctrl2 PTFD. . . . 19 /

28、27#define LCDctrlD2 PTFDD#define LcdRS 4#define LcdRW 6#define LcdE 6void LCDinit(void);void LCDcommand(uint8 cmd);void LCDshow(uint8 str);#endifLCD.c:LCD.c:#include LCD.hvoid LCDinit(void) uint16 i; LCDdataD=0b11111111; LCDctrlD1 |=(1LcdRS); LCDctrlD1 |=(1LcdRW); LCDctrl1 &=(1LcdRS); LCDctrl1 &

29、amp;=(1LcdRS); LCDctrlD2 |=(1LcdE); LCDctrl2 |=(1LcdRS); LCDcommand(0b00111000); LCDcommand(0b00001000); LCDcommand(0b00000001); for(i=0;i4000;i+) asm(NOP); LCDcommand(0b00000110); LCDcommand(0b00010100); LCDcommand(0b00001100); void LCDcommand(uint8 cmd). . . . 20 / 27 uint16 i; for(i=0;i1000;i+) a

30、sm(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(0b00000000); LCDctrl1|=1LcdRS; LCDctrl1|=(1LcdRW); for(i=0;i8;i+) LCDcommand(stri); /* LCDctrl1&=(1LcdRS); LCDc

温馨提示

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

评论

0/150

提交评论