坛子里很少PIC的例子,刚验证的16F877A模数转换eepromuartpwm

2020-02-08 12:20发布

用查询方式读取AD转换的结果,根据手册里说的“A/D Acquisition Requirements ”,__delay_ms(100);100毫秒的等待应该足够了。
     但是只能单步执行才能读到结果,全速运行和烧写到片子里就读不到结果。
     代码如下:
     short int ADC_Smpl(unsigned char Chl)
      {
          ADRESH = 0;//清结果寄存器
          ADRESL = 0;
       
          ADCON0 |= Chl<<3;//选择通道
       
          ADCON0 |= 0x01;//开采样
       
          __delay_ms(100);//等待采样
       
          ADCON0 |= 0x04;//开转换
       
          while(!(ADCON0&0x04));//等待转换
       
          H_BYTE=ADRESH;
       
          L_BYTE=ADRESL;//返回结果
       
          ADCON0 &= 0xFE;//关采样
      }
     
      后来用中断方式,才恢复正常。源文件如下:
      PIC16F877A_AD/UART/EEPROM例程ourdev_670648UMTOBW.rar(文件大小:4K) (原文件名:main.rar)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
leofoolish
1楼-- · 2020-02-08 13:44
AD结果处理完,AD转换启动位需重新置一,不知LZ做了没
eagle_avr
2楼-- · 2020-02-08 17:41
子程序开始有:ADCON0 |= 0x01;//开采样

子程序结束有:ADCON0 &= 0xFE;//关采样
leofoolish
3楼-- · 2020-02-08 22:28
while(GO_DONE != 0);//等待转换 ,用LZ的程序设断点可以看到AD BUFFER里面的数据,但是全速时不行,换成该语句后OK,LZ可以试试
eagle_avr
4楼-- · 2020-02-08 23:18
哦,试试!
surf_131
5楼-- · 2020-02-09 01:21
 精彩回答 2  元偷偷看……
eagle_avr
6楼-- · 2020-02-09 06:53
怪了,为什么捏!

一周热门 更多>