⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.lst

📁 DS1302的初始化程序以及在LED上显示出信号
💻 LST
📖 第 1 页 / 共 3 页
字号:
MPASM 02.50 Released           DS1302.ASM   6-2-2003  1:36:37         PAGE  1


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00001     LIST P=16F877
                      00002     INCLUDE <P16F877.INC>
                      00001         LIST
                      00002 ; P16F877.INC  Standard Header File, Version 1.00    Microchip Technology, Inc.
                      00373         LIST
                      00003 
  00000060            00004 SEC_RX        EQU        60H       ;收到的秒,分,时,星期,日,月,年数据依次传入60H~66H
  00000061            00005 MIN_RX        EQU        61H
  00000062            00006 HOU_RX        EQU        62H
  00000063            00007 DATE_RX       EQU        63H
  00000064            00008 MON_RX        EQU        64H
  00000065            00009 DAY_RX        EQU        65H
  00000066            00010 YEAR_RX       EQU        66H
                      00011 
  00000070            00012 SEC           EQU        70H       ;发送的秒,分,时,星期,日,月,年数据依次传入70H~76H
  00000071            00013 MIN           EQU        71H
  00000072            00014 HOU           EQU        72H
  00000073            00015 DATE          EQU        73H
  00000074            00016 MON           EQU        74H
  00000075            00017 DAY           EQU        75H
  00000076            00018 YEAR          EQU        76H
                      00019 
                      00020 
  00000077            00021 WRENABLE      EQU        77H       ;写使能寄存器
  00000078            00022 TIME_TX       EQU        78H       ;DS1302当前发送寄存器
  00000079            00023 TIME_RX       EQU        79H       ;DS1302当前接收寄存器
                      00024 
  00000060            00025 TIME_RX_TOTAL EQU        60H       ;保存接受的7个数据(一次过接受的起始地址)
  00000070            00026 TIME_TX_TOTAL EQU        70H   
                      00027 
  00000020            00028 COUNT1  EQU     20H
  00000021            00029 COUNT2  EQU     21H
                      00030 ;******************************
                      00031 BANK1 MACRO
                      00032       BSF     STATUS,RP0
                      00033       ENDM
                      00034 BANK0 MACRO
                      00035       BCF     STATUS,RP0
                      00036       ENDM
                      00037    
                      00038 
0000                  00039                 ORG     00H
0000   0000           00040                 NOP
0001                  00041 MAIN
0001   200C           00042         CALL USE1302
0002   208D           00043         CALL DELAY245MS
0003                  00044 LOOP
0003   0187           00045         CLRF PORTC
0004   0860           00046         MOVF SEC_RX,W
0005   0087           00047         MOVWF PORTC
0006   208D           00048         CALL DELAY245MS
0007   208D           00049         CALL DELAY245MS
0008   208D           00050         CALL DELAY245MS
MPASM 02.50 Released           DS1302.ASM   6-2-2003  1:36:37         PAGE  2


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0009   208D           00051         CALL DELAY245MS
000A   2044           00052         CALL GET_TIME
000B   2803           00053         GOTO LOOP
                      00054 
                      00055 
                      00056 
                      00057 ;使用ds1302        *
                      00058 ;*******************
000C                  00059 USE1302
000C   2011           00060  CALL INI_PORT
000D   201A           00061  CALL INI_DS1302
000E   2034           00062  CALL SET_TIME
000F   2044           00063  CALL GET_TIME
0010   0008           00064  RETURN
                      00065 
                      00066 ;************************************初始化与1302相连的3个端口**********************************
                      00067 ;***********************************************************************************************
0011                  00068 INI_PORT
                      00069  BANK1
0011   1683               M       BSF     STATUS,RP0
0012   3000           00070  MOVLW 00H                      ;C端口设为输出
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0013   0087           00071  MOVWF TRISC
                      00072   
0014   3007           00073  MOVLW 07H                      ;A端口与E端口-样,设为普通I/O口需要把07h赋予adcon1
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0015   009F           00074  MOVWF ADCON1
0016   3000           00075  MOVLW 00H                      ;A端口设为输出
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0017   0085           00076  MOVWF TRISA                     
                      00077  BANK0
