2019-03-24 17:32发布
maychang 发表于 2016-8-19 17:19 “函数中没有中断” 你好像还没有弄清楚“中断”是怎么回事。 打个比方:你正在看书,朋友来了,你记住 ...
kk118a 发表于 2016-8-19 00:19 上图,程序
wyf1101 发表于 2016-8-19 21:20 是不是18b20的读写时序被ds1302冲突了,但是该怎样解决呢,需要看程序吗
最多设置5个标签!
是不是18b20的读写时序被ds1302冲突了,但是该怎样解决呢,需要看程序吗
- void main()
- {
- LCD_init(); //初始化液晶
- LCD_clear();
- Ds1302Init();
- LCD_write_english_string(0,1," 2016.08.17 ");
- LCD_write_english_string(0,3,"DS:00:00:00 ");
- LCD_write_english_string(0,5," crazyer ");
- LCD_write_english_string(0,1," 00:00:00 ");
- LCD_write_english_string(0,2,"wendu: 00.00 C");
- LCD_write_english_string(0,4,"DS 00:00:00 ");
- dd=0;
- while(1)
- {
- Ds1302ReadTime();
- temp1 = Ds18b20ReadTemp();
- temp1=(temp1*0.0625*100+0.5)*10;
- q=temp1 / 1000;
- b=temp1 % 1000 / 100;
- s=temp1 % 100 / 10;
- g=temp1%10;
- xianshi(3,7,q); delay(1);
- xianshi(3,8,b); delay(1);
- xianshi(3,9,'.'-48);delay(1);
- xianshi(3,10,s); delay(1);
- xianshi(3,11,g);
- delay(1);
-
- szshi1=TIME[2]/16;
- szshi2=(TIME[2]&0x0f);
- szfen1=TIME[1]/16;
- szfen2=(TIME[1]&0x0f);
- szmiao1=TIME[0]/16;
- szmiao2=(TIME[0]&0x0f);
- sznian1=TIME[6]/16;
- sznian2=(TIME[6]&0x0f);
- szyue1=TIME[4]/16;
- szyue2=(TIME[4]&0x0f);
- szri1=TIME[3]/16;
- szri2=(TIME[3]&0x0f);
- szxq1=TIME[5]/16;
- szxq2=(TIME[5]&0x0f);
- xianshi(1,2,2);
- xianshi(1,3,0);
- xianshi(1,4,sznian1); delay(1);
- xianshi(1,5,sznian2); delay(1);
- // LCD_write_english_string(2,7,"-");
- xianshi(1,7,szyue1); delay(1);
- xianshi(1,8,szyue2); delay(1);
- // LCD_write_english_string(2,11,"-");
- xianshi(1,10,szri1); delay(1);
- xianshi(1,11,szri2); delay(1);
-
- xianshi(2,3,szshi1); delay(1);
- xianshi(2,4,szshi2); delay(1);
- // LCD_write_english_string(2,5,":");
- xianshi(2,6,szfen1); delay(1);
- xianshi(2,7,szfen2); delay(1);
- // LCD_write_english_string(2,8,":");
- xianshi(2,9,szmiao1); delay(1);
- xianshi(2,10,szmiao2); delay(1);
- // wendu();
-
- num1=kaig();
- if(num1==7) dingshi2(kaig());
- if(num1==1) dingshi1(kaig());
- if(shi1==szshi1&&shi2==szshi2&&fen1==szfen1&&fen2==szfen2&&miao1==szmiao1&&miao2==szmiao2) dd=1;
- if(s1==szshi1&&s2==szshi2&&f1==szfen1&&f2==szfen2&&m1==szm1&&m2==szmiao2) dd=1;
- }
-
- }
复制代码“该怎样解决呢”
准备对18B20进行读或写操作之前,关掉中断,读或写18B20之后立即开中断。这样,中断不会破坏读或写18B20的时序。
关中断后,读或写18B20所需要的时间相当短。在此期间内,中断被“挂起”,相当于病人已经挂号,等待医生为前一个病人诊断。读或写18B20完成后开中断,相当于医生已经为前一个病人诊断完毕,允许这个病人陈述病情。
至于18B20转换期间(大约1秒),单片机可以执行很多程序,并无影响。
详细的时序,应该仔细看18B20的datasheet。
“该怎样解决呢”
写程序,尤其是底层程序,绝对不是copy一段别人写的可以正常工作的程序,就能够实现你的目标的。
一周热门 更多>