keil 程序,为啥这个函数的中断进不去?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keil 程序,为啥这个函数的中断进不去?相关的知识,希望对你有一定的参考价值。

#include<reg52.h>
#include<intrins.h>
sbit IO_DS18B20=P3^7;
unsigned char cnt=0;
unsigned char code Disp_Tab[]=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;
unsigned int dispbit[]=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;
unsigned char str[6];
unsigned char flag;
void delay10ms(unsigned char t)

do
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
while(--t);

void led(unsigned int temp)

unsigned int i;
unsigned char TempH,TempL;
TempH=temp>>4;
TempL=temp&0xf0;
TempL=TempL*6/10;//小数近似处理
str[5]=0xc6; //显示C符号
str[1]=Disp_Tab[TempH/100]; //百位温度
str[2]=Disp_Tab[(TempH%100)/10]; //十位温度
str[3]=Disp_Tab[(TempH%100)%10]&0x7F; //个位温度,带小数点
str[4]=Disp_Tab[TempL>>4];
if(temp&0x8000)

str[0]=0xbf;//负号标志
temp=~temp; // 取反加1
temp +=1;

else
str[0]=0xff;

for(i=0;i<6;i++)

P1=dispbit[i];
P0=str[i];
_nop_(); _nop_();_nop_();_nop_();
P0=0xff;



void Init_DS18B20(void)

unsigned char x=0;
EA=0;
IO_DS18B20 = 1; //DQ复位
delay10ms(1); //稍做延时
IO_DS18B20 = 0; //单片机将DQ拉低
delay10ms(75); //精确延时 大于 480us
IO_DS18B20 = 1; //拉高总线
delay10ms(6);
x=IO_DS18B20; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay10ms(3);
EA=1;

void IO_DS18B20Write(unsigned char dat)

unsigned char mask;
EA=0;
for(mask=0x01;mask!=0;mask<<=1)

IO_DS18B20=0;
_nop_();
_nop_();
if((dat&mask)==0)
IO_DS18B20=0;
else
IO_DS18B20=1;
delay10ms(6);
IO_DS18B20=1;


EA=1;

unsigned char IO_DS18B20Read()

unsigned char mask;
unsigned char dat;
EA=0;
for(mask=0x01;mask!=0;mask<<=1)

IO_DS18B20=0;
_nop_();
_nop_();
IO_DS18B20 = 1;
_nop_();
_nop_();
if(!IO_DS18B20)
dat &= ~mask;
else
dat |= mask;
delay10ms(6);

EA=1;
return dat;

unsigned char ReadTemperature()

unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
IO_DS18B20Write(0xcc);
IO_DS18B20Write(0x44);
delay10ms(75);
Init_DS18B20();
IO_DS18B20Write(0xcc);
IO_DS18B20Write(0xbe);
a=IO_DS18B20Read; //低位
b=IO_DS18B20Read; //高位
b<<=8;
t=a+b;
return t;

void main()

unsigned char temp;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)

if(flag==1)


temp=ReadTemperature();
led(temp);
flag=0;
delay10ms(1);




void timer0() interrupt 1


TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
cnt++;
if(cnt>=20)

cnt=0;
flag=1;
// P0=0XAA;


求大神解答,感激不尽

你是问T0中断中断进不去?完全可以中断的。
是不显示温度吧,你这是用DS18B20测温度的吧,是仿真还是实物呢,问题应该是出在DS18B20的程序上,对时序的要求很严格的。追问

后来发现不是中断的问题。
这是用DS18B20测温度,实物。
DS18B20的程序几乎是照搬例程的,但不知道为什么不对。
初学者,想请教一下,谢谢

追答

做实物,关系到多方面,首先是你用什么单片机,要是STC的,是1T的,而网上找的多数是用于AT89C51的,这时序肯定不对。要是用STC的单片机,建议你到STC官网上去下载,那是针对STC单片机而写的。
其次,还与单片机晶振频率有关,要搞清楚你下载的程序适用的频率是多少的,而你的单片机的频率是多少,如果不同,需要做调整的。照搬例程肯定是不行的。

参考技术A 不至于这样。 参考技术B 你如何判定没有进入中断的?

为啥我的rust进不去

参考技术A 1、游戏文件发生了错误,非正常流程关机、断电等情况会导致文件损坏或丢失,重要文件出问题就会导致游戏发生异常,重新下载游戏重新安装可解决此问题,注意安装时不要安装在C盘,路径中不要出现中文文件夹,尽量不要修改默认安装路径。
2、CPU、内存、显卡等硬件带不动游戏导致游戏报错,游戏能否运行主要在于CPU、内存、显卡这三个硬件上,可以比照推荐配置,尽量大于等于推荐配置方可正常运行游戏。
3、系统与游戏之间有冲突,重装电脑系统可解决异常。

以上是关于keil 程序,为啥这个函数的中断进不去?的主要内容,如果未能解决你的问题,请参考以下文章

星际为啥IPX进不去?

用 keil编译的时候有两个警告怎么回事

想问,为啥我的APEX英雄进不去?一直在加载?

为啥我进百度进不去,老是跳出谷歌来

为啥点进QQ小程序后手机会自动息屏

keil C51中函数调用无法正确返回怎么回事