天津大学智能装置课程设计电子时钟教材Word文档格式.docx
- 文档编号:16931392
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:41
- 大小:29.53KB
天津大学智能装置课程设计电子时钟教材Word文档格式.docx
《天津大学智能装置课程设计电子时钟教材Word文档格式.docx》由会员分享,可在线阅读,更多相关《天津大学智能装置课程设计电子时钟教材Word文档格式.docx(41页珍藏版)》请在冰豆网上搜索。
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<
P16F877.INC>
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
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屏显示部分
MOVWFPORTD;
准备传输
MOVWFLED_TEM;
清除显示
CALLLEDORD
MOVLW20H;
功能设定
MOVWFLED_TEM
MOVLW02H;
地址归位
CALLLEDORD
MOVLW06H;
进入点设定
MOVLW0CH;
显示状态开,无光标
MOVLW80H;
DDRAM地址复位至80H
CALLEEPROMRD
;
CALLEEPROMWR
CALLTEMPERATURE
AE
CALLEEPROMWR
CALLINTRB
CALLTEMPERATURE
CALLOUTPUT
CALLDISPLAYSFM
CALLDELAY2
CALLEEPROMRD
INCFSEC,1
MOVLW3CH
SUBWFSEC,0
BTFSSSTATUS,Z
GOTOAE
INCFMIN,1
SUBWFMIN,02
INCFHOU,1
MOVLW18H
SUBWFHOU,0
CALLNIAN
NIAN;
年月日子程序
INCFDAY,1
IS1MOVFMONTH,0
XORLW01H
GOTOIS2
GOTOBE1
IS2MOVFMONTH,0
XORLW02H
GOTOIS3
GOTOBE2
IS3MOVFMONTH,0
XORLW03H
GOTOIS4
GOTOBE3
IS4MOVFMONTH,0
XORLW04H
GOTOIS5
GOTOBE4
IS5MOVFMONTH,0
XORLW05H
GOTOIS6
GOTOBE5
IS6MOVFMONTH,0
XORLW06H
GOTOIS7
GOTOBE6
IS7MOVFMONTH,0
XORLW07H
GOTOIS8
GOTOBE7
IS8MOVFMONTH,0
XORLW08H
GOTOIS9
GOTOBE8
IS9MOVFMONTH,0
XORLW09H
GOTOIS10
GOTOBE9
IS10MOVFMONTH,0
XORLW0AH
GOTOIS11
GOTOBE10
IS11MOVFMONTH,0
XORLW0BH
GOTOIS12
GOTOBE11
IS12
GOTOBE12
BE1MOVFDAY,0
XORLW20H
GOTOBE
INCFMONTH,1
BE2CALLJUDGE
BTFSCPINGRUN,0
GOTORUN
MOVFDAY,0
XORLW1DH
RUNMOVFDAY,0
XORLW1EH
BE3MOVFDAY,0
BE4MOVFDAY,0
XORLW1FH
GOTOBE
BE5MOVFDAY,0
BE6MOVFDAY,0
BE7MOVFDAY,0
BE8MOVFDAY,0
BE9MOVFDAY,0
BE10MOVFDAY,0
BE11MOVFDAY,0
BE12MOVFDAY,0
INCFYEAR,1
BE
RETURN
JUDGE
BTFSCYEAR,0
GOTOSHIPING
BTFSCYEAR,1
BSFPINGRUN,0
GOTOFANHUI
SHIPINGBCFPINGRUN,0
FANHUIRETURN
TEMPERATURE;
温度检测子程序
MOVLW41H
MOVWFADCON0;
选择A/D转换在RA0,并打开A/D转换
MOVLW0x8e
MOVWFADCON1;
转换结果左移,且把RA0口设置成模拟量输入
MOVLW0x01
BSFADCON0,2;
GO/DONE位置1,开始A/D转换
NOP
HERE
BTFSCADCON0,2;
检查是否转换完成
GOTOHERE
BSFSTATUS,RP0;
读取转换结果高8位信息
MOVLW69H
SUBWFADRESL,0
MOVWFWENDU
BCFSTATUS,C
RRFWENDU,1
BTFSCSTATUS,C
GOTOAA
MOVWFWENDU4
GOTOBB
AA
MOVLW35H
MOVWFWENDU4
BB
MOVFWENDU,0
MOVWFBINTEM
CALLBINTOBCD
MOVLW95H;
DDRAM地址复位至93H
NULL位
CALLLEDDAT
MOVFLEM,0;
十位
CALLLEDDAT;
MOVFLEL,0;
个位
MOVLW2EH
MOVFWENDU4,0
OUTPUT
DDRAM地址至80H
MOVLW32H
MOVFYEAR,0
MOVFLEH,W
MOVFLEM,W
MOVFLEL,0
MOVLW2FH;
/
MOVFMONTH,0
RETURN
DISPLAYSFM;
时分秒显示子程序
MOVLW90H;
DDRAM地址至90H
MOVFHOU,0
SUBLW0BH
GOTOLESSTHAN12
GOTOMORETHAN12
MORETHAN12
MOVLW50H
CALLLEDDAT
MOVLW4DH
BTFSSHM,0
GOTOSHUCHU12
GOTOSHUCHU24
SHUCHU12
MOVWFHOUTEMP
MOVLW0CH
SUBWFHOUTEMP,0
GOTOSHUC
SHUCHU24
LESSTHAN12
SHUC
MOVLW3AH;
:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 天津大学智能装置课程设计 电子时钟教材 天津大学 智能 装置 课程设计 电子 时钟 教材
![提示](https://static.bdocx.com/images/bang_tan.gif)