微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机定时中断与adc中断有冲突

单片机定时中断与adc中断有冲突

时间:10-02 整理:3721RD 点击:
请教! 这里是一个例子,用的是stc12c5a60s2的芯片,在用adc的过程中发现一adc中断对定时器中断有影响,定时器的定时时间变得不准确,

#include<reg51.h>
#include<intrins.h>

#define FOSC 11059200L
#define BAUD 9600
typedef unsigned char BYTE;
typedef unsigned int WORD;

sfr ADC_CONTR = 0xBC;
sfr ADC_RES          = 0xBD;
sfr ADC_LOW2 = 0xBE;
sfr P1ASF = 0x9D;
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
void InitUart();
void SendData(BYTE dat);
void Delay(WORD n);
void InitADC();
BYTE ch = 0;
char count;
char a;
WORD num1=0;
void main()
{
        InitUart();
        InitADC();
        IE = 0xa2;  //问题在这里  当IE=0x82时下载结果是LED以1秒间隔闪烁,当IE=0xa2 时变成了4秒间隔了 就只改                          // 了这一 个地方
        TL0=6;
        TR0=1;
        TR1=1;
       
        while(1)
        {
                if(num1>=3686)
                {
                        P00=~P00;//P00对应的管脚写在了头文件中
                }
         }
}

void tm0_isr() interrupt 1
{
        TL0 =6;
        num1++;
}
void tm1_isr() interrupt 3
{
        TH0 =6;
        num2++;
}

void adc_isr() interrupt 5 using 1
{
        ADC_CONTR &=!ADC_FLAG;
        SendData(ADC_RES);
        ch = 0x03;
        ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
}
void InitADC()
{
        P1ASF=0xff;
        ADC_RES=0;
        ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
        Delay(2);
}
       
void InitUart()
{
        SCON = 0x5a;
        TMOD = 0x23;
        TH1 = TL1 = -(FOSC/12/32/BAUD);
        TR1 = 1;
}
void SendData(BYTE dat)
{
        while(!TI);
        TI=0;
        SBUF=dat;
}
void Delay(WORD n)
{
        WORD x;
        while (n--)
        {
                x = 5000;
                while (x--);
        }
}

这是在芯片手册的adc 程序上修改的 adc的有关部分实测是正确的

请了解下中断方式,你用的是软中断会出现这样问题,在中断函数里处理,就没问题了

谢谢,不是说能写在外部的程序少些写在中断程序中吗?   我要写的其他程序比较多,写在中断中会影响时间的准确性,我想请教下能不能在中断外解决?

设置下中断优先级看看行不行呢

num1怎么没清零

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top