不打开定时器一切正常,求大佬提示!感谢!!
单片机源程序如下:
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DU P0
unsigned char ledchar[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; // 0~9
uint Temp;
uint t;
uchar Flag_connect ; //掉线标志位
uint MAX6675_temp;
uint BJ_temp; //报警值
uchar Flag_Bj; //报警标志位
uint p;
sbit xz = P2^7; //按键
sbit jia = P2^6;
sbit jian = P2^5;
sbit WEI_1 = P2^0 ;
sbit WEI_2 = P2^1 ;
sbit WEI_3 = P2^2 ;
sbit WEI_4 = P2^3 ;
sbit so = P1^5;
sbit sck = P1^6;
sbit cs = P1^7;
sbit baojing = P3^7;
sbit key1 = P2^5;
sbit key2 = P2^6;
sbit key3 = P2^7;
sbit baocun = P2^4;
sbit led = P3^0;
void xianshi(uint shuzhi);
void DelayMs(unsigned int i);
unsigned int MAX6675_Read();//读温度;
uint MAX6675_Oper();//温度运算
void Timer_Init();//定时器0初始化
void shezhi(); //按键设置
void UartInit(void);//串口初始化
void SendDate(unsigned char dat);
uchar a;
void Timer0() interrupt 1
{
a++;
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
if(a >= 10){
led =~ led;
a = 0;
}
}
void Start()
{
DU = 0x00;
WEI_1 = 1;
WEI_2 = 1;
WEI_3 = 1;
WEI_4 = 1;
Flag_Bj = 0;
}
void main(void)
{
Start();
Timer_Init();
DelayMs(1000);
baojing = 0;
BJ_temp = 145;
while (1){
EA = 0;
MAX6675_Oper();
EA = 1;
shezhi();
if(MAX6675_temp >= BJ_temp ) //报警判断
{
baojing = 1;
}else{baojing = 0;}
}
}
void xianshi(uint shuzhi){ //数码管显示函数,只显示三位数
uchar ge;
uchar shi;
uchar bai;
ge = shuzhi%10;
shi = (shuzhi/10)%10;
bai = shuzhi/100;
WEI_1 = 1;
WEI_2 = 1;
WEI_3 = 1;
WEI_4 = 1;
WEI_2 = 0;
DU = ledchar[bai];
DelayMs(3);
WEI_1 = 1;
WEI_2 = 1;
WEI_3 = 1;
WEI_4 = 1;
WEI_3 = 0;
DU = ledchar[shi];
DelayMs(3);
WEI_1 = 1;
WEI_2 = 1;
WEI_3 = 1;
WEI_4 = 1;
WEI_4 = 0;
DU = ledchar[ge];
DelayMs(3);
}
void DelayMs(unsigned int i) //一个延时函数,这个函数在11.0592M晶振下的延时时间大概为1ms
{
unsigned int j,k;
for(j=i; j>0; j--)
for(k=114; k>0; k--);
}
unsigned int MAX6675_Read(void) //max6675读十六位数值
{
//EA = 0;
uchar i;
uint dat;
i = 0;
dat = 0;
cs = 0;
sck = 0;
for(i = 0;i<16; i++)
{
sck = 1;
dat = dat<<1;
if(so == 1)
dat = dat|0x01;
sck = 0;
}
cs = 1;
return dat;
//EA = 1;
}
uint MAX6675_Oper()
{
t = MAX6675_Read();
Flag_connect = t&0x04;
Flag_connect = Flag_connect>>2;
t = t<<1;
t = t>>4;
MAX6675_temp = t/4;
if(Flag_connect==0 && Flag_Bj == 0){
for(t = 0; t<200; t++)
{
xianshi(MAX6675_temp);
}
}else {baojing = 1; xianshi(000);} //判断是否掉线,掉线报警,并且显示000
//return MAX6675_temp;
}
void Timer_Init()
{
EA = 1;
ET1 = 1;
TMOD = 0X10;
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
TR1 = 1;
a = 0;
}
void shezhi()
{
if(key1 == 0)
{
DelayMs(10);
if(key1 == 0)
{
xianshi(BJ_temp);
Flag_Bj = 1;
}
}
while(Flag_Bj == 1){xianshi(BJ_temp);
if(key2 == 0)
{
DelayMs(10);
if(key2 == 1){
BJ_temp++;
xianshi(BJ_temp);
}
}
if(key3 == 0)
{
DelayMs(10);
if(key3 == 1){
BJ_temp--;
xianshi(BJ_temp);
}
}
if(baocun == 0)
{
DelayMs(10);
if(baocun == 1){
Flag_Bj = 0;
}
}}
}
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE8; //设置定时初始值
TH1 = 0xFF; //设置定时初始值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
}
void SendDate(unsigned char dat)//串口发送
{
SBUF = dat;
while(!TI);
TI = 0;
} |