打印

请各位前辈帮忙

[复制链接]
1564|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzfact|  楼主 | 2007-2-4 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ov, TE, hm, mt, RS
我设计DS1302进行计时,晶振是正常的,可它就是不计时,请个位分析一下有那些原因,先谢谢了!程序如下:

BitCnt data 20h ; 数据位计数器
ByteCnt data 21h ; 数据字节计数器
Command data 22h ; 命令字节地址
RcvDat DATA 40H ; 接收数据缓冲区
XmtDat DATA 10H ; 发送数据缓冲区
;端口位定义
IO_DATA bit P1.5 ; 数据传送总线
SCLK bit P1.4; 时钟控制总线
RST bit P1.6 ; 复位总线
 ORG   0000H

START:
;------------------------------------初始化1302-------------------------

SET1302:
clr sclk
  CLR     RST
 MOV  SP,#50H

LCALL Write_Enable;写允许
LCALL Osc_Enable
LCALL Write_Multiplebyte;初始化1302,将我们要设定的数据写入
LCALL Write_Disable

START:LCALL Read_Multiplebyte;将我们设定的数据读出来


lcall exchange
lcall disp

AJMP START
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;********************************************************************************************
;发送数据程序
;名称:Send_Byte
;描述:发送ByteCnt 个字节给被控器DS1302
;命令字节地址在Command 中
;所发送数据的字节数在ByteCnt 中发送的数据在XmtDat 缓冲区中
;********************************************************************************************
Send_Byte:
CLR RST ;复位引脚为低电平所有数据传送终止
NOP
CLR SCLK; 清时钟总线
NOP
SETB RST ;复位引脚为高电平逻辑控制有效
NOP
MOV A,Command; 准备发送命令字节
MOV BitCnt,#08h ;传送位数为8
S_Byte0:
RRC A ;将最低位传送给进位位C
MOV IO_DATA,C ;位传送至数据总线
NOP
SETB SCLK ;时钟上升沿发送数据有效
NOP
CLR SCLK ;清时钟总线
DJNZ BitCnt,S_Byte0 ;位传送未完毕则继续
NOP
S_Byte1: ;准备发送数据
MOV A,@R0 ;传送数据过程与传送命令相同
MOV BitCnt,#08h
S_Byte2:
RRC A
MOV IO_DATA,C
NOP
SETB SCLK
NOP
CLR SCLK
DJNZ BitCnt,S_Byte2
INC R0 ;发送数据的内存地址加1
DJNZ ByteCnt,S_Byte1 ;字节传送未完毕则继续
NOP
CLR RST ;逻辑操作完毕清RST
RET
;***************************************************************************************
;接收数据程序;
;名称:Receive_Byte
;描述:从被控器DS1302 接收ByteCnt 个字节数据
;命令字节地址在Command 中
;所接收数据的字节数在ByteCnt 中接收的数据在RcvDat 缓冲区中
;***********************************************************************************
Receive_Byte:
CLR RST ;复位引脚为低电平所有数据传送终止
NOP
CLR SCLK ;清时钟总线
NOP
SETB RST ;复位引脚为高电平逻辑控制有效
MOV A,Command ;准备发送命令字节
MOV BitCnt,#08h ;传送位数为8
R_Byte0:
RRC A ;将最低位传送给进位位C
MOV IO_DATA,C ;位传送至数据总线
NOP
SETB SCLK ;时钟上升沿发送数据有效
NOP
CLR SCLK ;清时钟总线
DJNZ BitCnt,R_Byte0 ;位传送未完毕则继续
NOP
R_Byte1: ;准备接收数据
CLR A ;清类加器
CLR C ;清进位位C
MOV BitCnt,#08h ;接收位数为8
R_Byte2:
NOP
MOV C,IO_DATA ;数据总线上的数据传送给C
RRC A ;从最低位接收数据
SETB SCLK ;时钟总线置高
NOP
CLR SCLK ;时钟下降沿接收数据有效
DJNZ BitCnt,R_Byte2 ;位接收未完毕则继续
MOV @R1,A ;接收到的完整数据字节放入接收内存缓冲区
INC R1 ;接收数据的内存地址加1
DJNZ ByteCnt,R_Byte1 ;字节接收未完毕则继续
NOP
CLR RST ;逻辑操作完毕清RST
RET

;--写保护寄存器操作------------------------------------------
Write_Enable:
MOV Command,#8Eh ;命令字节为8E
MOV ByteCnt,#1 ;单字节传送模式
MOV R0,#XmtDat ;数据地址覆给R0
MOV XmtDat,#00h ;数据内容为0 写入允许
ACALL Send_Byte ;调用写入数据子程序
RET

;当写保护寄存器的最高位为1 时禁止数据写入寄存器---------------
Write_Disable:
MOV Command,#8Eh ;命令字节为8E
MOV ByteCnt,#1 ;单字节传送模式
MOV R0,#XmtDat ;数据地址覆给R0
MOV XmtDat,#80h ;数据内容为80h 禁止写入
ACALL Send_Byte ;调用写入数据子程序
RET ;返回调用本子程序处


;当把秒寄存器的第7 位时钟停止位设置为0 时起动时钟开始---------
Osc_Enable:
MOV Command,#80h ; 命令字节为80
MOV ByteCnt,#1 ; 单字节传送模式
MOV R0,#XmtDat ;数据地址覆给R0
MOV XmtDat,#00h ;数据内容为0 振荡器工作允许
ACALL Send_Byte ;调用写入数据子程序
RET ;返回调用本子程序处


