8935|10

7

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

带AD转换的51单片机的AD中断问题 [复制链接]

大家好,我编了个AD转换的程序,发现进不去中断,请大家帮我看下哈
#include
#include
#include
unsigned char code lcd_code[]={lcd_0,lcd_1,lcd_2,lcd_3,lcd_4,lcd_5,lcd_6,lcd_7,lcd_8,lcd_9};
unsigned char tp_lcd_buf[6];
unsigned long ad_num;
void Delay(int n)  {     //延迟程序  
  
    unsigned int i,j;
    for(i=0;i<=n;i++)
    for(j=0;j<=25;j++);
}
void init_lcd(void) {
LCDCON=0xe2;
P0CTRL=0xff;
P2CTRL=0xff;
LCD_BUF0=BLANK;tp_lcd_buf[0]=BLANK;
LCD_BUF1=BLANK;tp_lcd_buf[1]=BLANK;
LCD_BUF2=BLANK;tp_lcd_buf[2]=BLANK;
LCD_BUF3=BLANK;tp_lcd_buf[3]=BLANK;
LCD_BUF4=BLANK;tp_lcd_buf[4]=BLANK;
LCD_BUF5=BLANK;tp_lcd_buf[5]=BLANK;

}
void init_AD(void) {
P3CON = 0x20; //设通道1为AD输入通道
ADSCR = 0x14; //单次转换,时钟为Fosc/16,通道1

}
void update_lcd_buf() {
  tp_lcd_buf[0]=lcd_code[ ad_num%10];  //把tp_stone个位数的数值给tp_lcd_buf
   ad_num/=10;
  tp_lcd_buf[1]=lcd_code[ ad_num%10];
   ad_num/=10;  
  tp_lcd_buf[2]=lcd_code[ ad_num%10];
   ad_num/=10;
  tp_lcd_buf[3]=lcd_code[ ad_num%10];
   ad_num/=10;
     tp_lcd_buf[4]=lcd_code[ ad_num%10];
   ad_num/=10;
  tp_lcd_buf[5]=lcd_code[ ad_num%10];

}
void flash_lcd(void) {
LCD_BUF0=tp_lcd_buf[0];//把tp_lcd_buf里的值给LCD_BUF寄存器
LCD_BUF1=tp_lcd_buf[1];
LCD_BUF2=tp_lcd_buf[2];
LCD_BUF3=tp_lcd_buf[3];
LCD_BUF4=tp_lcd_buf[4];
LCD_BUF5=tp_lcd_buf[5];
LCD_BUF6=BLANK;
}
void AD(void) interrupt 9
{
ADCIF = 0;
ad_num = ADCD;

}
void main(){
init_lcd();
init_AD();
EA = 1;
EADC = 1;
PADC = 1;
   while(1){
   update_lcd_buf();
        flash_lcd();
}
}
此帖出自51单片机论坛

最新回复

实战是技术提高最有效的途径!  详情 回复 发表于 2009-10-30 11:13
点赞 关注
 

回复
举报

1759

帖子

0

TA的资源

裸片初长成(高级)

沙发
 
你要将原理图、单片机的型号、一些资料发上来 否则这样很难搞得清楚的 另外最好你也将相关的寄存器参数设置的信息发上来
此帖出自51单片机论坛
 
个人签名南京璞晓电子   www.cpx0.com需要
msn:njlianjian@hotmail.com
 
 

回复

7

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
原理图现在还没有,
程序就是要从ADC1通道采样模拟信号,然后用液晶显示
液晶显示程序没问题,利用查询方式,可以测得模拟信号
但是用上面的那个中断程序,就进不去中断,觉得好诡异啊
芯片的型号是SM79108
附件中是datasheet

SM79108(20040623).pdf

624.05 KB, 下载次数: 25

此帖出自51单片机论坛
 
 
 

回复

1909

帖子

7

TA的资源

五彩晶圆(高级)

4
 

建议lz在中断里打一个断点

看第一次能不能进去,如果第一次能进去,第二次进不去,就很有可能是中断标志位没有清零,关注一下datasheet里面有没有“需要手动清零”的描述。
此帖出自51单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(高级)

5
 
中断标志位我已经清零了啊

问题是第一次中断都进不去
此帖出自51单片机论坛
 
 
 

回复

1909

帖子

7

TA的资源

五彩晶圆(高级)

6
 

你看看12/26到14/26

我给你分析一下啊,按程序流程来,就看ad
P3CON = 0x20; //设通道1为AD输入通道
ADSCR = 0x14; //单次转换,时钟为Fosc/16,通道1
init_AD();
EA = 1;
EADC = 1;
PADC = 1;
你选择的是通道1,单次转换,时钟Fosc/16通道1 ,主程序里开总中断,中断使能,优先级设置,但是没有标志位初始化吧?试一下,看能不能好用。
    第二个问题,我想说的是,不清楚你用几个中断,如果中断多的话应该在进中断之后先关掉中断,不让系统进入其他中断,中断服务程序完成之后开中断。这样能保证中断的可靠执行。
    请教一个问题,连续转换和单次转换有什么区别?
此帖出自51单片机论坛
 
 
 

回复

1909

帖子

7

TA的资源

五彩晶圆(高级)

7
 

一个小建议

查看本帖全部讨论,请登录或者注册
此帖出自51单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(高级)

8
 
查看本帖全部讨论,请登录或者注册
此帖出自51单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(高级)

9
 
查看本帖全部讨论,请登录或者注册
此帖出自51单片机论坛
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(初级)

10
 
查看本帖全部讨论,请登录或者注册
此帖出自51单片机论坛
 
 
 

回复

1290

帖子

0

TA的资源

五彩晶圆(初级)

11
 
查看本帖全部讨论,请登录或者注册
此帖出自51单片机论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表