天津大学智能装置课程设计电子时钟教材.docx

上传人:b****6 文档编号:4015335 上传时间:2022-11-27 格式:DOCX 页数:41 大小:29.53KB
下载 相关 举报
天津大学智能装置课程设计电子时钟教材.docx_第1页
第1页 / 共41页
天津大学智能装置课程设计电子时钟教材.docx_第2页
第2页 / 共41页
天津大学智能装置课程设计电子时钟教材.docx_第3页
第3页 / 共41页
天津大学智能装置课程设计电子时钟教材.docx_第4页
第4页 / 共41页
天津大学智能装置课程设计电子时钟教材.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

天津大学智能装置课程设计电子时钟教材.docx

《天津大学智能装置课程设计电子时钟教材.docx》由会员分享,可在线阅读,更多相关《天津大学智能装置课程设计电子时钟教材.docx(41页珍藏版)》请在冰豆网上搜索。

天津大学智能装置课程设计电子时钟教材.docx

天津大学智能装置课程设计电子时钟教材

 

智能装置课程设计

 

 

一.课程设计目的:

1.深入了解PIC16F877单片机的工作原理,熟练掌握汇编语言程序设计方法,熟练使用MPLAB-ICD仿真器及MPLAB-IDE仿真调试软件。

2.通过该课程设计使学生初步掌握以单片机为核心的智能装置设计的简单原则、步骤和方法。

3.熟悉智能装置设计中有关的硬件设计调试,如人机界面等。

4.熟悉智能装置设计中相关软件的设计、编程和调试。

二.课程设计内容

1.以16F877单片机为核心,结合给出的其他原器件和智能装置实验系统原有的内容设计电子时钟硬件电路电路。

2.利用实验板上的半导体温度传感器和四个独立按键,温度传感器按其原理介绍采集,时钟利用液晶显示器进行显示。

3.时钟按照时分秒、温度以及年月日显示,并可以利用按键逐位进行修改设置。

4.利用PIC16F877自带EEPROM进行掉电保护(选做)。

三.课程设计要求:

1.根据实验指导书的设计内容及和智能装智实验系统所给出的元件,设计电子时钟的硬件原理图。

2.按照设计好的硬件原理图在实验系统上用导线搭建硬件电路。

3.用万用表检查硬件电路连接是否正确,检查无误后上电并编制简单的测试程序分步调试各部分功能。

4.在各部分功能实现后,编制完整的电子时钟系统软件,并进行软硬件联调,直到达到设计要求。

5.按照设计内容要求测试仪表误差并做分析,给出仪表精度,完成后由教师进行验收检查。

四.课程设计设备

仪器:

MPLAB-ICD模块与仿真头

智能装置实验系统

安装了MPLAB-IDE开发软件的计算机

数字万用表

导线若干

五.课程设计硬件原理图:

七.课程设计硬件设计思路:

电子时钟的硬件接线比较简单,复杂之处在于程序的设计,需要外部连接的硬件只有LCD液晶显示屏以及按键。

1.LCD屏写数据是串行输入,所以产生时序的问题。

LCD显示输出采用手动时钟完成,这样便于控制时序,且传送字符时的传输效率比较高,当采用其他总线传送方式的时候,由于计算机在传送每个字节前也会加上相应的头部,这样与LCD所要求的时序不符,控制需要三条线,一条时钟线,一条数据线,一条片选线,三条线互相配合保证将数据正确写入LCD的数据缓冲区。

所以使用三条I/O端口线向LCD写数据,选用RD0~RD2控制,其中RD0接CS端,RD1接CLK,RD2接SID。

2.四个按键分别与RC0.RC1.RC2.RC3相连,按键低电平有效,采用扫描方式判断哪一个按键按下。

八.调试步骤以及各步骤调试过程中出现的问题与解决方法:

1.LCD输出调试:

由于所有实验现象都要在LCD屏显试才能看到,所以这是首先要调试好的一个程序。

