打印
[国产单片机]

帮我看看我这段程序怎么进不去中断。stc单片机

[复制链接]
1603|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fei|  楼主 | 2008-3-4 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做一个ADC。P3.0,P3.1接一个方波。脉宽都在40us以上。我是想让p3.0和p3.1检测到1时,开始AD转换。使用P1.0作为ADC输入。p1.1-1.7接到数码管a b c d e f g。p3.2-p3.5。接到数码管位选。怎么就进不了中断显示呢?
#include<reg52.h>
#define uchar unsigned char      
#define uint unsigned int
sfr P1M0=0x91;
sfr P1M1=0x92;
sfr P3M0=0xb1;
sfr P3M1=0xb2;
sfr P1ASF=0x9d;//P1口复用功能选择。=1为ad输入。=0为普通i/o    
sfr ADC_CONTR=0xbc;
sfr ADC_RES=0xBD;
sbit P10=P1^0;
sbit P30=P3^0;
sbit P31=P3^1;    
unsigned char a,num,gwei,swei,bwei,qwei,disloop;
unsigned int    cou,jishu,i;
code uchar disTab[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
code uchar comTab[]={0xdf,0xef,0xf7,0xfb};
void mdelay(uint mdelay);
void dis();
void main()
{    
    ADC_CONTR=0xe0;//0xe0=11100000。bit7=1ADC电源,bit6~5=ADC速度最快。bit0~2=000选择p1.0通道
    P1ASF=0x01;//设置p1.0为ADC输入
    cou=0x00;//
    jishu=0x00;//
    P1M0=0x01;//
    P1M1=0x00;//
    P3M0=0x83;//
    P3M1=0x00;//
    EA=1;       //开总中断
    ET1=1;       //开定时器终端
    ET0=0;        //
    TMOD=0x10;    //设置定时模式
    TH1=(65536-1700)/256; //给初值20M晶振。得定时为1.2ms  
    TL1=(65536-1700)%256; //给初值
    TR1=1;                   //开定时器
    while(1) //循环计数
        {while((P31==1)&&(P30==1))//      判断Q4和光耦同时为1  P30接光耦。P31接Q4
                {ADC_CONTR=ADC_CONTR|0xf0;//开始转换11100000|00001000=11101000 ,bit3=1开始转换。
                    //_nop_();
                    #pragma asm
                    nop
                    nop
                    nop
                    nop
                    #pragma ENDasm
                    while(1)
                    {
                     if((ADC_CONTR&0x10)!=0) //判断ADC_FLAG是否为1
                       {    cou=ADC_RES;
                        ADC_CONTR=0xe0;//0xe0=11100000
                        break;
                      }     
                     }
                }
    
        }
        
    
}

void time1() interrupt 3 using 1
{    TR1=0;
    cou=jishu;
    TH1=(65536-1700)/256; //给初值
    TL1=(65536-1700)%256; 
    TF1=0;
    jishu=0;        
    dis(); 
    TR1=1;
}

void dis()
    {     //for(;disloop>0;disloop--)
            while(P30==0)
            {    
                qwei=cou/1000;        
                P1=disTab[qwei]; 
                P3=comTab[0];        
                mdelay(255);                 
            
                bwei=cou%1000;
                bwei=bwei/100;
                P3=comTab[1];
                P1=disTab[bwei];         
                mdelay(255);    
            
                swei=cou%100;
                swei=swei/10;
                P3=comTab[2];
                P1=disTab[swei];         
                mdelay(255);    
                
                gwei=cou%10;
                P3=comTab[3];
                P1=disTab[gwei];         
                mdelay(255);
            }
    }
void mdelay(uint mdelay)
{                                for(; mdelay>0;mdelay                                {;;} 
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

fei

47

主题

286

帖子

0

粉丝