欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
請問單片機+ds18b20是不能中斷嗎中斷之后溫度顯示錯誤?
[打印本頁]
作者:
2979181478
時間:
2023-4-11 19:58
標題:
請問單片機+ds18b20是不能中斷嗎中斷之后溫度顯示錯誤?
#include <REGX52.H>
#include "LCD1602.h"
#include "DS18B20.h"
#include "Delay.h"
sbit Motor=P1^0;
unsigned char Counter,Compare;
unsigned char KeyNum,Speed;
float T;
void UsartConfiguration()
{
SCON=0X50; //SCON
TMOD=0X20;
PCON=0X00;
TH1=0Xfd;
TL1=0Xfd; //
TR1= 1;
ES = 1;
EA = 1;
PS=1;
}
void Timer0_Init(void)
{
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = 0x9C; //設置定時初值
TH0 = 0xFF; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
ET0=1;
EA=1;
PT0=0;
}
void main()
{
UsartConfiguration(); //藍牙中斷然后
Timer0_Init();定時器中斷
DS18B20_ConvertT(); //上電先轉換一次溫度,防止第一次讀數據錯誤
Delay(1000); //等待轉換完成
LCD_Init();
LCD_ShowString(1,1,"Temperature:");
P1_0=0;
while(1)
{
DS18B20_ConvertT(); //轉換溫度
T=DS18B20_ReadT(); //讀取溫度
if(T<0) //如果溫度小于0
{
LCD_ShowChar(2,1,'-'); //顯示負號
T=-T; //將溫度變為正數
}
else //如果溫度大于等于0
{
LCD_ShowChar(2,1,'+'); //顯示正號
}
LCD_ShowNum(2,2,T,3); //顯示溫度整數部分
LCD_ShowChar(2,5,'.'); //顯示小數點
LCD_ShowNum(2,6,(unsigned long)(T*10000)%10000,4);//顯示溫度小數部分
// if(T>=24)
// {P1_0=1;
// }
// else
// P1_0=0;
}
}
void forward()
{
Compare=0 ;
}
void back()
{
Compare=50 ;
}
void left()
{
Compare=100;
}
void Com_Int(void) interrupt 4
{
unsigned char receive_data;
EA = 0;
if(RI == 1)
{
RI=0;
receive_data = SBUF;
switch(receive_data)
{
case ('1'):
forward();break;
case ('2'):
back();break;
case ('3'):
left();break;
}
}
EA = 1;
}
//void UsartConfiguration()
//{
// SCON=0X50; //SCON
// TMOD=0X20;
// PCON=0X00;
// TH1=0Xfd;
// TL1=0Xfd; //
// TR1= 1;
// ES = 1;
// EA = 1;
// PS=1;
//}
void Timer0_Routine() interrupt 1
{
TL0 = 0x9C; //
TH0 = 0xFF; //
Counter++;
Counter%=100; //
if(Counter<Compare) //
{
Motor=1; //
}
else //
{
Motor=0; //
}
}
作者:
快樂眼淚
時間:
2023-4-11 20:09
怎么沒人回答?頂一下
作者:
npn
時間:
2023-4-11 20:24
中斷會打亂ds18b20的延時時序,導致讀取錯誤。
作者:
2979181478
時間:
2023-4-11 20:55
大伙有什么好的解決辦法嗎
作者:
coody_sz
時間:
2023-4-11 21:58
18B20有嚴格的時序,中斷會導致時序錯誤。
作者:
a399288395
時間:
2023-4-12 08:02
因為18B20要用到US級的延時, 對時序要求很高;如果正在操作18B20的時候, 此時正好又進中斷,那18B20就會操作失敗;有辦法解決的,那就是降低溫度讀取的頻率,,DS18B20不要放在while 里面一直不停的刷新, 可以用收到命令后才讀取溫度,也可以用中斷設置固定的時間刷新,比如1秒鐘或者5秒鐘刷新一次(總之就是避開 正在讀溫度的時候被其他中斷打斷)。如果用中斷來操作18B20 就把18B20 的中斷優先級設置為最高,
作者:
Yang_Tree
時間:
2023-4-25 14:11
2979181478 發表于 2023-4-11 20:55
大伙有什么好的解決辦法嗎
在操作時序步驟之前關掉EA
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1