DS1302的错误:error c213

2019-07-16 02:57发布

本帖最后由 546758514 于 2012-12-28 12:46 编辑
  1. 编译时出现图片上的错误,求助各位大侠是什么原因?出错的是77-79、98-104、108-110行,估计是数组的错误,但我找不到有什么错误,程序如下:
  2. #include "ds1302.h"
  3. #include <reg52.h>
  4. #include<intrins.h>
  5. unsigned char time_buf1[8]={20,10,6,5,12,55,00,6};//空年月日时分秒周
  6. unsigned char time_buf[8];
  7. sbit SCLK=P1^7;
  8. sbit CE=P1^5;
  9. sbit DIO=P1^6;
  10. /*------------------------------------------------
  11. *名称:void Write_ds1302(uchar add,uchar dat)
  12. *功能:向DS1302指定地址写入一字节数据
  13. *说明:无返回值         
  14. ------------------------------------------------*/
  15. void Write_ds1302(unsigned char add,unsigned char dat)
  16. {
  17. unsigned char i,temp;
  18. CE=0;
  19. SCLK=0;
  20. CE=1;
  21. for(i=8;i>0;i--)  
  22. {
  23.   SCLK=0;
  24.   temp=add;
  25.   DIO=(bit)(temp&0x01);
  26.   add>>=1;
  27.   SCLK=1;
  28. }
  29. for(i=8;i>0;i--)  
  30. {
  31.   SCLK=0;
  32.   temp=dat;
  33.   DIO=(bit)(temp&0x01);
  34.   dat>>=1;
  35.   SCLK=1;
  36. }
  37. CE=0;
  38. }
  39. /*------------------------------------------------
  40. *名称:void Write_ds1302(uchar add,uchar dat)
  41. *功能:从DS1302指定地址读出一字节数据
  42. *说明:有返回值         
  43. ------------------------------------------------*/
  44. unsigned char Read_ds1302(unsigned char add)
  45. {
  46. unsigned char i,temp,dat;
  47. CE=0;
  48. SCLK=0;
  49. CE=1;
  50. for(i=8;i>0;i--)  
  51. {
  52.   SCLK=0;
  53.   temp=add;
  54.   DIO=(bit)(temp&0x01);
  55.   add>>=1;
  56.   SCLK=1;
  57. }
  58. for(i=8;i>0;i--)  
  59. {
  60.   SCLK=1;
  61.   dat>>=1;
  62.   if(DIO==1)
  63.    dat|=0x80;
  64.   SCLK=0;
  65. }
  66. CE=0;
  67. return dat;
  68. }
  69. /*------------------------------------------------
  70.            向DS1302写入时钟数据
  71. ------------------------------------------------*/
  72. void Ds1302_Write_Time(void)
  73. {
  74. unsigned char i,tmp;
  75. for(i=0;i<8;i++)
  76. {                  //BCD处理
  77.   tmp=time_buf1[i]/10;
  78.   time_buf[i]=time_buf1[i]%10;
  79.   time_buf[i]=time_buf[i]+tmp*16
  80. }
  81. Write_ds1302(0x8e,0x00);//写保护关
  82. Write_ds1302(0x80,0x80);//暂停
  83. Write_ds1302(0x8c,time_buf[1]);
  84. Write_ds1302(0x88,time_buf[2]);
  85. Write_ds1302(0x86,time_buf[3]);
  86. Write_ds1302(0x84,time_buf[4]);
  87. Write_ds1302(0x82,time_buf[5]);
  88. Write_ds1302(0x80,time_buf[6]);
  89. Write_ds1302(0x8a,time_buf[7]);
  90. Write_ds1302(0x8e,0x80);//写保护开
  91. }
  92. /*------------------------------------------------
  93.            从DS1302读出时钟数据
  94. ------------------------------------------------*/
  95. void Ds1302_Read_Time(void)  
  96. {
  97.     unsigned char i,tmp;
  98. time_buf[1]=Read_ds1302(0x8c);  //年
  99. time_buf[2]=Read_ds1302(0x88);  //月
  100. time_buf[3]=Read_ds1302(0x86);  //日
  101. time_buf[4]=Read_ds1302(0x84);  //时
  102. time_buf[5]=Read_ds1302(0x82);  //分
  103. time_buf[6]=(Read_ds1302(0x81))&0x7F;//秒
  104. time_buf[7]=Read_ds1302(0x8a);  //周

  105. for(i=0;i<8;i++)
  106. {           //BCD处理
  107.   tmp=time_buf1[i]/10;
  108.   time_buf[i]=time_buf1[i]%10;
  109.   time_buf[i]=time_buf[i]+tmp*16;
  110. }
  111. }
复制代码
捕获.JPG
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。