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

📄 ds1302.asm

📁 电子密码锁程序 数码管LED显示器max7219的应用.asm 16F877网络接口控制器GOOD.asmRs232a.asm24CXX.ASM
💻 ASM
字号:
PIC单片机读写时钟芯片DS1302汇编程序  
#INCLUDE 
CBLOCK 20H 
SEC ;秒 
MIN ;分 
HOU ;小时 
DATE ;日期 
MON ;月 
DAY ;日 
YERR ;年 
DDD ;写使能位 
TIME_TX ;1302发送寄存器 
TIME_RX ;1302接收寄存器 
COUNT1 ; 
COUNT2 ; 
DELAY1 
DELAY2 
ENDC 
******************************* 
; ; 1302子程序说明 
; ;****************************** 
; DS1302INI ;1302初始化,先禁止RST,设定充电方式 
; SET_TIME ;一次发送7个数据设定时间,包含写使能寄存器,8个数据 
; GET_TIME ;一次接收7个数据显示时间 
; TIME_WRITE_1;一次写入1302一个字节 
; TIME_READ_1 ;一次接收一个字节数据 
; ;******* 1302定义************** 
; ;****************************** 
#DEFINE I_O PORTC,7 ;1302I_O 
#DEFINE SCLK PORTC,6 ;1302时钟 
#DEFINE RST PORTA,0 ;1302使能位 
#DEFINE RX_ADD 40H ;保存接受的7个数据 
#DEFINE TX_ADD 20H ;开始保存7个要写入的时间数据 
BANK1 MACRO 
BSF STATUS,RP0 
ENDM 
BANK0 MACRO 
BCF STATUS,RP0 
ENDM  
ORG 000H 
NOP 
GOTO MAIN 
MAIN 

CALL CLR_RAM 清除RAN 
CALL PORT_INI 端口定义 
CALL DS1302_INI 
CALL SET_TIME 一次写入7个时间数据 
CALL GET_TIME ; 一次读回7个时间数据 
GOTO $ 

;; 写入秒,可以写任意的7个时间数据,单字节 
MOVLW B’10000000’ 
MOVWF TIME_TX 
BSF RST 
CALL TIME_WRITE_1 
MOVLW B’00100101’ 
MOVWF TIME_TX 
CALL TIME_WRITE_1 
BCF RST 
读秒,可以读任意7个时间,单字节 

MOVLW B’10000001’ 
MOVWF TIME_TX 
BSF RST 
CALL TIME_WRITE_1 
CALL TIME_READ_1 
BCF RST 
GOTO $ 
:子程序 
************************************************** 
; DS1302_INI 
; 作用:初始化1302,先禁止RST,允许写使能 
;************************************************** 
DS1302_INI 
BCF SCLK 
BCF RST ;先禁止 
MOVLW B’10001110’ ;写使能寄存器 
MOVWF TIME_TX 
BSF RST 
CALL TIME_WRITE_1 
MOVLW B’0’ ;允许写使能 
MOVWF TIME_TX 
CALL TIME_WRITE_1;发送一个字节的数据 
BCF RST 

;设定充电方式 
没有设定 
RETURN 

;************************************************** 
; SET_TIME 
; 作用:一次输入7个数据来一次性的设定时间,同时使能写寄存器 
; 突发模式写入,必须写入8个数据,不是7个 
; INPUT:要设定的8个数据已经写入到TIME_TX_ADD开始的8个字节里面 
;************************************************** 
SET_TIME 
MOVLW B’10111110’ ;标志位 
MOVWF TIME_TX 
BSF RST 
CALL TIME_WRITE_1 
;TIME_WRITE_8 ;发送8个数据 
MOVLW TIME_TX_ADD ;发送数据的起始地址 
MOVWF FSR 
MOVLW D’8’ 
MOVWF COUNT2 
TW1 
MOVF INDF,W 
MOVWF TIME_TX 
CALL TIME_WRITE_1 
INCF FSR,F 
DECFSZ COUNT2,F 
GOTO TW1 
BCF RST 
RETURN 
;*********************************************** 
; GET_TIME 
; 作用:一次接受7个字节的时间数据,突发模式读取 
; INPUT:NONE 
; OUTPUT:把7个时间数据保存在TIME_RX_ADD开始的7个寄存器里面 
;*********************************************** 
GET_TIME 
MOVLW B’10111111’ 
MOVWF TIME_TX 
BSF RST 
CALL TIME_WRITE_1 
;TIME_READ_7 ;接收7个数据 
MOVLW TIME_RX_ADD ;保存数据的起始地址 
MOVWF FSR 
MOVLW D’7’ 
MOVWF COUNT2 
TR2 
CALL TIME_READ_1 
MOVF TIME_RX,W 
MOVWF INDF 
INCF FSR,F 
DECFSZ COUNT2,F 
GOTO TR2 
BCF RST 
RETURN 
;************************************************ 
; TIME_WRITE_1 
; 作用:一次发送一个字节的数据,用于发送1302的 
; 控制字或者发送一个数据 
; INPUT: TIME_TX 
;************************************************ 
TIME_WRITE_1 
MOVLW D’8’ 
MOVWF COUNT1 
TLOP 
BCF I_O ;初始值是低电平 
BCF SCLK 
BTFSC TIME_TX,0 
BSF I_O 
RRF TIME_TX,F 
BSF SCLK ;高电平发送数据 
DECFSZ COUNT1,F 
GOTO TLOP 
BCF SCLK ;恢复 
RETURN 
;************************************************ 
; TIME_READ_1 
; 作用:读取1302一个字节的数据 
; INPUT: NONE 
; OUTPUT:接收数据保存在TIME_RX里面 
; 原理:在SCLK下降沿接收数据,低字节在前,根据I_O的 
; 的电平的高低,采取带进位和不带进位右移. 
;*********************************************** 
TIME_READ_1 
BANK1 
BSF TRISC,7 ;I_O IS INPUT 
BANK0 
MOVLW D’8’ 
MOVWF COUNT1 ;读取8个字节 
TR1 
BCF SCLK ;下降沿读取 
BCF STATUS,C 
BTFSC I_O 
BSF STATUS,C 
RRF TIME_RX,F 
BSF SCLK ;恢复高电平 
DECFSZ COUNT1,F 
GOTO TR1 
BANK1 
BCF TRISC,7 ;OUTPUT 
BANK0 
BCF SCLK ;恢复 
RETURN 
NOP 
  
PORT_INI 
BANK1 
MOVLW B’00000000’ 
MOVWF TRISC 
MOVLW B’0’ 
MOVWF TRISB 
MOVLW B’00000111’ 
MOVWF ADCON1 
MOVLW B’00000000’ 
MOVWF TRISA 
BANK0 
MOVLW 18H 
MOVWF 20H 
MOVLW 19H 
MOVWF 21H 
MOVLW 05H 
MOVWF 22H 
MOVLW 13H 
MOVWF 23H 
MOVLW 14H 
MOVWF 24H 
MOVLW 15H 
MOVWF 25H 
MOVLW 16H 
MOVWF 26H 
RETURN 
CLR_RAM 
MOVLW 20H 
MOVWF FSR 
LOOP 
CLRF INDF 
INCF FSR,F 
BTFSS FSR,7 
GOTO LOOP ;清除32个 
RETURN 
END

⌨️ 快捷键说明

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