PIC16F877A数字时钟时钟程序(优推内容)
- 格式:doc
- 大小:93.50 KB
- 文档页数:19
;Digit clock
;-----------------------------------------------
;DA TE :20101205
;Author:Tang HS
;M C U :PIC16F877A
;FileName : ClockPIC.ASM
;-----------------------------------------------------------
;Date: {2010/12/07.14:35}-V er01--CS-ICD:0xAFCE---ISP:0xb7ce----
;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义
;------------------------------------------------------------
;-----------------------------------------------------------
;Date: {2010/12/07.22:15}-V er01--CS-ICD:0xAFCE---ISP:0xb7ce----
;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义
; 2.RB0-SET_KEY;RB1-ADD_KEY;RB2-SUB_KEY;RB3-EXIT_KEY
;------------------------------------------------------------
;Date: {2010/12/09.18:06}-V er02--CS-ICD:0xAFCE---ISP:0xef0e----
;************************************************************
;Date: {2010/12/10.00:47}-V er03--CS-ICD:0xb08d---ISP:0xfaa7----
;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义
; 2.RB0-SET_KEY;RB1-ADD_KEY;RB2-SUB_KEY;RB3-EXIT_KEY 都OK ; 3.MOVLW 纠正MOVV REG,1 引起的SUB_不良;
;--------------------------------------------------------------
;Date: {2010/12/10.13:10}-V er03.1--CS-ICD:0xb08b---ISP:0xfaa4----
; 4.时差。
50ms原来计数20次改为19次;250us原来计数200次改为197次;---------------------------------------------------------------
;Date: {2010/12/10.17:30}-V er03.2--CS-ICD:0x296B---ISP:0x7387----
; 5.在Set_ini中--增加CALL SET_Flag;指定Flag,1=1;标志位-
---解决Ver03.1-第一次按SET键时不能调HourL&HourH的问题
;------------------------------------------------------------
;************************************************
;程序清单
;**************************************************
__CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;************************************************
;-----------------------------------------------
include P16F877A.INC
;-----------------------------------------------
;-----------------ram varable------------------------------
HourH equ 20H ;
HourL equ 21H ;
MinH equ 22H ;
MinL equ 23H ;
SecH equ 24h ;
SecL equ 25h ; B'0010 0101'
;N250us equ 26h ;250us*200=50ms
;N50ms equ 27h ;50ms*20=1000ms
;Nsec equ 28h ;
data1 equ 29h ;定义一个廷时变量寄存器
data2 equ 2Ah ;定义另一个廷时变量寄存器
keyvalue EQU 2Bh ;
FlagKey EQU 2Ch ;
W_STK equ 2Dh ;----------------
STA TUS_STK equ 2Eh ;
PCLATH_STK equ 2Fh ;
FSR_STK equ 30h ;---------------
COUNT0 equ 31h ; DELAY use 0011 0000
COUNT1 equ 32h ;
COUNT2 equ 33h ;
Flag equ 34h ;---Adjust.Time---------
N250us equ 35h ;250us*200=50ms
N50ms equ 36h ;50ms*20=1000ms
Nsec equ 37h ;
;------------------Counstant------------------------------
n1 equ d'1';d'13' ;定义一个外层循环廷时常数d'13'(10ms) n2 equ 0ffh ;定义一个内层廷时常数
RBCOUNST equ 0x1f ;rb0~rb4读取后异或常数
;------------------bit1-----------------------------
c equ 0 ;定义进位标志位位地址
rp0 equ 5 ;定义状态寄存器的页选位RP0
NOT_RBPU equ 7 ;定义选择寄存器RB的上拉电阻位RBPU z equ 2 ;定义0状态位的位地址
F_release EQU 0 ;
F_pressed equ 1 ;
;--------------FlagKey---bit2----------------------------
;#define F_release FlagKey,0 ;按键释放标志位
;#define F_pressed FlagKey,1 ;按键闭合标志位
;-------------Flag ----------------------------------
;Flag,0 ; 时间调整标志位
;Flag,1 ; FSR=21H=HourL。