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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15445|回復: 1
收起左側

關于51單片機AD轉換的問題

[復制鏈接]
ID:61977 發表于 2014-5-18 11:07 | 顯示全部樓層 |閱讀模式
使用單片機自帶的AD轉換功能將模擬量轉換為數字量,并以float輸發送給串口調試助手,但是發現通過調試助手得到的電壓值與實際測得的電壓值不同,小弟C語言能力一般,請大神們幫助看看程序應該怎門改。附上程序和部分原理圖。。。。。
#include "reg51.h"
#include "intrins.h"
#define FOSC 22118400L
#define BAUD 9600
#define V_SCALE (4.89f/1024)

typedef unsigned char BYTE;
typedef unsigned int WORD;

union float2int{
BYTE num[4];
float f;
}data_send;
/*聲明與ADC有關的SFR*/
sfr AUXR = 0x8e;
sfr ADC_CONTR = 0xC5;//ADC控制寄存器
sfr ADC_DATA = 0xC6;//DC高8為結果寄存器
sfr ADC_LOW2 = 0xBE;//ADC結果寄存器低2位有效
sfr P1M0 = 0x91;//P1口模式控制寄存器0
sfr P1M1 = 0x92;//P1口模式控制寄存器1
/*定義ADC_CONTR中ADC操作常量*/
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC完成標志
#define ADC_START 0x08 //ADC開始控制位
#define ADC_SPEEDLL 0x00 //1080
#define ADC_SPEEDL 0x20 //810
#define ADC_SPEEDH 0x40 //540
#define ADC_SPEEDHH 0x60 //270 clocks
void InitUart();
void SendData(BYTE dat);
void Delay(WORD n);
void InitADC();
void SendHello(BYTE dat);
void ADC_DataProcess(void);
//ADC channel NO.
BYTE ch = 2;
void main()
{
InitUart();
InitADC();
AUXR |= 0x10;//set EADCI
IE = 0xa0;//開中斷
//EA = 1;
//SendHello('H');
while(1);
}
/**
* ADC interrupt service routine
*
*/
void adc_isr() interrupt 5 using 1
{
ADC_CONTR &= !ADC_FLAG;//清ADC中斷標志位
// SendData(ADC_DATA);
// SendData(ADC_LOW2);
// SendData('\n');
ADC_DataProcess();
// if((++ch) > 7)
// {
// ch = 0;
// SendData('\n');
// }
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
}
void ADC_DataProcess(void)
{
unsigned int temp;
unsigned int t2;
unsigned int t;
//float f;
temp = ADC_DATA;
t2 = ADC_LOW2;
temp = temp<<2;
temp = temp + t2;

t = temp * 478;//V_SCALE;
// SendData(data_send.num[3]);
// SendData(data_send.num[2]);
// SendData(data_send.num[1]);
// SendData(data_send.num[0]);
//f = f*1000.0;
SendData((t/100000) + '0');
SendData('.');
SendData((t/10000)%10 + '0');
SendData((t/1000)%10 + '0');
SendData(t%10 + '0');
SendData('\n');
}
/**
* Initial ADC sfr
*/
void InitADC()
{
P1 = P1M0 = P1M1 |= 0xff;//把P1設為開漏
ADC_DATA = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
Delay(2);
}
/**
* Initial UART
*/
void InitUart()
{
//PCON &= 0x7F; //波特率不倍速
SCON = 0x52; //8位數據,可變波特率
//TMOD &= 0x0F; //清除定時器1模式位
TMOD |= 0x20; //設定定時器1為8位自動重裝方式
TL1 = 0xFA; //設定定時初值
TH1 = 0xFA; //設定定時器重裝值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
}

/**
* 發送一個字節數據
*/
void SendData(BYTE dat)
{
while(!TI); //等待
TI = 0;
SBUF = dat;
}
void SendHello(BYTE dat)
{
while(!TI); //等待
TI = 0;
SBUF = dat;
}

/**
* 軟件延時
*/
void Delay(WORD n)
{
WORD x;
while(n--)
{
x = 5000;
while(x--);
}
}



搜狗截圖14年05月18日1036_1.png
回復

使用道具 舉報

ID:159630 發表于 2017-4-6 15:02 | 顯示全部樓層
看看晶振與程序是否一致
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费小视频在线观看 | 影视先锋av资源噜噜 | 国产一区二区中文字幕 | 欧美精品一区在线 | 国内精品久久久久久影视8 最新黄色在线观看 | 欧美一区二区三区久久精品视 | 精品亚洲一区二区三区四区五区 | 在线免费观看黄色网址 | 亚洲国产精品一区二区三区 | 国产小视频在线观看 | 国产精品国产馆在线真实露脸 | 国产成人在线一区二区 | 欧美一级视频免费看 | 国产精品无码永久免费888 | 日韩激情视频一区 | 国产一级视频免费播放 | 欧美日韩国产精品一区 | 国产精品视频不卡 | 国产精品一区在线 | 欧美一级久久 | 一区视频在线 | m豆传媒在线链接观看 | 日本成人久久 | 日韩一级精品视频在线观看 | 丁香婷婷成人 | 久草在线视频中文 | 一区二区三区电影网 | 97超碰人人 | 亚洲一二三区在线观看 | 暖暖成人免费视频 | 久久夜视频| 成人精品一区 | caoporn国产精品免费公开 | 秋霞a级毛片在线看 | 日韩欧美国产一区二区 | 日本欧美国产在线观看 | 精品国产乱码久久久久久蜜臀 | 成人区一区二区三区 | 久久久久久久久毛片 | 亚洲一区二区av | 国产精品不卡 |