24小时热门版块排行榜    

查看: 1213  |  回复: 3

yeyu370784

新虫 (初入文坛)

[求助] 52单片机的程序问题,程序刚开始可以执行,可是执行一段时间后就不灵敏了!求高人指点 已有1人参与

#include <reg52.h>        // 89C52单片机头文件
#include <stdio.h>       
#include <intrins.h>
sbit key1=P1^0;
sbit key2=P1^1;
sfr ISP_CONTR=0xe7;
idata unsigned char dis5_temp_buf[50];
unsigned int num4=0,temp=0,num5=0;
unsigned char temp_buf_f=0;
unsigned int  flag=0,flag1=0,flag2=0,flag3=0,flag4=0;
double num2=0,num3=0;
unsigned int num=0,num1=0;
unsigned  char dis0_temp_buf[7]={"<!@CSB"};
unsigned  char dis4_temp_buf[6]={"<!>JI"};          
unsigned  char dis6_temp_buf[2]={'#'};
unsigned  char dis7_temp_buf[11]={"<!>KF报警#"};
unsigned  char dis10_temp_buf[10]={"<!AKF1140"};
idata unsigned  char dis11_temp_buf[9]={"<!>KG常#"};
idata unsigned  char dis12_temp_buf[11]={"<!>LF故障#"};
idata unsigned  char dis13_temp_buf[10]={"<!ALF1140"};
idata unsigned  char dis14_temp_buf[9]={"<!>LG常#"};
idata unsigned  char dis15_temp_buf[8]={"<!>KK1#"};
idata unsigned  char dis16_temp_buf[8]={"<!>KK0#"};
idata unsigned  char dis17_temp_buf[5]={"<!LL"};
idata unsigned  char dis18_temp_buf[5]={"<!LH"};



void delayms(unsigned int xms)         //延时程序
{
        unsigned int m,n;
        for(m=xms;m>0;m--)
                for(n=110;n>0;n--);
}

void T_init (void)           //T0用于计数,T2用于定时
{   
        TMOD=0x25;             //设置T1定时器和T0计数器的工作方式
        TH0=0;                           //设置T0计数器初值
        TL0=0;
        TR0=1;                           // 启动定时器T0

       
        TH1=0xfd;                   //串口初始化设置
    TL1=0xfd;
    TR1=1;                           
    SM0=0;
    SM1=1;
        REN=0;
    ES=1;

        RCAP2H=(65536-45872)/256;        //T2定时器的初始化设置
        RCAP2L=(65536-45872)%256;
        TH2=RCAP2H;
        TL2=RCAP2L;
        T2CON=0x04;       
        ET2=1;
       
               
}

/*void uart0_rx_isr() interrupt 4           //串口中断
{

RI=0;
temp_buf[temp_buf_f++]=SBUF;
if (temp_buf_f>=17)
{
   temp_buf_f=0;
}

} */          
  
void USART_Transmit( unsigned char date )        // 发送数据
{
ES=0;
SBUF=date;
while(!TI);
TI=0;
ES=1;
}

void send_data(unsigned char *buffer, unsigned char len)
{
unsigned char i=0;
for(i=0;i<len;i++)  //数据长度为包长度
{
  USART_Transmit(*buffer++);
}  
}

void shipin_init (void)                                                          //视频初始化设置
{
  send_data(dis0_temp_buf,sizeof(dis0_temp_buf));
  delayms(10);
}  



void main(void)                                                                                //主函数
{   
shipin_init();
EA=1;
T_init();
// WDT_CONTR=0x34;
P1=0xff;
//key2=1;
while(1)
{
        if(flag==1)       
         {   
            flag=0;
                delayms(2);            
                if(key1!=0)
                {
                    flag1=1;
                        delayms(20);
                        send_data(dis10_temp_buf,sizeof(dis10_temp_buf));
                        delayms(10);
                        send_data(dis11_temp_buf,sizeof(dis11_temp_buf));
                        delayms(10);
                         
                }
           if(key1==0)
                {       
                        delayms(10);
                        if (key1==0)
                         { flag1=0;
                           flag2=1;
                           flag3=0;
                           num4=0;
                           delayms(10);
                           send_data(dis7_temp_buf,sizeof(dis7_temp_buf));
                           delayms(10);
                           send_data(dis15_temp_buf,sizeof(dis15_temp_buf));
                           delayms(10);
                           send_data(dis18_temp_buf,sizeof(dis18_temp_buf));
                           delayms(10);
                          
                         }
                }
                temp=flag2+flag1;
                flag1=0;
            if (temp==2)
                {        temp=0;
                        flag3=1;
                        if(num4>=200)
                        {       
                            //delayms(1);
                                send_data(dis16_temp_buf,sizeof(dis16_temp_buf));
                                delayms(10);
                                send_data(dis17_temp_buf,sizeof(dis17_temp_buf));
                                delayms(10);
                                num4=0;
                                flag3=0;
                                flag2=0;
                        }

                }       
                if(key2!=0)
                {       
                          delayms(10);
                    //send_data(dis13_temp_buf,sizeof(dis13_temp_buf));
                        delayms(10);
                        send_data(dis14_temp_buf,sizeof(dis14_temp_buf));
                        delayms(10);

                }
            if (key2==0)
                {
                        delayms(2);
                   if (key2==0)
                         {
                           send_data(dis12_temp_buf,sizeof(dis12_temp_buf));
                         }
                }
                sprintf(dis5_temp_buf,"%.1f",num3) ;           //速度值保留一位小数
                delayms(10);
                send_data(dis4_temp_buf,sizeof(dis4_temp_buf));
            send_data(dis5_temp_buf,sizeof(dis5_temp_buf));
             send_data(dis6_temp_buf,sizeof(dis6_temp_buf));
                delayms(10);
                if(flag4==1)
                {
                        flag4=0;
                        ISP_CONTR=0x20;
                }
                delayms(100);
                  
            
         }

}          
       
}

