用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

免电源的电话使用计时器

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:55:19
01A BC 0X0F,0 ;CLEAR TCC_INT
001B RETI
;TABLE 7 SEGEMENT------------------------------------------------------
T7:
001C ADD PC,A ; GFE DCBA
001D RETL @0B01000000 ;0 0100 0000
001E RETL @0B01111001 ;1 0111 1001
001F RETL @0B00100100 ;2 0010 0100
0020 RETL @0B00110000 ;3 0011 0000
0021 RETL @0B00011001 ;4 0001 1001
0022 RETL @0B00010010 ;5 0001 0010
0023 RETL @0B00000010 ;6 0000 0010
0024 RETL @0B01011000 ;7 0101 1000
0025 RETL @0B00000000 ;8 0000 0000
0026 RETL @0B00010000 ;9 0001 0000
;DELAY ------------------------------------------------------------------------
DELAY:
0027 MOV P5,A
0028 MOV A,@20
0029 MOV DL,A 
D_1:
002A DJZ DL
002B JMP D_1
002C MOV A,@0XFF
002D IOW P6
002E RET
;INIT ------------------------------------------------------------------------------
INIT:
002F MOV A,@0X00
0030 MOV MIN,A
0031 MOV SEC,A
0032 IOW 0X0E ;DISABLE WDT
0033 IOW P5 ;PORT 5 OUTPUT
0034 IOW P6 ;PORT 6 OUTPUT
0035 MOV A,@0X01
0036 IOW 0X0F ;ENABLE TCC_INT
0037 MOV A,@0X05 ;1/64
0038 CONTW
0039 ENI
;SCAN ---------------------------------------------------------------------------
SCAN:
003A MOV A,MIN
HTD:
003B CLR DDH
H_H:
003C ADD A,@246 ;A=A-10
003D JBS RF,FC
003E JMP H_L
003F INC DDH
0040 JMP H_H 
H_L:
0041 ADD A,@10
0042 CALL T7
0043 IOW P6
0044 MOV P6,A
0045 MOV A,@255 ;DISPLAY DIGIT 0
0046 CALL DELAY
0047 MOV A,DDH
0048 CALL T7
0049 IOW P6
004A XOR A,@0XFF
004B MOV P6,A
004C MOV A,@00 ;DISPLAY DIGIT 1
004D CALL DELAY
004E JMP SCAN 
程序说明:
程序就像日常说话一样,只要能够表达清楚意思,那么,愈短愈受人欢迎(当然得在保证有正常功能的情况下而言)。此次DIY制作的软件程序长度仅有78个指令,够短了吧,相信看懂也不难。整个程序可以分成5个段落来做说明,寄存器使用说明:
DL ----- 子程序用寄存器
MIN ----- 存放分钟资料寄存器
SEC ----- 存放秒钟资料寄存器
DD ----- 存放显示位数资料寄存器
DDH ----- 存放显示资料寄存器
AB ----- 存放ACC的副本
RFB ----- 存放STATUS的副本 
TCC中断子程序: 
从0000--001B行为每秒发生一次的TCC中断子程序,其中0008--000B及0017--0019行为进入及离开中断子程序的ACC及STATUS保留动作。其中000C为每进入一次中断子程序就将SEC这寄存器予以进位。其中000D--0012为判断SEC寄存器是否大于59,是则将MIN寄存器予以进位并清除SEC寄存器。其中0013--0016为判断MIN寄存器是否大于99,是则将MIN寄存器予以清除,其中001A为清除TCC中断旗标。
LED字型转换程序: 
从001C--0026行存放了字型转换表,可将0--9的数字转成相对的LED七字显示器的资料。
显示时间长度延迟程序: 
从0028--002B延迟程序,而0027及002C--002D为启动显示及关掉显示之指令。
微控制器启始设定程序: 
从002F--0039行对微控制器内部相关硬件做了必要性的设定动作。值得特别一提的是0035--0039行对TCC中断记数器予以设定成每秒中断一次。计算式如下:
系统时基/(2周期模式×1秒×256进位)而得预除数为64。
5.LED七字显示器扫描主程序: 
从003A--004E行为本软件程序之主程序部份,又可分三部份。003C--0040行为取得MIN的拾位数之值。0042--0046行显示MIN的个位数资料到共阳极的LED七字显示器上。0047--004D行为显示MIN的拾位数资料到共阴极的LED七字显示器上。希望这短短的程序难不倒您才是。

程序撰写步骤:
许多人习惯上撰写程序的过程是依照「先小而大」,「先难后繁」,「边测边写」aspx" target=_self>javascript:window.open(this.src);" style="cursor:pointer;"/>等三项原则来从事的,底下便将电话使用计时器程序分成八个段落来完成。 
1.先给予心跳: 

一般撰写程序碰到计时的工作时不外乎三个方式来解决:

「用TIMER计数器来产生中断来计时」「用POLLING TIMER计数器来计时」
「用计算程序指令个数来计时」
这三个方式中以方式一最为简单也最为准确,故这里打算最重要之秒的进位问题就交给TIMER计数器中断方式来解决了。
TC0.ICE
;
; FILE NAME:TC0.DT 
; DATE :1999,5,5 
; BY :HWANG JYN_GUO 
;
; FUNCTION DESCRIPTION: 
; USING TCC TO GET 1 SEC INTERRUPT 
; 32768/(2*64*256)= 1 SEC 
; CRYSTAL MODE 32768 Hz 
; 2 CYCLE AND 2 CLOCK MODE 
;
P5 == 0X05 ;PORT 5
P6 == 0X06 ;PORT 6
ORG 0
0000 JMP INIT ;PROGRAM START
ORG 8
;TCC INTERRUPT-------------------------------------------------------
TCCI:
0008 COM P6
TCCE:
0009 BC 0X0F,0 ;CLEAR TCC_INT
000A RETI
;INIT -------------------------------------------------------------------------
INIT:
000B MOV A,@0X00
000C MOV P6,A ;PORT 6 = 0
000D IOW 0X0E ;DISABLE WDT
000E IOW P5 ;PORT 5 OUTPUT
000F IOW P6 ;PORT 6 OUTPUT
0010 MOV A,@0X01
0011 IOW 0X0F ;ENABLE TCC_INT
0012 MOV A,@0X05 ;1/64
0013 CONTW
0014 ENI
;SCAN -----------------------------------------------------------------------
SCAN:
0015 JMP SCAN
这程序的目的是欲了解TCC中断能否满足秒的进位问题。
程序说明: 
中断子程序: 
从0008--000

上一页  [1] [2] [3] [4] [5] [6] [7] [8]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:16,390.63000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号