找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 425|回复: 3
收起左侧

为什么进入不了ADC中断

[复制链接]
ID:1130312 发表于 2024-8-31 10:54 | 显示全部楼层 |阅读模式
使用STC8H1K08单片机,其ADC1(P11口)作为ADC输入口,程序进入ADC中断让LED灭,但一次没灭过,也就是没有进入过ADC中断的意思?请问是什么原因呢?
# include <STC8.h>
# include <intrins.h>
#include <stdio.h>
sbit LED = P3 ^ 4;
unsigned int adc1;
void Init_IO()
{
    P0M1 = 0x00;
    P0M0 = 0x00;       
    P1M1 = 0x00;
    P1M0 = 0x00;       
    P2M1 = 0x00;
    P2M0 = 0x00;
    P3M1 = 0x00;
    P3M0 = 0x00;
    P4M1 = 0x00;
    P4M0 = 0x00;
    P5M1 = 0x00;
    P5M0 = 0x00;
    P6M1 = 0x00;
    P6M0 = 0x00;
    P7M1 = 0x00;
    P7M0 = 0x00;
}
void adcIsr(void) interrupt 5  //ADC中断
{
    ADC_CONTR &= ~0x20;        //清中断标志
          adc1=ADC_RES; //高位值
          adc1+=ADC_RESL;  //低位值       
                printf("ADC ISR value=%d",adc1); //打印输出               
                ADC_RES=0;//高八位寄存器清零
                ADC_RESL = 0;//低八位寄存器清零               
                LED=0; //判断是否进入ADC中断
                ADC_CONTR |= 0x40; //继续AD转换               
}
void main()
{
       
          LED = 1;
                P_SW2 |= 0x80;
    Init_IO();
                P1M0 = 0x00;
                P1M1 = 0x02; //P11为高阻输入模式,作为ADC输入口       
                ADCTIM = 0x3f; //设置ADC内部时序
    ADCCFG = 0x0f; //设置ADC时钟为系统时钟/2/16,左对齐
                ADC_CONTR =0x81; //使能ADC模块,使能ADC1
          EADC=1; //使能ADC中断
                EA=1;        //总中断       
    ADC_CONTR |= 0x40; //启动AD转换       
    while (1);
}

回复

使用道具 举报

ID:1034262 发表于 2024-8-31 14:29 | 显示全部楼层
你在中断里使用了 printf函数,但是没有初始化串口,死等串口发送完成。。。。
你将LED=0;放在printf之前试试。
回复

使用道具 举报

ID:712097 发表于 2024-8-31 14:13 | 显示全部楼层
1、P11要高阻模式:    P1M0 = 0x00; P1M1 = 0x02;
2、要加上这句,用来访问XFR: P_SW2 |= 0x80;
可以参考STCAI-ISP的相关例程。
回复

使用道具 举报

ID:612392 发表于 2024-8-31 14:18 | 显示全部楼层
printf函数打印出来数值了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表