搜索
bottom↓
回复: 1

关于16F716的AD转换不能进行的问题(已解决) 16F716启动A/D转换命令为:GODONE=1;

[复制链接]

出0入0汤圆

发表于 2010-4-2 12:16:45 | 显示全部楼层 |阅读模式
初学PIC,编了个AD转换试验程序,在Proteus中仿真通过,但烧入16F716后总也不行,开始以为不能进中断程序,就加上了定时中断,结果定时中断在16F716上正常,就是AD转换部分不工作,请大家给诊断诊断,源程序如下:

#include <pic.h>
unsigned  int k,ad,i;

//A/D转化初始化子程序
void     adinitial()
{
ADCON0=0x95;   //选择 A/D通道为 RA2,打开 A/D转换器,且使 A/D转换时钟为 tosc/32
ADCON1=0X0;    //设参考电压为VDD RA0-RA3口设置为模拟量输入方式
ADIE=1;        //A/D转换中断允许
PEIE=1;        //外围中断允许
TRISA2=1;      //置RA2为输入状态
}

//TMR0 初始化子程序
void   tmint()
{
T0CS=0;    //TMR0 工作于定时器方式
PSA=0;     //TMR0 不用分频
PS2=0;
PS1=1;
PS0=1;
T0IF=0;     //清除 TMR0 的中断标志
T0IE=1;     //TMR0 中断允许
RBIE=1;
}

//系统其它部分初始化子程序
void   initial()
{
TRISB=0x00;
PORTB=0xf;
k=0;
}

//中断服务程序
void interrupt AD(void)
{
RB6=1;
if(ADIF==1)
{
        RB5=1;
        ADIF=0;
        ad=ADRES;
        if(ad>50)
        {
                RB7=1;
        }
        else
        {
                RB7=0;
        }
        ADCON0=0x95;   //启动A/D转换
}
if(T0IF==1){
        k=k^0X1;
        RB4=k;
        T0IF=0;
  }
CLRWDT();
}
//主程序
main()
{
GIE=0;                     //总中断禁止
tmint();
adinitial();
initial();
ei();                    //总中断允许
while(1)
{   
;
}
}

程序烧入片子加电后B0-B4和B6口能输出高电平,B5和B7口没反应,说明没能进if(ADIF==1),请高手指点一二。不胜感激!

出0入0汤圆

发表于 2010-4-2 19:38:42 | 显示全部楼层
"16F716启动A/D转换命令为:GODONE=1;'

you will find that's the same for all pic chips.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 19:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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