最初接线完成之后没有显示,先确定了一遍接线没有问题,进而检查程序。

首先进行调试的是写命令子程序,方法就是将显示状态开/关的控制字设置成显示光标,如果这句控制字能够成功写入,屏幕上将有一个光标,则至少时钟书写命令程序是正确的,经试验写命令程序时正确的,后来在检查写数据程序时发现时首地址设错了,上行是80H到87H,我们给的首地址是89H,改变地址后输出正常。

后来又产生一个问题就是在输出多个字的时候容易产生乱码,我们的解决方式是每写完一条指令后需要加一段短延时,大致在20ms左右,这样保证屏幕完成指令接收,并保证下一条指令可以正确写入。

2.二进制转BCD模块调试:

由于只有将LCD输出模块与二进制转BCD码程序调试成功,才能看到实验现象进而调试其他模块,所以首先要将二进制转BCD码程序调试成功。

此子程序采用了简单的加三移位算法,方法是结果字节首先清零,然后待转换字节向左移动8次,每次移动后都检查第四位LSD加3是否大于7,如果是则加3,否则不加,高四位MSD做同样处理。

如果是要变换双字节的16位二进制,则要将待转换字节左移16次。

在调试过程中整体比较顺利。

3.时分秒计时模块:

在调试本模块的过程中,出现了时间已到60秒但是分钟数没有进位的情况,单步执行后发现是判断语句发生了问题。

我们采用了XORLW这个语句,将秒数与60相异或,然后判断零标志位,当秒数到达六十时,异或操作使status寄存器零标志位为1,我们误以为这时候零标志位为零,所以判断语句用反,将BTFSS用成BTFSC,改正后,时分秒计时子程序正常工作。

4.年月日模块:

这是程序中最为复杂的程序因为年月日计时子程序不仅仅要解决进位的问题,在每个月都要分清不同的天数,还有平闰年的问题,所以这部分子程序最为复杂。

在日期数加一之前首先要确定本月月数。

为了使程序具有更高的可读性,在编辑程序时舍弃了那些逻辑复杂的简便月份判断方法,如是不是1,3,5,7,8,10,12月,再使日期进时可以加到31天,本模块的设计思路是先判断月份是几月,确定好月份之后再转到相应的日期判断子程序中,这样的代价就是使程序的长度边长,有了12段的简单重复,但好处是使程序简单易读,便于调试。

在调试过程中,出问题的是判断平闰年程序,当从二月变到三月的时候,不论是否是平年还是闰年最后2月都是只记28天。

经过单步执行,发现是我们没有给程序设置一个公共出口,在判断平闰年是,即使判断是闰年,但是由于判断闰年的程序的出口是确定本年是平年的程序,所以不管是不是闰年,程序的最终出口都是将年份数判断为平年,即二月的输出只有28天,解决方案是增加程序的公共出口,判断完平闰年后,程序返回,经调试,程序正常。

5.温度检测模块:

温度检测的难点是如何将AD转换后的得到的10位二进制数转化为对应的温度数,PIC单片机中ad模块的输入电压是5伏,温度传感器的输出电压为1伏时对应温度为100度,5V对应的是ad转换后的3FFH,经换算,可得到如下对应关系,1度对应0.05V,3ffh换算成为十进制为1023,约等于1000,通过近似,可知0.005V对应一个二进制位,在编程时,将ad转换后的二进制数减去1000,余数再进行转换才是以0度为基准的温度值,将余数除以2之后得到的二进制数即为当前温度,将温度的二进制形式作为入口参数调用二进制转BCD程序,之后就可以输出在LCD屏上了。

在ad转换程序中设置的是右对齐,最高的两位直接舍弃不用,因为只有当大于100度时最高两位才有数,但是如果作为测量试问的程序来说室温基本不会到那么高,所以可以将最高两位不带入计算了。

本程序的温度检测模块检测温度精度是0.5度。

