新闻  |   论坛  |   博客  |   在线研讨会
一款多用电子时钟设计源程序
tvb2058 | 2007-09-12 10:53:21    阅读:1855   发布文章

;本源程序系`一款多用电子钟芯片'源程序,可有33关定时,且有受双限触发的定时口
 ;该程序硬件系采用PIC16C55芯片LP振荡方式外接32768Hz晶振
                ORG      000H      
TOP             XORLW    0FFH      
                XORLW    0FFH      
                XORLW    0FFH      
                XORLW    0FFH      
                MOVLW    08H         ;F 12H--1DH
依次为K1F--G3S
                MOVWF    4         
QL              CLRF     0         
                INCF     4,1       
                CLRWDT  
                MOVFW    4         
                ANDLW    1FH       
                SKPZ    
                GOTO     QL        
                CLRF     4         
                BTFSC    6,2       
                BSF      0BH,2       ;
共阳
                GOTO     CSH       
HBCD            NOP     
DBCD            ANDLW    0FH       
                CLRWDT  
                NOP     
                ADDWF    2,1       
                RETLW    01H         ;0(
共阳)
                RETLW    4FH         ;1
                RETLW    12H         ;2
                RETLW    06H         ;3
                RETLW    4CH         ;4
                RETLW    24H         ;5
                RETLW    20H         ;6
                RETLW    0FH         ;7
                RETLW    00H         ;8
                RETLW    04H         ;9
                RETLW    47H         ;A(
校时) 显示J
                RETLW    71H         ;B(
闹铃) 显示L
                RETLW    31H         ;C
                RETLW    63H         ;D(
)
                RETLW    6AH         ;E(
)
                RETLW    7EH         ;F(
)
CSH             CLRW                 ;
初始化
                TRIS     5           ;F5,3--5,0共阳显示扫描10--
                BTFSS    0BH,2     
                MOVLW    0FH       
                MOVWF    5           ;
关扫描
                MOVLW    0FH       
                TRIS     6         
                CLRF     6           ;
关闭定时输出
                BSF      6,4         ;输出关脉冲
                MOVLW    11H         ;置显示指针,F11H--,F10H--
                MOVWF    4         
                MOVLW    05H         ;F1
计数64分频
                OPTION  
                MOVLW    01H       
                MOVWF    1         
                MOVLW    0E2H      
                MOVWF    0FH       
HBEGIN          BCF      0BH,0       ;
1/8秒标志
                CLRWDT  
WAIT            BTFSC    1,0         ;
HXSCL-17
                GOTO     WAIT        ;1/64
秒检查
                MOVFW    1         
                SKPNZ   
                INCFSZ   0FH,1       ;
秒增量(21)
                GOTO     DZJC      
                GOTO     HSZCL       ;
整分处理
DZJC            ANDLW    0FH       
                SKPZ    
                GOTO     XSCL        ;
转显示处理
                BSF      0BH,0       ;0BH.0-1/8秒标志(启动/停止检测时用)
                MOVLW    0C0H      
                ANDWF    6,1         ;
(继电器)驱动脉冲
                MOVLW    0FH       
                TRIS     7         
                MOVFW    7           ;
检查按键状态(0.125S-1)
                ANDLW    0FH         ;F7,3--7,0
依次是功能,时加,分加,分减键
                SKPZ    
                GOTO     HAJCL       ;
转按键处理
XSCL            MOVF     0EH,1       ;F0EH-调节指针
                MOVLW    80H       
                SKPNZ   
                MOVLW    00H         ;
在设定时间时,秒停闪
                BTFSS    6,3       
                MOVLW    0FFH        ;
消隐时,7段码口为高阻态
                TRIS     7         
                BTFSS    0BH,2       ;
共阳/共阴选择
                GOTO     DXSCL       ;转共阴显示
                BTFSC    0BH,6     
                GOTO     HBZXS       ;
转标志显示
HXSB            MOVFW    0AH         ;时间显示(95)
                MOVWF    7           ;
输出10时码
                BSF      5,3         ;10时线
                CLRW    
                BTFSC    0BH,0     
                MOVFW    6           ;
0.125`启动/停止'检测1
                ANDLW    03H       
                MOVWF    8         
                BTFSC    8,0       
                BCF      8,1         ;
