單片機(jī)部分答案第四北航馬忠梅_第1頁
單片機(jī)部分答案第四北航馬忠梅_第2頁
單片機(jī)部分答案第四北航馬忠梅_第3頁
單片機(jī)部分答案第四北航馬忠梅_第4頁
單片機(jī)部分答案第四北航馬忠梅_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、ß 1.22 已知(A)=7AH,(R0)=30H,(30H)=A5H,PSW=80H。問執(zhí)行(單獨執(zhí)行)以下各指令的結(jié)果 XCH A,R0; A=30H, R0=7AH XCH A,30H; A=A5H XCH A,R0; A=A5H XCHD A,R0; A=75H ;二者低4位互換 SWAP A; A =A7H; A高低4位互換 ADD A, R0; A = AAH, Cy=0, OV=1(a6 a7 =1) ADD A,30H; A= 1FH, Cy=1, OV=0 ADD A, A,#30H; A= AAH, Cy=0, OV=1; ADDC A,30H; A= 20H,

2、Cy=1, OV=0; 因為PSW的Cy=1 SUBB A,30H; A= D4H, Cy=1, OV=1; 因為PSW的Cy=1 SUBB A,#30H; A= 49H, Cy=0, OV=0; 因為PSW的Cy=1ß 1.24 已知(A)=83H,(R0)=17H,(17H)=34H。執(zhí)行以下指令后A=? ANL A,#17H ; 邏輯與 (A)=03H ORL 17H,A ;邏輯或 (17H)=37H XRL A,R0 ; 異或(A)=34H CPL A ; 取反 (A)= CBHß 1.25 將內(nèi)部RAM20H、21H、22H,連續(xù)三個單元的內(nèi)容以此放入 2FH、2

3、DH、2EH單元 MOV R0, #20H MOV R1, #2FHLOOP : MOV A, R0 MOV R1, A INC R0 DEC R1 CJNE R0, #23H, LOOP SJMP $ß 1.34 外部數(shù)據(jù)RAM在2000H2100H區(qū)域有一個數(shù)據(jù)塊,將他們移動到3000H3100H區(qū)域 解一: MOV DPTR, #2000H MOV P2, #30H MOV R1, #00HLOOP : MOVX A, DPTR MOV X R1, A INC DPTR INC R1 CJNE R1, #00H, LOOP INC P2 MOV X A, DPTR MOVX R

4、1, A解二: MOV DPTR, #2000H MOV P2, #30H MOV R1, #00HLOOP : MOV X A, DPTR MOV X R1, A INC DPTR INC R1 CJNE R1, #00H, LOOP INC P2 MOV A, DPH CJNE A,#21H,NEXTNEXT1: MOVX A, DPTR MOVX R1, A SJMP $NEXT: INC DPTR SJMP NEXT1解三: MOV DPTR, #2000H MOV R5, #00H MOV A, #00H MOV R1,ALOOP : MOV A,R1 MOV X A, A+DPTR

5、 MOV X R0, A MOV DPTR, #3000H MOV A, R0 MOVX A+DPTR, A INC R1 DJNZ R5, LOOP MOV DPTR, #2100H MOVX A, DPTR MOV DPTR, #3100H MOVX DPTR,Aß 1.35 外部數(shù)據(jù)RAM從2000H開始有100個數(shù)據(jù)塊,將他們移動到2030開始的單元 解一: MOV DPTR, #2000H MOV R4,#64H MOV P2, #10H LOOP1: MOVX A, R1 MOV R1, #00H MOVX DPTR, A MOV R4,#64H INC R1LOOP :

6、 MOVX A, DPTR INC DPTR MOV X R1, A DJNZ R4, 64H, LOOP1 INC DPTR INC R1 DJNZ R4, 64H, LOOP MOV DPTR, #2030H MOV P2, #10H MOV R1, #00H解二: MOV DPTR, #2000H MOV R3,#64H MOV P2, #10H DJNZ R3, LOOP NEXT: MOV R1, #00H SJMP $ MOV R4,#64H LOOP : MOVX A, DPTR MOVX R1, A INC DPTR INC R1NEXT1: DJNZ R4, LOOP LOO

7、P1: MOV DPTR, #1000H MOV P2, #20H MOV R1, #30H習(xí)題參考答案(P.79)習(xí)題3. 8051主要的存儲空間是什么?為什么兩個RAM的空間不同?答:8051單片機(jī)的存儲空間分為數(shù)據(jù)RAM和代碼ROM,其中數(shù)據(jù)RAM又分為片內(nèi)RAM和片外RAM。 片內(nèi)RAM的地址為8位,由單片機(jī)指令直接在單片機(jī)內(nèi)部尋址訪問,而片外RAM的地址為16位,只能由單片機(jī)的MOVX指令通過外部總線訪問。習(xí)題4. 編一段程序,把8位口新的輸入值和前一次的輸入值進(jìn)行比較,然后產(chǎn)生一個8位數(shù)。這個數(shù)中的位為“1”的條件是:僅當(dāng)新輸入的位為“0”,而前一次輸入的位為“1”。 答:設(shè)該8位