0018   1283               M       BCF     STATUS,RP0
0019   0008           00078  RETURN
                      00079 
                      00080 ;************************************对1302进行初始化子程序*************************************
                      00081 ;***********************************************************************************************
001A                  00082 INI_DS1302
001A   1307           00083  BCF PORTC,6                    ;SCLK(RC6)先置为低电平
001B   1005           00084  BCF PORTA,0                    ;RST(RA0)先禁止
001C   308E           00085  MOVLW B'10001110'              ;写使能寄存器(10001110)
001D   00F8           00086  MOVWF TIME_TX                  
001E   1405           00087  BSF PORTA,0                    ;RST(RA0)置高位,才可以对1302进行操作  
001F   2054           00088  CALL TIME_WRITE
0020   3000           00089  MOVLW 00H                      ;将00h送写寄存器(10001110),准确说令bit7这个wp位置置0,允许写使能
0021   00F8           00090  MOVWF TIME_TX
0022   2054           00091  CALL TIME_WRITE
0023   1005           00092  BCF PORTA,0                    ;RST(RA0)置0,停止对1302操作
                      00093 
                      00094                                 ;以下设置默认时间,默认为:04年1月1日星期一0时0分0秒
                      00095  
0024   3006           00096  MOVLW B'00000110'              ;其中置秒寄存器首位为0,才能让1302的晶振确保起振  
0025   00F0           00097  MOVWF SEC
0026   3000           00098  MOVLW .0
MPASM 02.50 Released           DS1302.ASM   6-2-2003  1:36:37         PAGE  3


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0027   00F1           00099  MOVWF MIN
0028   3000           00100  MOVLW .0
0029   00F2           00101  MOVWF HOU
002A   3001           00102  MOVLW .1
002B   00F3           00103  MOVWF DATE
002C   3001           00104  MOVLW .1
002D   00F4           00105  MOVWF MON
002E   3001           00106  MOVLW .1
002F   00F5           00107  MOVWF DAY
0030   3004           00108  MOVLW B'00000100'
0031   00F6           00109  MOVWF YEAR
                      00110 
0032   2034           00111  CALL SET_TIME
0033   0008           00112  RETURN
                      00113 ;***********************************1302一次性设定时间子程序***********************************
                      00114 ;**********************************************************************************************
0034                  00115 SET_TIME
0034   30BE           00116  MOVLW B'10111110'             ;突发模式写入(10111110是突发模式写入命令)
0035   00F8           00117  MOVWF TIME_TX
0036   1405           00118  BSF PORTA,0                   ;RST(RA0)置高位,才可以对1302进行操作  
0037   2054           00119  CALL TIME_WRITE               ;以下为发送8个数据
0038   3070           00120  MOVLW TIME_TX_TOTAL           ;发送数据的起始地址到fsr
0039   0084           00121  MOVWF FSR
003A   3008           00122  MOVLW .8
003B   00A1           00123  MOVWF COUNT2
003C                  00124 SETLP
003C   0800           00125  MOVF INDF,W                   ;将fsr指示的地址的内容进行发送
003D   00F8           00126  MOVWF TIME_TX
003E   2054           00127  CALL TIME_WRITE
003F   0A84           00128  INCF FSR,F                    ;fsr递增
0040   0BA1           00129  DECFSZ COUNT2,1               ;循环八次发送8个字节数据
0041   283C           00130  GOTO SETLP
0042   1005           00131  BCF PORTA,0                   ;RST(RA0)置0,停止对1302操作
0043   0008           00132  RETURN
                      00133 ;***********************************1302一次性读取时间子程序***********************************
                      00134 ;**********************************************************************************************
