久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1916|回復: 6
打印 上一主題 下一主題
收起左側

大家幫看一下,PIC單片機程序為什么得不到正確的返回值?

[復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:206067 發表于 2019-3-19 12:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
MCU是PIC12F675

#include<pic.h>
#include <xc.h>

#pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

#define ad GP2
#define led1 GP4//??
#define led2 GP5//??


#define uchar unsigned char
#define uint unsigned int



uchar adnum1;
uchar adnum2;

uchar i;
uint get_ad();


void delay(void)
{
    unsigned int i;
    for(i=0;i<20000;i++);
}

void display(uchar adnum1,uchar adnum2)
{
        for(i=0;i<adnum1;i++)
        {
        led1=0;led2=0;delay();//開燈GP4低電平有效,GP5高電平有效
        led1=1;led2=0; delay();//關燈
        }
    delay();

    for(i=0;i<adnum2;i++)
        {
        led1=1;led2=1;delay();
        led1=1;led2=0; delay();
        }
}

uint get_ad()
{
    uint adval;//=0;   
    adval=0b1000101100;
    return(adval);
}

void advalue()
{
    uint adnum;
    uint advin;
    float vin;
    while(1)
    {
        //advin=get_ad;//用這得不到正確的get_ad返回值
       advin=0b1000101100;//用這驗證是OK的
        vin=(4.6*advin)/1023;
        adnum=vin*1000;
        adnum1=adnum/1000;
        adnum2=adnum%1000/100;
        display(adnum1,adnum2);
        delay();

    }
}


void init()
{
    OSCCAL=0b00000000;//????
    TRISIO=0b00001111;//????
    OPTION_REG=0b10000000;//??????
    ADCON0=0b00001011;//
    ANSEL=0b00110100;//
    ADFM=0;
    delay();
}
void main()
{
    init();
    while(1)
    {
        advalue();
    }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:206067 發表于 2019-3-21 09:19 | 只看該作者
有朋友看到了嗎
回復

使用道具 舉報

板凳
ID:18297 發表于 2019-3-21 13:33 | 只看該作者
uint get_ad()
{
    uint adval;//=0;   
    adval=0b1000101100;
    return(adval);
}
這個AD采集肯定不行的。
正確的方法是:
1)寫入通道選擇CHS1:CHS0;
2)左右對齊選擇ADFM;
3)開啟AD(ADON=1);
4)延時50us;
5)設置GO/DONE位開啟AD檢測;
6)while(ADCON0bits.GO);判斷GO是否為0,即AD轉換結束。
7)讀取ADRESH:ADRESL,
8)AD結束。
回復

使用道具 舉報

地板
ID:206067 發表于 2019-3-23 09:20 | 只看該作者
zjjhtony 發表于 2019-3-21 13:33
uint get_ad()
{
    uint adval;//=0;   

我知道不是這么寫 在測試現在是數據都不能返回過去
回復

使用道具 舉報

5#
ID:206067 發表于 2019-3-25 18:26 | 只看該作者
為什么這么少人看到,還沒解決這個問題啊
回復

使用道具 舉報

6#
ID:18297 發表于 2019-3-25 20:44 | 只看該作者

  1. uint get_ad()
  2. {
  3.     uint adval;//=0;  
  4.     GO=1;
  5.     while(GO);
  6.     adval=ADRESL;
  7.     adval |=((uint)ADRESH)<<8;
  8.     return(adval);
  9. }

  10. void advalue()
  11. {
  12.     uint adnum;
  13.     uint advin;
  14.     float vin;   
  15.     while(1)
  16.     {
  17.         advin=get_ad();//用這得不到正確的get_ad返回值
  18.         //advin=0b1000101100;//用這驗證是OK的
  19.         vin=(4.6*advin)/1023;
  20.         adnum=(uint)(vin*1000);
  21.         adnum1=adnum/1000;
  22.         adnum2=adnum%1000/100;
  23.         display(adnum1,adnum2);
  24.         delay();   

  25.     }
  26. }


  27. void init()
  28. {
  29.     OSCCAL=0b00000000;//????
  30.     TRISIO=0b00001111;//????
  31.     OPTION_REG=0b10000000;//??????
  32.     ADCON0=0b10001001;//
  33.     IOC=0;
  34.     ANSEL=0b00000100;//
  35.     delay();
  36. }
  37. void main()
  38. {
  39.     init();
  40.     led1=0;
  41.     while(1)
  42.     {
  43.         advalue();
  44.     }
  45. }
復制代碼

部分代碼如上,其他自己加上吧!程序修改了。
回復

使用道具 舉報

7#
ID:206067 發表于 2019-3-30 00:37 | 只看該作者
zjjhtony 發表于 2019-3-25 20:44
部分代碼如上,其他自己加上吧!程序修改了。

謝謝回復,你改的程序是可以的,昨天用MCV08重新寫了一遍也成功了,還在想是不是我的12F675有問題,今天拿你的對了一下,發現根本的問題是漏了一個()     advin=get_ad();就是這個括號 懺愧啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线精品一区二区三区 | 国产成年人视频 | 日韩黄 | 免费观看一级毛片 | 国产精品久久久久久久久污网站 | 日韩视频精品 | 毛片网站在线观看 | 毛片免费观看 | 黄色香蕉视频在线观看 | 久久久久久久久久久久久久久久久久久久 | 国产精品久久久久久妇女6080 | 亚洲精品1 | 精品中文在线 | 久久综合婷婷 | 毛片免费观看 | 国产影音先锋 | 国产黄色大片网站 | 精品欧美乱码久久久久久1区2区 | 玖玖色在线视频 | 亚洲免费人成在线视频观看 | 午夜a区 | 国产精品激情在线 | 亚洲一区二区免费看 | 91国产视频在线观看 | h在线| 一区二区三区久久久 | 婷婷丁香在线视频 | 欧美一区二区在线播放 | 欧美一区2区三区4区公司 | 色综合天天综合网国产成人网 | 中文字幕一区二区三区精彩视频 | 中文字幕在线观看成人 | 亚洲综合区 | 精品1区2区 | 黄色高清视频 | 高清免费在线 | 男女爱爱福利视频 | 欧美日韩三级 | 亚洲国产一区在线 | 日韩资源 | 久久久久久国产精品免费免费 |