




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、MCS51單片機(jī)作業(yè)解答第二章 MCS-51單片機(jī)的結(jié)構(gòu)和原理(1) MCS-51單片機(jī)芯片包含哪些主要功能部件? 答:CPU、4KBROM、128B RAM、4個8位I/O口、2個定時計數(shù)器、串行I/O口、中斷系統(tǒng)、時鐘電路、位處理器、總線結(jié)構(gòu)。(2)MCS-51單片機(jī)的 /EA端有何用途? 答:當(dāng)/EA =0 只訪問片外程序區(qū);當(dāng)/EA=1時,先訪問片內(nèi)程序區(qū),當(dāng)PC超過片內(nèi)程序容量時,自動轉(zhuǎn)向外部程序區(qū)。(3)MCS-51單片機(jī)有哪些信號需要芯片引腳以第二功能的方式提供? 答:RXD、TXD、/INT0、/INT1、T0、T1、/WR、/RD(4)MCS-51單片機(jī)的4個I/O口在使用上
2、各有什么功能和特點? 答:P1口通用輸入輸出;P0口數(shù)據(jù)總線、地址總線低8位、通用輸入輸出 P2口地址總線高8位、通用輸入輸出 P3第2功能信號、通用輸入輸出。 (5)單片機(jī)的存儲器分哪幾個空間? 試述各空間的作用。 答:程序存儲器:內(nèi)部ROM、外部ROM 數(shù)據(jù)存儲器:內(nèi)部基本RAM、專用寄存器區(qū)、外部RAM(6)簡述片內(nèi)RAM中包含哪些可位尋址單元? 答:20H2FH共16個可尋址單元(7)什么叫堆棧? 堆棧指針SP的作用是什么? 在程序設(shè)計中為何要對SP重新賦值? 答:只允許數(shù)據(jù)單端輸入輸出的一段存儲空間。 SP的作用是用來存放堆棧棧頂?shù)牡刂贰?因為SP的初值是07H,后繼的是寄存器區(qū)和位
3、尋址區(qū),為了便于編程工作,要修改SP.(8)程序狀態(tài)字寄存器PSW 的作用是什么?簡述各位的作用。 答:PSW用來存放程序執(zhí)行狀態(tài)的信息, CY加減運算的進(jìn)位、借位 AC輔助進(jìn)位標(biāo)志,加減運算的低4位進(jìn)位、借位(9)位地址65H 與字節(jié)地址65H 如何區(qū)別? 位地址65H具體在片內(nèi)RAM中什么位置? 答:位地址65H中是一位0/1的數(shù)據(jù),字節(jié)地址65H是8位0/1的數(shù)據(jù)。 位地址65H在片內(nèi)RAM中2CH單元第5位。(10)什么是振蕩周期、時鐘周期、機(jī)器周期和指令周期? 如何計算機(jī)器周期的確切時間? 答:振蕩周期為單片機(jī)提供信號的振蕩源的周期時鐘周期振蕩脈沖2分頻的信號機(jī)器周期完成一個基本操作
4、需要的時間,是振蕩周期/12=1T指令周期執(zhí)行1條指令需要的時間 14T(11)單片機(jī)工作時在運行出錯或進(jìn)入死循環(huán)時,如何處理? 答:復(fù)位處理,在單片機(jī)的RESET加持續(xù)1段時間的高電平(12)使單片機(jī)復(fù)位的方法有幾種?復(fù)位后單片機(jī)的初始狀態(tài)如何? 分上電復(fù)位和手動復(fù)位。復(fù)位后PC=0000H ALE=0 /PSEN=1(13)開機(jī)復(fù)位后,單片機(jī)使用的是哪組工作寄存器? 它們的地址是什么? 如何改變當(dāng)前工作寄存器組? 答: 單片機(jī)使用的是第0組工作寄存器R0-R7, 對應(yīng)的地址為00H-07H,采用置位復(fù)位RS1、RS0,可以改變單片機(jī)使用的工作寄存器。第3章 MCS-51單片機(jī)的匯編語言指令
5、系統(tǒng)單片機(jī)的指令格式為: 操作碼+操作數(shù) 標(biāo)號: 操作碼助記符 目的操作數(shù) ,源操作數(shù) ;注釋答: MCS-51單片機(jī)有7種尋址方式: 立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對尋址、位尋址。立即尋址操作數(shù)在指令中直接給出。直接尋址操作數(shù)存放的地址在指令中給出。可尋址RAM128B和特殊功能寄存器寄存器尋址操作數(shù)在寄存器中??蓪ぶ?組寄存器共32個字節(jié)即00H1FH寄存器間接尋址操作數(shù)的地址放在寄存器R0、R1、dptr中 R0、R1可尋址256B DPTR可尋址64KB變址尋址操作數(shù)的地址由變址寄存器A和基址寄存器DPTR、PC相加得到。 可尋址64KB的程序區(qū)相對尋址實
6、現(xiàn)程序的相對轉(zhuǎn)移,地址范圍-128+127位尋址按位尋址,操作數(shù)的地址為位地址。 可尋址 RAM區(qū)128bit 特殊功能區(qū)的128bit答: 對片內(nèi)RAM可以用直接尋址和寄存器尋址方式。對片外RAM可以用寄存器尋址方式-答: 在對片外RAM單元的尋址中用Ri間接尋址只能尋址當(dāng)前頁的256B,用dptr間接尋址可以直接尋址64KB的內(nèi)存答:(1)立即尋址 (2)直接尋址 (3)寄存器間接尋址 (4)寄存器尋址 (5)MOVC A A+DPTR變址尋址 (6)相對尋址 (7)CLR A 立即尋址 ,CLR C 位尋址 答: 這2條指令的操作結(jié)果相當(dāng),但是前1條指令速度快,指令短答: 如A= 12H
7、 (PC) = 0FFEH + 20H +3= 1021H 如A= 10H (PC)= 0FFEH +3 = 1001H第4章 MCS-51 單片機(jī)匯編語言程序設(shè)計 解: x equ 5AH Y EQU 5BH ORG 0100H START: CJNE A,#10, START1START1: JC START_M ;X<10 CJNE A,#15, START2START2: JNC START_B ;X>=15 MOV B,A ;10<=X<15 MUL AB ADD A,#8 SJMP START_ENDSTART_M: MOV B,A ; X<10 MU
8、L AB DEC A SJMP START_ENDSTART_B: MOV A,#41 START_END: MOV Y,A SJMP $解: data equ 50h Num equ 08h Result equ 54hCAL_AVE: MOV R0, #DATA MOV R2, #Num MOV R3, #0 MOV R4, #0 CLR CCAL_AVE1: MOV A, R4 ADDC A, R0 MOV R4, A MOV A, R3 ADDC A, #0 MOV R3 , A DJNZ R2, CAL_AVE1 MOV R2, #3CAL_AVE2: CLR C MOV A, R3
9、 RRC A MOV R3, A MOV A, R4 ;/2 RRC A MOV R4, A DJNZ R2, CAL_AVE2MOV Result, R3 RET解: data1 equ 40h Data2 equ 50h Result equ 40h Mult10_DATA: MOV R0 , #DATA1 MOV R1 , # DATA2 MOV R2, #10H CLR CMult10_DATA1: MOV A, R0 ADDC A, R0 ;*2 MOV R0, A MOV R1, A INC R0 INC R1 DJNZ R2, Mult10_DATA1 MOV R0 , #DAT
10、A1 MOV R2, #10H CLR CMult10_DATA2: MOV A, R0 ADDC A, R0 ;*2*2 MOV R0, A INC R0 DJNZ R2, Mult10_DATA2 MOV R0 , #DATA1 MOV R2, #10H CLR CMult10_DATA3: MOV A, R0 ADDC A, R0 ;*2*2*2 MOV R0, A INC R0 DJNZ R2, Mult10_DATA3 MOV R0 , #DATA1 MOV R1 , # DATA2 MOV R2, #10H CLR CMult10_DATA4: MOV A, R0 ;*2*2*2
11、ADDC A, R1 ; + *2 MOV R0, A INC R0 INC R1 DJNZ R2, Mult10_DATA4 RET解: data equ 2000H NUM EQU 100 EVEN EQU 30H ;偶數(shù) ODD EQU 31H ;奇數(shù)CAL_EVEN_ODD: MOV DPTR , #DATA MOV R2, #NUMCAL_EVEN_ODD2: MOVX A, DPTR JB ACC.0, CAL_ODD ; INC EVEN SJMP CAL_EVEN_ODD1CAL_ODD: INC ODD CAL_EVEN_ODD1: INC DPTRDJNZ R2, CAL_
12、EVEN_ODD2 RET解: DATA_ASC EQU 2000H DATA_BCD EQU 3000H NUM EQU 10 ASC_TO_BCD: MOV DPTR, #DATA_ASC MOV P2, DPH MOV R0, DPL MOV DPTR,#DATA_BCD MOV R2, #NUMASC_TO_BCD1: MOVX A, R0 ANL A, #0FH SWAP AMOV B, AINC R0MOVX A, R0ANL A, #0FHORL A, BMOVX DPTR, AINC R0INC DPTRDJNZ R2, ASC_TO_BCD1RET 第5章 單片機(jī)C51程序設(shè)
13、計解:unsigned int htoi(unsigned char s, unsigned int size)unsigned int tmp10;unsigned int i = 0;unsigned int count = 1, result = 0;unsigned int flag = 0;if(si = '0') && (si+1 = 'x') | (si+1 = 'X')flag = 2;for(i=size-1; i>=flag; i-)if(si>='0') && (s
14、i<='9')tmpi = si - 48;else if(si>='a') && (si<='f')tmpi = si - 'a' + 10;else if(si>='A') && (si<='F')tmpi = si - 'A' + 10;elsetmpi = 0;result = result + tmpi*count;count = count*16;return result;解:#include <std
15、io.h>#include <string.h>typedef unsigned char bool;bool strend(unsigned char s, unsigned char t);int main()unsigned char s1 = "abcdefg"unsigned char s2 = "ef"bool flag = strend(s1, s2);printf("the result is %dn", flag);return 0;bool strend(unsigned char s, unsi
16、gned char t)int ls = strlen(s); int lt = strlen(t); if (lt = 0) return 1; if (ls < lt) return 0; return !strcmp(&sls-lt,t);解:晶振頻率 12MHZ, 25ms中斷1次,5次中斷為125ms移位1次。#define uint unsigned int #define uchar unsigned char uchar temp,num;void main() TMOD=0x10;TH1=(65536-25000)/256;TL1=(65536-25000)%2
17、56;EA=1;ET1=1;TR1=1;P1=0xff;temp=0xfe;while(1)P1=temp; void time1() interrupt 3TH1=(65536-25000)/256;TL1=(65536-25000)%256;num+;if(num=5)num=0;temp=(temp<<1 | temp>>7);答:不是, 5/9=0; 則c=0. 改為 C= 5.0/9.0 *(F-32.0) ;第6章 單片機(jī)內(nèi)部資源解: 因為10KHZ的周期為100us ,定時器中斷時間可為50us,因此有4中方式。 方式0: x= 213 -50*(12/1
18、2) =8192-50 =1FCEH = 1 1111 1100 1110B TH0 = FEH TL0 = 0EH 方式1: x= 216 -50*(12/12) =65536-50 =FFCEH = 1111 1111 1100 1110B TH0 = FEH TL0 = CEH方式2: x= 28 -50*(12/12) =256-50 =CEH = 1100 1110B TH0 = CEH TL0 = CEH方式3: x= 28 -50*(12/12) =256-50 =CEH = 1100 1110B TL0 = CEH解: 1.采用匯編語言 定時為50ms,采用方式1,X=216
19、-50000*(12/12)=3CB0HORG 000BH LJMP T0_INT MAIN: MOV TMOD, #01H MOV TH0, #3CH MOV TL0, #0B0H SETB ET0 SETB IE SETB TR0 CLR P2.0 SJMP $ T0_INT: MOV TL0, #0B0H MOV TH0, #3CH CPL P2.0 RETI2.采用c51語言 定時為50ms,采用方式1,X=216 -50000*(12/12) #include <reg51.h> sbit P2_0 = P20; void main(void) TMOD = 0x01;P
20、2_0 = 0;TH0 = (65536 500000)/256 ;TL0 = (65536 500000)%256 ;EA=1 ;ET0 =1;TR0 =1;Do while (1); Void timer0(void) interrupt 1 TL0 = (65536 500000)%256 ;TH0 = (65536 500000)/256 ;P2_0 = !P2_0;解: 1.采用匯編語言 定時為100ms,采用方式1,X=216 -100000*(6/12)=3CB0H,當(dāng) 中斷3次時清0,滿10次重新置1。ORG 000BH LJMP T0_INT MAIN: MOV TMOD,
21、#01H MOV TH0, #3CH MOV TL0, #0B0H MOV R2,#0 SETB ET0 SETB IE SETB TR0 SETB P1.0 SJMP $ T0_INT: MOV TL0, #0B0H MOV TH0, #3CH INC R2 CJNE R2,#3,T0_INT1 CLR P1.0 RETIT0_INT1:CJNE R2,#10, T0_INT2 SETB P1.0 MOV R2,#0T0_INT2: RETI2.采用c51語言 定時為100ms,采用方式1,X=216 -100000*(6/12) #include <reg51.h> sbit
22、P1_0 = P10; uchar NUM =0; void main(void) TMOD = 0x01;P1_0 = 1;TH0 = (65536 500000)/256 ;TL0 = (65536 500000)%256 ;EA=1 ;ET0 =1;TR0 =1;Do while (1); Void timer0(void) interrupt 1 TL0 = (65536 500000)%256 ;TH0 = (65536 500000)/256 ;NUM+;If (NUM =3) P1_0 = 0;Else if (NUM =10) NUM =0; P1_0 =1;解: 1.采用匯編
23、語言 定時為100ms,采用方式1,X=216 -100000*(6/12)=3CB0H,當(dāng) 中斷10次時清0,滿20次重新置1。ORG 000BH LJMP T0_INT MAIN: MOV TMOD, #01H MOV TH0, #3CH MOV TL0, #0B0H MOV R2,#0 SETB ET0 SETB IE SETB TR0 SETB P1.7 SJMP $ T0_INT: MOV TL0, #0B0H MOV TH0, #3CH INC R2 CJNE R2,#10,T0_INT1 CLR P1.7 RETIT0_INT1:CJNE R2,#20, T0_INT2 SETB
24、 P1.7 MOV R2,#0T0_INT2: RETI2.采用c51語言 定時為100ms,采用方式1,X=216 -100000*(6/12) #include <reg51.h> sbit P1_7 = P17; uchar NUM =0; void main(void) TMOD = 0x01;P1_7 = 1;TH0 = (65536 500000)/256 ;TL0 = (65536 500000)%256 ;EA=1 ;ET0 =1;TR0 =1;Do while (1); Void timer0(void) interrupt 1 TL0 = (65536 5000
25、00)%256 ;TH0 = (65536 500000)/256 ;NUM+;If (NUM =10) P1_7 = 0;Else if (NUM =20) NUM =0; P1_7 =1;解: 1.采用匯編語言 定時為100ms,采用方式1,X=216 -100000*(6/12)=3CB0H,當(dāng)中斷10次時p1.0=0,外部INT0中斷時 p1.0=1,啟動定時器。 ORG 0000H LJMP MAINORG 0003H LJMP INT0_INT ORG 000BH LJMP T0_INT MAIN: MOV TMOD, #01H MOV TH0, #3CH MOV TL0, #0B
26、0H MOV R2,#0 SETB ET0 SETB IE SETB EX0 SETB IT0 SETB P1.0 CLR P1.1 SJMP $ T0_INT: MOV TL0, #0B0H MOV TH0, #3CH INC R2CJNE R2,#10, T0_INT2 SETB P1.0 CLR P1.1 CLR TR0 T0_INT2: RETIINT0_INT: SETB TR0 MOV R2,#0 CLR P1.0 SETB P1.1 RETI2.采用c51語言 定時為100ms,采用方式1,X=216 -100000*(6/12) #include <reg51.h>
27、 sbit P1_0 = P10; sbit P1_1 = P11; uchar NUM =0; void main(void) TMOD = 0x01;P1_0 = 1;P1_1 = 0;TH0 = (65536 500000)/256 ;TL0 = (65536 500000)%256 ;EA=1 ;ET0 =1;EX0 =1;IT0 =1;Do while (1); Void timer0(void) interrupt 1 TL0 = (65536 500000)%256 ;TH0 = (65536 500000)/256 ;NUM+;If (NUM =10)P1_0 =1;P1_1
28、=0;TR0 =0;Void INT_0(void) interrupt 0 P1_0 =0;P1_1 =1;TR0 =1;NUM =0; 解:外部脈沖由管腳輸入,可設(shè)T0工作于定時器方式1,計數(shù)初值為0,當(dāng) 輸入高電平時對T0計數(shù),當(dāng)高電平結(jié)束時,計數(shù)值乘上機(jī)器周期數(shù)就是脈沖寬度。工作方式控制字TMOD=00001001B=09H,計數(shù)初值TH1=00、TL0=00H。匯編語言程序: ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV TMOD ,#09H ;T0定時,方式1,GATE=1 MOV TH0 ,#00H ;置TH0計數(shù)初值 MOV TL0 ,#00H
29、;置TL0計數(shù)初值WAIT: JB P3.2 WAIT ;等待/P3.2引腳變?yōu)榈碗娖?SETB TR0 ;預(yù)啟動T0WAIT1: JNB P3.2 ,WAIT1 ;等待/P3.2引腳變?yōu)楦唠娖健佑嫈?shù)WAIT2: JB P3.2 ,WAIT2 ;等待/P3.2引腳再變?yōu)榈碗娖?CLR TR0 ;停止計數(shù) MOV 51H ,TH1 ;讀取計數(shù)值,存入指定的單元 MOV 50H ,TL1 SJMP $ ENDC語言程序:#include <reg51.h>unsigned char data *p;void main(void)TMOD=0x09; /* T0工作在定時器方式1,G
30、ATE=1 */TH0=0;TL0=0;do while (P3.2); /* 等待/P3.2引腳變?yōu)榈碗娖?*/TR0=1; /* 啟動定時器/計數(shù)器0 */do while (! P3.2); /* 等待引腳變?yōu)楦唠娖?、啟動計?shù)*/do while (P3.2); /* 等待引腳再變?yōu)榈碗娖?*/TR0=0; /* 停止計數(shù) */p=0x50;*p=TL0;p=p+1;*p=TH0;解: 有4種工作方式方式0: 8位同步移位寄存器方式,波特率 fosc/12方式1: 10位異步收發(fā)方式,波特率 可變方式2: 11位異步收發(fā)方式,波特率 fosc/32、fosc/64 方式3: 11位異步收
31、發(fā)方式,波特率 可變解: 串口SBUF 分接收SBUF和發(fā)送SBUF,占用同一地址。解:分析:甲、乙兩機(jī)都選擇方式1:8位異步通信方式,最高位用作奇偶校驗,波特率為1200bps,甲機(jī)發(fā)送,乙機(jī)接收,因此甲機(jī)的串口控制字SCON為40H,乙機(jī)的串口控制字SCON為50H。設(shè)甲、乙兩機(jī)的振蕩頻率為12MHZ,由于波特率為1200。SMOD =0 ,定時/計數(shù)器T1選擇為方式2,則初值為:初值=256 - fosc×2SMOD /(12×波特率×32)=256-12000000/(12×1200×32)230=E6H根據(jù)要求定時/計數(shù)器T1的方式控
32、制字TMOD為20H。甲機(jī)的發(fā)送程序:TSTART:MOV TMOD,#20H MOV TL1,#0E6HMOV TH1,#0E6HMOV PCON,#00HMOV SCON,#40HMOV R0,#30HMOV R7,#10HSETB TR1LOOP:MOV A,R0MOV SBUF,AWAIT:JNB TI,WAIT CLR TI INC R0 DJINZ R7,LOOP RET乙機(jī)接收程序:RSTART:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6HMOV PCON,#00HMOV DPTR,#0030H MOV R7,#10HSETB TR1;啟動定時器1LOOP:MOV SCON,#50H WAIT:JNB RI,WAITMOV A,SBUFMOVX DPTR,AINC R0DJNZ R7,LOOPRET甲機(jī)對應(yīng)的C語言發(fā)送程序如下:#include “reg51.h” /* 包含8051單片機(jī)的寄存器定義頭文件 */unsigned char data ADDRA 0X30; /* 在RAM區(qū)定義16個單元 */unsigned char num=0; /* 聲明計數(shù)變量 */unsigned char *p; /* 定義 p為
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 下水井維修合同范本
- 供應(yīng)合同范本長期
- 2025年吐魯番怎么考貨運從業(yè)資格證
- 住宅綠化養(yǎng)護(hù)合同范本
- 醫(yī)療健康服務(wù)合同范本
- 個體工商退股合同范本
- 助理編輯聘約合同范本
- 蘇州代建合同范本
- 公司改造施工合同范本
- 營地臨建合同范本
- 波普解析PPT質(zhì)譜教案資料
- YS/T 431-2000鋁及鋁合金彩色涂層板、帶材
- 球墨鑄鐵管安裝規(guī)范及圖示課件
- ERCP講義教學(xué)課件
- 《人類行為與社會環(huán)境》課件
- 霍亂病例分析課件
- 體檢報告單入職體檢模板
- 銀行基本技能(第2版)電子教案
- 高中英語單詞及短語匯總(北師大版)
- 北京市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- TTT培訓(xùn)教材(-55張)課件
評論
0/150
提交評論