6.按键模块:

按键模块的设计思路是在一秒中多次将RC口中的状态读进来,在没有按键按下时输入为FFH,一旦有按键输入,相应位置零,输入改变,通过判断是哪一位的输入置零,知道是哪个按键按下,之后再转到相应的案件处理子程序中。

在调试过程中,出现了按键响应不灵敏的问题,同时电子钟一秒定时的时间增加了。

在没有加入按键模块之前,一秒定时准确度比较高,加入按键模块之后一秒定时时间明显加大,我们怀疑是每秒中按键扫描次数过多导致,在减少扫描次数后情况好转,我们在定时程序中调用按键扫描程序,定时程序是120ms乘以5,每次定时器120ms到时调用一次按键扫描程序。

7.EEPROM读写模块:

我们直接应用了书上的EEPROM读写模块例程,理论上程序执行不应该出错,但是当实际执行的时候发现数据无法写入也无法读出,经过询问老师,我们了解到在本仿真软件的环境下对EEPROM的操作都要经过手动刷新,这样数据才能写入和读出。

 

软件设计流程框图

程序初始化

调用EEPROM读程序

调用一秒延时程序

调用温度检测程序

是否到24:

59:

59否

调用年月日计时程序

调用输出程序

调用EEPROM写程序

程序结束

软件程序清单:

LISTP=16F877

#INCLUDE

SPTEMEQU20H

BINTEMEQU21H

LED_TEMEQU22H

GENE1EQU23H

GENE2EQU24H

LEHEQU25H

LEMEQU26H

LELEQU27H

COUNT1EQU28H

COUNT2EQU29H

COUNT3EQU30H

COUNTEQU31H

GENE3EQU33H

GENE4EQU34H

GENE5EQU35H

DECTEMLOEQU36H

DECTEMHIEQU37H

TEMPEQU38H

SECEQU39H

MINEQU40H

HOUEQU41H

YEAREQU42H

MONTHEQU43H

DAYEQU44H

PINGRUNEQU45H

WENDUEQU46H

WENDU4EQU47H

HOUTEMPEQU48H

TAGEQU50H

HMEQU51H

MODJISHUEQU52H

ORG0050H

START;主程序

BSFSTATUS,RP0

BCFSTATUS,RP1

MOVLW01H;RA0输入,其他不用。

MOVWFTRISA

MOVLW0FFH;RC1234INPUT。

MOVWFTRISC

MOVLW00H

MOVWFTRISD;RD0、RD1、RD2输出。

MOVLW20H

MOVWFOPTION_REG

MOVLW00H

MOVWFINTCON;Timer0作计数器,初始化

BCFSTATUS,RP0

MOVLW31H

MOVWFT1CON;Timer1作定时器,定时1s,初始化

MOVLW01H

MOVWFMODJISHU

CLRFHM

CLRFSEC

CLRFMIN

CLRFHOU

CLRFPORTB

MOVLW17H

MOVWFHOU

MOVLW3BH

MOVWFMIN

MOVLW30H

MOVWFSEC

MOVLW10H

MOVWFYEAR

MOVLW02H

MOVWFMONTH

MOVLW1CH

MOVWFDAY

LEDOUT;LCD屏显示部分

MOVLW00H

MOVWFPORTD;准备传输

MOVLW01H

MOVWFLED_TEM;清除显示

CALLLEDORD

MOVLW20H;功能设定

MOVWFLED_TEM

CALLLEDORD

MOVLW02H;地址归位

MOVWFLED_TEM

CALLLEDORD

MOVLW06H;进入点设定

MOVWFLED_TEM

CALLLEDORD

MOVLW0CH;显示状态开,无光标

MOVWFLED_TEM

CALLLEDORD

MOVLW01H;清除显示

MOVWFLED_TEM

CALLLEDORD

MOVLW80H;DDRAM地址复位至80H

MOVWFLED_TEM

CALLLEDORD