8、口為P1,新產(chǎn)生的8位數(shù)為x: unsigned char x; x=P1; x&=P1;習(xí)題6. 按給定的存儲類型和數(shù)據(jù)類型,寫出下列變量的說明形式:up,down 整數(shù),使用堆棧存儲;first,last 浮點數(shù),使用外部數(shù)據(jù)存儲器存儲;cc,ch 字符,使用內(nèi)部數(shù)據(jù)存儲器存儲。 答:堆棧只能存儲內(nèi)部RAM字節(jié)內(nèi)容,必須在idata區(qū):(復(fù)位后SP=07H,但是07H中存放堆棧地址,上電復(fù)位后典型寄存器的值?) int idata up,down; float xdata first,last; char idata cc,ch; 或char data cc,ch;習(xí)題7. 判斷下

9、列關(guān)系表達(dá)式或邏輯表達(dá)式的運(yùn)算結(jié)果(1或0) 1、10=9+1; è1 2、0&&0; è03、10&&8; è14、8|0; è15、!(3+2); è06、設(shè)x=10,y=9;x>=8&&y<=x; è1習(xí)題8. 設(shè)x=4,y=8,說明下列各題運(yùn)算后,x,y和z的值分別是多少?1、z=(x+)*(-y); è x=5,y=7,z=28 2、z=(+x)-(y-); è x=5,y=7,z=-33、z=(+x)*(-y); è x=5,y=7,

10、z=354、z=(x+)+(y-); è x=5,y=7,z=12習(xí)題9. 分析下列運(yùn)算表達(dá)運(yùn)算順序。1、c=a| (b); è( b)是為0或1(邏輯值),若a=0則a| (b), 結(jié)果賦給c2、x+=y-z; è y-z,x+(y-z),結(jié)果賦給x 3、-b>>2; è -b,結(jié)果右移2位。注: -b不是取反也不能確定為負(fù)數(shù);取反一般是變成2進(jìn)制然后按位取反。如b=-3,即0FDH,則-b=3,而不是0FD按位取反 4、c=+a%b-;è a=a+1,a%b,b=b-1,%結(jié)果賦給c 5、!m&n; è !m,

11、若結(jié)果為1再和n相與。X(不是&&) !m,再和n相與6、a<b|c&d; è a<b,若結(jié)果為0再c&d,結(jié)果相或習(xí)題參考答案(P.93) 習(xí)題6. 用選擇分支編寫程序,把輸入的一個數(shù)字按下列對應(yīng)關(guān)系顯示。當(dāng)輸入Z時,程序結(jié)束。#include <stdio.h>#include <reg51.h>main( ) unsigned char k; do scanf(“%c”,&k); switch(k) case 1: printf(“A”); break; case 2: printf(“B”); bre

12、ak; case 3: printf(“C”); break; case 4: printf(“D”); break; default: printf(“?”); break; while( k ! = Z ); while( 1 ); 習(xí)題7. 若在C中的switch操作漏掉break,會發(fā)生什么?答:若在case語句中漏掉break,則程序執(zhí)行case選擇部分程序后不會按照要求退出switch語句,而是繼續(xù)執(zhí)行下一個case語句選擇的內(nèi)容。習(xí)題8. 編寫程序,輸出x3數(shù)值表,x為010。main() unsigned char x; unsigned int y; for(x=0;x<

13、;11; x+) y=(unsigned int)x*x*x; printf(“%c,%dn”,x,y); while(1);習(xí)題9. 用三種循環(huán)方式分別編寫程序,顯示1100的平方。答:三種流程圖如下:#define uint unsigned int main() unsigned int y; unsigned char x; for( x = 0 ; x < 101 ; x+) y=(unsigned int)x*x; printf(“%c,%dn”,x,y); while(1); main( ) unsigned int y; unsigned char x=1; while(

14、x<101) y=(unsigned int)x*x; printf(“%c,%dn”,x,y); x+; while(1);main() unsigned int y; unsigned char x=1; do y = (unsigned int)x*x ; printf( “%c, %dn”, x, y ) ; x+; while(x<101); while(1);習(xí)題9. 寫出下列數(shù)組使用*運(yùn)算的替換形式。1.data2; 2.numi+1; 3.man53。1、*(data+2) p1072、*(num+i+1)3、*(*(man+5)+3)習(xí)題10. 設(shè)下列運(yùn)算表達(dá)式中

