微机原理时钟实验报告

上传人:daj****de 文档编号:188249291 上传时间:2023-02-18 格式:DOCX 页数:19 大小:287.82KB
收藏 版权申诉 举报 下载
微机原理时钟实验报告_第1页
第1页 / 共19页
微机原理时钟实验报告_第2页
第2页 / 共19页
微机原理时钟实验报告_第3页
第3页 / 共19页
资源描述:

《微机原理时钟实验报告》由会员分享,可在线阅读,更多相关《微机原理时钟实验报告(19页珍藏版)》请在装配图网上搜索。

1、专业:电气工程及其自动化姓名:海j费实验报告日期: 11.27,d地点:课程名称:微机原理及其应用指导老师:徐习东 成绩:实验名称:时钟控制实验实验类型:同组学生姓名:目录1实验内容与要求(2)2实验原理2.1数码管显示原理 (2)2.2键盘接口(3)3程序设计与分析 (5)3.1主程序设计流程图(5)3.2时间自增变化程序设计流程图(6)3.3调时程序设计流程图(6)3.4程序段设计与分析(7)4实验思考(17)一、实验内容与要求1、利用TMS3202812实验目标板上的八段数码管设计显示具有“时、分、秒” 功能的数字钟。2、用按键控制时、分、秒时间的增减。3、通过实验,掌握TMS2812通

2、用输入/输出管脚直接控制外围设备的方法。4、了解键盘、发光二极管的控制编程方法。二、实验原理1、数码管显示原理扫描式键盘数码管接口如图:AOAlDO DI D2 D3 D4 D5 D6 D7P4fl PAIPAJFA4 PAP FAft PA7PBB Plil FBI 冲FB4PK5 PRA PB7Pl Fff 1 PCi F pr4 p费prs PC 7lllllllllllllllllllll日日日CSRD-YA-WRR.ST图1 扫描式键盘数码管接口DSP的SPI控制串转并芯片如图&HD13LACK:*12EfcsfiTioSP;CLK+1 jSP!SIMD*UGKDgGJTD13LAC

