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

免电源的电话使用计时器

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:55:19
,A
0018 IOW 0X0E ;DISABLE WDT
0019 IOW P5 ;PORT 5 OUTPUT
001A IOW P6 ;PORT 6 OUTPUT
001B MOV A,@0X01
001C IOW 0X0F ;ENABLE TCC_INT
001D MOV A,@0X05 ;1/64
001E CONTW
001F ENI
;SCAN --------------------------------------------------------------
SCAN:
0020 MOV A,SEC
0021 CALL T7
0022 IOW P6
0023 MOV P6,A
0024 MOV A,@255 ;DISPLAY DIGIT 0
0025 MOV P5,A
0026 MOV A,SEC
0027 CALL T7
0028 IOW P6
0029 XOR A,@0XFF
002A MOV P6,A
002B MOV A,@00 ;DISPLAY DIGIT 1
002C MOV P5,A
002D JMP SCAN
程序与TC1.ICE差异之处仅在扫描动作上不同罢了。 
若要扫共阳的位数时,必须将PORT5外设为高电位输出,而要亮的字划,在PORT6外设为低电位输入即可。若要扫共阴的位数1时,必须将PORT5外设为低电位输出即可,而要亮的字划,在PORT6外设为高电位输出即可。故有了0020--0025行,位数0的显示处理及0026--002C行,位数1的显示处理。 
效果观察: 
程序到此时您会看到二位数的七字显示屏幕,同时从0→9每秒进位一次,到9以后程序将会错乱(?Why?)。
具有限数能力: 
以上的程序对SEC(秒)都不予限数,当然会造成CALL TABLE RETEW错误发生,故底下增加MIN(分)并对SEC、MIN做59及99的限数动作。
TC3.ICE
;
; FILE NAME:TC3.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 
;
PC == 02
RF == 03 ;STATUS
FZ == 02 ;FLAG OF ZERO
FC == 00 ;FLAG OF CARRY
P5 == 0X05 ;PORT 5
P6 == 0X06 ;PORT 6
MIN == 0X10 ;MINUTE
SEC == 0X11 ;SECOND
DD == 0X12 ;DISPLAY DIGIT
DDH == 0X13 ;DISPLAY DIGIT HIGH
AB == 0X14 ;A BACK_UP
RFB == 0X15 ;RF BACK_UP
ORG 0
0000 JMP INIT ;PROGRAM START
ORG 8
;TCC INTERRUPT---------------------------------------
TCCI:
0008 MOV AB,A ;AB <- A
0009 MOV A,RF ;A <- RF
000A MOV RFB,A ;RFB<- RF
000B INC SEC
CHECK:
000C MOV A,SEC ;比较59秒
000D SUB A,@59 ;59-SEC=A
000E JBC RF,FC
000F JMP C_MIN
0010 CLR SEC
0011 INC MIN
C_MIN:
0012 MOV A,MIN ;比较99分
0013 SUB A,@99 ;99-MIN=A
0014 JBS RF,FC
0015 CLR MIN
TCCE:
0016 MOV A,RFB ;A <- RFB
0017 MOV RF,A ;RF<- RFB
0018 MOV A,AB ;A <- AB
0019 BC 0X0F,0 ;CLEAR TCC_INT
001A RETI
;TABLE 7 SEGEMENT-----------------------------------
T7:
001B ADD PC,A ; GFE DCBA
001C RETL @0B01000000 ;0 0100 0000
001D RETL @0B01111001 ;1 0111 1001
001E RETL @0B00100100 ;2 0010 0100
001F RETL @0B00110000 ;3 0011 0000
0020 RETL @0B00011001 ;4 0001 1001
0021 RETL @0B00010010 ;5 0001 0010
0022 RETL @0B00000010 ;6 0000 0010
0023 RETL @0B01011000 ;7 0101 1000
0024 RETL @0B00000000 ;8 0000 0000
0025 RETL @0B00010000 ;9 0001 0000
;INIT -----------------------------------------------
INIT:
0026 MOV A,@0X00
0027 MOV MIN,A
0028 MOV SEC,A
0029 IOW 0X0E ;DISABLE WDT
002A IOW P5 ;PORT 5 OUTPUT
002B IOW P6 ;PORT 6 OUTPUT
002C MOV A,@0X01
002D IOW 0X0F ;ENABLE TCC_INT
002E MOV A,@0X05 ;1/64
002F CONTW
0030 ENI
;SCAN -----------------------------------------------
SCAN:
0031 MOV A,MIN
HTD:
0032 CLR DDH
H_H:
0033 ADD A,@246 ;A=A-10 16进制转10进制
0034 JBS RF,FC
0035 JMP H_L
0036 INC DDH
0037 JMP H_H
H_L:
0038 ADD A,@10
0039 CALL T7 ;显示个位
003A IOW P6
003B MOV P6,A
003C MOV A,@255 ;DISPLAY DIGIT 0
003D MOV P5,A
003E MOV A,DDH ;显示十位
003F CALL T7
0040 IOW P6
0041 XOR A,@0XFF
0042 MOV P6,A
0043 MOV A,@00 ;DISPLAY DIGIT 1
0044 MOV P5,A
0045 JMP SCAN
程序与TC2.ICE差异之处有下: 
TCC中断子程序部份增加了A,R3的暂存动作及SEC、MIN的限数动作。0008--000A及0016--0018行系对A及R3做暂存及复原的动作。 
000C--0011行系对秒做59的比较动作,SEC比59大则SEC=0,MIN=MIN+1。
0012--0015行系对分做99的比较动作,若MIN比99大则MIN=0。
此处为何要对中断子程序做A及R3的暂存及复原的动作呢?这是因为在主程序(SCAN)内时时会用到A及R3,及中断子程序中也会用到A及R3之故,若不在中断前后将A及R3的数值维持不变,那么主程序将会有错乱的情形产生。
在扫描程序部份增加了16进制变成10进制的动作。纵然二位数字来显示MIN(分)的讯息是可行的,然将16进制变成10进制才能符合人类的习性。0033--0038行即在做16进制转10进制的动作,将MIN的数值拆成个位数及拾位数,并在0039--003D时显示个位数,而在003E--0044时显示拾位数。 
效果观察: 
程序到此为止,理论上已做完该完成的所有行为了。但执行起来….为何….为何….忽好忽坏呢???
完成正确功能: 
将TC3.ICE程序左看右看,上看下看,怎么看也看不出破绽出来,但为何程序跑起来很不稳定,忽好忽坏的呢?是ICE不稳呢?还是程序错误呢?答案当然是程序错误。
TC4.ICE
;
; FILE NAME:TC4.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 
;
PC == 02
RF =

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

Tags:

作者:佚名

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

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