;-------------------------------------------------------------------------*
;工 程 名:Timer                                                           *
;硬件连接:                                                                *
;    (1)MCU的串口与PC方的串口相连                                         *
;程序描述:                                                                *
;    (1)从串口接收表示时间的3字节数据                                     *
;    (2)利用定时器溢出中断修改时间,并发送新时间                           *
;目    的:学习定时器基本功能                                              *
;----------------苏州大学飞思卡尔嵌入式系统实验室2009年-------------------*
 INCLUDE 'Includes.inc'

 XDEF _Startup, main            ;定义可以被外部调用的函数
 XDEF Flag
 XDEF Time
 XREF __SEG_END_SSTACK 
; 变量段
MY_ZEROPAGE: SECTION  SHORT     ;在此处定义变量
Flag: DS.B 1                     ;定义时间变化标志
Time: DS.B 3
; 代码段
MyCode:      SECTION  

main:                  
_Startup:
        SEI
        LDHX  #__SEG_END_SSTACK ;初始化堆栈指针               
        TXS 
        LDA  #0                 ;初始化时分秒
        STA  Time
        STA  Time + 1
        STA  Time + 2                    
        JSR  MCUInit            ;芯片初始化  
        JSR  SCIInit            ;串口初始化
        JSR  T1init             ;定时器1初始化
        JSR  EnableT1OVInt      ;允许定时器1溢出中断
        JSR  EnableSCIReInt     ;允许串口接收中断
        CLRA
        STA  Flag               ;清标志
        CLI                     ;开放总中断   
mainLoop:
        ;检测标志是否为1
        LDA Flag
        CMP #0
        BEQ mainLoop
        JSR SecAdd1             ;秒数加一
        
        CLRA
        STA  Flag               ;清标志
        
        ;数据已经更新,发送"时分秒"
        LDA  #3
        LDHX #Time
        JSR  SCISendN

        BRA mainLoop

;SecAdd1:以秒为最小单位递增时,分,秒缓冲区的值----------*
;功能:以秒为最小单位递增时,分,秒缓冲区的值             *
;     (00:00:00-23:59:59)                              *
;入口:无                                               *
;出口:无                                               *
;全局变量:Time(存放时,分,秒值的缓冲区)                 *
;堆栈深度:2 + 1 = 3                                    *
;------------------------------------------------------*
SecAdd1:

    PSHA    ;保护A
    INC Time + 2      ;秒数加1
    LDA Time + 2
    CMP #60
    BNE SecAdd1_Exit    ;秒数未增加到60,退出
    LDA #0              ;秒数增加到60,清0
    STA Time + 2
    INC Time + 1      ;分钟数加1
    LDA Time + 1
    CMP #60 
    BNE SecAdd1_Exit    ;分钟数未增加到60,退出
    LDA #0              ;分钟数增加到60,清0
    STA Time + 1
    INC Time           ;小时数加1
    LDA Time
    CMP #24
    BNE SecAdd1_Exit    ;小时数未增加到24,退出
    LDA #0              ;小时数增加到24,清0
    STA Time
SecAdd1_Exit:
    PULA    ;恢复A
 RTS