3、粉12皿FT10SFECLK.11SD07uGFD 8SERJF2LR.5KCLEZOE R.CLK口 E ECLKVCC5 QB QCQE QF WREi QH-玷mu”弘TiSECLR 迥UtQS足QD5ER配wQGQHGiroQirVCCU22 4EC59J5Die st5OHTI5R33 f 3009CTT14 RS2找CTOTM)E3B _300WI.WE,丝g_=j兰&K卫OUT口宣1=茹4rT13祷=7=3qo rISOUTORll.MW?1DIHM叫联=第0主UTEMRlj=30043OBWfil=3OQi14 (MJT84 =300 i 5 gras 用23|=耳301 孚

4、矗 oirraa 豆123|=6io1 OTT87I旧 DFD12旧 DF图2 SPI串转并8个串转并芯片级联在一起,级联多口控制,由锁存信号控制暂态余辉;写 入一个字符会引起一串变化。为控制8个LED,建立8个元素的显示数组;如果要改显示内容,先改显 示数组,然后再调用循环传送程序。2、键盘接口键盘一端接地,一端上拉高电平;键盘的闭合,断开会产生电平变化;键盘 经三态隔离芯片接入DSP;三态芯片的导通由KEYA、KEYB两线控制;键盘信 号进入GPIOB(815);KEYA 1?GND1CPIOBejCO2.c-iubzp-=DI3GFI如1虹4ernilLLP5=D467GfLOEKi-=

5、 DE53迥口町5 -=D79IDKEY 日 19GHD1DD 2DI3E4L;5D46D57DS D79QTD100EI7KAU0A1BlA2的A3B3A4B4A3E3A6B6A7B7GNDU24 74LVC24J20 D3JVIS KEVO17 LZT1IE EEVHTTKE 登14 EEY413IN KEY由IL皿曹丁OET虚TOCBDDIE2B3B4B5B6B7ONDU26 74LVC24i2D D3.3V18 LEVW17 KEYHIE KEE】D15 ELEYJL14 Kim13 口北310 1411 EEVL5图3键盘接口其中两个键盘控制芯片U24和U26分别对应键盘K1-K8和

6、K9-K16,片选控 制取决于键盘输入片选信号KEYA与KEYB,通过74LVC138译码器控制,具体定 义如下:功能/名称74LVC138译码器控制信号GPIOE2GPIOE1GPIOE0键盘输入片选信号KEYA000键盘输入片选信号KEYB001扩展的输入片选LEDA010扩展的输入片选LEDB011LCD CSA片选100LCD CSB片选101表1片选控制外部扩展片选电路如下:U25GPIOEO 1A H VCCBCYOOE1 H Y2OE2A Y3OE2B Y4GND H Y716 D3.3VGPIOE1 2GPIOE2 315 KEYAD33V 614 KEYB13 LEDA412

7、 LEDBGND .511 LCD CSA810 LCD CSB_9774LVC138图4外部扩展片选电路三、程序设计与分析1、主程序设计流程图2、时间自增变化程序设计流程图3、调时程序设计流程图4、程序段设计与分析程序段Q#define K1 0xFEFF#define K2 0xFDFF#define K16 0x7FFF该程序段运用简单宏定义的方式将一个较长的16位二进制常量用一个较短 的标识符Kn来代替(0xFFFE用K1代替、0xFFFD用K2代替等),Kn对应于键盘 的K1-K16,具有实际意义。这样在之后程序的编写中便于书写和表达,具体程 序见下面的分析。程序段。Uint16Ke

8、yRegl;Uint32i = 0;Uint16Ctrl;int16Sec=0;int16Min=0;int16Hor=0;Uint16Light8;int LEDCode30=0xC000,0xF900,0xA400,0xB000,0x9900,0x9200,0x8200, 0xF800,0x8000,0x9000,0x8800,0x8300,0xC600,0xA100,0x8600,0x8E00, 0x8c00,0xbf00,0xa700,0xff00,0x4000,0x7900,0x2400,0x3000, 0x1900,0x1200,0x0200,0x7800,0x0000,0x100

9、0;在F2812开发中,为了方便,将常用的数据类型重新定义如下:intint16longint32unsigned intUint16unsigned longUint32floatfloat32long doublefloat64表2 DSP数据类型定义定义unsigned int型变量KeyReg1用于读键值;定义unsigned long型变量i 作为后面循环程序中的循环变量;定义unsigned int型变量Ctrl,用于记录按下 的是哪个键,参与控制调时子程序;定义int型变量Sec、Min、Hor分别作为时 钟秒、分、时的在调整时的数值,参与调时和时钟显示;定义unsigned i

10、nt型数 组Light8,用于关联六位时钟和数码关显示屏上的两个一,同时作为时钟秒、 分、时新数值的十位与个位数据寄存器,参与调时,具体操作是在LEDCode30 中寻找到相应的字形码并通过下面叙述的display函数将结果信息传入到SPI数 据发送缓冲器SPITXBUF中,在数码管显示屏上进行显示。这些变量的具体作 用及其意义相见下面针对各个程序段的叙述。程序段Qvoid spi_intial()SpiaRegs.SPICCR.all = 0x0047;SpiaRegs.SPICTL.all = 0x0006;SpiaRegs.SPIBRR = 0x007F;SpiaRegs.SPICCR.

11、all = SpiaRegs.SPICCR.all | 0x0080;EALLOW;GpioMuxRegs.GPFMUX.all = 0X000F;EDIS;void spi_intial()函数用于初始化串行外设接口 SPI。设置SPI配置控制寄存器SPICCR的位3-0为0111,使在一个移位序列中每 个字符的字符长度为8位,即串行输入时对应每一个八段数码管的信息;设置SPI配置控制寄存器SPICCR的位6为1,使数据在始终下降沿输出、 上升沿输入,当SPI无数据发送时,SPICLK为高电平;设置SPI操作控制寄存器SPICTL的位0为0,禁止SPI的接收/发送中断;设置SPI操作控制寄存

12、器SPICTL的位1为1,使能发送且主控制器的SPISTE 引脚置为低电平;设置SPI操作控制寄存器SPICTL的位2为1,使SPI被配置为主模式;设置SPI操作控制寄存器SPICTL的位3为0,使SPI时钟相位为正常时钟 方式,且时钟边沿有效;设置SPI波特率设置寄存器SPIBRR的位6-0均为1,设定波特率,使SPICLK =LSPCLKSPIBRR +137.5MHz128=0.29 x 106W s设置SPI配置控制寄存器SPICCR的位7为1(与进行或逻辑操作),使SPI退出复位状态,准备接收或发送新的字符。设置模式寄存器GPFMUX低四位为1,配置为对应SPI的专用外设功能。voi

13、d gpio_init()EALLOW;GpioMuxRegs.GPAMUX.bit.TDIRA_GPIOA11=0;GpioMuxRegs.GPADIR.bit.GPIOA11=1;GpioMuxRegs.GPEMUX.all = GpioMuxRegs.GPEMUX.all & 0xfff8;GpioMuxRegs.GPEDIR.all = GpioMuxRegs.GPEDIR.all | 0x0007;GpioMuxRegs.GPBMUX.all = GpioMuxRegs.GPBMUX.all&0x00ff;EDIS;GpioDataRegs.GPADAT.bit.GPIOA11 =

14、0;void gpio_init()函数用于初始化GPIO 口。设置模式寄存器GPAMUX的相关位为0,是GPIOA11引脚配置为通用数字I/O模式;设置方向寄存器GPADIR的相关位为1,使GPIOA11引脚配置为输出;设置模式寄存器GPEMUX的低3位均为0,使GPIOE低3位引脚配置为通 用数字I/O模式;设置方向寄存器GPEDIR的低3位均为1,使GPIOE低3位引脚配置为输 出;设置模式寄存器GPBMUX的高8位均为0,使GPIOB的高8位引脚配置为 通用数字I/O模式;设置数据寄存器GPADAT的相关位为0,使GPIOA11引脚为低电平关闭锁 存,使74HC595的SPISIMO引

15、脚能够接收SPITXBUF中的信息。系统初始化、外设时钟初始化、看门狗初始化、PIE初始化等调用DSP281x_SysCtrl.c、DSP281x_PieCtrl.c 等文件。程序段。int Keyscan(void)EALLOW;GpioMuxRegs.GPBDIR.all = GpioMuxRegs.GPBDIR.all & 0x00ff;EDIS;GpioDataRegs.GPEDAT.all = 0xfff9;for (i=0; i100; i+)if (GpioDataRegs.GPBDAT.all | 0x00ff) != 0xffff)for (i=0; i30000; i+)i

