请各位前辈帮忙

[复制链接]
2808|0
 楼主| lzfact 发表于 2007-2-4 14:58 | 显示全部楼层 |阅读模式
ov, TE, hm, mt, RS
我设计DS1302进行计时,晶振是正常的,可它就是不计时,请个位分析一下有那些原因,先谢谢了!程序如下:<br /><br />BitCnt&nbsp;data&nbsp;20h&nbsp;;&nbsp;数据位计数器<br />ByteCnt&nbsp;data&nbsp;21h&nbsp;;&nbsp;数据字节计数器<br />Command&nbsp;data&nbsp;22h&nbsp;;&nbsp;命令字节地址<br />RcvDat&nbsp;DATA&nbsp;40H&nbsp;;&nbsp;接收数据缓冲区<br />XmtDat&nbsp;DATA&nbsp;10H&nbsp;;&nbsp;发送数据缓冲区<br />;端口位定义<br />IO_DATA&nbsp;bit&nbsp;P1.5&nbsp;;&nbsp;数据传送总线<br />SCLK&nbsp;bit&nbsp;P1.4;&nbsp;时钟控制总线<br />RST&nbsp;bit&nbsp;P1.6&nbsp;;&nbsp;复位总线<br />&nbsp;ORG&nbsp;&nbsp;&nbsp;0000H<br /><br />START:<br />;------------------------------------初始化1302-------------------------<br /><br />SET1302:<br />clr&nbsp;sclk<br />&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RST<br />&nbsp;MOV&nbsp;&nbsp;SP,#50H<br /><br />LCALL&nbsp;Write_Enable;写允许<br />LCALL&nbsp;Osc_Enable<br />LCALL&nbsp;Write_Multiplebyte;初始化1302,将我们要设定的数据写入<br />LCALL&nbsp;Write_Disable<br /><br />START:LCALL&nbsp;Read_Multiplebyte;将我们设定的数据读出来<br /><br /><br />lcall&nbsp;exchange<br />lcall&nbsp;disp<br /><br />AJMP&nbsp;START<br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />;********************************************************************************************<br />;发送数据程序<br />;名称:Send_Byte<br />;描述:发送ByteCnt&nbsp;个字节给被控器DS1302<br />;命令字节地址在Command&nbsp;中<br />;所发送数据的字节数在ByteCnt&nbsp;中发送的数据在XmtDat&nbsp;缓冲区中<br />;********************************************************************************************<br />Send_Byte:<br />CLR&nbsp;RST&nbsp;;复位引脚为低电平所有数据传送终止<br />NOP<br />CLR&nbsp;SCLK;&nbsp;清时钟总线<br />NOP<br />SETB&nbsp;RST&nbsp;;复位引脚为高电平逻辑控制有效<br />NOP<br />MOV&nbsp;A,Command;&nbsp;准备发送命令字节<br />MOV&nbsp;BitCnt,#08h&nbsp;;传送位数为8<br />S_Byte0:<br />RRC&nbsp;A&nbsp;;将最低位传送给进位位C<br />MOV&nbsp;IO_DATA,C&nbsp;;位传送至数据总线<br />NOP<br />SETB&nbsp;SCLK&nbsp;;时钟上升沿发送数据有效<br />NOP<br />CLR&nbsp;SCLK&nbsp;;清时钟总线<br />DJNZ&nbsp;BitCnt,S_Byte0&nbsp;;位传送未完毕则继续<br />NOP<br />S_Byte1:&nbsp;;准备发送数据<br />MOV&nbsp;A,@R0&nbsp;;传送数据过程与传送命令相同<br />MOV&nbsp;BitCnt,#08h<br />S_Byte2:<br />RRC&nbsp;A<br />MOV&nbsp;IO_DATA,C<br />NOP<br />SETB&nbsp;SCLK<br />NOP<br />CLR&nbsp;SCLK<br />DJNZ&nbsp;BitCnt,S_Byte2<br />INC&nbsp;R0&nbsp;;发送数据的内存地址加1<br />DJNZ&nbsp;ByteCnt,S_Byte1&nbsp;;字节传送未完毕则继续<br />NOP<br />CLR&nbsp;RST&nbsp;;逻辑操作完毕清RST<br />RET<br />;***************************************************************************************<br />;接收数据程序;<br />;名称:Receive_Byte<br />;描述:从被控器DS1302&nbsp;接收ByteCnt&nbsp;个字节数据<br />;命令字节地址在Command&nbsp;中<br />;所接收数据的字节数在ByteCnt&nbsp;中接收的数据在RcvDat&nbsp;缓冲区中<br />;***********************************************************************************<br />Receive_Byte:<br />CLR&nbsp;RST&nbsp;;复位引脚为低电平所有数据传送终止<br />NOP<br />CLR&nbsp;SCLK&nbsp;;清时钟总线<br />NOP<br />SETB&nbsp;RST&nbsp;;复位引脚为高电平逻辑控制有效<br />MOV&nbsp;A,Command&nbsp;;准备发送命令字节<br />MOV&nbsp;BitCnt,#08h&nbsp;;传送位数为8<br />R_Byte0:<br />RRC&nbsp;A&nbsp;;将最低位传送给进位位C<br />MOV&nbsp;IO_DATA,C&nbsp;;位传送至数据总线<br />NOP<br />SETB&nbsp;SCLK&nbsp;;时钟上升沿发送数据有效<br />NOP<br />CLR&nbsp;SCLK&nbsp;;清时钟总线<br />DJNZ&nbsp;BitCnt,R_Byte0&nbsp;;位传送未完毕则继续<br />NOP<br />R_Byte1:&nbsp;;准备接收数据<br />CLR&nbsp;A&nbsp;;清类加器<br />CLR&nbsp;C&nbsp;;清进位位C<br />MOV&nbsp;BitCnt,#08h&nbsp;;接收位数为8<br />R_Byte2:<br />NOP<br />MOV&nbsp;C,IO_DATA&nbsp;;数据总线上的数据传送给C<br />RRC&nbsp;A&nbsp;;从最低位接收数据<br />SETB&nbsp;SCLK&nbsp;;时钟总线置高<br />NOP<br />CLR&nbsp;SCLK&nbsp;;时钟下降沿接收数据有效<br />DJNZ&nbsp;BitCnt,R_Byte2&nbsp;;位接收未完毕则继续<br />MOV&nbsp;@R1,A&nbsp;;接收到的完整数据字节放入接收内存缓冲区<br />INC&nbsp;R1&nbsp;;接收数据的内存地址加1<br />DJNZ&nbsp;ByteCnt,R_Byte1&nbsp;;字节接收未完毕则继续<br />NOP<br />CLR&nbsp;RST&nbsp;;逻辑操作完毕清RST<br />RET<br /><br />;--写保护寄存器操作------------------------------------------<br />Write_Enable:<br />MOV&nbsp;Command,#8Eh&nbsp;;命令字节为8E<br />MOV&nbsp;ByteCnt,#1&nbsp;;单字节传送模式<br />MOV&nbsp;R0,#XmtDat&nbsp;;数据地址覆给R0<br />MOV&nbsp;XmtDat,#00h&nbsp;;数据内容为0&nbsp;写入允许<br />ACALL&nbsp;Send_Byte&nbsp;;调用写入数据子程序<br />RET<br /><br />;当写保护寄存器的最高位为1&nbsp;时禁止数据写入寄存器---------------<br />Write_Disable:<br />MOV&nbsp;Command,#8Eh&nbsp;;命令字节为8E<br />MOV&nbsp;ByteCnt,#1&nbsp;;单字节传送模式<br />MOV&nbsp;R0,#XmtDat&nbsp;;数据地址覆给R0<br />MOV&nbsp;XmtDat,#80h&nbsp;;数据内容为80h&nbsp;禁止写入<br />ACALL&nbsp;Send_Byte&nbsp;;调用写入数据子程序<br />RET&nbsp;;返回调用本子程序处<br /><br /><br />;当把秒寄存器的第7&nbsp;位时钟停止位设置为0&nbsp;时起动时钟开始---------<br />Osc_Enable:<br />MOV&nbsp;Command,#80h&nbsp;;&nbsp;命令字节为80<br />MOV&nbsp;ByteCnt,#1&nbsp;;&nbsp;单字节传送模式<br />MOV&nbsp;R0,#XmtDat&nbsp;;数据地址覆给R0<br />MOV&nbsp;XmtDat,#00h&nbsp;;数据内容为0&nbsp;振荡器工作允许<br />ACALL&nbsp;Send_Byte&nbsp;;调用写入数据子程序<br />RET&nbsp;;返回调用本子程序处<br /><br /><br />;当把秒寄存器的第7&nbsp;位时钟停止位设置为1&nbsp;时时钟振荡器停止HT1380&nbsp;进入低功耗方式---------------<br />Osc_Disable:<br />MOV&nbsp;Command,#80h&nbsp;;命令字节为80<br />MOV&nbsp;ByteCnt,#1&nbsp;;单字节传送模式<br />MOV&nbsp;R0,#XmtDat&nbsp;;数据地址覆给R0<br />MOV&nbsp;XmtDat,#80h&nbsp;;数据内容为80h&nbsp;振荡器停止<br />ACALL&nbsp;Send_Byte&nbsp;;调用写入数据子程序<br />RET&nbsp;;返回调用本子程序处<br /><br /><br />;写入00&nbsp;年6&nbsp;月21&nbsp;日星期三13&nbsp;时59&nbsp;分59---------------------<br />Write_Multiplebyte:<br />MOV&nbsp;Command,#0BEh&nbsp;;命令字节为BEh<br />MOV&nbsp;ByteCnt,#8&nbsp;;多字节写入模式此模块为8&nbsp;个<br />MOV&nbsp;R0,XmtDat;数据地址覆给R0<br />MOV&nbsp;XmtDat,#55h&nbsp;;秒单元内容为59h<br />MOV&nbsp;XmtDat+1&nbsp;,#55h&nbsp;;分单元内容为59h<br />MOV&nbsp;XmtDat+2,#55h&nbsp;;时单元内容为13h<br />MOV&nbsp;XmtDat+3,#55h&nbsp;;日期单元内容为21h<br />MOV&nbsp;XmtDat+4,#55h&nbsp;;月单元内容为06h<br />MOV&nbsp;XmtDat+5,#55h&nbsp;;星期单元内容为03h<br />;MOV&nbsp;46h,#0&nbsp;;年单元内容为00h<br />MOV&nbsp;XmtDat+6,#55h&nbsp;;写保护单元内容为00h<br />ACALL&nbsp;Send_Byte&nbsp;;调用写入数据子程序<br />RET&nbsp;;返回调用本子程序处<br /><br /><br />;读出寄存器0-7&nbsp;的内容程序设置如下<br />Read_Multiplebyte:<br />MOV&nbsp;Command,#0BFh&nbsp;;命令字节为BFh<br />MOV&nbsp;ByteCnt,#8&nbsp;;多字节读出模式此模块为8&nbsp;个<br />MOV&nbsp;R1,#RcvDat&nbsp;;数据地址覆给R1<br />ACALL&nbsp;Receive_Byte;&nbsp;调用读出数据子程序<br />RET;&nbsp;返回调用本子程序处<br /><br /><br />;写入8&nbsp;时12&nbsp;小时模式程序设置如下<br />Write_Singlebyte:<br />MOV&nbsp;Command,#84h&nbsp;;&nbsp;命令字节为84h<br />MOV&nbsp;ByteCnt,#1&nbsp;;&nbsp;单字节传送模式<br />MOV&nbsp;R0,#XmtDat&nbsp;;数据地址覆给R0<br />MOV&nbsp;XmtDat,#88h&nbsp;;数据内容为88h<br />ACALL&nbsp;Send_Byte&nbsp;;调用写入数据子程序<br />RET&nbsp;;返回调用本子程序处<br /><br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br /><br />exchange:<br /><br />mov&nbsp;a,46h<br />mov&nbsp;b,#10H<br />div&nbsp;ab&nbsp;;把40H高低4位分开<br />mov&nbsp;3Dh,a&nbsp;;高4位存入31H单元<br />mov&nbsp;a,b<br />mov&nbsp;3Ch,a&nbsp;;低4位存入30H单元<br /><br />mov&nbsp;a,45h<br />mov&nbsp;b,#10H<br />div&nbsp;ab&nbsp;;把40H高低4位分开<br />mov&nbsp;3Bh,a&nbsp;;高4位存入31H单元<br />mov&nbsp;a,b<br />mov&nbsp;3Ah,a&nbsp;;低4位存入30H单元<br /><br />mov&nbsp;a,44h<br />mov&nbsp;b,#10H<br />div&nbsp;ab&nbsp;;把40H高低4位分开<br />mov&nbsp;39h,a&nbsp;;高4位存入31H单元<br />mov&nbsp;a,b<br />mov&nbsp;38h,a&nbsp;;低4位存入30H单元<br /><br />mov&nbsp;a,43h<br />mov&nbsp;b,#10H<br />div&nbsp;ab&nbsp;;把40H高低4位分开<br />mov&nbsp;37h,a&nbsp;;高4位存入31H单元<br />mov&nbsp;a,b<br />mov&nbsp;36h,a&nbsp;;低4位存入30H单元<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;;;;;;<br />mov&nbsp;a,42h<br />mov&nbsp;b,#10H<br />div&nbsp;ab&nbsp;;把41H高低4位分开<br />mov&nbsp;35h,a&nbsp;;高4位存入33H单元<br />mov&nbsp;a,b<br />mov&nbsp;34h,a&nbsp;;低4位存入32H单元<br /><br />mov&nbsp;a,41h<br />mov&nbsp;b,#10H<br />div&nbsp;ab&nbsp;;把41H高低4位分开<br />mov&nbsp;33h,a&nbsp;;高4位存入33H单元<br />mov&nbsp;a,b<br />mov&nbsp;32h,a&nbsp;;低4位存入32H单元<br /><br />mov&nbsp;a,40h<br />mov&nbsp;b,#10H<br />div&nbsp;ab&nbsp;;把40H高低4位分开<br />mov&nbsp;31h,a&nbsp;;高4位存入31H单元<br />mov&nbsp;a,b<br />mov&nbsp;30h,a&nbsp;;低4位存入30H单元<br />;ajmp&nbsp;exchange<br />ret<br />NOP<br />NOP<br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />&nbsp;&nbsp;DISP:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#12h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,30H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#52h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,31H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#22h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,32H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#0a2h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,33H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#62h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,34H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#0E2h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,35H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#02h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,36H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#82h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,37H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#42h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,38H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;p2,#0C2h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,39H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TAB1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVC&nbsp;A,@A+DPTR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;P0,A<br />&nbsp;&nbsp;&nbsp;&nbsp;ACALL&nbsp;&nbsp;delay1<br /><br /><br />&nbsp;&nbsp;AJMP&nbsp;DISP<br /><br />&nbsp;delay1:&nbsp;MOV&nbsp;r2,#2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D11:&nbsp;MOV&nbsp;r3,#50<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D12:MOV&nbsp;r4,#10<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D13:DJNZ&nbsp;r4,D13<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DJNZ&nbsp;r3,D12<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DJNZ&nbsp;r2,D11<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET<br /><br /><br />TAB1:&nbsp;DB&nbsp;14H&nbsp;,77H,&nbsp;4CH&nbsp;,45H,&nbsp;27H&nbsp;&nbsp;,85H&nbsp;&nbsp;,84H&nbsp;,57H&nbsp;,04H&nbsp;,05H<br />TAB2:&nbsp;DB&nbsp;03H,&nbsp;3FH,&nbsp;4AH,&nbsp;2AH&nbsp;,36H,&nbsp;0A2H,82H&nbsp;,3BH,&nbsp;02H&nbsp;,22H<br />end<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部