CALLEEPROMRD

;CALLEEPROMWR

;CALLTEMPERATURE

AE

CALLEEPROMWR

CALLINTRB

CALLTEMPERATURE

CALLINTRB

CALLOUTPUT

CALLINTRB

CALLDISPLAYSFM

CALLDELAY2

;CALLEEPROMRD

INCFSEC,1

MOVLW3CH

SUBWFSEC,0

BTFSSSTATUS,Z

GOTOAE

CLRFSEC

INCFMIN,1

MOVLW3CH

SUBWFMIN,02

BTFSSSTATUS,Z

GOTOAE

CLRFMIN

;CALLEEPROMWR

INCFHOU,1

MOVLW18H

SUBWFHOU,0

BTFSSSTATUS,Z

GOTOAE

CLRFHOU

CALLNIAN

GOTOAE

 

NIAN;年月日子程序

INCFDAY,1

IS1MOVFMONTH,0

XORLW01H

BTFSSSTATUS,Z

GOTOIS2

GOTOBE1

IS2MOVFMONTH,0

XORLW02H

BTFSSSTATUS,Z

GOTOIS3

GOTOBE2

IS3MOVFMONTH,0

XORLW03H

BTFSSSTATUS,Z

GOTOIS4

GOTOBE3

IS4MOVFMONTH,0

XORLW04H

BTFSSSTATUS,Z

GOTOIS5

GOTOBE4

IS5MOVFMONTH,0

XORLW05H

BTFSSSTATUS,Z

GOTOIS6

GOTOBE5

IS6MOVFMONTH,0

XORLW06H

BTFSSSTATUS,Z

GOTOIS7

GOTOBE6

IS7MOVFMONTH,0

XORLW07H

BTFSSSTATUS,Z

GOTOIS8

GOTOBE7

IS8MOVFMONTH,0

XORLW08H

BTFSSSTATUS,Z

GOTOIS9

GOTOBE8

IS9MOVFMONTH,0

XORLW09H

BTFSSSTATUS,Z

GOTOIS10

GOTOBE9

IS10MOVFMONTH,0

XORLW0AH

BTFSSSTATUS,Z

GOTOIS11

GOTOBE10

IS11MOVFMONTH,0

XORLW0BH

BTFSSSTATUS,Z

GOTOIS12

GOTOBE11

IS12

GOTOBE12

BE1MOVFDAY,0

XORLW20H

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE2CALLJUDGE

BTFSCPINGRUN,0

GOTORUN

MOVFDAY,0

XORLW1DH

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

RUNMOVFDAY,0

XORLW1EH

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE3MOVFDAY,0

XORLW20H

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE4MOVFDAY,0

XORLW1FH

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE5MOVFDAY,0

XORLW20H

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE6MOVFDAY,0

XORLW1FH

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE7MOVFDAY,0

XORLW20H

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE8MOVFDAY,0

XORLW20H

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE9MOVFDAY,0

XORLW1FH

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE10MOVFDAY,0

XORLW20H

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE11MOVFDAY,0

XORLW1FH

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

INCFMONTH,1

GOTOBE

BE12MOVFDAY,0

XORLW20H

BTFSSSTATUS,Z

GOTOBE

MOVLW01H

MOVWFDAY

MOVLW01H

MOVWFMONTH

INCFYEAR,1

BE

RETURN

JUDGE

BTFSCYEAR,0

GOTOSHIPING

BTFSCYEAR,1

GOTOSHIPING

BSFPINGRUN,0

GOTOFANHUI

SHIPINGBCFPINGRUN,0

FANHUIRETURN

 

TEMPERATURE;温度检测子程序

BCFSTATUS,RP0

MOVLW41H

MOVWFADCON0;选择A/D转换在RA0,并打开A/D转换

BSFSTATUS,RP0

MOVLW0x8e

MOVWFADCON1;转换结果左移,且把RA0口设置成模拟量输入

