導航:首頁 > 操作系統 > 基於51單片機的數據採集

基於51單片機的數據採集

發布時間:2022-08-15 09:01:06

❶ 基於51單片機的8通道數據採集系統的設計

都這么多久了還是沒人來啊

❷ 51單片機實現程序的採集和發送

#include <reg51.h>
sbit led=P1^0;
void send_char(unsigned char txd)
// 傳送一個字元
{
SBUF = txd;
while(!TI); // 等特數據傳送
TI = 0; // 清除數據傳送標志
}
main()
{
unsigned char tmp=0;
TMOD = 0x20; // 定時器1工作於8位自動重載模式, 用於產生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;

SCON = 0x50; // 設定串列口工作方式
PCON &= 0xef; // 波特率不倍增

TR1 = 1; // 啟動定時器1
IE = 0x00; // 禁止任何中斷

while(1)
{
tmp=led;
send_char(tmp);
}

❸ 需要用51單片機做一個數據採集系統,但是要求采樣頻率達到至少每秒2000次以上,請問51單片機可以做到么

肯定要速度快的單片機,比如帶ADC的STC12單片機,用定時器設置好每秒中斷2000次,每次啟動ADC轉換一次,這樣就得到數據了。
當然要存儲2000個數據還是問題,如果是8bit的結果,那需要2000位元組,12bit結果要4000位元組。所以要求單片機本身有很大的RAM或者要擴展RAM才行。但STC12內部才1024位元組的RAM,肯定不夠用,所以這時要用STC90C58AD了,4096位元組的RAM。
如果用C8051F單片機,那更簡單。比如C8051F的ADC0是100ksps,就是說連續轉換時每秒能采樣100000個數據,轉換2000個是小菜一碟,只要設置好定時器以0.5毫秒觸發一次ADC轉換,再設置好ADC中斷,這樣1秒採集2000個數據沒問題。

❹ 51單片機如何同時使用定時器和計數器採集數據

這是我根據頻率計程序修的
//用定時計數器1作為脈沖計數器(P3.5引腳正是輸入功能),定時器0作為定時器用,定時50ms產生中斷
//中斷4次後(即0.2s)讀計數器1的數據
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
//定義以I/O口的功能
sbit rs=P1^3;//液晶屏寫選擇,0命令 1數據
sbit rw=P1^4;//液晶屏讀寫選擇
sbit lcden=P1^5;//液晶屏使能
#define db P2 //定義P2為數據輸出口,寫數據時用db代替P2,增加液晶屏程序的通用性
//更改硬體接線時,只更改此處,而不必去更改液晶屏讀寫子程序
uchar aa;//計中斷次數
uint bb,cc,dd;//保存計數器的值
void Delay1ms(unsigned int i) //1ms延時程序
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void init()//初始化設置
{
TMOD=0x51;//定時器1作為計數器,定時器0作為定時器用
TH1=0;//計數器清0
TL1=0;
EA=1;//開總中斷
ET0=1;//允許定時器0中斷
TH0=0x4c;
TL0=0x5c;
TR1=1;//啟動計數器
TR0=1;//啟動定時器
aa=0;
}
void write_com(uchar com)//向液晶屏寫命令
{
db=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void write_date(uchar date)//向液晶屏寫數據
{
db=date;
rs=1;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void init2()//液晶屏初始化
{
rw=0;
write_com(0x38);//顯示模式16字*2行,5*7點陣,數據口8位
Delay1ms(10*12);
write_com(0x0f);//開顯示,顯示游標,游標閃爍
Delay1ms(10*12);
write_com(0x06);//寫完數據後數據指針和游標位置自動加1
Delay1ms(10*12);
write_com(0x01);//屏幕清除
Delay1ms(10*12);
}
void display4(unsigned int number) //單行多位顯示程序
{
uchar A1,A2,A3,A4,A5;
init2();//液晶屏初始化
A1=number/10000%10;//分離出十萬,萬,千,百,十,個
A2=number/1000%10;
A3=number/100%10;
A4=number/10%10;
A5=number%10;
write_com(0x80);//第1個數據的位置設定,第1行第1列
Delay1ms(10);
write_date(0x30+A1);//寫數據
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);
}
void main()//主程序很簡單
{
init();//初始化
while(1)//循環程序
{
dd=bb*256+cc;//0.2S的計數值
display4(dd);//顯示
Delay1ms(100); //延時
}
}
void timer0()interrupt 1//注意:定時器0的中斷序號為1
{
aa++;
TH0=0x4c;

TL0=0x5c;

if(aa==4)//中斷4次,共0.2S
{
TR1=0;//暫停計數
aa=0;
bb=TH1;//讀出計數器數據
cc=TL1;
TL1=0;//計數器清0
TH1=0;
TR1=1;//重新啟動計數器
}
}

❺ 基於cs-51單片機的6通道數據採集器的設計

這么復雜的系統要說誰免費幫你我想是很不可能。找代做的付錢吧,要不就找點資料,自己來,遇到問題再提問小問題。不能這樣全部的靠別人。我看這系統也不難,只是要全部做出來是得好幾天的。

❻ 基於51單片機的多路數據採集系統

同意一樓的看法...這樣讀書,還不如不讀

❼ 做一個基於51單片機的8路數據採集卡,然後用串口或者USB傳輸數據,麻煩各位大俠了!

進行下AD轉換然後傳入單片機。你有8路信號,分別轉換,然後弄個數據選擇器(這個不難做),逐個依次獲取信號。把獲取的數字信號通過串口傳出去(串口在單片機上傳輸數據比較方便)

❽ 51單片機智能數據採集系統課程設計

//採集並返回
unsigned int Adc0832(unsigned char channel)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;

if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=channel&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=(channel>>1)&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令結束
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO;//收數據
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次時鍾脈沖
_nop_();
_nop_();
dat<<=1;
if(i==7)dat|=ADDO;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO;//收數據
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次時鍾脈沖
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1;//拉低CS端
ADCLK=0;//拉低CLK端
ADDO=1;//拉高數據端,回到初始狀態
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}int main(void)
{
while(1)
P3=Adc0832(0);
}

❾ 單片機如何實現多路模擬量的數據採集、顯示

普通單片機實現多路模擬量的數據採集、顯示需要:

外部連接一個多通道輸入的ADC晶元,單片機按照一定的周期驅動模擬開關切換到不同的模擬通道,設計模數轉換控制器的控製程序,可以進行定時模擬信號採集和顯示。

(9)基於51單片機的數據採集擴展閱讀:

單片機基本結構及作用:

1、運算器

運算器由運算部件——算術邏輯單元(Arithmetic & Logical Unit,簡稱ALU)、累加器和寄存器等幾部分組成。ALU的作用是把傳來的數據進行算術或邏輯運算,輸入來源為兩個8位數據,分別來自累加器和數據寄存器。

ALU能完成對這兩個數據進行加、減、與、或、比較大小等操作,最後將結果存入累加器。

運算器有兩個功能:

執行各種算術運算。

執行各種邏輯運算,並進行邏輯測試,如零值測試或兩個值的比較。

運算器所執行全部操作都是由控制器發出的控制信號來指揮的,並且,一個算術操作產生一個運算結果,一個邏輯操作產生一個判決。

2、控制器

控制器由程序計數器、指令寄存器、指令解碼器、時序發生器和操作控制器等組成,是發布命令的「決策機構」,即協調和指揮整個微機系統的操作。其主要功能有:

從內存中取出一條指令,並指出下一條指令在內存中的位置。

對指令進行解碼和測試,並產生相應的操作控制信號,以便於執行規定的動作。

指揮並控制CPU、內存和輸入輸出設備之間數據流動的方向。

微處理器內通過內部匯流排把ALU、計數器、寄存器和控制部分互聯,並通過外部匯流排與外部的存儲器、輸入輸出介面電路聯接。外部匯流排又稱為系統匯流排,分為數據匯流排DB、地址匯流排AB和控制匯流排CB。通過輸入輸出介面電路,實現與各種外圍設備連接。

3、主要寄存器

累加器A

累加器A是微處理器中使用最頻繁的寄存器。在算術和邏輯運算時它有雙功能:運算前,用於保存一個操作數;運算後,用於保存所得的和、差或邏輯運算結果。

數據寄存器DR

數據寄存器通過數據匯流排向存儲器和輸入/輸出設備送(寫)或取(讀)數據的暫存單元。它可以保存一條正在解碼的指令,也可以保存正在送往存儲器中存儲的一個數據位元組等等。

指令寄存器IR和指令解碼器ID

指令包括操作碼和操作數。

指令寄存器是用來保存當前正在執行的一條指令。當執行一條指令時,先把它從內存中取到數據寄存器中,然後再傳送到指令寄存器。

當系統執行給定的指令時,必須對操作碼進行解碼,以確定所要求的操作,指令解碼器就是負責這項工作的。其中,指令寄存器中操作碼欄位的輸出就是指令解碼器的輸入。

程序計數器PC

PC用於確定下一條指令的地址,以保證程序能夠連續地執行下去,因此通常又被稱為指令地址計數器。在程序開始執行前必須將程序的第一條指令的內存單元地址(即程序的首地址)送入PC,使它總是指向下一條要執行指令的地址。

地址寄存器AR

地址寄存器用於保存當前CPU所要訪問的內存單元或I/O設備的地址。由於內存與CPU之間存在著速度上的差異,所以必須使用地址寄存器來保持地址信息,直到內存讀/寫操作完成為止。

顯然,當CPU向存儲器存數據、CPU從內存取數據和CPU從內存讀出指令時,都要用到地址寄存器和數據寄存器。同樣,如果把外圍設備的地址作為內存地址單元來看的話,那麼當CPU和外圍設備交換信息時,也需要用到地址寄存器和數據寄存器。

閱讀全文

與基於51單片機的數據採集相關的資料

熱點內容
程序員偏右 瀏覽:16
超算上可以進行vasp編譯嘛 瀏覽:174
北京通app怎麼注冊登錄 瀏覽:820
iphone上的數據怎麼轉移到安卓 瀏覽:743
python求每個時段平均值 瀏覽:244
安卓手機右上出現Hg什麼意思 瀏覽:69
程序員神經 瀏覽:753
dns伺服器在電腦上有什麼用 瀏覽:915
杭州大媽喜歡程序員 瀏覽:687
python評論樹講解 瀏覽:680
juniper防火牆常用命令 瀏覽:426
vapp怎麼下載地址 瀏覽:11
pdf裡面內容怎麼修改 瀏覽:807
收藏網址加密的瀏覽器 瀏覽:1000
phpurl問號 瀏覽:898
什麼筆記本電腦可以用python 瀏覽:135
加密相冊如何翻找 瀏覽:992
泰州地區DNS伺服器地址 瀏覽:849
一種app可以買菜用英語怎麼說 瀏覽:196
中國聯通app裡面通話詳單怎麼刪除 瀏覽:505