|
|
课题1 门打开次数计数•显示功能的实现 | |||||
| ■ 課題1 4. 门开关状态(RB0)→到LED#4(RB4)的正逻辑输出
2006年4月5日 16:36 更新
|
●课题1的目标作为课题1,完成「门开放次数计数•显示功能的实现」课题的提出。→从这儿提出课题 基本的实际制作方针如下所示。 ・创建累计次数的变量(8bit) ●创建次数计数器用变量counter(2003/10/12更新)在寄存器BANK#3中创建累计次数的变量counter <实际配置例>
考虑到以后,预先一次创建4个计数器。对BANK#3的寄存器的直接访问,在把STATUS寄存器的RP1与RP0设定为1之后,执行存储区切换之后进行参照。(不理解的同学请参考说明书的14页) ※2003/10/12更新处:当初,从1B0开始的4个字节预留给counter变量,但是,现在已经判明,从web控制画面上频繁地对RB5进行切换,从web浏览器连续进行reload处理的话,在1B0附近的通用寄存器的某处会有数值进入。由于这个区域实际上并没有用EQU进行变量定义,是定做的v12.asm的通用寄存器操作(RP0,RP1)的关系而产生不良,还是PIC16F877自身的问题,现在还不清楚。为了回避这个问题,变更为把从1E0开始的4个字节预留给counter变量。无论如何,因为在BANK#3是不会改变的,以下的说明和修正以前没有变化。另外,变量counter的初始化,可以在start模块的最后部分进行。 ●内部计时器TMR1•中断处理例行程序注意点:课题0中,紧接main0标签之后,为了test模块call处理,曾经追加了4个步骤,并确认了其动作。(参照课题0的这部分) 但是,在课题1之后,实际制作的模块的呼出,由于是跳越时间中断例行程序的形式,对于在课题0种紧接main0之后追加的呼出处理,请务必变为无效或者删除。(2005/5/3追记) ※针对PIC16F877+PICNIC固件v12.asm的现状的有关内部时间•中断处理关系的说明参照这儿。
在中断例行程序内,增加无用的编码事实是困难的(程序内存PAGE#0已经满了)。 从中断例行程序中,把存在于程序内存PAGE#3的外部模块PCLATH , goto 跳越→中断→中断程序内的返回用Tag,按照这样返回是容易的,所以我们采用这种方法。
在上面的例子中,从中断处理例行程序内部是按这样的顺序执行的: int_tmr1→转移到test4→(计数处理)→返回int_tmr9→int_tmr2 ●门开关状态(RB0)→到LED#4(RB4)的正逻辑输出参照指南(课题0)中的实验4(test2模块) 【实验4】RB0(门传感器)→输出到RB4(LED#4)的test2模块的制作
●门开关次数的计数模块:test4一定是从中断处理例行程序以13.1msec的间隔被呼出。 由于是从中断例行程序中的呼出,在指南(课题0)中说明的,由wk2,wk1保存STATUS,W寄存器的值是危险的。 ・不对STATUS值进行维护
・门有没有打开?(RB0的确认) test4模块侧
●把次数计数器显示到web控制页面把累计的变量counter的值(8bit)在web控制画面显示。 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ <变更后>
<处理顺序的例子>
●执行例・电源投入之后 → 在开闭一次门之后 → .... → 第10次 对应门的状态,LED#4(RB4)亮灯,灭灯。 ●课题1的提交
(1)完成实现门开闭次数计数•显示功能的各种模块的制作。 (2)利用门传感器状态,web控制画面上的RB5状态变化功能,确认是否按照手册正常动作。 (3)变更汇编源程序文件的版本编号为ver1.2.0.6。 另外,把web控制换面的封面部分,适当地变更为自己的学籍编号等。 (4)把完成的汇编源程序文件以v1206e1.asm命名保存(全部使用半角英文字母数字•字母用小写,半角日文片假名•绝对不可以使用全角文字命名文件名) (5)从以下的报告提出系统,上传v1206e1.asm ,在接收到报告后进行评分。 <提出方法> 提出的文件,在经过动作确认后,假如有动作不良的场合需要再次提出,动作ok的场合,评判为完了。 报告课题1(课题编号:picnic-exp01)的提出从这儿进入 (6)显示「等待评判」,请稍微等待。评判结果长时间不出来的场合,请发送邮件至这儿。 (7)被评判为再次提出的场合,修改指出的不完善的地方,更改v1206e1a.asm等文件名,再次提出。 (8)不是(7)的场合(评判为完了),报告课题0被受理,完了。
●考察要点在下面举出针对这次的规格与实际操作的考察要点。无须作为报告来回答,但是程序完成•报告提出之前,必须自己归纳思考。
[1]由于使用了8bit计数器,在门开闭256次时,变量会溢出,次数恢复至0。为了防止这个该如何进行改善? [2]作为门的开闭次数,假如使用16bit计数器,在实际使用时,不产生溢出。为此,需要更改的是哪部分? [3]在把响铃时间非常长(TMR1时间中断间隔的3倍左右)的门开关闭合的场合,对于1次的开闭动作,有可能会累计为2次以上,存在发生这样错误计数可能性。为了防止这个该如何进行改善? [4]次数计数器counter在复位后,在某处应该被设定为初始值=0。这个具体地可以在何处实际操作
|
|||||
|
wasaki@cs.shinshu-u.ac.jp |