消除启动/停止竞争
                MOVFW    0         
                CALL     HBCD        ;10
                BTFSC    1,6       
                IORLW    80H         ;
准备`'数据
                BCF      5,3         ;10
                MOVWF    7         
                BTFSS    0BH,7     
                CLRF     8         
                BSF      5,2         ;
显示时
                BTFSS    6,6       
                BCF      8,0         ;
如已关,不再停止
                BTFSC    6,6       
                BCF      8,1         ;
如已开,不再启动
                BTFSC    8,0       
                BCF      6,6         ;
如停止,复位开电平
                DECF     4,1       
                SWAPF    0,0       
                CALL     HBCD        ;10
                BTFSC    1,6       
                IORLW    80H         ;
准备10分显示数据
                BCF      5,2         ;关扫描线
                MOVWF    7         
                BTFSC    8,1       
                BSF      6,6         ;
如启动,置位开电平
                BSF      5,1         ;显示10
                SWAPF    08H,1     
                MOVFW    6         
                ANDLW    0C0H      
                IORWF    08H,1     
                MOVFW    08H       
                MOVWF    6           ;
启动/停止输出
                NOP     
                MOVFW    0         
                CALL     HBCD        ;10
                BTFSC    1,6       
                IORLW    80H         ;
准备分显示数据
                BCF      5,1         ;关扫描线
                MOVWF    7         
                BSF      5,0         ;
显示分
                NOP     
                NOP     
                NOP     
                NOP     
                NOP                
                INCF     4,1         ;
恢复时指针
                SWAPF    0,0         ;准备107段码
                CALL     HBCD        ;10
                BTFSC    1,6       
                IORLW    80H       
                MOVWF    0AH         ;10
时位7段显示码暂存于F0AH
                CLRF     5         
                GOTO     HBEGIN      ;
时间显示完,转程序结束
HBZXS           RRF      0EH,0       ;调节指针(F0EH)除以2(71)
                ANDLW    0FH       
                MOVWF    1FH       
                SKPNZ   
                MOVLW    0AH         ; J 7
段码地址
                CALL     HBCD        ;(10)标志指示1(10分位)
                MOVWF    7           ;
此时可能显示[J 1 2 3]
                BSF      5,1         ;
(10分位)显示
                MOVFW    6         
                ANDLW    03H       
                MOVWF    8           ;
启动/停止数据暂存入F8
                NOP     
                MOVLW    0DH         ; U
地址
                BTFSC    0EH,0     
                MOVLW    0EH         ; n
地址
                MOVF     1FH,1     
                SKPNZ   
                MOVLW    0FH         ; -
地址
                CALL     HBCD        ;10
                BCF      5,1         ;
10分位
                MOVWF    7         
                BSF      5,0         ;
开分位,可能显示[- U n]
                BTFSS    0BH,0     
                CLRF     8           ;
0.125秒取1次启动/停止数据
                BTFSS    0BH,7     
                CLRF     8         
                BTFSC    8,0       
                BCF      8,1         ;
免除启/停竞争(停止优先)
                BTFSC    6,6       
                BCF      8,1         ;
如已开,则清启动位
                BTFSS    6,6       
                BCF      8,0         ;
如已关,则清停止位
                SWAPF    8,1       
                BTFSC    8,5       
                BSF      6,6         ;
如启动,置位开电平
                BTFSC    8,4       
                BCF      6,6         ;
如停止,复位开电平
                MOVFW    6           ;控制输出
                ANDLW    0C0H      
                IORWF    08H,1     
                MOVFW    08H       
                MOVWF    6         
                CLRF     5           ;
标志显示完
                GOTO     HBEGIN    
DXSCL           BTFSC    0BH,6     
                GOTO     DBZXS       ;
转标志显示
DXSB            MOVFW    0AH         ;时间显示(84)
                MOVWF    7           ;
输出10时码
                BCF      5,3         ;10时线
                CLRW    
                BTFSC    0BH,0     
                MOVFW    6           ;
0.125`启动/停止'检测1
                ANDLW    03H       
                MOVWF    8         
                BTFSC    8,0       
                BCF      8,1         ;