15、p是指針,試分析各表達(dá)式的運(yùn)算順序。1.b=*p-; 2.x=*p+;3.a+i=*p+ ; 4.y=*-*+p-6。答:1、先取*p給b,再使p減1單元(注意不是*p減1單元);2、先取*p給x,再使p加1單元(注意不是*p加1單元);3、先使i加1,再取*p給ai,再使p加1單元;4、這里p是指針的指針,先使p加1單元,再使*p減1單元,再使*(*p)減6后賦給y;習(xí)題12. 結(jié)構(gòu)的定義和說明在程序中的作用是什么?在對結(jié)構(gòu)初始化時應(yīng)該注意些什么問題。答: 結(jié)構(gòu)的定義和說明在程序中可以把一組關(guān)系密切的變量存放在一個連續(xù)的存儲空間中,便于對這些變量的訪問。同一個結(jié)構(gòu)中不能存在同名變量名稱。 可

16、以把具有相同結(jié)構(gòu)的已知結(jié)構(gòu)直接用“=”對結(jié)構(gòu)進(jìn)行賦值,或者通過其成員的逐個引用分別賦值。在沒有賦值前結(jié)構(gòu)成員的值是不確定的,有可能被編譯器啟動代碼初始化為0。 習(xí)題14. 使用union的目的是什么?定義union,它用于容納下列數(shù)據(jù): int data4; char ch8; float f。答:使用union的目的之一是若干個不會同時使用的變量公用存儲單元,以便節(jié)省存儲空間。同一個union中不能存在同名變量名稱。union data_type int data4; char ch8; float f;mydata ;習(xí)題參考答案(P.142)習(xí)題1. C語言中,函數(shù)的存儲類型和數(shù)據(jù)類型的

17、意義是什么?答:一,函數(shù)存儲類型有extern(外部函數(shù))和static(內(nèi)部函數(shù)或靜態(tài)函數(shù))。在沒有任何存儲類說明的情況下函數(shù)都是全程序可見的,即函數(shù)的默認(rèn)存儲類特性為extern。Static存儲類使函數(shù)對對其所在的文件定義之前的部分和非定義文件是不可見的,不能調(diào)用的。 二,數(shù)據(jù)類型是說明函數(shù)的返回值類型。包括簡單類型(char,unsigned char,int,unsigned int,long,unsigned long,float,bit),復(fù)合型(stuct,union) 和無類型(void) 習(xí)題3. 作為函數(shù)形式參數(shù)使用的數(shù)組名具有什么特征?它們的使用特點是什么?1、當(dāng)用數(shù)組

18、作為函數(shù)的參數(shù)時,應(yīng)當(dāng)在調(diào)用函數(shù)和被調(diào)用函數(shù)中分別定義數(shù)組;2、實參數(shù)數(shù)組與形式參數(shù)數(shù)組的類型應(yīng)當(dāng)一致;3、實參數(shù)數(shù)組與形式參數(shù)數(shù)組的大小可以一致,也可以不同,用戶需自行考慮數(shù)組的邊界問題。習(xí)題5. 當(dāng)一個函數(shù)需要返回多于一個值時,可以怎么做? 可以通過返回指針實現(xiàn),先把需要返回的所有數(shù)據(jù)連續(xù)存放在一段存儲空間中,讓該指針指向其首地址,然后返回該指針。 7.編寫字符串字符替換函數(shù)replchr(s,c1,c2),把字符串s中的c1置換為c2 void replchr(char* s,char c1,char c2) char i=0,temp; while(si !='0')

19、if(si=c1) temp=c1; c1=c2; c2=temp; else s+; / 下一個字符 void main() char* str="ABCDabcd" replchr(str,'D','d'); 8.編寫把十六進(jìn)制字符串s變換成整數(shù)值返回的函數(shù)htoi(s) #include “stdio.h” #include “string.h” int translat(char c) /每個字符轉(zhuǎn)換為十進(jìn)制數(shù) if(c<=9&&c>=0) return c-48; /9(0x39)變成9,就是hex39-