0044                  00135 GET_TIME
0044   30BF           00136  MOVLW B'10111111'             ;突发模式读取(10111111是突发模式读取命令)
0045   00F8           00137  MOVWF TIME_TX
0046   1405           00138  BSF PORTA,0                   ;RST(RA0)置高位,才可以对1302进行操作  
0047   2054           00139  CALL TIME_WRITE               ;以下为读取8个数据
0048   3060           00140  MOVLW TIME_RX_TOTAL           ;发送数据的起始地址到fsr
0049   0084           00141  MOVWF FSR
004A   3007           00142  MOVLW .7
004B   00A1           00143  MOVWF COUNT2
004C                  00144 GETLP
004C   2060           00145  CALL TIME_READ 
004D   0879           00146  MOVF TIME_RX,W
004E   0080           00147  MOVWF INDF                    ;将收到的数据作为fsr指示的地址的内容
004F   0A84           00148  INCF FSR,F                    ;fsr递增
0050   0BA1           00149  DECFSZ COUNT2,1               ;循环七次收到7个字节数据
0051   284C           00150  GOTO GETLP
0052   1005           00151  BCF PORTA,0                   ;RST(RA0)置0,停止对1302操作
MPASM 02.50 Released           DS1302.ASM   6-2-2003  1:36:37         PAGE  4


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0053   0008           00152  RETURN
                      00153 ;***************************************1302写一字节分程序*************************************
                      00154 ;**********************************************************************************************
0054                  00155 TIME_WRITE                     ;往1302写一字节原则:sclk(RC6)给予上升沿开始进行写操作,i/o(RC7)发送数据
0054   3008           00156  MOVLW .8
0055   00A0           00157  MOVWF COUNT1
0056                  00158 WRLP
0056   1387           00159  BCF PORTC,7                   ;i/o(RC7)默认值是低电平
0057   1307           00160  BCF PORTC,6                   ;先让sclk(RC6)为低电平
0058   1878           00161  BTFSC TIME_TX,0               ;测试当前发送的那位数是1还是0
0059   1787           00162  BSF PORTC,7                   ;要发送1才置i/o(RC7)高电平,0就不用专门设置,使用默认值0即可
005A   0CF8           00163  RRF TIME_TX,F                 ;发送的数据右移
005B   1707           00164  BSF PORTC,6                   ;让sclk(RC6)为高电平,给予上升沿发送数据
005C   0BA0           00165  DECFSZ COUNT1,F               ;循环八次写一字节
005D   2856           00166  GOTO WRLP
005E   1307           00167  BCF PORTC,6                   ;恢复sclk(RC6)为低电平
005F   0008           00168  RETURN
                      00169 ;*************************************1302读取一个字节分程序************************************
                      00170 ;***********************************************************************************************
0060                  00171 TIME_READ                      ;往1302读一字节原则:sclk(RC6)给予下降沿开始进行读操作,i/o(RC7)收取数据
                      00172  BANK1
0060   1683               M       BSF     STATUS,RP0
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0061   1787           00173  BSF TRISC,7                   ;i/o(RC7)变为输入
                      00174  BANK0
0062   1283               M       BCF     STATUS,RP0
0063   3008           00175  MOVLW .8
0064   00A0           00176  MOVWF COUNT1
0065                  00177 RELP
0065   1307           00178  BCF PORTC,6                   ;让sclk(RC6)为低电平,产生下降沿开始读取
0066   1003           00179  BCF STATUS,C                  ;清进位,让收到的那位数据默认为0
0067   1B87           00180  BTFSC PORTC,7                 ;判断收到的是否为1
0068   1403           00181  BSF STATUS,C                  ;是1就令进位为1,是0就用默认值0即可
0069   0CF9           00182  RRF TIME_RX,F                 ;进位通过在time_rx右移
006A   1707           00183  BSF PORTC,6                   ;sclk(RC6)恢复高电平
006B   0BA0           00184  DECFSZ COUNT1,F               ;循环八次读取一字节
006C   2865           00185  GOTO RELP
                      00186  BANK1
006D   1683               M       BSF     STATUS,RP0
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
006E   1387           00187  BCF TRISC,7                   ;i/o(RC7)重新设为输出
                      00188  BANK0
006F   1283               M       BCF     STATUS,RP0
0070   1307           00189  BCF PORTC,6                   ;sclk(RC6)回复低电平      
0071   0008           00190  RETURN
                      00191 
                      00192 ;************************************************************************************************
                      00193 
                      00194 
                      00195 ;*****************1302(其实其他器件的数据要显示都需要)数据显示前准备子程序*********************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -