程序问题,中断触发不了,ad转换一运行便卡主了,求大神解答

2019-07-15 09:03发布

这个程序是单片机控制晶闸管整流,采集负载电流,同步信号,并显示相控角和负载电流。P1口控制字形,P2口控制字位,P0与P3连接ADC0809,剩下的端口发出脉冲信号。程序运行之后,只有0809运行,显示程序和中断都不工作。不知道哪里要改,求大神解答。
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
code uchar code seg7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar  wei[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uint  q,w,e;
sbit si1=P3^4;
sbit si2=P3^6;
sbit eoc=P3^5;
sbit oe=P3^1;
sbit st=P3^0;
sbit clk=P3^3;
uint getdata=0;
#define _3ms_ 1866
        延时程序
void delay(int t)
{
        uchar i,j;
        for(i=0;i<t;i++)
         {
                 for(j=13;j>0;j--);
                 {
                 }
         }
}
显示程序

void display(uchar d)
{
         uint x,c,v;
         x=d/100;
         c=d%100/10;
         v=d%10;
         P2=0xff;
         P1=seg7[x];
         P2=wei[0];
         delay(200);
         P2=0xff;
         P1=seg7[c];
         P2=wei[1];
         delay(200);
         P2=0xff;
         P1=seg7[v];
         P2=wei[2];
         delay(200);
         P2=0xff;
         P1=0xc0;
         P2=wei[3];
         delay(200);
         P2=0xff;
         P1=0x92;
         P2=wei[4];
         delay(200);
         P2=0xff;
         P1=0xff;
         P2=wei[5];
         delay(200);
}
ADC0809转换

void adc0809()
{
         float temp=0.0;
         st=0;
         st=1;
         st=0;
         while(eoc==0)
         {
                 oe=1;
                 getdata=P0;
                 oe=0;
         }
}
定时器0给0809时钟

void timer0() interrupt 1
{
    TH0=(65536-2)/256;
          TL0=(65536-2)%256;
         clk=!clk;
}
定时器1控制相控角
void timer1() interrupt 3
{
         q=0;
         w=5;
         e=0xff;
         TR1=0;
         TL1=(65536-_3ms_)/256;
   TH1=(65536-_3ms_)%256;
         TR1=1;
}
外部中断0接受同步信号,并发出触发脉冲

void mac() interrupt 0
{
         uint i=0,j=0;
         si1=1;
         for(i=0;i<100;i++)
         {_nop_();
         _nop_();
         _nop_();}
         si1=0;
         j++;
         if(j>=4)
         {
                 si2=1;
                 for(i=0;i<100;i++)
         {_nop_();
         _nop_();
         _nop_();}
         si2=0;
         j=0;
   }
}

void main()
{
         clk=0;
         st=1;
         TMOD|=0x01;
         IT0=1;
         EX0=1;
         ET0=1;
         TH0=(65536-2)/256;
         TL0=(65536-2)%256;
         TMOD&=0xf0;
         TL1=(65536-_3ms_)/256;
   TH1=(65536-_3ms_)%256;
         IT1=1;
         EX1=1;
         ET1=1;
         EA=1;
         si1=1;
         si2=1;
         while(1)
         {
                 adc0809();
                 display(getdata);
         }         
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。