16、f (GpioDataRegs.GPBDAT.all | 0x00ff) != 0xffff)KeyReg1 = GpioDataRegs.GPBDAT.all ;while (GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff)GpioDataRegs.GPDDAT.bit.GPIOD1 =!GpioDataRegs.GPDDAT.bit.GPIOD1;for (i=0; i1000; i+)return (1);return (0);int Keyscan (void)函数用于扫描按键K9-K16。设置方向寄存器GPBDIR的高8位为0,使GPIOB8GPIOB

17、15被配置为输 入;设置数据寄存器GPEDAT的低3位为001,选通KEY高8位;if语段:if (GpioDataRegs.GPBDAT.all I 0x00ff) != 0xffff)for (i=0; i30000; i+)if (GpioDataRegs.GPBDAT.all | 0x00ff) != 0xffff)KeyReg1 = GpioDataRegs.GPBDAT.all ;while (GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff)GpioDataRegs.GPDDAT.bit.GPIOD1 = !GpioDataRegs.GPDDAT.b

18、it.GPIOD1; for (i=0; i1000; i+) return (1);用于判断K9-K16是否有按键按下,没有按键按下时,GPBDAT高8位均为 高电平1,若有按键按下则GPBDAT高8位出现低电平0,与0x00ff进行或逻辑 运算后不等于 0xffff( GpioDataRegs.GPBDAT.all | 0x00ff) != 0xffff),初步判断有 按键按下后,进行去抖动再确认,具体操作为延时一小段时间,再次检测是否有 按键按下,如果再次判断有按键按下,则确认有按键按下,记录键值(KeyReg1 =GpioDataRegs.GPBDAT.all),否则视为按键抖动,不进

