DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1495|回复: 2
打印 上一主题 下一主题

PIC单片机电子钟(已测试OK)

  [复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:44:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  
         
    ;**********************************************************
TMR0        EQU    01H          ;定义定时器/计数器0寄存器地址
PCL         EQU    02H          ;定义程序计数器低字节寄存器地址
STATUS      EQU    03H          ;定义状态寄存器地址
PORTA       EQU    05H          ;定义RA口数据寄存器地址
TRISA       EQU    85H          ;定义RA口方向控制寄存器地址
PORTB       EQU    06H          ;定义RB的数据寄存器地址
TRISB       EQU    86H          ;定义RB的方向控制寄存器地址
PORTC       EQU    07H          ;定义RC口数据寄存器地址
TRISC       EQU    87H          ;定义RC口方向控制寄存器地址
PORTD       EQU    08H          ;定义RD口数据寄存器地址
TRISD       EQU    88H          ;定义RD口方向控制寄存器地址
PORTE       EQU    09H          ;定义RE口数据寄存器地址
TRISE       EQU    89H          ;定义RE口方向控制寄存器地址
INTCON      EQU    0BH          ;定义中断控制寄存器地址
OPTION_REG  EQU    81H          ;定义选项寄存器地址
ADCON1      EQU    9FH          ;定义ADC模块控制寄存器1的地址
C           EQU    0            ;定义进位标志位的位地址
Z           EQU    2            ;定义0标志位的位地址
RP0         EQU    5            ;定义状态寄存器中的页选位RP0
W           EQU    0            ;定义传送目标寄存器为W的指示位
F           EQU    1            ;定义传送目标寄存器为RAM的指示位
T0IF        EQU    2            ;定义TMR0中断标志位的位地址
T0IE        EQU    5            ;定义TMR0中断使能位的位地址
INTE        EQU    4            ;定义外部中断使能位的位地址
INTF        EQU    1            ;定义外部中断标志位的位地址
RBIF        EQU    0            ;
DC          EQU    1            ;
RBIE        EQU    3            ;
GIE         EQU    7            ;
PSA         EQU    3            ;
RB4         EQU    4            ;
RB5         EQU    5            ;
RB6         EQU    6            ;
RB7         EQU    7            ;
FLAG        EQU   20H           ;
N1          EQU   D'2'          ;
N2          EQU   D'30'         ;
DATA1       EQU   21H           ;
DATA2       EQU   22H           ;
DATA3       EQU   23H           ;
DATA4       EQU   24H           ;
BUF         EQU   28H           ;
BUF1        EQU   29H           ;
BUF2        EQU   2AH           ;
BUF3        EQU   2BH           ;
BUF4        EQU   2CH           ;
BUF5        EQU   2DH           ;
CNT1        EQU   2EH           ;
CNT2        EQU   2FH           ;
CNT3        EQU   30H           ;
CNT4        EQU   31H           ;
PORTB_B     EQU   27H           ;
PORTC_B     EQU   32H           ;
OPTION_TEMP EQU   33H           ;
PCLATH_B    EQU   34H           ;
W_TEMP      EQU   7FH           ;W现场保护寄存器
STATUS_TEMP EQU   35H           ;STATUS现场保护寄存器
BUF_TEMP    EQU   36H           ;
BUF_TEMP1   EQU   37H           ;
BUF1_TEMP   EQU   38H           ;
BUF1_TEMP1  EQU   39H           ;
PORTB_TEMP  EQU   3AH           ;
PORTD_B     EQU   3BH           ;
BUF2_TEMP   EQU   3CH           ;
BUF2_TEMP1  EQU   3DH           ;
BUFF        EQU   3EH           ;

         ORG     000H           ;
         NOP                    ;放置一条ICD必需的空操作指令
         GOTO    MAIN           ;
         ORG     004H           ;
         GOTO    INTSERV        ;         
         ORG     008H           ;
MAIN     
         BSF     STATUS,RP0     ;设置寄存器体1
         MOVLW   07H            ;PSA=0 for tmr0, PS2,PS1,PS0=1 分频比1:256
         MOVWF   OPTION_REG     ;预分频器分配给定时器0,开启RB口弱上拉.
         MOVLW   07H            ;
         MOVWF   ADCON1         ;设置RA口全部为普通数字IO口
         MOVLW   00H            ;
         MOVWF   TRISC          ;RC口全部为输出
         MOVWF   TRISD          ;RD口全部为输出
         MOVLW   0FFH           ;
         MOVWF   TRISB          ;RB口全部为输入
         BCF     STATUS,RP0     ;恢复寄存器体0
;**********************************   
KEYLOOP
         CALL   DISP2           ;
         MOVF   PORTB,W         ;
         ANDLW  B'00110111'     ;
         XORLW  B'00110111'     ;
         BTFSC  STATUS,Z        ;
         GOTO   KEYLOOP         ;
         CALL   delay10ms       ;
         MOVF   PORTB,W         ;
         ANDLW  B'00110111'     ;
         XORLW  B'00110111'     ;
         BTFSC  STATUS,Z        ;
         GOTO   KEYLOOP         ;
;*********************************
         BTFSS  PORTB, 0        ;
         GOTO   KEY0            ;
         BTFSS  PORTB, 1        ;
         GOTO   KEY1            ;
         BTFSS  PORTB, 2        ;
         GOTO   KEY2            ;
         BTFSS  PORTB, 4        ;
         GOTO   KEY3            ;
         BTFSS  PORTB, 5        ;
         GOTO   KEY4            ;
         GOTO   KEYLOOP         ;
;*********************************
KEY0     MOVLW  0A0H            ;
         MOVWF  INTCON          ;
         MOVLW  .16             ;
         MOVWF  CNT2            ;
         MOVLW  .12             ;
         MOVWF  TMR0            ;
         GOTO   WAITREL         ;
;*********************************
KEY4     MOVLW  00H             ;
         MOVWF  INTCON          ;
         GOTO   WAITREL         ;
;*********************************
KEY1     INCF   BUF1, 1         ;
         MOVF   BUF1, W         ;
         ANDLW  0FH             ;
         XORLW  0AH             ;
         BTFSC  STATUS,Z        ;
         GOTO   MIN_L           ;
         GOTO   WAITREL         ;
MIN_L    MOVF   BUF1, W         ;
         ANDLW  0F0H            ;
         MOVWF  BUF1            ;
         GOTO   WAITREL         ;
KEY2     MOVLW  10H             ;
         ADDWF  BUF1, F         ;
         MOVF   BUF1, W         ;
         ANDLW  0F0H            ;
         XORLW  60H             ;
         BTFSC  STATUS,Z        ;
         GOTO   MIN_H           ;
         GOTO   WAITREL         ;
MIN_H    MOVF   BUF1, W         ;
         ANDLW  0FH             ;
         MOVWF  BUF1            ;
         GOTO   WAITREL         ;
KEY3     INCF   BUF2, 1         ;
         MOVF   BUF2, W         ;
         ANDLW  0FH             ;
         XORLW  0AH             ;
         BTFSC  STATUS,Z        ;
         GOTO   HOUR_L          ;
         GOTO   HOUR_H          ;
HOUR_L   MOVF   BUF2, W         ;
         ANDLW  0F0H            ;
         MOVWF  BUF2            ;
         MOVLW  10H             ;
         ADDWF  BUF2, F         ;
         MOVF   BUF2, W         ;
         ANDLW  0F0H            ;
         XORLW  20H             ;
         BTFSC  STATUS,Z        ;
         GOTO   HOUR_H          ;
HOUR_H   MOVF   BUF2, W         ;
         XORLW  24H             ;
         BTFSC  STATUS,Z        ;
         CLRF   BUF2            ;
WAITREL  CALL   DISP2           ;
         MOVF   PORTB,W         ;
         ANDLW  B'00110111'     ;
         XORLW  B'00110111'     ;
         BTFSC  STATUS,Z        ;
         GOTO   KEYLOOP1        ;
         GOTO   WAITREL         ;
KEYLOOP1 CALL   delay10ms       ;
         GOTO   KEYLOOP         ;
;*********************************
INTSERV
         MOVWF   W_TEMP         ;
         SWAPF   STATUS,W       ;
         CLRF    STATUS         ;
         MOVWF   STATUS_TEMP    ;
         BCF     INTCON,T0IF    ;
         DECFSZ  CNT2,1         ;
         GOTO    KEYOUT         ;
         MOVLW   .16            ;
         MOVWF   CNT2           ;
         INCF    BUF,1          ;
         MOVF    BUF,W          ;
         ANDLW   0FH            ;
         XORLW   0AH            ;
         BTFSS   STATUS,Z       ;
         GOTO    KEYOUT         ;
         MOVF    BUF,W          ;
         ANDLW   0F0H           ;
         MOVWF   BUF            ;
         MOVLW   10H            ;
         ADDWF   BUF,1          ;
         MOVF    BUF,W          ;
         ANDLW   0F0H           ;
         XORLW   60H            ;
         BTFSS   STATUS,Z       ;
         GOTO    KEYOUT         ;
         CLRF    BUF            ;
         INCF    BUF1,1         ;
         MOVF    BUF1,W         ;
         ANDLW   0FH            ;
         XORLW   0AH            ;
         BTFSS   STATUS,Z       ;
         GOTO    KEYOUT         ;
         MOVF    BUF1,W         ;
         ANDLW   0F0H           ;
         MOVWF   BUF1           ;
         MOVLW   10H            ;
         ADDWF   BUF1,1         ;
         MOVF    BUF1,W         ;
         ANDLW   0F0H           ;
         XORLW   60H            ;
         BTFSS   STATUS,Z       ;
         GOTO    KEYOUT         ;
         CLRF    BUF1           ;
         INCF    BUF2,1         ;
         MOVF    BUF2,W         ;
         ANDLW   0FH            ;
         XORLW   0AH            ;
         BTFSS   STATUS,Z       ;
         GOTO    HOUR_OUT       ;
         MOVF    BUF2,W         ;
         ANDLW   0F0H           ;
         MOVWF   BUF2           ;
         MOVLW   10H            ;
         ADDWF   BUF2,1         ;
         MOVF    BUF2,W         ;
         ANDLW   0F0H           ;
         XORLW   20H            ;
         BTFSS   STATUS,Z       ;
         GOTO    HOUR_OUT       ;
HOUR_OUT MOVF    BUF2, W        ;
         XORLW   24H            ;
         BTFSC   STATUS,Z       ;
         CLRF    BUF2           ;
KEYOUT   MOVLW   .12            ;
         MOVWF   TMR0           ;
         SWAPF   STATUS_TEMP,W  ;
         MOVWF   STATUS         ;
         SWAPF   W_TEMP,F       ;
         SWAPF   W_TEMP,W       ;
         RETFIE                 ;
;*********************************
;        显示子程序             ;
;*********************************
DISP2    MOVF   BUF,  W         ;
         ANDLW  0FH             ;
         CALL   convert         ;
         MOVWF  PORTC           ;
         BCF    PORTD,0         ;
         CALL   DELAY           ;
         BSF    PORTD,0         ;
         MOVF   BUF, W          ;
         MOVWF  BUF_TEMP        ;
         SWAPF  BUF_TEMP,W      ;
         ANDLW  0FH             ;
         CALL   convert         ;
         MOVWF  PORTC           ;
         BCF    PORTD,1         ;
         CALL   DELAY           ;
         BSF    PORTD,1         ;
         MOVF   BUF1, W         ;
         ANDLW  0FH             ;
         CALL   convert         ;
         MOVWF  PORTC           ;
         BCF    PORTD,2         ;
         CALL   DELAY           ;
         BSF    PORTD,2         ;
         MOVF   BUF1, W         ;
         MOVWF  BUF1_TEMP       ;
         SWAPF  BUF1_TEMP,W     ;
         ANDLW  0FH             ;
         CALL   convert         ;
         MOVWF  PORTC           ;
         BCF    PORTD,3         ;
         CALL   DELAY           ;
         BSF    PORTD,3         ;
         MOVF   BUF2, W         ;
         ANDLW  0FH             ;
         CALL   convert         ;
         MOVWF  PORTC           ;
         BCF    PORTD,4         ;
         CALL   DELAY           ;
         BSF    PORTD,4         ;
         MOVF   BUF2, W         ;
         MOVWF  BUF2_TEMP       ;
         SWAPF  BUF2_TEMP,W     ;
         ANDLW  0FH             ;
         CALL   convert         ;
         MOVWF  PORTC           ;
         BCF    PORTD,5         ;
         CALL   DELAY           ;
         BSF    PORTD,5         ;
         RETURN                 ;
;*********************************
DELAY                           ;{2+[2+(1+2)*(DATA2-1)+2+1+2]*(DATA1-1)+2+2}=0.382MS
         MOVLW  N1              ;(1)
         MOVWF  DATA1           ;(1)
DEL1     MOVLW  N2              ;(1)
         MOVWF  DATA2           ;(1)
DEL2     DECFSZ DATA2,1         ;(1\2)DATA2-1=0?
         GOTO   DEL2            ;(2)
         DECFSZ DATA1,1         ;(1\2)DATA1-1=0?
         GOTO   DEL1            ;(2)
         RETURN                 ;(2)
;;********************************
delay10ms
         MOVLW  .4              ;将外层循环参数值送到DATA3
         MOVWF  DATA3           ;
LP0
         MOVLW  .3              ;将内层循环参数值送到DATA4
         MOVWF  DATA4           ;
LP1      CALL   DISP2           ;(382*4+44)uS=1.572MS
         DECFSZ DATA4,1         ;变量DATA4内容递减,若为0则跳跃
         GOTO   LP1             ;跳转到LP1
         DECFSZ DATA3,1         ;变量DATA3内容递减,若为0则跳跃
         GOTO   LP0             ;跳转到LP0
         RETURN                 ;返回主程序
;**********************************
convert
         ADDWF   PCL,1          ;
TABLE    RETLW   0C0H           ; 0   
         RETLW   0F9H           ; 1
         RETLW   0A4H           ; 2
         RETLW   0B0H           ; 3
         RETLW   99H            ; 4
         RETLW   92H            ; 5
         RETLW   82H            ; 6
         RETLW   0F8H           ; 7
         RETLW   80H            ; 8
         RETLW   90H            ; 9
         END

参考链接:[img]http://www.picavr.com/news/2008-06/6755.htm]http://www.picavr.com/news/2008-06/6755.htm
   
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
沙发
发表于 2012-4-17 23:12:22 | 只看该作者
好 长 啊   汇编  很强大
板凳
发表于 2012-12-18 14:10:23 | 只看该作者
无图无电路
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-16 07:03 , 耗时 0.088819 秒, 17 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表