void T2_() interrupt 5                          //定时器T2中断
{
        TF2=0;
        num1++;
        num5++;
        if(num1==10)                                  //定时1秒
        {  
           num1=0;
           flag=1;
           num=256*TH0+TL0;
           TH0=0;
           TL0=0;

           num2=(double)num/27.69;
           num3=num2;
        }          
        if(flag3==1)
        {
                num4++;
        }
        if(num5>=6000)
        {
           num5=0;
           flag4=1;
        }
}  

程序就是采集一个脉冲变量,还有两个开关量,为什么那key1开关量,在程序运行一段时间后,给1或者给0都没有变化,但是key2开关量一直都是正常的,跪求高人指点啊 。如果可以,有酬谢。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

兰大小精灵

铜虫 (初入文坛)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
yeyu370784: 金币+5, ★★★很有帮助 2014-03-21 13:01:48
改到别的端口试试,比如1.2,1.3或者1.4这三个端口。
2楼2014-03-04 17:27:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yeyu370784

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by 兰大小精灵 at 2014-03-04 17:27:02
改到别的端口试试,比如1.2,1.3或者1.4这三个端口。

我试过p3.6,p3.7不行之后,我就改成了p1.0,p1.1,我想是这个的问题的可能性不大,您帮我看看还有没有其他的问题啊,谢谢
3楼2014-03-06 09:06:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

兰大小精灵

铜虫 (初入文坛)

引用回帖:
3楼: Originally posted by yeyu370784 at 2014-03-06 09:06:56
我试过p3.6,p3.7不行之后,我就改成了p1.0,p1.1,我想是这个的问题的可能性不大,您帮我看看还有没有其他的问题啊,谢谢...

之所你让你改端口是排除引脚的复用问题,1.0是52的tx,1.1是txen,你只之前用的两个口也有引脚的第二功能,程序既然能跑,说明功能上应该问题不大,至于失灵,大多都是别的功能影响了,该关的中断没关,该打开的功能没打开。另外这个问题你也应该去专业的单片机论坛上去问,学校和公司的差别还不小,民间单片机和电路高手都很多。
4楼2014-03-07 11:00:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yeyu370784 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 化学调剂0703 +8 啊我我的 2026-03-11 8/400 2026-03-16 17:23 by 我的船我的海
[考研] 283求调剂 +10 小楼。 2026-03-12 14/700 2026-03-16 16:08 by 13811244083
[基金申请] 国自科面上基金字体 +5 iwuli 2026-03-12 6/300 2026-03-16 13:13 by Kamiu_MK
[考研] 344求调剂 +3 knight344 2026-03-16 3/150 2026-03-16 09:42 by 无际的草原
[考研] 材料工程专硕274一志愿211求调剂 +5 薛云鹏 2026-03-15 5/250 2026-03-15 20:38 by Logic2024
[考研] 材料专硕326求调剂 +4 墨煜姒莘 2026-03-15 4/200 2026-03-15 11:02 by dyw
[考研] 080500,材料学硕302分求调剂学校 +4 初识可乐 2026-03-14 5/250 2026-03-14 21:08 by peike
[基金申请] 面上和青基一样限30页不合理 +5 wowsunflower 2026-03-10 7/350 2026-03-14 17:21 by kingkocxr
[考研] 一志愿郑大070303,338分,求调剂 +4 dadawaf 2026-03-10 5/250 2026-03-14 01:20 by lsw010101
[考研] 复试调剂 +9 Copy267 2026-03-10 9/450 2026-03-13 23:45 by userper
[考研] 材料与化工304求B区调剂 +5 邱gl 2026-03-11 6/300 2026-03-13 22:37 by JourneyLucky
[考研] 308求调剂 +5 是Lupa啊 2026-03-11 5/250 2026-03-13 22:13 by JourneyLucky
[考研] 285化工学硕求调剂(081700) +6 柴郡猫_ 2026-03-12 6/300 2026-03-13 20:46 by hmn_wj
[考研] 289求调剂 +3 李政莹 2026-03-12 3/150 2026-03-13 11:02 by 求调剂zz
[考研] 0856化工原理 +6 z2839474511 2026-03-10 6/300 2026-03-13 10:41 by houyaoxu
[考研] 270求调剂 085600材料与化工专硕 +3 YXCT 2026-03-11 3/150 2026-03-13 10:13 by houyaoxu
[考研] 085600 材料与化工 295 求调剂 +10 dream…… 2026-03-10 12/600 2026-03-12 13:46 by dream……
[基金申请] 提交后的基金本子,已让学校撤回了,可否换口子提交 +3 dut_pfx 2026-03-10 3/150 2026-03-11 08:38 by kudofaye
[考研] 收调剂 +7 调剂的考研学生 2026-03-10 7/350 2026-03-10 17:57 by 麦茶汤圆
[考研] 数二英二309分请求调剂 +3 dtdxzxx 2026-03-09 4/200 2026-03-09 19:56 by yuningshan
信息提示
请填处理意见