『壹』 51單片機是如何存儲程序和數據的
1 概念要明確 ROM 和 RAM是計算機的半導體存儲器,速度與CPU相匹配,CPU只能直接訪問和執行半導體存儲器中的程序和數據。叫內存。
而硬碟不是半導體存儲器,速度與CPU不匹配,CPU不能直接訪問和執行半導體存儲器中的程序和數據,只有先把硬碟的內容傳遞給內存,CPU間接通過內存訪問和硬碟的程序和數據,因此硬碟叫外存。
2 ROM 為只讀存儲器,寫入的程序和數據不可再更改,存放的程序斷電也不丟失。
RAM是讀寫存儲器,可讀可寫,用起來方便,價格低,被PC計算機廣泛使用,即做內存條。
缺點:斷電程序、信息不能保留。
ROM 在PC計算機中,用來存放開機的引導程序和基本的驅動程序,叫做BIOS.
3 PC計算機的ROM和 RAM的地址是統一編址的。訪問是採用相同的指令去訪問。
單片機由於地址線的引腳數目少,分配的地址空間有限,故ROM和 RAM的地址是分開編址的。為兩個不同的邏輯空間,如一個程序存儲器空間 地址為0000H~FFFFH.
一個片外數據存儲器空間 地址為0000H~FFFFH.訪問時為了加以區分,採用不同的執行訪問不同的存儲器。
『貳』 單片機接收數據
你可以在你的電腦和單品機通信的時候,自己定義一個通信協議——也就是定義一種通信格式:以什麼字元作為一個數據包的開始如(0x66 0xab)代表數據幀的開頭,之後的一個自己單表數據幀的總長度(如果所有的數據包是定長的可以不需要該欄位),之後一個自己定義為命令的類型(如:0x01 表示電動機的轉動方向;0x02 代表轉動圈數等),之後跟上實際要發送給單品機的數據,如正傳還是反轉,轉動的圈數是多少等。如果不放心你可以在最後加上數據幀的校驗和,用來保證數據再傳輸過程中沒有出錯。
『叄』 單片機如何進行數據採集
對於液壓設備中的8個待測參數選用相應的感測器來來檢測,試驗時選取應變式感測器作為測試現場的工具。這些選用的檢測元件輸出都是標準的4-20mA微弱的電流信號,電流信號又經過由LM324組成的放大轉換電路轉換成0-5V的電壓信號輸入到C8051F020的模擬輸入端,如圖2所示,經內部集成的A/D轉換器轉換成相應的數字量。C8051F020將8路采樣值作為液壓設備現場的狀況存入相應的內存單元。
3.2 LCD顯示
為了使數據採集系統小巧美觀,同時又獲得較高的性價比,選用德彼克公司生產的DMF-50174藍屏液晶顯示器,該顯示器是320×240點陣式液晶,圖形和文本都可以顯示。顯示驅動控制晶元採用EPSON 公司的一種高性能LCD 控制器SED1335。硬體電路採用間接接法,如圖3所示。用單片機的P5.0~P5.7口作為SED1335的DB0~DB7數據匯流排的輸入通道。P4.5作為SED1335的片選信號, 配合地址信號A0實現SED1335 通過數據匯流排接收來自單片機的指令和數據。當A 0= 0, P4.6(WR)=0,P4.7(RD)= 1時, 實現指令的寫入和從SED1335 中讀取數據。當A 0= 1, P4.6(WR)= 0, P4.7(RD)=1時, 則是顯示數據的寫入,該功能通過軟體實現。
3.3 數據通訊
單片機C8051F020的TX0、RX0及P0.2通過MAX485與上位機相連,進行串列通信,如圖3所示。P0.2控制MAX485的狀態或發送,用軟體控制。RX0為單片機的串列輸入端,接收上位機通過MAX485向單片機發送的數據。TX0為單片機的串列輸出端,通過MAX485發送給上位機。
4 系統軟體設計
4.1 軟體設計總體上由兩部分組成:一部分為單片機C8051F020
主程序設計,一部分為LCD液晶顯示程序設計。由於用C語言編程可以降低程序的復雜度,提高程序的可讀性和可修改性,所以本軟體採用C51進行編程,keil μVision2編譯器進行編譯。
『肆』 51單片機怎麼存儲數據
掉電存儲需要用到EEPROM存儲器的,普通的51單片機內部沒有,可以使用外圍EEPROM元件如24Cxx系列的存儲器,也可以選用stc90系列的單片機,內部有EEPROM,程序兼容。
『伍』 單片機中的地址等的數據的位是什麼意思
位地址是指向一個二進制位的,相當於給每個二進制位編了個號碼。
位元組地址指向單個位元組,即每8個二進制位當一組編一個號。
比如0X90表示P1口,但是0X90這個地址單元的值可以控制這個口的每一個埠,具體來說應該是每一位控制一個口。
P1口應該是從P1.0~P1.7吧,也就是八個,在單片機中把八個埠作為一組,當作一個位元組來管理。然後這個位元組的值來控制這八個口,比如值0X10控制P1.0打開,其它口閉合,以此類推。
『陸』 單片機數據類型
單片機數據類型有bit,sbit,sfr,sfr16都用於單片機的C語言編程。
bit—定義位變數,定義位變數時可以為變數賦值,但不能指定變數的地址。定義格式:bit 變數名=變數值。
sbit—此類型變數只要用於訪問可位定址的特殊功能寄存器中的某個位。定義格式:sbit 變數名=位地址;sbit 變數名=SFR地址^位序號;sbit 變數名=sfr16變數^位序號。
sfr—此類型變數可以訪問指定的8位特殊功能寄存器,地址范圍為0x80~0xFF。定義格式:sfr 變數名=變數地址。
『柒』 單片機的數據空間和程序空間
AT89C52的程序空間是8KB是確認無疑的,但指的是存放純二進制的機器碼,就是二進制數。而KeilC編譯的HEX代碼文件並不是純二進制數,是以ASCII碼格式存放的文件,而且其中還有一些編譯信息,如地址、校驗和等。所以,不能看HEX文件的大小來確定下載到單片機內的真正的程序空間大小,也就是說HEX文件的大小並不是真正下載的單片機的程序大小。而下載到單片機的代碼空間大小要看Keilc編譯時給出的代碼數的提示,才是真正要下載到單片機內的代碼空間。舉個例子,下圖是一個程序編譯後的提示,真正的二進制代碼是337個位元組,而HEX文件卻是1KB。這里還有一個誤區,你看到的HEX文件的大小是操作系統給出的大小吧,它是取整KB的,就是說HEX文件不足1KB時,也顯示是1KB。再明確一點說吧,假如編譯後的代碼是750418,用純二進制數(即BIN格式,有些匯編程序的編譯器輸出的就是BIN格式)的代碼保存就是3個位元組,而用HEX格式保存就是6個位元組,因為要用6個ASCII碼來表示。這來算來,HEX文件大小是BIN文件的二倍,加上一些地址信息,是大於二倍的。好,回到你的問題來,你的HEX文件是19KB,你看一下編譯後的代碼大小提示,肯定是不會超過8KB的,否則編譯時肯定會報錯的。
『捌』 單片機接收數據
樓主的意思是不是要判斷從電腦串口發出的數據列中是否有00 01 這個數據列?如果是,1樓正解!如果是要判斷從電腦發出的數據列的第三、四個位元組是否為00 01,則程序如下:
設置一個計數標記count,和兩個判斷標記變數match1,match2初始化為0;使用串口中斷;以下是流程:
中斷函數()
{
…
讀取接收數據;
count++;
if(count==3)//第三個位元組
{
if(接收數據==0x00)//第三個位元組匹配,設置狀態1
match1=1;
}
if(count==4)//第四個位元組
{
if(接收數據==0x01)//第四個位元組匹配,設置狀態1
match2=1;
}
中斷返回;
}
主函數中:
main()
{
…
count=0;
match1=0;
match2=0;
while(1)
{
if(match1&match2) //如果第三位和第四位都匹配
P0^1=1;
else
P0^1=0;
}
}
希望能對你有所幫助!
樓主:你的單片機和變頻器之間通訊的介面是什麼樣的?SPI,SCI,或I2C...?用是什麼樣的單片機?變頻器的寄存器是什麼樣的?需要更多的資料。。。
『玖』 單片機data是什麼
data:是指將要定義的變數,是用存儲在單片機最內部的128位元組RAM;
idata:是指將要定義的變數,存儲在單片機內部的256位元組RAM,idata包含data;
xdata:是指將要定義的變數,存儲在單片機外部的RAM空間。
還有pdata,bdata,code等,你可以找個單片機C語言的書看一下就明白了。