20、30, /30表示 0,依此類推 if(c>=a && c<=f) return c-87; /a變成10,就是十進(jìn)制97-87,依此 /類推 if(c>=A && c<=F) return c-55; /A變成10,就是十進(jìn)制65-55,依此 /類推 return -1;/其它字符返回-1 int htoi(char *str) int length=strlen(str); if(length=0) return 0; int i,n=0,stat; for(i=0;i<length;i+) stat=translat(stri

21、); /每個字符占2個字節(jié) if(stat>=0) n=n*16+stat; return n; ASCII碼ASCII : 0 9 A F a fHEX: 30-39H 41-46H 61-66H十進(jìn)制: 48-57 65-70 97-102 void main() char Hex20; printf("Input Num at Hexadecimal:"); gets(Hex); printf("%s=%d",Hex,Htoi(Hex); 習(xí)題9.編寫函數(shù)itob(n)。它把整數(shù)n變換成二進(jìn)制字符串,并返回字符串地址。unsigned cha

22、r p17;unsigned char* itob(int n) unsigned char i=0; unsigned int m; if(n<0) pi+=-; m=-n; else m=n; do pi+=(m&0x8000)?1:0; /最高位是否為1? m<<=1; while(i<16); pi=0; return p;p0p1p16依此表示這個二進(jìn)制字符串從高位到低位排列 10.編寫把字符串s逆轉(zhuǎn)的函數(shù)reverse(s).void reverse (unsigned char* s) unsigned char i, s , n;for(i=0;

23、i<(n-1)/2;i+) t=si; si=sn-1-i; sn-1-i=t; 例:s10=“012345678”或”abcdefghi” s11=“0123456789”或”abcdefghij”習(xí)題11.編寫把字符串s逆轉(zhuǎn)的遞歸函數(shù)reverse(s)。 答:使用reverse(s,strlen(s)-1)即可實現(xiàn)unsigned char s=“abcdefg”;void reverse(unsigned char* p, unsigned char i) unsigned char n=p0; p0=pi; pi=n; if(i>2) reverse(p+1, i-2);

24、習(xí)題12.設(shè)計并初始化一個具有2個元素的2維數(shù)組保存圖畫(如正方形)的X-Y坐標(biāo)值。然后設(shè)計一個畫圖函數(shù)。標(biāo)明怎樣調(diào)用函數(shù)畫正方形。 #include <stdio.h> unsigned char G12=1,2; /左上角坐標(biāo)為G00,G01 void Square(unsigned char g12, unsigned char n) unsigned char i,j; /邊長為n for(j=0;j<=g01+n;j+) if(j=g01|j=g01+n) for(i=0;i<g00;i+) printf("%s"," "

25、;); for(;i<=g00+n;i+) printf("%s","-"); else if(j<g01) for(i=0;i<=g00+n;i+) printf("%s"," "); else for(i=0;i<g00;i+) printf("%s"," "); printf("%s","|"); for(i+;i<g00+n;i+) printf("%s"," &quo

26、t;); printf("%s","|"); 習(xí)題參考答案(254)習(xí)題2.利用圖11-3的接口電路,編寫由ADC0809的通道6連續(xù)采集20個數(shù)據(jù)放在數(shù)組中的程序解一:#include<absacc.h>#include<reg51.h>#define IN6 XBYTE0x7ffe /*設(shè)置ADC0809的通道6地址*/sbit ad_busy=P33; /*即EOC狀態(tài)*/char ad0809(void) /*A/D采集函數(shù)*/ uchar i; IN6=0; /*啟動轉(zhuǎn)換*/i=i; i=i; /*延時等待EOC變低*/

27、 while(ad_busy=0); /*查詢等待轉(zhuǎn)換結(jié)束*/ return(IN6); void main(void)static uchar idata ad20; uchar j;for(j=0;j<20;i+) adj=ad0809(); /*20次采樣ADC0809通道6的值*/ 解二: #include<absacc.h>#include<reg51.h>#define uchar unsigned char#define IN6 XBYTE0xfffe /*設(shè)置ADC0809的通道6地址*/sbit ad_busy=P33; /*即EOC狀態(tài)*/vo

28、id ad0809(uchar idata * x) /*采樣結(jié)果放指針中的A/D采集函數(shù)*/ uchar i; uchar xdata * ad_adr; ad_adr=&IN6; for(i=0;i<20;i+) /*20次采集*/ *ad_adr=0; /*啟動轉(zhuǎn)換*/i=i; /*延時等待EOC變低*/i=i;while(ad_busy=0); /*查詢等待轉(zhuǎn)換結(jié)束*/xi=*ad_adr; /*存轉(zhuǎn)換結(jié)果*/void main(void)static uchar idata ad20;ad0809(ad); /*采樣ADC0809通道的值*/ 4.對0809進(jìn)行數(shù)據(jù)采集編程。要求對8路模擬量連續(xù)采集24h,每隔10min采集一次,數(shù)據(jù)存儲在外部數(shù)據(jù)存儲區(qū)中。 解:圖11-3#include<absacc.h>#include<reg51.h>#define uchar unsigned char#define uint unsigned int #define IN0 XBYTE0x7ff8 /*設(shè)置ADC0809的通道0地址*/sbit ad_busy=P33; /*即EOC狀態(tài)*/uint overflow_count = 0; /*T1中斷次數(shù)初值*/ void ad08

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論