MOVLW0x01

MOVWFTRISA

BCFSTATUS,RP0

BSFADCON0,2;GO/DONE位置1,开始A/D转换

NOP

NOP

HERE

BTFSCADCON0,2;检查是否转换完成

GOTOHERE

NOP

BSFSTATUS,RP0;读取转换结果高8位信息

MOVLW69H

SUBWFADRESL,0

BCFSTATUS,RP0

MOVWFWENDU

BCFSTATUS,C

RRFWENDU,1

BTFSCSTATUS,C

GOTOAA

MOVLW30H

MOVWFWENDU4

GOTOBB

AA

MOVLW35H

MOVWFWENDU4

BB

MOVFWENDU,0

MOVWFBINTEM

CALLBINTOBCD

MOVLW95H;DDRAM地址复位至93H

MOVWFLED_TEM

CALLLEDORD

MOVLW20H

MOVWFLED_TEM;NULL位

CALLLEDDAT

MOVFLEM,0;十位

MOVWFLED_TEM

CALLLEDDAT;

MOVFLEL,0;个位

MOVWFLED_TEM

CALLLEDDAT

MOVLW2EH

MOVWFLED_TEM

CALLLEDDAT

MOVFWENDU4,0

MOVWFLED_TEM

CALLLEDDAT

BCFSTATUS,RP0

RETURN

OUTPUT

MOVLW80H;DDRAM地址至80H

MOVWFLED_TEM

CALLLEDORD

MOVLW32H

MOVWFLED_TEM

CALLLEDDAT

MOVFYEAR,0

MOVWFBINTEM

CALLBINTOBCD

MOVFLEH,W

MOVWFLED_TEM

CALLLEDDAT

MOVFLEM,W

MOVWFLED_TEM

CALLLEDDAT

MOVFLEL,0

MOVWFLED_TEM

CALLLEDDAT

MOVLW2FH;/

MOVWFLED_TEM

CALLLEDDAT

MOVFMONTH,0

MOVWFBINTEM

CALLBINTOBCD

MOVFLEM,W

MOVWFLED_TEM

CALLLEDDAT

MOVFLEL,0

MOVWFLED_TEM

CALLLEDDAT

MOVLW2FH;/

MOVWFLED_TEM

CALLLEDDAT

MOVFDAY,0

MOVWFBINTEM

CALLBINTOBCD

MOVFLEM,W

MOVWFLED_TEM

CALLLEDDAT

MOVFLEL,0

MOVWFLED_TEM

CALLLEDDAT

RETURN

DISPLAYSFM;时分秒显示子程序

CALLINTRB

MOVLW90H;DDRAM地址至90H

MOVWFLED_TEM

CALLLEDORD

MOVFHOU,0

SUBLW0BH

BTFSCSTATUS,C

GOTOLESSTHAN12

GOTOMORETHAN12

MORETHAN12

MOVLW50H

MOVWFLED_TEM

CALLLEDDAT

MOVLW4DH

MOVWFLED_TEM

CALLLEDDAT

BTFSSHM,0

GOTOSHUCHU12

GOTOSHUCHU24

SHUCHU12

MOVFHOU,0

MOVWFHOUTEMP

MOVLW0CH

SUBWFHOUTEMP,0

MOVWFBINTEM

GOTOSHUC

SHUCHU24

MOVFHOU,0

MOVWFBINTEM

GOTOSHUC

LESSTHAN12

MOVLW41H

MOVWFLED_TEM

CALLLEDDAT

MOVLW4DH

MOVWFLED_TEM

CALLLEDDAT

MOVFHOU,0

MOVWFBINTEM

GOTOSHUC

 

SHUC

CALLBINTOBCD

MOVFLEM,W

MOVWFLED_TEM

CALLLEDDAT

MOVFLEL,0

MOVWFLED_TEM

CALLLEDDAT

MOVLW3AH;:

MOVWFLED_TEM

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

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1