19、行进一步的操作。按键去抖动操作流程图如下:N程序段。void KeyFunction (unsigned int KeyRegl)switch(KeyReg1)caseK14:Ctrl=K14;break;caseK15:Ctrl=K15;break;caseK16:Ctrl=K16;break;caseK11:if(Ctrl=K14)Sec-;if(Sec=-1)Sec=59;Light7=LEDCodeSec%10;Light6=LEDCodeSec/10;if(Ctrl=K15)81 / M -oI,OHopoucmqo=q8n 二2段OHfogH)(寸 ZHJOH)七+JOH )(9Q

20、HBW f-01 g.swopouaaqHslqxnfoHUM)(09H.SW+UHAL)gqhbwf-01 gsopoucmqHElqxnfo&s)(09H&S)七+OOS)(izqhbwcnq 与。音?q f-oI,OHopoucmqo=q8n -01段。写寻富彳二M3=胃 hjoh)(=hjoh)七,lJOH)(9QHBWf -01 g.swopouaaqHslqxn =6g*w)?H.SW,lw印咨霍球更剧邱屋dSQbreak;default:break;void KeyFunction(unsigned int KeyRegl)函数用于控制调整时间。由按键扫描子程序 int Keys

21、can(void)得到按下的按键值,(KeyReg1 = GpioDataRegs.GPBDAT.alD,用switch语句给定每个特定按键所对应实现的调时 功能(如按下K14,则选定秒,键值寄存变量Ctrl=K14,接下来若按下K11,则 秒加1,若按下K12,则秒减1),调整时间后,由Lightn与八段数码管关联, 在LEDCode30中找到对应的字形码,显示在数码管上。程序段。void display ()GpioDataRegs.GPADAT.bit.GPIOA11 = 0;for(i=0;i8;i+)SpiaRegs.SPITXBUF = Lighti;while(SpiaRegs.

22、SPISTS.bit.INT_FLAG != 1) SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;GpioDataRegs.GPADAT.bit.GPIOA11 = 1;for(i=0;i10;i+)void display ()用于时钟的八段数码管显示。设置数据寄存器GPADAT的 GPIOA11位为0,给LACK信号一个低电平, 为后面的锁存做准备;SpiaRegs.SPITXBUF = Lighti用于给数码管送入数据,一旦把数据Lighti 送给SPITXBUF,SPITXBUF就把数据发送出去;设置数据寄存器GPADAT的 GPIOA11位为1,给LAC

23、K信号一个高电平, 为锁存74HC595。程序段Qinterrupt void cpu_timer0_isr(void)CpuTimer0.InterruptCount+;if(CpuTimer0.InterruptCount=10)Sec+;CpuTimer0.InterruptCount=0;if(Sec=60)Min+;Sec=0;if(Min=60)Hor+;Min=0;if(Hor=24)Hor=0;Light1=LEDCodeHor%10;Light0=LEDCodeHor/10;Light4=LEDCodeMin%10;Light3=LEDCodeMin/10;Light7=LE

24、DCodeSec%10;Light6=LEDCodeSec/10;display();PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;interrupt void cpu_timer0_isr(void)为中断函数,参与时钟无操作时的自加和 数码管显示。定时器开始计时后中断计数寄存器累加CpuTimer0.InterruptCount+;当中断计数寄存器 CpuTimer0.InterruptCount= 10,即 0.1s*10=1s,产生一个 中断,此时秒加1,若秒溢出(Sec=60)则分加1(Min+),若分溢出(Min=60) 则时加1(Hor+),若时溢出(

25、Hor=24 )则时分秒清零。时间改变的同时在数 码管上显示。程序段Qvoid main(void) InitSysCtrl();DINT;spi_intial();gpio_init();DINT;IER = 0x0000;IFR = 0x0000;for(i=0;i8;i+)SpiaRegs.SPITXBUF =LEDCode0;while(SpiaRegs.SPISTS.bit.INT_FLAG != 1)SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;GpioDataRegs.GPADAT.bit.GPIOA11=1;for(i=0; i10; i+)for

26、(i=0;i8;i+)Lighti=LEDCode0;Light2=LEDCode17;Light5=LEDCode17;InitPieVectTable();EALLOW;PieVectTable.TINT0=&cpu_timer0_isr;EDIS;InitCpuTimers();ConfigCpuTimer(&CpuTimer0,150,100000);StartCpuTimer0();IER |=M_INT1;PieCtrlRegs.PIEIER1.bit.INTx7=1;EINT;while(1)if (Keyscan2() = 1)KeyFunction2(KeyReg1);dis

27、play();void main(void)为程序主函数。初始化函数 InitSysCtrl()、InitPieVectTable()、InitCpuTimers()、 StartCpuTimer0()、 ConfigCpuTimer()调用相关 C 文件,其中 ConfigCpuTimer(&CpuTimer0,150,100000)为设置周期寄存器,150MHz,周期为 1*100000us=1s,IER = 0x0000; IFR = 0x0000;分别表示关闭外围中断和清除中断标志;开始给数码管送入数据SpiaRegs.SPITXBUF =LEDCode0,即使时钟时分秒 均从0开始显

28、示;设置数据寄存器GPADAT的 GPIOA11位为1,即给LACK信号一个高电平, 为锁存74HC595;启动定时器StartCpuTimer0(),当计数器减到0时产生一个定时器中断信号, (一个中断脉冲)。CPU定时器0中断流程图如下:四、实验思考这次实验是按键控制时钟实验,硬件上涉及了键盘和数码管,程序设计用到 了 CPU定时器、PIE中断、串行外设接口 SPI等知识,通过这次实验的练习, 我了解了 SPI串行外设接口在数据传输方面的知识和软件设置方法,进一步理解 了 CPU定时器和PIE的工作流程以及成功实现中断的必要步骤等,受益匪浅。那么要成功实现中断,需要做哪些事呢?要知道CPU

29、接到中断请求,并发 现可以去响应时,就得暂停正在执行的程序,转而去响应中断程序,但是此时, 它必须得做一些准备工作,以便于执行完中断程序后回过头来还能找到原来的地 方原来的状态,CPU会将相应的IFR位进行清除,EALLOW也被清除,INTM 被置位,即不能响应其他终中断,等于CPU向其他中断发出了通知,现在正在 忙,没有时间处理别的请求,得等到处理完手上的中断之后才能再来处理。然后 CPU会存储返回地址并自动保存相关信息,例如将正在处理的数据放入堆栈等。 做好这些准备工作之后,CPU会从PIE向量表中取出对应的中断向量ISR,从而 转去执行中断服务子程序。另外由于对SPITXBUF和SPIR

30、XBUF区分不清,在编写程序时,多处把 SPITXBUF写成SPIRXBUF,导致运行不正确。现将SPI工作在标准SPI模式下 (FIFO未使能)时,数据交换过程总结如下。串行发送缓冲寄存器SPITXBUF用于发送数据。首先,通过程序向发送缓 冲寄存器SPITXBUF中写入数据,如果此时SPIDAT寄存器为空,则SPITXBUF 将需要发送的完整数据传输给SPIDAT,数据在SPITXBUF寄存器和SPIDAT寄 存器中左对齐存放,即从高位开始存储。SPIDAT每经过一个时钟脉冲,完成一 位数据的发送或接收。假设在时钟上升沿时,SPIDAT将数据最高位发送出去, 然后将剩余数据左移一位,接下来

31、在时钟脉冲下降沿时,SPIDAT锁存一位数据, 并保存至其最低位,在发送完指定位数的数据后,SPIDAT寄存器将其内部的数 据发送给接收缓冲寄存器SPIRXBUF,等待CPU读取。数据在SPIRXBUF中存 放是右对齐的,即从低位开始存储。在标准SPI模式下,接收操作支持双缓冲, 也就是在新的接收操作启动时,CPU可以暂时不读取SPIRXBUF中接收到的数 据,但是在新的接收操作完成之前,必须读取SPIRXBUF,否则将会覆盖原来接 收到的数据。发送操作同样也支持双缓冲功能。这次程序相比于以前简单地点亮几个发光管的程序来说,无论从程序的大小 还是程序设计思想上,都更进了一步。尽管一些重要的程序段比如按键扫描程序、 键盘功能设计程序、数码管显示程序还包括一些必要的定义等等都在老师的指导 下帮助我们更好地理解,并且给了我们一些相关子程序的范例,但是再深刻理解 以及进一步熟悉DSP2812芯片内部结构和开发板结构的基础上,自己编写相关 模块功能,完成这个程序使其正确实现目标功能还是需要花费一些时间去思考 的。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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