免电源的电话使用计时器
微控制器起始设定程序:
起始设定是每个程序一开始必须做的,主要功能是将一些会用到的硬件部份做一起始状态的设定以发挥充分的掌控能力。
从000B~0013行为起始设定程序
000B MOV A, @0x00 ;将A内放置零
000C MOV P6, A ;将P6内放置零
000D IOW 0x0E ;将WDT功能除能
000E IOW P5 ;将P5设为OUTPUT
000F IOW P6 ;将P6设为OUTPUT
在EM78系列中有所谓的MEMORY及I/O两大空间,一些MEMORY空间的寄存器处理时可用MOV、BS、BC、XOR、OR……等指令,而另一些I/O空间的控制寄存器处理时可用IOW、IOR等指令,这点不要弄混了才是。
0010 MOV A, @0x01 ;将A内放置1
0011 IOW 0x0F ;仅致能TCC中断能力
在EM78156中原本能有WDT中断、外部中断及TCC中断等三种能力,如今我们只保留TCC中断来使用。
0012 MOV A, @0x05 ;将A内放置5
0013 CONTW ;设定TCC控制寄存器
0014 ENI ;启动中断能力
TCC是一个很好用也很复杂的硬件线路,下面仅列出局部有关的地方于附录供大家参考。由于系统时基是采用32768Hz的石英晶体,故本制作之准确度应该不被怀疑才是。当选用2 CYCLE及2 CLOCK的状态时,若再将TCC设成除以64,那刚好每一秒钟TCC发生溢位中断一次。
扫描程序:
从0015--0015行,总共1行,仅做跳跃自身之用。
效果观察:
程序写到此时,倘若您手上的线路没焊错的话,那么您将会看到七字显示屏幕显示8并且以1秒亮1秒灭的速度亮灭着。
到此总共用315个指令,恭喜您的宝宝已经有心跳产生了。
2.具有七段显示能力:
有了秒的心跳之后,接下来就是加强扫描能力,使它有着正确的显示数字的能力。
TC1.ICE
;
; FILE NAME:TC1.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
SEC == 0X10 ;SECOND
ORG 0
0000 JMP INIT ;PROGRAM START
ORG 8
;TCC INTERRUPT----------------------------------------------
TCCI:
0008 INC SEC
TCCE:
0009 BC 0X0F,0 ;CLEAR TCC_INT
000A RETI
;TABLE 7 SEGEMENT-------------------------------------------
T7:
000B ADD PC,A ; GFE DCBA
000C RETL @0B01000000 ;0 0100 0000
000D RETL @0B01111001 ;1 0111 1001
000E RETL @0B00100100 ;2 0010 0100
000F RETL @0B00110000 ;3 0011 0000
0010 RETL @0B00011001 ;4 0001 1001
0011 RETL @0B00010010 ;5 0001 0010
0012 RETL @0B00000010 ;6 0000 0010
0013 RETL @0B01011000 ;7 0101 1000
0014 RETL @0B00000000 ;8 0000 0000
0015 RETL @0B00010000 ;9 0001 0000
;INIT -----------------------------------------------------------------
INIT:
0016 MOV A,@0X00
0017 MOV SEC,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 JMP SCAN
整个程序与TC0.ICE最大的差异就是增加了SEC计数的显示能力,故有三处改动:
中断子程序中有了INC SEC指令来做每秒进位的动作。
增加了LED显示屏幕七段转换表,从000B--0015行即为0到9的转换表。
扫描程序功能加强:
从0020--0026行所做之事为重覆的将SEC数字经过查表后丢到P6上。为了方便了解,此时仅对数字0有做显示动作。
效果观察:
程序到此时您会看到个位数的七字显示屏幕从0→9每秒进位一次。到9以后程序将会错乱(?Why?)。
3.具有二位数的显示能力:
能够做七段显示之后,各位最想看到的当然是二位数字的显示了,由于这里采用一共阴、一共阳的七段显示器,故处理起来还得稍费脑筋。
TC2.ICE
;
; FILE NAME:TC2.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
P5 == 0X05 ;PORT 5
P6 == 0X06 ;PORT 6
SEC == 0X10 ;SECOND
ORG 0
0000 JMP INIT ;PROGRAM START
ORG 8
;TCC INTERRUPT-------------------------------------------------
TCCI:
0008 INC SEC
TCCE:
0009 BC 0X0F,0 ;CLEAR TCC_INT
000A RETI
;TABLE 7 SEGEMENT-----------------------------------------
T7:
000B ADD PC,A ; GFE DCBA
000C RETL @0B01000000 ;0 0100 0000
000D RETL @0B01111001 ;1 0111 1001
000E RETL @0B00100100 ;2 0010 0100
000F RETL @0B00110000 ;3 0011 0000
0010 RETL @0B00011001 ;4 0001 1001
0011 RETL @0B00010010 ;5 0001 0010
0012 RETL @0B00000010 ;6 0000 0010
0013 RETL @0B01011000 ;7 0101 1000
0014 RETL @0B00000000 ;8 0000 0000
0015 RETL @0B00010000 ;9 0001 0000
;INIT -----------------------------------------------------------------
INIT:
0016 MOV A,@0X00
0017 MOV SEC
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论