A. 51系列單片機 常用數據處理程序設計 數值統計子程序
ORG 0H 程昌拿序起始地址
ACALL ZI 跳轉到zi
SJMP $
ZI: MOV R0,#31H 把31H給R0
MOV 30H,#15 把數組個數15給30H單元
LOOP: MOV A,@R0 把地址31H中的數據給A寄存器
JB ACC.0,LOOP1 判斷寄存器A中的最低位是0 還是1,是1就是奇數,是0就是0偶數。是奇數的話跳到LOOP1,是偶數的話順序執行。。。這語句判斷奇偶數
INC 41H 偶數個數加1
AJMP Jie_Shu
LOOP1: INC 40H 奇數個數加1,,也就是這一句將奇數個數存於40H單元
Jie_Shu: INC R0 地址加1,31H,32H,33H,34H.........
DJNZ 30H,LOOP 看看是返塵不是到數據元素個數了了,到了就結束了耐世搭,否則返回去繼續執行
RET
END
B. 單片機實驗數據排序
原發布者:瀚海湛藍
實驗一、數據排序實驗一、實驗目的熟悉8031指令系統,掌握程序設計方法。二、實驗內容編寫並調試一個排序子程序,其功能為用冒泡法將內部RAM中幾個單元位元組無符號的正整數,按從小到大的次序重新排列。三、實驗程序框圖NNN四、實驗步驟1把8032片內RAM區50H—5AH中放入不等的數據(用寄存器讀寫方法)。2用連續運行方式從起始地址0100H開始運行程序(輸入0100後按EXEC鍵)。3排序結束,顯示「P.」。4用寄存器讀寫方法檢查50—5AH中內容應從小到大排列。五、參考程序DORDE:MOVSP,#60H;設置棧指針MOVR3,#50HDORDE1:MOVA,R3MOVR0,A;數據指針傳送到R0MOVR7,#0AH;長度送到R7CLR00H;清零標志位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC;清零進位標志MOV22H,@R0CJNEA,22H,DORDE3;是否相等SETBCDORDE3:MOVA,R2JCDORDE4;小於或等於不交換SETB00HXCHA,@R0DECR0XCHA,@R0;大於交換位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1;未完繼續MOVR0,#7EH;完,關顯示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH
C. 用單片機將1000b數據分成10份發送,電路應該怎麼設計。應該怎麼編程
目錄
引言…………………………………………………………… 2
第1章 技術指標…………………………………………… 3
1.1整體功能要求………………………………………… 3
1.2系統功能要求………………………………………… 3
1.3 電壓指標……………………………………………… 3
1.4 設計條件……………………………………………… 3
第2章 整體方案設計……………………………………… 5
2.1 數據處理流程分析…………………………………… 5
2.2 整體方案……………………………………………… 5
2.2.1 方案一………………………………………… 5
2.2.2 方案二………………………………………… 6
2.2.3 方案比較……………………………………… 14
第3章 單元電路設計………………………………………… 16
3.1溫度數據採集電路…………………………………… 16
3.2 單片機電路設計……………………………………… 16
3.3 整體電路……………………………………………… 17
3.4 整機元件清單………………………………………… 18
第4章 測試與調整…………………………………………… 19
4.1 溫度採集電路測試……………………………… … 19
4.2模數轉換電路測試…………………………………… 20
4.3單片機電路測試……………………………………… 21
4.4整體指標測試………………………………………… 23
第5章 設計小節 ……………………………………………… 24
5.1設計任務完成情況…………………………………… 24
5.2問題及改進…………………………………………… 24
5.3心得體會……………………………………………… 25
附錄一:實物圖………………………………………………… 28
附錄二:原理圖………………………………………………… 29
附錄三:原理圖草圖…………………………………………… 31
致謝:…………………………………………………………… 33
引言
在日常的生活生產中,我們有時候要知道現場的溫度,或是某單元位置的溫度。但是普通的溫度計多為長條的,需要讀刻度的,不利於我們對溫度的監控。如果有一個單元的溫度對整個的系統很重要,我們就要關注它的工作狀況,以便使系統工作在一個良好的環境中。一但高於某個溫度將會對我們的系統不利,我們如何知道到達了一個很高的溫度呢?很顯然,我們要通過觀察溫度的數值,生活中常用的那種溫度計不利於這樣的操作及控制。這樣就誕生了我們要做一個溫度測量儀,它可以實時的顯示現場的溫度,並能在超過我們設置溫度的時候給以報警。畝殲鄭
第1章 技術指標
1.1 整體功能要求
1.1.1 設計的溫度測量儀器能夠測量和顯示測量的溫度,當溫度超過設定值後,發出超溫指示或報警。報警溫度的設定可以根據需要自定。
1.2 系統結構要求
1.2.1 溫度測量儀迅頌的整體框圖如圖 1-1 所示。
圖1-1
1.3 電壓指標
1.3.1 溫度測量范圍:0 ~99 。
1.3.2 顯示精度:1 。
1.3.3 測溫靈敏度:20mV/ 。
1.3.4 顯示採用四位數碼管。
1.3.5 溫度報警採用LED發光二極體或蜂鳴器。
1.3.6 報警溫度可以任意的設定。
1.4 設計條件
1.4.1 電源條件:穩壓電源0V~15V可調。
1.4.2 參考器件:表1-1
型號 名稱及功能 數量
LM35 溫度感測器 1
TL084 運算放大器 1
ADC0804 八路A/D轉換器 1
28C64B EEPROM存儲器 1
其他器件可適當選取。
表1-1
第2章 整體方改閉案設計
2.1數據處理流程分析
數據處理流程分析如圖2-1所示。
圖2-1
2.2 整體方案
2.2.1 方案一
如圖2-2 用組合邏輯電路來實現。
設計原理
此電路通過LM35採集外界溫度,10mV/ ,採集的數據通過TL084進行兩倍的放大,以來適應ADC0804的轉換。ADC0804將接收到的模擬數據用逐次逼近的方法轉換成數字量,但此時的數據量是二進制碼,不能和解碼電路的4511相吻合,於是我們將二進制進一步的轉換成BCD碼。轉化的方案是將0~99以十六進制碼的形式寫入EEPROM,通過ADC0804的二進制量來進行定址,如果
圖2-2
二進制碼為0010 0010B,轉換成十進制就是34D,我們在EEPROM的地址為0010 0010B的位置存儲0x34,這樣EEPROM的輸出將是0011 1000B,前面的四位給解碼顯示電路的高位剛好是3的BCD碼,後面的四位給解碼顯示的低位,剛好是4的BCD碼,從而完成了將二進制轉換成十進制的任務。同時將轉換後的BCD碼安高地位傳向兩片比較晶元7485,用來與溫度設置電路設置好的BCD碼進行大小的比較,比較後的邏輯通過7400的組合來驅動發光二極體。當溫度達到或高於預設溫度的時候發光二極體將亮,其餘的情況發光二極體熄滅,從而達到報警的效果。
2.2.2 方案二
如圖2-3所示用單片機加模數轉換的外圍電路實現。
圖2-3
設計原理
此電路通過LM35採集外界溫度,10mV/ ,採集的數據通過TL084進行兩倍的放大,以來適應ADC0804的轉換。ADC0804將接收到的模擬數據用逐次逼近的方法轉換成數字量,數字量通過單片機的P1口傳入單片機,S1,S2是用來設置報警溫度的。S1設置高位,循環步進,從0~9循環。S2用來設置地位,和S1一樣循環的步進,從0~9循環。單片機把接受的數據來和收到的P1口接到的實時溫度數據進行比較,以控制發光二極體的報警。同時單片機把P1口的數據和設置的報警溫度數據通過P0口送給四位數碼管。程序流程圖如圖2-4-1、圖2-4-2所示。
圖2-4-1
圖2-4-2
程序代碼
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={ //數字0~9
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar code clc[]={
0x7f,0xbf,0xdf,0xef};
sbit p3_2=P3^2;
sbit p3_6=P3^6;
sbit p3_7=P3^7;
uchar data1,data2,h,l,num,h1,l1,h12,flag;
void init(); //初始函數
void delay(uint z); //延時函數
void main()
{
init();
while(1)
{
P1=0xff;
data1=P1;
data2=data1;
h=data2/10;
l=data2%10;
h12=h1*10+l1;
if(data2>=h12)
{
flag=1;
}
else
{
flag=0;
}
}
}
void init() //初始函數
{
TMOD=0x01;//設置計數器工作方式
TH0=(65536-5000)/256;//裝初值
TL0=(65536-5000)%256;
EA=1;//開總的中斷
IE0=0;
EX0=1;//開外部中斷0
PT0=1;//設置外部0的中斷為高優先順序
IT0=1;//下降沿有效
ET0=1;//開計數器0的中斷
TR0=1;//啟動計數器0
h=0;
l=0;
P0=0;
P2=0xf8;
num=0;
h1=2;
l1=0;
}
void timer0() interrupt 1 using 1//計數中斷子程序
{ //顯示刷新程序
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
if(num==3)
{
P0=~table[l1];
P2=clc[num];
}
if(num==2)
{
P0=~table[h1];
P2=clc[num];
}
if(num==1)
{
P0=~table[l];
P2=clc[num];
}
if(num==0)
{
P0=~table[h];
P2=clc[num];
}
num++;
if(num==4)
{
num=0;
}
if(flag==1)
{
p2_3=0;
}
else
{
p2_3=1;
}
}
void INTSP(void)interrupt 0 using 1//外部中斷子程序
{
EX0=0;
P3=0xff;
delay(50);
p3_2=1;
if(~p3_6&&p3_7)
{
h1++;
if(h1==10)
{
h1=0;
}
}
else if(~p3_7&&p3_6)
{
l1++;
}
if(l1>=10)
l1=0;
while(~p3_2)
EX0=1;
}
void delay(uint z)//延時函數 大約為1ms
{
uint i,j;
for(i=z;i>0;i--)
{
for(j=110;j>0;j--);
}
}
2.2.3 方案比較
方案一:組合邏輯電路,原理簡單、思路清晰。但所用晶元比較多,連線不方便。因本次設計電路用麵包板做,一旦電路出現故障檢查起來很麻煩。
方案二:用單片微型計算機即單片機做,外圍電路簡單,連線方便,而且用單片機可以把方案一中的,控制用的兩片芯7485和解碼的兩片晶元4511以及B/D轉化的EEPROM都可以集成到單片機裡面。我們只用給單片機編寫簡單的代碼就可以來實現以上組合邏輯的功能。
第3章 單元電路設計
3.1 溫度數據採集電路
溫度數據採集電路如圖3-1所示。
圖3-1
3.2 單片機電路設計
單片機電路設計如圖3-2所示。
圖3-2
3.3 整體電路
整體電路圖如圖3-3所示。(詳圖見附錄二)
圖3-3
3.4 整機元件清單
元件型號 名稱及功能 數量
LM35 溫度感測器 1
TL084 運算放大器 1
2K電阻 4
10K電阻 2
1K電阻 1
自復開關 3
ADC0804 模數轉換器 1
101電容 1
103電容 1
10uF電容 1
STC89C52RC 單片機 1
12.0000MHz晶振 1
30pF電容 2
7400 四輸入與非門 1
四位數碼管 1
排阻1K*8 1
發光二極體 1
導線 若干
麵包板 1
第4章 測試與調整
4.1 溫度採集電路測試
溫度採集電路測試方法如圖4-1所示。
圖4-1
測試方法:將數字萬用表的黑表筆放到電源的地,將紅表筆放到紅表筆1的位置,看數字萬用表上顯示的毫伏數值上是不是現場溫度的10倍左右。因LM35的溫度靈敏度是10mV/ ,所以電壓和溫度在數值上應有上述關系。如LM35是完好的,在電源連接正確的前提下,我們在紅表筆1的位置測的的數據都是正確的。再將手或者高於現場溫度的東西給LM35加熱,看萬用表顯示的度數是否緩慢的上升,並和現場溫度程線性關系。再把紅表筆放到紅表筆2的位置,測量此處的電壓,看是否是紅表筆1位置電壓的兩倍,因我在在設計運算放大器的時候就是為了讓紅表筆2位置的電壓是紅表筆1位置電壓的兩倍,以便於和ADC0804連接。
可能出現的問題及解決:在紅表筆2的位置測的電壓和紅表筆1位置的電壓不是兩倍關系。這個問題可能是由於放大器用損壞或做同向比例放大器的兩個電阻有問題,或者運算放大器的正負電源沒有連接正確。可以仔細的檢查電源,如連接正確可以用電壓跟隨器的方法看放大器是否完好。如果以上都可以正常的工作,願意可能就出在兩個電阻上,用萬用表測量,看兩個電阻是不是一樣大。通過上訴方法可以將問題解決。
4.2 模數轉換電路測試。
模數轉換電路測試方法如圖4-2所示。
圖4-2
測試方法:如圖4-2將示波器黑表筆和萬用表黑表筆放好,將示波器的紅表筆和萬用表紅表筆放好。打開示波器,看有無波形,如圖4-3
如圖4-3
如沒有看到波形,那就是R C振盪電路出了問題,將無法給ADC0804提供時鍾。在時鍾正常的情況下,用萬用表測試ADC0804的數字輸出端是否有數據輸出,可能會遇見全高或全低的情況,可以按一下自復開關S1啟動ADC0804的轉換。用萬用表測試輸出腳的高低電平並轉化成十進制看是否和輸入的小電壓信號溫和。如輸入的電壓是500mV,那麼數字量輸出的就應該是50的二進制。如有少量的偏差,可以用萬用表量一下VREF/2即9號管腳的電壓是不是2.56V。如不是,可以微調電源,是它在2.56V左右。如在電壓固定的情況下可以改變分壓電阻R2的值以獲得合適的電壓。
4.3 單片機電路測試
單片機電路測試如圖4-4所示。
圖4-4
測試方法:給單片機上電,在已經下載過程序的情況下數碼管的後兩位已經可以正確的顯示預設的溫度20了。前兩位的數字可能是亂碼,因為在P1口沒有數據的時候默認的數據都是高,即為
1111 1111B為255。這個數據已經溢出了,所以是亂碼。在後兩位正確顯示的情況下按動自復開關S1會看到後兩位數碼管的十位會以步進長1步進,到達9後,再步進就會從0開始,從而達到調整預設溫度十位的任務。按動自復開關S1會看到後兩位數碼管的個位會以步進長1步進,到達9後,再步進就會從0開始,從而達到調整預設溫度個位的任務。通過單片機的處理這兩位的數據會被整合到一起作為報警信號產生的依據。在測試的同時,你會發現報警的發光二極體是一直亮的,這就是剛才說的數據溢出造成的,當全1的時候,數據肯定的大於預設的數據。在測試正常的情況下可以將固定的數據(二進制)通過陰線的方式接到單片機的P1口,看數碼管的前兩位顯示的數據是不是你輸入的數據,這樣適當的調整輸入數據,觀察顯示就可確定單片機是否能正確的接收外界傳入的數據並進行數據處理了。同時設置一個報警溫度,看是否當輸入的數據等於或高於這個值得時候報警。從而完成對單片機的調試。如果發現不是外圍電路的問題,而是單片機內部的邏輯出現了問題,可以在編程的時候用單步跟蹤的方法進行軟體上的調試,發現並改正錯誤,一般來說都是很簡單的。
4.4 整體指標測試
測試數據如表4-1。
溫度顯示
28 35 40 45 50 55 60 65
感測器電壓 mV 277 343 389 452 493 566 617 656
溫度顯示
70 75 80
感測器電壓 mV 689 756 809
表4-1
測試方法:在各部分電路都已經檢查正確的前提下,搭好全部的電路。啟動ADC0804模數轉換器,此時將會發現數碼管已經可正確的顯示我的預設溫度和顯示處理過的外界時候溫度。此時用加熱裝置(這里用的電烙鐵)給溫度感測器升溫,此時會看到數碼管的前兩位連續的變化,當到達或超過我們的預設溫度的時候報警燈就會亮。可以達到我們的功能要求:設計的溫度測量儀器能夠測量和顯示測量的溫度,當溫度超過設定值後,發出超溫指示或報警。報警溫度的設定可以根據需要自定。
第5章 設計小節
5.1 設計任務完成情況
5.1.1溫度測量儀設計的要求:設計的溫度測量儀器能夠測量和顯示測量的溫度,當溫度超過設定值後,發出超溫指示或報警,報警溫度的設定可以根據需要自定。經過整體電路的測試及調整,此次設計的電路已經達到了設計的要求,並且電路的運行穩定,對外部的溫度實時處理顯示,操作簡單方便,顯示准確,一目瞭然。電路的設計布局合理(見附錄一)。
5.2 問題及改進
由於是初次使用單片機,對單片機及其外圍電路的設計都不熟悉,難免有想不到的地方。後經過研究和老師的指導,發現電路可以進一步的改進。主要改進的方面有兩處:(1).單片機對ADC0804的控制。在原電路的設計中,我們用ADC0804自行觸發的方式使其正常工作,但工作性能不可靠,偶爾會出現死機的情況這樣將會給我帶來不必要的麻煩。改進的地方是通過ADC0804和單片機的通信使得ADC0804工作穩定。在ADC0804准備好的情況下將向單片機提出中斷,單片機在處理中斷請求的中斷服務子程序里控制ADC0804開始轉換(如圖5-1)。(2).在本次的實驗中,我是用單片機直接的對要顯示的數據直接的解碼,這樣雖然也易於實現,但佔用了單片機太多的資源,對大的電路設計不方便。雖然這次的電路簡單,無需做這樣的改進,但為了珍惜並合理運用單片機有限的資源,要養成好的習慣,改進電路如圖5-1。將數碼管的數據通過P0口的低四位給4511,P0口的高四位用來控制哪位數碼管亮。
5.3 心得體會
首先,這次課程設計給我提供了一次很好的鍛煉機會,提高了我動手動腦的能力,讓我明白了「紙上得來總覺淺,絕知此事要躬行」的道理。這次的課程設計讓我在設計方法上學會了自頂向下逐步求精的設計思想,我將電路的要求劃分為以下模塊:溫度採集、放大、解碼、比較、控制、報警六個方面。按照數據流向,從溫度採集出發,設計個模塊的電路圖,設計所用電壓、器件及其型號,搭起各自的電路,沒搭好一個模塊的電路就進行正確性測試,確保每一個模塊都能正確的工作,這樣才能確保系統能正確的工作。
其次,這次的實驗讓我感覺到單片機處理數據的優越性。例如:
圖5-1
在我的方案一中,將ADC0804轉換過來的二進制轉換成十進制的方案是,將0~0x99的數據寫入EEPROM裡面,在加上用ADC0804轉換過來的二進制進行定址,這樣才可以完成轉化。這樣不僅要加一片晶元還要對它的100個地址寫數據,是一個比較繁瑣的工作。當我用第二種方案單片機實現的時候,我只要在單片機中寫以下語句:
H=data/10;
L=data%10;
其中的H,L,data分別定義的是轉換成十進制的十位、個位以及從P1口讀進的外界實時數據。這樣的工作量進行比較,不難發現用單片機省去了不少的晶元和連線。再如在解碼顯示電路中,單片機只要寫一個解碼表就可以實現解碼。
uchar code table[]={ //數字0~9
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
而在方案一的組合邏輯電路中要用四片4511或者7448,這樣更突出了單片機的優越性,用軟體的方式集成了好多的晶元,減少了連線數,從而也為電路的安全性提供了保障,線少使出錯的機會減少。一但出錯,檢查電路也容易檢查,為系統的安全提供了保障,增強了系統的穩定性和抗干擾能力。
再次,電路的設計也讓我體會到了很多的做人的道理。我生活在集體的大家庭裡面,我就是大家庭的一個小小的器件,雖小但不能自暴自棄,因為集體的運行需要我的100%的努力。在實驗期間我曾幫組一位同學檢查故障。故障的現象是他的現場溫度只能顯示偶數,不能顯示奇數。我逐步的排查,最後的結果是我在他的麵包板上發現了一個壞的插孔,使得他的一根線和地短路。問題解決後我就想,他的板子上是好幾十條線,一個地方出問題都不行,這說明沒一根線的存在都有他存在的道理。這也正像我的存在,我的存在自有我存在的道理。我所要起得作用要做的事情是沒有人能代替的,我的努力也是集體存在的前提。只有處理還個體,集體的關系才能使得系統工作穩定、和諧。
最後,這次課程設計讓我感到很充實,很有成就感。在過去的實驗中我完成的都是模塊化的小電路,這次終於使得那些積累的知識得以集中體現。使我信心倍增,激勵我像更高的成就攀登!
附件一:實物圖
附件二:
附錄三:
D. 單片機原理及介面技術的實驗,求大神!!!!!!!!
1:
MOV R0,#40H
MOV R2,#30
LP:
MOV @R0,#0
INC R0
DJNZ R2,LP
2:
MOV DPTR,#7000H
MOV R2,#30
LP:
CLR A
MOVX @DPTR,A
INC DPTR
DJNZ R2,LP
3:
MOV R0,#20H
MOV R2,#40
LP:
MOV @R0,#0FEH
INC R0
DJNZ R2,LP
4:
MOV A,30H
ANL A,#0FH
XCH A,30H
MOV A,40H
ANL A,#0FH
SWAP A
ORL A,30H
MOV 50H,A
5:
MOV DPTR,#7000H
MOVX A,@DPTR
ANL A,#0F0H
SWAP A
MOV B,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
SWAP A
ORL A,B
INC DPTR
MOVX @DPTR,A
6:
MOV A,30H
ANL A,#0F0H
MOV 31H,A
MOV A,30H
ANL A,#0FH
MOV 32H,A
7:
MOV DPTR,#7000H
MOVX A,@DPTR
PUSH ACC
ANL A,#0F0H
SWAP A
INC DPTR
MOVX @DPTR,A
POP ACC
ANL A,#0FH
INC DPTR
MOVX @DPTR,A
8:
MOV R0,#30H
MOV R1,#40H
MOV R2,#7
LP:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,LP
E. 急求51單片機數據傳送的實驗設計,內容和要求在下面。我在10月22號之前用
ORG 0000H
SJMP MAIN
ORG 3000H
MAIN: MOV A,#20H /攜棗/傳送20H
LOOP1:MOV 30H,@A
INC A
CJNE A,#2FH,LOOP
MOV DPTR,#2000H /辯好拆襪判/傳送2000H
LOOP2:MOV 30H,@DPTR
INC DPTR
CJNE DPTR,#200FH,LOOP2
MOV R0,#TABEL //查表
MOV B,@R0
ORG 1000H
TABEL:DB 30H,31H,32H,33H,34H
DB 35H,36H,37H,38H,39H
F. 求單片機數據傳送試驗源程序
我來答
1.假定16個頃碧數放在20H為首的地址里,送到目的50H為首的地址里
LOOP:
MOV R0,#20H
MOV R1,#50H
MOV A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R0,#30H,LOOP;當inc r0 前,R0=2FH,加1後R0+1=30H,不跳轉
2.假定16個數放在內部RAM20H為首的地址里,送到外部RAM目的0010H為首的地址里
MOV R0,#20H
MOV DPTR,#0010H
MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
CJNE R0,#30H,LOOP;當R0=2FH時,R0+1=30H,不跳轉
3.將外部RAM以1000H為首的16個數據放入,外部RAM以2000h為首的地址內
MOV R7,#0FH
MOV DPTR,#1000H;將源地址放入第一個DPTR
INC AUXR1;轉換指針,指向圓隱第二個DPTR
MOV DPTR,#2000H;將目的地址放入第二個DPTR
INC AUXR1;指向源dptr
LOOP:
MOV A,@DPTR;將源地址數據放入A
INC DPTR;源地址加1
INC AUXR1;轉換為目的橘乎廳地址
MOV @DPTR,A;將A內容放入目的地址
INC DPTR;目的地址加1
INC AURX1;指向源地址
DJNZ R7,LOOP;R7減1,循環,減15次
G. 51單片機 匯編語言 常用數據處理程序設計 求16個無符號數的最大值
查找最升州大值的程序,不是很胡告簡單的嗎?
如下即可:
ORG 0H
MOV R0, #30H
ACALL ZI
SJMP $
;-----------------------------------
ZI:
MOV B, #0 ;先用0當做最大值.
MOV R7, #16 ;比較16次.
LOOP: MOV A, @R0 ;取來吵做蔽一個數字.
CJNE A, B, B1 ;比較.
B1: JC B2 ;有借位轉移.
MOV B, A ;夠減則存到B中.
B2: INC R0 ;轉到下一個.
DJNZ R7, LOOP ;循環16遍.
RET
;-----------------------------------
END
H. 單片機實驗——數據傳送實驗
ORG 0000H
LJMP MAIN
ORG 0060H
MAIN:
MOV R0 ,#4800H
MOV R1 ,#5800H
LOOP:
MOVX A ,@R0
MOV R1 ,A
INC R0
INC R1
DJNZ #10H,LOOP
END
I. 單片機 實驗 編程查表程序設計、數據排序實驗
這么多問題,還沒積分。。。誰回答啊。。