1、ds1302汇编语言的驱动程序第一个汇编语言程序(DS1302的驱动程序)时钟芯片DS1302 的程序(汇编);时钟芯片DS1302 的程序(汇编);*; 模块名称:DS1302.a51; 功 能:实时时钟模块 时钟芯片型号:DS1302; 说 明:(修改版); 程序设计:;*/T_CLK Bit P3.2 ;实时时钟时钟线引脚T_IO Bit P3.3 ;实时时钟数据线引脚T_RST Bit P3.4 ;实时时钟复位线引脚;*SECOND EQU 50H ;秒寄存器MINUTE EQU 51H ;分寄存器HOUR EQU 52H ;时寄存器DAY EQU 53H ;号寄存器MONTH EQU
2、 54H ;月寄存器WEEK EQU 55H ;星期寄存器YEAR EQU 56H ;年寄存器 ORG 0000H SJMP START ORG 0040H ;*;功 能:给秒 分 时 日 月 星期 年赋初值;*START: MOV SECOND,#00H MOV MINUTE,#06H MOV HOUR,#17H MOV DAY,#00H MOV MONTH,#00H MOV WEEK,#00H MOV YEAR,#00H LCALL SET1302 LCALL GET1302 LCALL DISPLAYMAIN: MOV R5,#25 MOV TMOD,#01H MOV TH0,#63H
3、;置定时器初值(定时40ms) MOV TL0,#0C0H SETB TR0 ;启动定时器0LP1: JBC TF0,LP2 ;查询计数溢出 SJMP LP1 ;未到40 ms继续计数LP2: MOV TH0,#63H ;重新置定时器初值 MOV TL0,#0C0H LCALL DISPLAY ;显示 DJNZ R5,LP1 ;未到1 S继续循环 LCALL GET1302 ;每过1s从DS1302读取一次时间 MOV R5,#25 SJMP LP1DISPLAY: MOV R3,SECOND LCALL CHAG MOV P2,#0FFH MOV P0,R2 ;段码 SETB P2.0 ;位
4、码 NOP CLR P2.0 LCALL DELAY MOV P2,#0FFH MOV P0,R3 SETB P2.1 NOP CLR P2.1 LCALL DELAY MOV R3,MINUTE LCALL CHAG MOV P2,#0FFH MOV P0,R2 ;段码 SETB P2.2 ;位码 NOP CLR P2.2 LCALL DELAY MOV P2,#0FFH MOV P0,R3 SETB P2.3 NOP CLR P2.3 LCALL DELAY MOV R3,HOUR LCALL CHAG MOV P2,#0FFH MOV P0,R2 ;段码 SETB P2.4 ;位码 NO
5、P CLR P2.4 LCALL DELAY MOV P2,#0FFH MOV P0,R3 SETB P2.5 NOP CLR P2.5 LCALL DELAY RETDELAY: MOV R7,#50 D1: MOV R6,#10 D2: DJNZ R6,$ DJNZ R7,D1 RET CHAG: PUSH ACC ;低字节放入R2,高字节放入R3 MOV A,R3 ANL A,#0FH MOV R2,A MOV A,R3 SWAP A ANL A,#0FH MOV R3,A MOV DPTR,#DATATAB MOV A,R2 MOVC A,A+DPTR MOV R2,A MOV A,R
6、3 MOVC A,A+DPTR MOV R3,A POP ACC RETDATATAB: DB 0B7H,90H,3DH,0B9H,9AH,0ABH,0AFH,0B0H,0BFH,0BBH;*;子程序名:Set1302;功 能:设置DS1302 初始时间,并启动计时。;说 明:;调 用:RTInputByte;入口参数:初始时间在:Second,Minute,Hour,Day,Month,Week.YearL(地址连续);出口参数:无;影响资源:A B R0 R1 R4 R7;设 计:Reuben 日 期:2009-04-17;修 改: 日 期:;*SET1302: CLR T_RST CLR
7、 T_CLK SETB T_RST MOV B, #8EH ;控制寄存器 LCALL RTInputByte MOV B, #00H ;写操作前WP=0 LCALL RTInputByte SETB T_CLK CLR T_RST MOV R0, #Second; MOV R7, #7 ;秒 分 时 日 月 星期 年 MOV R1, #80H ;秒写地址S13021: CLR T_RST CLR T_CLK SETB T_RST MOV B, R1 ;写秒 分 时 日 月 星期 年 地址 LCALL RTInputByte MOV A, R0 ;写秒数据 MOV B, A LCALL RTIn
8、putByte INC R0 INC R1 INC R1 SETB T_CLK CLR T_RST DJNZ R7, S13021 CLR T_RST CLR T_CLK SETB T_RST MOV B, #8EH ;控制寄存器 LCALL RTInputByte MOV B, #80H ;控制,WP=1,写保护 LCALL RTInputByte SETB T_CLK CLR T_RST RET;*;子程序名:Get1302;功 能:从DS1302 读时间;说 明:;调 用:RTInputByte,RTOutputByte;入口参数:时间保存在:Second,Minute,Hour,Day
9、,Month,Week.YearL;出口参数:无;影响资源:A B R0 R1 R4 R7;设 计:Reuben 日 期:2009-04-17;修 改: 日 期:;*GET1302: MOV R0, #SECOND; MOV R7, #7 MOV R1, #81H ;秒地址G13021: CLR T_RST CLR T_CLK SETB T_RST MOV B, R1 ;秒 分 时 日 月 星期 年 地址 LCALL RTInputByte LCALL RTOutputByte MOV R0, A ;秒 INC R0 INC R1 INC R1 SETB T_CLK CLR T_RST DJN
10、Z R7, G13021 RET;*;功 能:写1302一字节 (内部子程序);*RTInputByte: MOV R4, #8 Inbit1: MOV A, B RRC A MOV B, A MOV T_IO, C SETB T_CLK CLR T_CLK DJNZ R4, Inbit1 RET;*;功 能:读1302一字节 (内部子程序);*RTOutputByte: MOV R4, #8 Outbit1: MOV C, T_IO RRC A SETB T_CLK CLR T_CLK DJNZ R4, Outbit1 RET END第二个ds1302驱动程序;* DS1302 端口位定义
11、* IO_DATA BIT P1.1 ; 数据传送总线 SCLK BIT P1.0 ; 时钟控制总线 RST BIT P1.2 ; 复位总线;-;DS1302 初始化子程序; (R0)=数据 (R1)=地址;-PROSET: CLR RST ;DS1302复位 CLR SCLK NOP NOP SETB RST MOV R1,#90H ;写充电寄存器 MOV R0,#0ABH LCALL WRITE RET;=;写 DS1302 子程序;=WRITE: CLR SCLK NOP NOP SETB RST NOP MOV A,R1 MOV R2,#08HWRI_01: RRC A ;传输地址到D
12、S1302 NOP NOP CLR SCLK NOP NOP MOV IO_DATA,C NOP NOP SETB SCLK NOP NOP DJNZ R2,WRI_01 CLR SCLK NOP NOP MOV A,R0 MOV R2,#08HWRI_02: RRC A ;传输数据到DS1302 NOP CLR SCLK NOP NOP MOV IO_DATA,C NOP NOP SETB SCLK NOP NOP DJNZ R2,WRI_02 CLR SCLK NOP NOP CLR RST NOP NOP RET;=;读 DS1302 子程序;=READ: CLR SCLK NOP NO
13、P SETB RST NOP NOP MOV A,R1 MOV R2,#08HREAD_01: RRC A NOP ;先传输地址到DS1302 MOV IO_DATA,C NOP NOP SETB SCLK NOP NOP CLR SCLK NOP NOP DJNZ R2,READ_01 NOP NOP SETB IO_DATA CLR A CLR C MOV R2,#08HREAD_02: CLR SCLK NOP NOP MOV C,IO_DATA NOP NOP RRC A ;再从DS1302接收数据 NOP NOP SETB SCLK NOP NOP DJNZ R2,READ_02 M
14、OV R0,A CLR RST RET;=;读时间、日期数据子程序;存放单元 40H - 46H;=GET_TIME: MOV R1,#81H ;读秒 LCALL READ MOV 40H,R0 MOV R1,#83H ;读分 LCALL READ MOV 41H,R0 MOV R1,#85H ;读时 LCALL READ MOV 42H,R0 MOV R1,#87H ;读出日期 LCALL READ MOV 43H,R0 MOV R1,#89H ;读出月份 LCALL READ MOV 44H,R0 MOV R1,#8BH ;读出星期 LCALL READ MOV 46H,R0 MOV R1,#8DH ;读出年 LCALL READ MOV 45H,R0 RET
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1