;当把秒寄存器的第7 位时钟停止位设置为1 时时钟振荡器停止HT1380 进入低功耗方式---------------
Osc_Disable:
MOV Command,#80h ;命令字节为80
MOV ByteCnt,#1 ;单字节传送模式
MOV R0,#XmtDat ;数据地址覆给R0
MOV XmtDat,#80h ;数据内容为80h 振荡器停止
ACALL Send_Byte ;调用写入数据子程序
RET ;返回调用本子程序处


;写入00 年6 月21 日星期三13 时59 分59---------------------
Write_Multiplebyte:
MOV Command,#0BEh ;命令字节为BEh
MOV ByteCnt,#8 ;多字节写入模式此模块为8 个
MOV R0,XmtDat;数据地址覆给R0
MOV XmtDat,#55h ;秒单元内容为59h
MOV XmtDat+1 ,#55h ;分单元内容为59h
MOV XmtDat+2,#55h ;时单元内容为13h
MOV XmtDat+3,#55h ;日期单元内容为21h
MOV XmtDat+4,#55h ;月单元内容为06h
MOV XmtDat+5,#55h ;星期单元内容为03h
;MOV 46h,#0 ;年单元内容为00h
MOV XmtDat+6,#55h ;写保护单元内容为00h
ACALL Send_Byte ;调用写入数据子程序
RET ;返回调用本子程序处


;读出寄存器0-7 的内容程序设置如下
Read_Multiplebyte:
MOV Command,#0BFh ;命令字节为BFh
MOV ByteCnt,#8 ;多字节读出模式此模块为8 个
MOV R1,#RcvDat ;数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
RET; 返回调用本子程序处


;写入8 时12 小时模式程序设置如下
Write_Singlebyte:
MOV Command,#84h ; 命令字节为84h
MOV ByteCnt,#1 ; 单字节传送模式
MOV R0,#XmtDat ;数据地址覆给R0
MOV XmtDat,#88h ;数据内容为88h
ACALL Send_Byte ;调用写入数据子程序
RET ;返回调用本子程序处

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

exchange:

mov a,46h
mov b,#10H
div ab ;把40H高低4位分开
mov 3Dh,a ;高4位存入31H单元
mov a,b
mov 3Ch,a ;低4位存入30H单元

mov a,45h
mov b,#10H
div ab ;把40H高低4位分开
mov 3Bh,a ;高4位存入31H单元
mov a,b
mov 3Ah,a ;低4位存入30H单元

mov a,44h
mov b,#10H
div ab ;把40H高低4位分开
mov 39h,a ;高4位存入31H单元
mov a,b
mov 38h,a ;低4位存入30H单元

mov a,43h
mov b,#10H
div ab ;把40H高低4位分开
mov 37h,a ;高4位存入31H单元
mov a,b
mov 36h,a ;低4位存入30H单元
                        ;;;;;;;
mov a,42h
mov b,#10H
div ab ;把41H高低4位分开
mov 35h,a ;高4位存入33H单元
mov a,b
mov 34h,a ;低4位存入32H单元

mov a,41h
mov b,#10H
div ab ;把41H高低4位分开
mov 33h,a ;高4位存入33H单元
mov a,b
mov 32h,a ;低4位存入32H单元

mov a,40h
mov b,#10H
div ab ;把40H高低4位分开
mov 31h,a ;高4位存入31H单元
mov a,b
mov 30h,a ;低4位存入30H单元
;ajmp exchange
ret
NOP
NOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  DISP:

     MOV  p2,#12h
     MOV A,30H
     MOV DPTR,#TAB2
     MOVC A,@A+DPTR
     MOV P0,A
     ACALL  delay1

    MOV  p2,#52h
     MOV A,31H
     MOV DPTR,#TAB2
     MOVC A,@A+DPTR
     MOV P0,A
    ACALL  delay1


    MOV  p2,#22h
     MOV A,32H
     MOV DPTR,#TAB1
     MOVC A,@A+DPTR
     MOV P0,A
    ACALL  delay1


    MOV  p2,#0a2h
     MOV A,33H
     MOV DPTR,#TAB1
     MOVC A,@A+DPTR
     MOV P0,A
    ACALL  delay1

    MOV  p2,#62h
     MOV A,34H
     MOV DPTR,#TAB1
     MOVC A,@A+DPTR
     MOV P0,A
    ACALL  delay1

    MOV  p2,#0E2h
     MOV A,35H
     MOV DPTR,#TAB1
     MOVC A,@A+DPTR
     MOV P0,A
    ACALL  delay1


    MOV  p2,#02h
     MOV A,36H
     MOV DPTR,#TAB1
     MOVC A,@A+DPTR
     MOV P0,A
    ACALL  delay1

    MOV  p2,#82h
     MOV A,37H
     MOV DPTR,#TAB1
     MOVC A,@A+DPTR
     MOV P0,A
    ACALL  delay1

    MOV  p2,#42h
     MOV A,38H
     MOV DPTR,#TAB1
     MOVC A,@A+DPTR
     MOV P0,A
    ACALL  delay1


    MOV  p2,#0C2h
     MOV A,39H
     MOV DPTR,#TAB1
     MOVC A,@A+DPTR
     MOV P0,A
    ACALL  delay1


  AJMP DISP

 delay1: MOV r2,#2
      D11: MOV r3,#50
        D12:MOV r4,#10

          D13:DJNZ r4,D13
              DJNZ r3,D12
               DJNZ r2,D11
               RET


TAB1: DB 14H ,77H, 4CH ,45H, 27H  ,85H  ,84H ,57H ,04H ,05H
TAB2: DB 03H, 3FH, 4AH, 2AH ,36H, 0A2H,82H ,3BH, 02H ,22H
end

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