微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > DS1302的错误:error c213

DS1302的错误:error c213

时间:10-02 整理:3721RD 点击:

  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. }

复制代码


c语言基础知识, 数组名是地址(即指针),是常量,不能被更改
tmp=time_buf1/10;
  time_buf=time_buf1%10;
  time_buf=time_buf+tmp*16;
你定义了i,却没有用?

我写的有怎么没有显示啊
红色的部分是有

[i]怎么显示不出来 郁闷!

你先把你参考的程序编写,烧录进去试试行不行,然后再写自己的吧!time_buf1[i]和time_buf[i],建议你分开来处理,一个专门放8421码,一个放16进制码!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top