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

📄 ds1302.s43

📁 采用msp430中汇编语言编写的
💻 S43
字号:
#include  "msp430x14x.h"


#define     SCLK    01h 
#define     IO      02h
#define     RST     04h

#define     SEC     0200h
#define     MIN     0201h
#define     HR      0202h
#define     DAY     0203h
#define     MON     0204h  
#define     WEEK    0205h
#define     YEAR    0206h  
#define     DS_ADD  0207h
#define     DS_COM  0208h

;------------------------------------------------------------------------------ 
            ORG     0F000h                  ; Program Start
;------------------------------------------------------------------------------ 
RESET   mov.w   #0A00h,SP               ; Initialize 'F149 stackpointer
StopWDT	mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT
        clr.b   &P3SEL                  ;P3各端口均设为数字I/O口
        bis.b   #SCLK+RST+IO,&P3DIR     ;将SCLK、RST、IO均设为输出
INIT    bic.b   #SCLK+RST,&P3OUT	;清SCLK(串行时钟)和RST
        mov.b   #08Eh,&DS_ADD		;对控制寄存器进行操作
        mov.b   #000h,&DS_COM		;打开写保护
        CALL    #WRRTC			
        mov.b   #090h,&DS_ADD		;对充电控制寄存器进行操作
        mov.b   #0A5h,&DS_COM		;在充电电路上选择1个二极管、2K电阻
        CALL    #WRRTC
;时间初始化
        mov.b   #080h,&DS_ADD		;这两句语句用来启动时钟;
        mov.b   #000h,&DS_COM
        CALL    #WRRTC
	
        mov.b   #080h,&DS_ADD		;这两句语句用来启动时钟;
        mov.b   #000h,&DS_COM
        CALL    #WRRTC
        
;设置一个时间 2002年3月25日20时25分0秒,星期是随便写的。
	mov.b	#0,&SEC
	mov.b	#025h,&MIN		;注意数据的表示
	mov.b	#030h,&HR		
	mov.b	#025h,&DAY	
	mov.b	#003h,&MON
	mov.b	#001h,&WEEK
	mov.b	#002h,&YEAR
	CALL	#WR_TIME
	


SetupP1 bis.b   #001h,&P1DIR            ; P1.0 output
                                            ;				          							  
Mainloop
	xor.b   #001h,&P1OUT            ; Toggle P1.0
Wait    mov.w   #050000,R15             ; Delay to R15
L1      dec.w   R15                     ; Decrement R15
        jnz     L1                      ; Delay over?
        jmp     Mainloop                ; Again
                                            ;


;------------------------------------------------------------------------------ 
WR_TIME	
;------------------------------------------------------------------------------ 
	mov.b	#7,R7			;因为秒分时日月周年共7个字节。
WR_T1	bic.b	#SCLK,&P3OUT
	NOP
	bis.b	#RST,&P3OUT
	;首先写入命令字10000000b,表示系统即将执行写命令
	mov.b	#8,R6
	mov.b	#080h,R4		;80h=10000000b
WR_T2	bic.b	#SCLK,&P3OUT
	RRC.b	R4
	jc	WR_T3
  		bic.b	#IO,&P3OUT
		jmp	WR_T4
WR_T3	bis.b	#IO,&P3OUT
WR_T4	NOP
	bis.b	#SCLK,&P3OUT
	dec.b	R6
	jnz	WR_T1
;以下开始写入各时间字节,从秒开始写到年,注意存储器中第六个字节是星期
;因此不管是读还是写,都应跳过它
	mov.b	#8,R6
	mov	#SEC,R5
	mov.b	@R5,R4
WR_T5	bic.b	#SCLK,&P3OUT
	RRC.b	R4
	jc	WR_T6
  		bic.b	#IO,&P3OUT
		jmp	WR_T7
WR_T6	bis.b	#IO,&P3OUT
WR_T7	NOP
	bis.b	#SCLK,&P3OUT
	dec.b	R6
	jnz	WR_T5
WR_T8	inc	R5
	mov.b	@R5,R4
	bic.b	#RST,&P3OUT
	NOP
	bic.b	#SCLK,&P3OUT
	dec.b	R7
	jnz	WR_T1
	RET	
;------------------------------------------------------------------------------ 

;------------------------------------------------------------------------------ 
READ_TIME	;从DS1302中读出时间,注意抛掉星期
;------------------------------------------------------------------------------ 
	mov.b	#7,R7			;因为秒分时日月周年共7个字节。
RD_T1	bic.b	#SCLK,&P3OUT
	NOP
	bis.b	#RST,&P3OUT
	;首先写入命令字10000001b,表示系统即将执行读命令
	mov.b	#8,R6
	mov.b	#081h,R4		;81h=10000001b
RD_T2	bic.b	#SCLK,&P3OUT
	RRC.b	R4
	jc	RD_T3
  		bic.b	#IO,&P3OUT
		jmp	RD_T4
RD_T3	bis.b	#IO,&P3OUT
RD_T4	NOP
	bis.b	#SCLK,&P3OUT
	dec.b	R6
	jnz	RD_T1
;以下开始写入各时间字节,从秒开始写到年,注意存储器中第六个字节是星期
;因此不管是读还是写,都应跳过它
	mov.b	#8,R6
	mov	#SEC,R5
RD_T5	bic.b	#SCLK,&P3OUT
	NOP
	bit.b	#IO,&P3OUT
	jz	RD_T6
		SETC
		jmp	RD_T7
RD_T6	CLRC
	RRC.b	R4
RD_T7	bis.b	#SCLK,&P3OUT
	dec.b	R6
	jnz	RD_T5
RD_T8	mov.b	R4,0(R5)
	inc	R5
	bic.b	#RST,&P3OUT
	NOP
	bic.b	#SCLK,&P3OUT
	dec.b	R7
	jnz	RD_T1
	RET	

;------------------------------------------------------------------------------ 


;------------------------------------------------------------------------------ 
WRRTC       ;single byte(command/data)write to DS1302
	    ;将DS_ADD和DS_COM依次从I/O端口发送出去
;------------------------------------------------------------------------------ 
	bis.b   #SCLK+RST+IO,&P3DIR
	bic.b	#SCLK,&P3OUT
	NOP
	bis.b   #RST,&P3OUT
	NOP
	NOP
	mov.b   #2,R7
WRRTC1 	mov.b   #8,R6
	mov.b   &DS_ADD,R4
WRRTC2  bic.b	#SCLK,&P3OUT
  	RRC.b	R4
  	jc    	WRRTC3
  		bic.b	#IO,&P3OUT
		jmp	WRRTC4
WRRTC3	bis.b	#IO,&P3OUT
WRRTC4	NOP
	bis.b	#SCLK,&P3OUT
	dec.b	R6
	jnz	WRRTC2
	dec.b	R7
	jz 	WRRTC5
	mov.b	#8,R6
	mov.b	&DS_COM,R4
	jmp	WRRTC2
WRRTC5	bic.b	#RST,&P3OUT
	NOP
	bic.b	#SCLK,&P3OUT
	RET	  			     		
;------------------------------------------------------------------------------ 


;------------------------------------------------------------------------------ 

;           Interrupt Vectors Used MSP430x13x/14x         
;------------------------------------------------------------------------------ 
            ORG     0FFFEh                  ; MSP430 RESET Vector
            DW      RESET                   ; 
            END     

⌨️ 快捷键说明

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