消除启动/停止竞争
                MOVFW    0         
                CALL     DBCD        ;9
                XORLW    7FH       
                BTFSC    1,6       
                IORLW    80H         ;
准备`'数据
                BSF      5,3         ;10
                MOVWF    7         
                BTFSS    0BH,7     
                CLRF     8         
                BCF      5,2         ;
显示时
                BTFSS    6,6       
                BCF      8,0         ;
如已关,不再停止
                BTFSC    6,6       
                BCF      8,1         ;
如已开,不再启动
                BTFSC    8,1       
                BSF      6,6         ;
如启动,置位开电平
                DECF     4,1       
                SWAPF    0,0       
                CALL     DBCD        ;9
                XORLW    7FH       
                BTFSC    1,6       
                IORLW    80H         ;
准备10分显示数据
                BSF      5,2         ;关扫描线
                MOVWF    7         
                BTFSC    8,0       
                BCF      6,6         ;
如停止,复位开电平
                BCF      5,1         ;显示10
                SWAPF    08H,1     
                MOVFW    6         
                ANDLW    0C0H      
                IORWF    08H,1     
                MOVFW    8         
                MOVWF    6           ;
启动/停止输出
                MOVFW    0         
                CALL     HBCD        ;9
                XORLW    7FH       
                BTFSC    1,6       
                IORLW    80H         ;
准备分显示数据
                BSF      5,1         ;关扫描线
                MOVWF    7         
                BCF      5,0         ;
显示分
                NOP     
                NOP     
                NOP     
                INCF     4,1         ;
恢复时指针
                SWAPF    0,0         ;准备107段码
                CALL     HBCD        ;10
                XORLW    7FH       
                BTFSC    1,6       
                IORLW    80H       
                MOVWF    0AH         ;10
时位7段显示码暂存于F0AH
                MOVLW    0FH       
                MOVWF    5         
                GOTO     HBEGIN      ;
时间显示完,转程序结束
DBZXS           RRF      0EH,0       ;调节指针(F0EH)除以2(66)
                ANDLW    0FH       
                MOVWF    1FH       
                SKPNZ   
                MOVLW    0AH         ; J 7
段码地址
                CALL     DBCD        ;标志指示1(10分位)
                XORLW    7FH       
                MOVWF    7           ;
此时可能显示[J 1 2 3]
                BCF      5,1         ;
(10分位)显示
                MOVFW    6         
                ANDLW    03H       
                MOVWF    8         
                MOVLW    0DH         ; U
地址
                BTFSC    0EH,0     
                MOVLW    0EH         ; n
地址
                MOVF     1FH,1     
                SKPNZ   
                MOVLW    0FH         ; -
地址
                CALL     HBCD        ;10
                XORLW    7FH       
                BSF      5,1         ;
10分位
                MOVWF    7         
                BCF      5,0         ;
开分位,可能显示[- U n]
                BTFSC    0BH,0     
                CLRF     8           ;
0.125秒取1次启动/停止数据
                BTFSS    0BH,7     
                CLRF     8           ;
启动/停止数据暂存入F8
                BTFSC    8,0       
                BCF      8,1         ;
免除启/停竞争
                BTFSC    6,6       
                BCF      8,1         ;
如已开,则清启动位
                BTFSS    6,6       
                BCF      8,0         ;
如已关,则清停止位
                SWAPF    8,1       
                BTFSC    8,5       
                BSF      6,6         ;
如启动,置位开电平
                BTFSC    8,4       
                BCF      6,6         ;
如停止,复位开电平
                MOVFW    6         
                ANDLW    0C0H      
                IORWF    8,1         ;
准备输出控制数据
                MOVFW    8         
                MOVWF    6         
                NOP     
                BSF      5,0       
                MOVLW    0FH       
                MOVWF    5           ;
标志显示完
                GOTO     HBEGIN    
HSZYS           CLRWDT  
                BTFSS    1,0       
                GOTO     HSZYS     
                GOTO     HBEGIN    
HSZCL           MOVLW    0E2H        ;
秒置初值
                MOVWF    0FH       
                INCF     10H,1       ;
分加1
                MOVLW    06H         ;
(BCD调整)
                ADDWF    10H,0     
                SKPNDC  
                MOVWF    10H       
                MOVLW    60H       
                SUBWF    10H,0   

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客