




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第4章章 MCS-51單片機程序設計單片機程序設計4.1 MCS-51單片機匯編語言簡介單片機匯編語言簡介匯編語言的形式匯編語言的形式匯編語言格式匯編語言格式標號段標號段操作碼段操作碼段操作數段操作數段注釋段注釋段 ORG 0000HSTART: MOV A, #00H ; A 0 MOV R2, #0AH ;R2 10 MOV R1, #03H ;R1 3 LOOP: ADD A, R1 ;A A+R1 DJNZ R2,LOOP ;若若R2-1 0, 則則 LOOP NOP SJMP $ END(1)標號字段)標號字段 位于語句的開頭,指明指令操作碼地址位于語句的開頭,指明指令操作碼地址(
2、2)操作碼字段)操作碼字段 必選項不可缺,由匯編程序生成目標代碼必選項不可缺,由匯編程序生成目標代碼(3)操作數字段)操作數字段 操作數或操作數地址,通常有單、雙和無操作數或操作數地址,通常有單、雙和無操作數操作數3種形式,表示形式有種形式,表示形式有5種種1)二進制)二進制 十進制十進制 十六進制形式十六進制形式MOV A,#10001010BMOV A,#138 MOV A,#8AH 若若16進制進制A-F,則需前加,則需前加0,如,如MOV A,#0FFH2)工作寄存器和特殊功能寄存器)工作寄存器和特殊功能寄存器3)標號地址)標號地址 如如MOV A,M14)帶加減算符表達式)帶加減算符
3、表達式 如如MOV A,M1+15)采用)采用$符符 如如 SJMP $(4) 注釋字段注釋字段 任選項,以;開始,不產生機器碼任選項,以;開始,不產生機器碼匯編語言構成匯編語言構成1、指令性語句、指令性語句 :產生機器代碼:產生機器代碼 2、指示性語句即偽指令:不產生機器代碼、指示性語句即偽指令:不產生機器代碼幾個匯編概念幾個匯編概念匯編語言程序:用匯編語言編寫的、完成特定功能的指令序列。匯編語言程序:用匯編語言編寫的、完成特定功能的指令序列。匯編程序:能將匯編語言源程序轉換成機器語言目標程序的系統軟件。匯編程序:能將匯編語言源程序轉換成機器語言目標程序的系統軟件。匯編語言程序到機器語言程序
4、的轉換過程稱為匯編。有兩種匯編語言程序到機器語言程序的轉換過程稱為匯編。有兩種1 1、手工匯編:人工查指令表匯編。用于設計短小程序或調試程序的、手工匯編:人工查指令表匯編。用于設計短小程序或調試程序的場合。場合。2、機器匯編:用匯編程序進行匯編。、機器匯編:用匯編程序進行匯編。匯編的主要任務:匯編的主要任務:1)確定程序中每條匯編語言指令的指令機器碼。)確定程序中每條匯編語言指令的指令機器碼。2)確定每條指令在存儲器中的存放地址。)確定每條指令在存儲器中的存放地址。3)提供錯誤信息。)提供錯誤信息。4)提供目標執行文件()提供目標執行文件(*.OBJ/*.HEX)和列表文件(和列表文件(*.L
5、ST)。)。4.2 MCS-51單片機匯編語言常用偽指令單片機匯編語言常用偽指令偽指令是放在匯編語言源程序中用于指示匯編程序如何對源程序偽指令是放在匯編語言源程序中用于指示匯編程序如何對源程序進行匯編的指令,它不同于指令系統中的指令,進行匯編的指令,它不同于指令系統中的指令,指令系統中的指令指令系統中的指令在匯編程序匯編時能夠產生相應的指令代碼,而偽指令在匯編程序在匯編程序匯編時能夠產生相應的指令代碼,而偽指令在匯編程序匯編時不會產生代碼匯編時不會產生代碼,只是對匯編過程進行相應的控制和說明。,只是對匯編過程進行相應的控制和說明。常用的偽指令只有幾條。常用的偽指令只有幾條。1ORG偽指令偽指令
6、格式:格式:ORG 地址(十六進制表示)地址(十六進制表示)這條偽指令放于一段源程序或數據的前面,匯編時用于指明程序或數據這條偽指令放于一段源程序或數據的前面,匯編時用于指明程序或數據從程序存儲空間什么位置開始存放。從程序存儲空間什么位置開始存放。ORG偽指令后的地址是程序或數據的偽指令后的地址是程序或數據的起始地址。起始地址?!纠纠?-1】 ORG 1000HSTART:MOV A,#7FH 指明后面的程序從程序存儲器的指明后面的程序從程序存儲器的1000H單元開始存放。單元開始存放。2DB偽指令偽指令格式:格式:標號:標號: DB 項或項表項或項表 DB偽指令用于定義字節數據,可以定義一
7、偽指令用于定義字節數據,可以定義一個字節,也可定義多個字節,字義多個字節時,個字節,也可定義多個字節,字義多個字節時,兩兩之間用逗號間隔,定義的多個字節在存儲兩兩之間用逗號間隔,定義的多個字節在存儲器中是連續存放的。定義的字節可以是一般常器中是連續存放的。定義的字節可以是一般常數,也可以為字符,還可以是字符串,字符和數,也可以為字符,還可以是字符串,字符和字符串以引號括起來,字符數據在存儲器中以字符串以引號括起來,字符數據在存儲器中以ASCII碼形式存放。碼形式存放。在定義時前面可以帶標號,定義的標號在程在定義時前面可以帶標號,定義的標號在程序中是起始單元的地址。序中是起始單元的地址?!纠纠?/p>
8、4-2】 ORG 3000HTAB1: DB 12H,34HDB 5,A,abc匯編后,各個數據在存儲單元中的存放情況匯編后,各個數據在存儲單元中的存放情況如下:如下:12H34H35H41H61H62H63H3000H3001H3002H3003H3004H3005H3006H3DW偽指令偽指令格式:格式:標號:標號: DW 項或項表項或項表 這條指令與這條指令與DB相似,但用于定義字數據。相似,但用于定義字數據。項或項表指所定義的一個字在存儲器中占兩項或項表指所定義的一個字在存儲器中占兩個字節。匯編時,機器自動按高字節在前,個字節。匯編時,機器自動按高字節在前,低字節在后,即高字節存放在低
9、地址單元,低字節在后,即高字節存放在低地址單元,低字節存放在高地址單元。低字節存放在高地址單元。【例【例4-3】 ORG 3000HTAB2:DW 1234H,5678H匯編后,各個數據在存儲單元中的存放情匯編后,各個數據在存儲單元中的存放情況如下:況如下:12H34H56H78H3000H3001H3002H3003H4DS偽指令偽指令格式:格式:標號:標號: DS 數值表達式數值表達式該偽指令用在存儲器中保留一定數量該偽指令用在存儲器中保留一定數量的字節單元。保留存貯空間主要為以后的字節單元。保留存貯空間主要為以后存放數據。保留的字節單元數由表達式存放數據。保留的字節單元數由表達式的值決定
10、。的值決定?!纠纠?-4】 ORG 2000HTAB1: DB 12H,34HDS 4HDB 5匯編后,存儲單元中的分配情況如下:匯編后,存儲單元中的分配情況如下:12H34H-35H3000H3001H3002H3003H3004H3005H3006H5EQU偽指令偽指令格式:符號格式:符號 EQU 項項該偽指令的功能是將指令中的項的值賦予該偽指令的功能是將指令中的項的值賦予EQU前面的符號。項前面的符號。項可以是常數、地址標號或表達式。以后可以通過使用該符號使用可以是常數、地址標號或表達式。以后可以通過使用該符號使用相應的項。相應的項?!纠纠?-5】 TAB1 EQU 1000HTAB
11、2 EQU 2000H匯編后匯編后TAB1、TAB2分別等于分別等于1000H、2000H。程序后面使用。程序后面使用1000H、2000H的地方就可以用符號的地方就可以用符號TAB1、TAB2替換。替換。用用EQU偽指令對某標號賦值后,該符號的值在整個程序中不能偽指令對某標號賦值后,該符號的值在整個程序中不能再改變。再改變。6bit偽指令偽指令格式:符號格式:符號 bit 位地址位地址bit該偽指令用于給位地址賦予符號,經賦值后可用該符號代替該偽指令用于給位地址賦予符號,經賦值后可用該符號代替bit后后面的位地址。面的位地址。【例【例4-6】 PLG bit F0AI bitP1.0定義后,
12、在程序中位地址定義后,在程序中位地址F0、P1.0就可以通過就可以通過FLG和和AI來使用。來使用。7END偽指令偽指令格式:格式:END該指令放于程序最后位置,用于指明匯編語言源程序該指令放于程序最后位置,用于指明匯編語言源程序的結束位置,當匯編程序匯編到的結束位置,當匯編程序匯編到END偽指令時,匯編結偽指令時,匯編結束。束。END后面的指令,匯編程序都不予處理。一個源程后面的指令,匯編程序都不予處理。一個源程序只能有一個序只能有一個END命令,否則就有一部分指令不能被匯命令,否則就有一部分指令不能被匯編。編。4.3 MCS-51系列單片機匯編程序設計系列單片機匯編程序設計4.3.1 數據
13、傳送程序數據傳送程序例【例【4-7】把片內】把片內RAM 的的40H-4FH的的16字節的內容傳送到片外字節的內容傳送到片外RAM的的2000H單元位置處。單元位置處。 ORG 1000H MOV R0,#40H MOV DPTR,#2000H MOV R2,#16LOOP: MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R2,LOOP RET開始開始#40R0#2000HDPTR#16R2R0DPTRR0+1R0DPTR+1DPTRR2-1R2R2=0?結束結束否否是是4.3.2 運算程序運算程序【例【例4-8】多字節無符號數加法】多字節無符號數加法設從
14、片內設從片內RAM30H單元和單元和40H單元有兩個單元有兩個16字節數,把它們相加,字節數,把它們相加,結果放于結果放于30H單元開始的位置處(設結果不溢出)。單元開始的位置處(設結果不溢出)。處理過程處理過程: 用用R0作指針指向作指針指向30H單元,用單元,用R1作指針指向作指針指向40H單元,單元,用用R2為循環變量,初值為為循環變量,初值為16,在循環體中用,在循環體中用ADDC指令把指令把R0指針指指針指向的單元與向的單元與R1指針指向的單元相加,加得的結果放回指針指向的單元相加,加得的結果放回R0指向的單元,指向的單元,改變改變R0、R1指針指向下一個單元,循環指針指向下一個單元
15、,循環16次,在第一次循環前應先次,在第一次循環前應先將將CY清零。程序流程圖和程序如下:清零。程序流程圖和程序如下:程序:程序:ORG 1000HMOV R0,#30HMOV R1,#40HMOV R2,#16CLR CLOOP:MOV A,R0ADDC A,R1MOV R0,AINC R0INC R1DJNZ R2,LOOPEND開始開始#30R0#40HR1#16R6R0+R1R0R0+1R0R1+1R1R2-1R2R2=0?結束結束否否是是4.3.3 數據的拼拆和轉換數據的拼拆和轉換【例【例4-9】設在】設在30H和和31H單元中各有一個單元中各有一個8位數據位數據:(30H)=x7x
16、6xx4xx2x1x0 (3lH)=y7y6yy4yy2y1y0現在要從現在要從30H單元中取出低單元中取出低5位,并從位,并從31H單元中取出低單元中取出低3位完成拼裝,位完成拼裝,拼裝結果送拼裝結果送40H單元保存,并且規定單元保存,并且規定:(40H)=y2y1y0 x4xx2x1x0 利用邏輯指令利用邏輯指令ANL、ORL、RL等來完成數據的拼拆,處理過程:等來完成數據的拼拆,處理過程:將將30H單元的內容高單元的內容高3位屏蔽;位屏蔽;31H單元內容的低單元內容的低5位屏蔽,高低四位交位屏蔽,高低四位交換,左移一位;然后與換,左移一位;然后與30H單元的內容相或,拼裝后放到單元的內容
17、相或,拼裝后放到40H單元。單元。程序如下:程序如下:ORG 0100HMOV A,30H ANL A,#00011111BMOV 30H,AMOV A,31HANL A,#00000111B SWAP ARL A ORL A,40HMOV 40H,AEND【例【例4-11】一位十六進制數轉換成】一位十六進制數轉換成ASC1I碼。碼。一位十六進制數有十六個符號一位十六進制數有十六個符號09、A、B、C、D、E、F。其中,。其中,09的的ASCII碼為碼為30H39H,AF的的ASCII碼為碼為41H46H,轉換時,只要判斷,轉換時,只要判斷十六進制數是在十六進制數是在09之間還是在之間還是在A
18、F之間,如在之間,如在09之間,加之間,加30H,如在,如在AF之間,加之間,加37H,就可得到,就可得到ASCII碼。設十六進制數放于碼。設十六進制數放于R2中,轉換中,轉換的結果放于的結果放于R2中。中。程序如下:程序如下:ORG 0200HMOV A,R2 CLR CSUBB A,#0AH ;減去;減去0AH,判斷在,判斷在09之間,還是在之間,還是在AF之間之間MOV A,R2JC ADD30 ;如在;如在09之間,直接加之間,直接加30HADD A,#07H ;如在;如在AF之間,先加之間,先加07H,再加,再加30HADD30:ADD A,#30HMOV R2,AEND【例【例4-
19、12】一位十六進制數轉換】一位十六進制數轉換8段式數碼管顯示碼。段式數碼管顯示碼。一位十六進制數一位十六進制數09、A、B、C、D、E、F的的8段式數碼管的共陰極顯示段式數碼管的共陰極顯示碼為碼為3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、67H、77H、7CH、39H、5EH、79H、71H。由于數與顯示碼沒有規律,不能通過運算。由于數與顯示碼沒有規律,不能通過運算得到,只能通過查表方式得到。得到,只能通過查表方式得到。數放在數放在R2中,查得的顯示碼也放于中,查得的顯示碼也放于R2中,用中,用MOVC A,A+DPTR查表。查表。程序如下:程序如下:ORG 02
20、00HCONVERT:MOV DPTR,#TAB ;DPTR指向表首址指向表首址MOV A,R2 ;轉換的數放于;轉換的數放于MOVC A,A+DPTR ;查表指令轉換;查表指令轉換MOV R2,ARETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,67H,77H,7CH,39H,5EH,79H,71H ;顯示碼表;顯示碼表在這個例子中,編碼是一個字節,只通過一次查表指令就可實現轉換,如在這個例子中,編碼是一個字節,只通過一次查表指令就可實現轉換,如編碼是兩個字節,則需要用兩次查表指令才能查得編碼,第一次取得低位,編碼是兩個字節,則需要用兩次查表指令
21、才能查得編碼,第一次取得低位,第二次取得高位。第二次取得高位?!纠纠?-13】在一溫度控制系統中,溫度】在一溫度控制系統中,溫度0100C每一個溫度值都已經每一個溫度值都已經通過溫度傳感器測得一個兩字節的標準電壓值。現在通過溫度傳感器測得一個兩字節的標準電壓值?,F在R2中給出一個中給出一個0100C的溫度值,取得它的標準電壓值放于的溫度值,取得它的標準電壓值放于R3、R4中,低字節放在中,低字節放在R3中,高字節放在中,高字節放在R4中。中。 通過用通過用MOVC A,A+DPTR查表,兩個字節分兩次取得,由查表,兩個字節分兩次取得,由DPTR指向表首,由放于指向表首,由放于R2中的溫度值得
22、到所查的電壓值相對于表首中的溫度值得到所查的電壓值相對于表首位置的位移量放于累加器位置的位移量放于累加器A中,由于每一個電壓值為兩個字節,位移量中,由于每一個電壓值為兩個字節,位移量須用須用R2中的溫度值乘以中的溫度值乘以2得到。第一次取得低字節,第二次位移量加得到。第一次取得低字節,第二次位移量加1后查表取得高字節,分別放于后查表取得高字節,分別放于R3、R4中。中。程序如下:程序如下:ORG 0300HCHECK: MOV DPTR,#TAB ;指向表首;指向表首MOV A,R2 ;溫度值送;溫度值送ARL A ;乘;乘2得位移量得位移量MOV R1,A ;位移量暫存于;位移量暫存于R1中
23、中MOVC A,A+DPTRMOV R3,A ;第一次查得內容送;第一次查得內容送R3MOV A,R1 ;取出暫存的位移量送;取出暫存的位移量送AINC A ;指向高字節;指向高字節MOVC A,A+DPTRMOV R4,A ;第二次查得內容送;第二次查得內容送R4RETTAB: DW 0056H,0059H,0067H,0076H;電壓值表;電壓值表3.5.3 多分支轉移(散轉)程序多分支轉移(散轉)程序一用多分支轉移指令一用多分支轉移指令JMP A+DPTR實現的多分支轉移程序實現的多分支轉移程序【例【例4-14】現有】現有128路分支,分支號分別為路分支,分支號分別為0127,要求根據,
24、要求根據R2中的中的分支信息轉向各個分支的程序。即當分支信息轉向各個分支的程序。即當(R2)=0,轉向,轉向OPR0(R2)=1,轉向,轉向OPRl(R2)=127,轉向,轉向OPR127先用無條件轉移指令(先用無條件轉移指令(“AJMP”或或“LJMP”)按順序構造一個轉移)按順序構造一個轉移指令表,執行轉移指令表中的第指令表,執行轉移指令表中的第n條指令,就可以轉移到第條指令,就可以轉移到第n個分支,將個分支,將轉移指令表的首地址裝入轉移指令表的首地址裝入DPTR中,將中,將R2中的分支信息裝入累加器中的分支信息裝入累加器A形形成變址值。然后執行多分支轉移指令成變址值。然后執行多分支轉移指
25、令JMP A+DPTR實現轉移。實現轉移。程序清單如下:程序清單如下:MOV A,R2RL A ;分支信息乘;分支信息乘2MOV DPTR,#TAB ;DPTR指向轉移指令表首址指向轉移指令表首址JMP A+DPTR ;轉向形成的散轉地址;轉向形成的散轉地址TAB:AJMP OPR0 ;轉移指令表;轉移指令表AJMP OPR1AJMP OPR127轉移指令表中的轉移指令是由轉移指令表中的轉移指令是由LJMP指令構成指令構成 程序如下:程序如下:ORG 0200HMOV DPTR,#TAB ;DPTR指向轉移指令表首址指向轉移指令表首址MOV A,R2 ;分支信息放累加器;分支信息放累加器A中中
26、MOV B,#3MUL AB ;分支信息乘;分支信息乘3XCH A,BADD A,DPH ;高字節調整到;高字節調整到DPH中中MOV DPH,AXCH A,BJMP A+DPTR ;轉向形成的散轉地址;轉向形成的散轉地址TAB:LJMP OPR0 ;轉移指令表;轉移指令表LJMP OPR1LJMP OPR2LJMP OPR127轉移指令表中的轉移指令是由轉移指令表中的轉移指令是由AJMP指令構成,如果分支數大于指令構成,如果分支數大于128個,如分支數有個,如分支數有256個個 ORG 0200HMOV DPTR,#TAB ;DPTR指向轉移指令表首址指向轉移指令表首址MOV A,R2 ;分
27、支信息放累加器;分支信息放累加器A中中RL A ;分支信息乘;分支信息乘2JNC NEXTINC DPH ;高字節調整到;高字節調整到DPH中中NEXT: JMP A+DPTR ;轉向形成的散轉地址;轉向形成的散轉地址TAB: LJMP OPR0 ;轉移指令表;轉移指令表LJMP OPR1LJMP OPR2LJMP OPR127二采用二采用RET指令實現的多分支程序指令實現的多分支程序用用RET指令實現多分支程序的方法是:先把各個分支的目的地址按順序指令實現多分支程序的方法是:先把各個分支的目的地址按順序組織成一張地址表,在程序中用分支信息去查表,取得對應分支的目的組織成一張地址表,在程序中用
28、分支信息去查表,取得對應分支的目的地址,按先低字節,后高字節的順序壓入堆棧,然后執行地址,按先低字節,后高字節的順序壓入堆棧,然后執行RET指令,執指令,執行后則轉到對應的目的位置。行后則轉到對應的目的位置?!纠纠?-15】用】用RET指令實現根據指令實現根據R2中的分支信息轉到各個分支程序的中的分支信息轉到各個分支程序的多分支轉移程序。多分支轉移程序。設各分支的目的地址分別為設各分支的目的地址分別為addr00、addr01、addr02、addrFF。程序如下:程序如下:MOV DPTR,#TAB3 ;DPTR指向目的地址表指向目的地址表MOV A,R2 ;分支信息放累加器;分支信息放累
29、加器A中中RL A ;分支信息乘;分支信息乘2JNC NEXTINC DPH ;高字節調整到;高字節調整到DPH中中NEXT: MOV R3,A ;變址放于;變址放于R3中暫存中暫存MOVC A,A+DPTR ;取目的地址低;取目的地址低8位位PUSH ACC ;低;低8位地址入棧位地址入棧MOV A,R3 ;取出;取出R3中變址到累加器中變址到累加器AINC A ;加;加1得到目的地址高得到目的地址高8位單元的變址位單元的變址MOVC A,A+DPTR ;取轉向地址低;取轉向地址低8位位PUSH ACC ;高;高8位地址入棧位地址入棧RET ;轉向目的地址;轉向目的地址TAB3: DW ad
30、dr00 ;目的地址表;目的地址表DW addrD0lDW addrFF上述程序執行后,將根據上述程序執行后,將根據R2中的分支信息轉移到對應的分支程序。中的分支信息轉移到對應的分支程序。4.3.5 延時程序延時程序設系統時鐘頻率為設系統時鐘頻率為12MHZ,下面是延時,下面是延時10ms的程的程序序DEL10ms: MOV R6, #20 ;1個機器周期個機器周期 DEL1: MOV R7, #249 ;1個機器周期個機器周期 DJNZ R6, $ ;2個機器周期個機器周期 DJNZ R6, DEL1 ;2個機器周期個機器周期 RET ;2個機器周期個機器周期4.5 MCS-51單片機內部資
31、源及編程單片機內部資源及編程 MCS-51單片機的內部資源主要有并行單片機的內部資源主要有并行I/O口、定時器口、定時器/計數器、串行計數器、串行接口以及中斷系統,接口以及中斷系統,MCS-51單片機的大部分功能就是通過對這些資單片機的大部分功能就是通過對這些資源的利用來實現的。下面分別對其介紹,并用匯編語言和源的利用來實現的。下面分別對其介紹,并用匯編語言和C語言分別語言分別給出相應例子。給出相應例子。4.5.1 并行口應用與編程并行口應用與編程【例【例4-25】 利用單片機的利用單片機的P1口接口接8個發光二極管,個發光二極管,P0口接口接8個開個開關,編程實現,當開關動作時,對應的發光二
32、極管亮或滅。關,編程實現,當開關動作時,對應的發光二極管亮或滅。只須把只須把P0口的內容讀出后,通過口的內容讀出后,通過P1口輸出即可。口輸出即可。匯編程序:匯編程序:ORG 0100HMOV P0,#0FFHLOOP: MOV A,P0MOV P1,ASJMP LOOP4.5.2 定時定時/計數器的初始化編程及應用計數器的初始化編程及應用一定時一定時/計數器的編程計數器的編程MCS-51單片機定時單片機定時/計數器初始化過程如下:計數器初始化過程如下:1根據要求選擇方式,確定方式控制字,寫入方式控制寄存器根據要求選擇方式,確定方式控制字,寫入方式控制寄存器TMOD。2根據要求計算定時根據要求
33、計算定時/計數器的計數值,再由計數值求得初值,寫計數器的計數值,再由計數值求得初值,寫入初值寄存器。入初值寄存器。3根據需要開放定時根據需要開放定時/計數器中斷(后面須編寫中斷服務程序)。計數器中斷(后面須編寫中斷服務程序)。4設置定時設置定時/計數器控制寄存器計數器控制寄存器TCON的值,啟動定時的值,啟動定時/計數器開始計數器開始工作。工作。5等待定時等待定時/計數時間到,到則執行中斷服務程序;如用查詢處理計數時間到,到則執行中斷服務程序;如用查詢處理則編寫查詢程序判斷溢出標志,溢出標志等于則編寫查詢程序判斷溢出標志,溢出標志等于1,則進行相應處理。,則進行相應處理。二定時二定時/計數器的
34、應用計數器的應用 通常利用定時通常利用定時/計數器來產生周期性的波形。利用定時計數器來產生周期性的波形。利用定時/計數器產生計數器產生周期性波形的基本思想是:利用定時周期性波形的基本思想是:利用定時/計數器產生周期性的定時,定時計數器產生周期性的定時,定時時間到則對輸出端進行相應的處理。如產生周期性的方波只須定時時時間到則對輸出端進行相應的處理。如產生周期性的方波只須定時時間到對輸出端取反一次即可。間到對輸出端取反一次即可。【例【例4-26】 設系統時鐘頻率為設系統時鐘頻率為12MHZ,用定時,用定時/計數器計數器T0編程實編程實現從現從P1.0輸出周期為輸出周期為500s的方波。的方波。分析
35、:從分析:從P1.0輸出周期為輸出周期為500s的方波,只須的方波,只須P1.0每每250s取反取反一次則可。當系統時鐘為一次則可。當系統時鐘為12MHZ,定時,定時/計數器計數器T0工作于方式工作于方式2時,時,最大的定時時間為最大的定時時間為256s,滿足,滿足250s的定時要求,方式控制字應設的定時要求,方式控制字應設定為定為00000010B(02H)。系統時鐘為)。系統時鐘為12MHZ,定時,定時250s,計數,計數值值N為為250,初值,初值X=256-250=6,則,則TH0=TL0=06H。匯編程序:匯編程序:ORG 0000HLJMP MAINORG 000BH ;中斷處理;
36、中斷處理程序程序CPL P1.0RETIORG 0100H ;主程序;主程序MAIN:MOV TMOD,#02HMOV TH0,#06HMOV TL0,#06HSETB EASETB ET0SETB TR0SJMP $ENDC語言程序:語言程序:# include /包含特包含特殊功能寄存器庫殊功能寄存器庫sbit P1_0=P10;void main()TMOD=0 x02;TH0=0 x06;TL0=0 x06;EA=1;ET0=1;TR0=1;while(1);void time0_int(void) interrupt 1 /中斷服務程序中斷服務程序 P1_0=!P1_0;(1)采用中
37、斷處理方式的程序:采用中斷處理方式的程序:(2)采用查詢方式處理的程序)采用查詢方式處理的程序匯編程序:匯編程序:ORG 0000HLJMP MAINORG 0100H ;主程序;主程序MAIN:MOV TMOD,#02HMOV TH0,#06HMOV TL0,#06HSETB TR0LOOP:JBC TF0,NEXT ;查詢計數溢出;查詢計數溢出SJMP LOOPNEXT:CPL P1.0SJMP LOOPSJMP $ENDC語言程序:語言程序:# include /包含包含特殊功能寄存器庫特殊功能寄存器庫sbit P1_0=P10;void main()char i;TMOD=0 x02;
38、TH0=0 x06;TL0=0 x06;TR0=1;for(;) if (TF0) TF0=0;P1_0=! P1_0; /查詢計數溢出查詢計數溢出如果定時時間大于如果定時時間大于65536s,這時用一個定時,這時用一個定時/計數器直接處理不能實計數器直接處理不能實現,這時可用兩個定時現,這時可用兩個定時/計數器共同處理或一個定時計數器共同處理或一個定時/計數器配合軟件計計數器配合軟件計數方式處理。數方式處理。 【例【例4-27】設系統時鐘頻率為】設系統時鐘頻率為12MHZ,編程實現從,編程實現從P1.1輸出周期輸出周期為為1s的方波。的方波。 根據例根據例5-2的處理過程,這時應產生的處理過
39、程,這時應產生500ms的周期性的定時,的周期性的定時,定時到則對定時到則對P1.1取反就可實現。由于定時時間較長,一個定時取反就可實現。由于定時時間較長,一個定時/計數計數器不能直接實現,可用定時器不能直接實現,可用定時/計數器計數器T0產生周期性為產生周期性為10ms的定時,然的定時,然后用一個寄存器后用一個寄存器R2對對10ms計數計數50次或用定時次或用定時/計數器計數器T1對對10ms計數計數50次實現。系統時鐘為次實現。系統時鐘為12MHZ,定時,定時/計數器計數器T0定時定時10ms,計數值,計數值N為為10000,只能選方式,只能選方式1,方式控制字為,方式控制字為000000
40、01B(01H),初值),初值X:X=65536-10000=55536=1101100011110000B則則TH0=11011000B=D8H,TL0=11110000B=F0H。(1)用寄存器)用寄存器R2作計數器軟件計數,中斷處理方式。作計數器軟件計數,中斷處理方式。匯編程序:匯編程序:ORG 0000HLJMP MAINORG 000BHLJMP INTT0ORG 0100HMAIN:MOV TMOD,#01HMOV TH0,#0D8HMOV TL0,#0F0HMOV R2,#00HSETB EASETB ET0SETB TR0SJMP $INTT0:MOV TH0,#0D8HMOV
41、 TL0,#0F0HINC R2CJNE R2,#32H,NEXTCPL P1.1MOV R2,#00HNEXT:RETIENDC語言程序:語言程序:# include /包含特殊功能寄存器庫包含特殊功能寄存器庫sbit P1_1=P11;char i;void main()TMOD=0 x01;TH0=0 xD8;TL0=0 xf0;EA=1;ET0=1;i=0;TR0=1;while(1);void time0_int(void) interrupt 1 /中斷服務程序中斷服務程序TH0=0 xD8;TL0=0 xf0;i+;if (i= =50) P1_1=! P1_1;i=0;(2)
42、用定時用定時/計數器計數器T1計數實現,定時計數實現,定時/計數器計數器T1工作于計數方式時,工作于計數方式時,計數脈沖通過計數脈沖通過T1(P3.5)輸入,設定時)輸入,設定時/計數器計數器T0定時時間到對定時時間到對T1(P3.5)取反一次,則)取反一次,則T1(P3.5)每)每20ms產生一個計數脈沖,那么產生一個計數脈沖,那么定時定時500ms只須計數只須計數25次,設定時次,設定時/計數器計數器T1工作于方式工作于方式2,初值,初值X=256-25=231= 11100111B=E7H,TH1=TL1=E7H。因為定時。因為定時/計數計數器器T0工作于方式工作于方式1,定時,則這時方
43、式控制字為,定時,則這時方式控制字為01100001B(61H)。)。定時定時/計數器計數器T0和和T1都采用中斷方式工作。都采用中斷方式工作。匯編程序如下:ORG 0000HLJMP MAINORG 000BHMOV TH0,#0D8HMOV TL0,#0F0HCPL P3.5RETIORG 001BHCPL P1.1RETIORG 0100HMAIN:MOV TMOD,#61HMOV TH0,#0D8HMOV TL0,#0F0HMOV R2,#00HMOV TH1,#0E7HMOV TL1,#0E7HSETB EASETB ET0SETB ET1SETB TR0SETB TR1SJMP $
44、ENDC語言程序如下:語言程序如下:# include /包含特殊功能寄存器庫包含特殊功能寄存器庫sbit P1_1=P11;sbit P3_5=P35;void main()TMOD=0 x61;TH0=0 xD8;TL0=0 xf0;TH1=0 xE7; TL1=0 xE7;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1);void time0_int(void) interrupt 1 /T0中斷服務程序中斷服務程序 TH0=0 xD8;TL0=0 xf0;P3_5=!P3_5;void time1_int(void) interrupt 3 /T1中斷服務程序中斷服務程序 P1_1=! P1_1;4.5.4 MCS-51中斷系統的應用中斷系統的應用【例【例4-32】某工業監控系統,具有溫度、壓力、】某工業監控系統,具有溫度、壓力、PH值等多路監控功能,值等多路監控功能,中斷源的連接如圖中斷源的連接如圖5.26所示。對于所示。對于PH值,在小于值,在小于7時向時向CPU申請中斷,申請中斷,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣告公司工作計劃范文(17篇)
- 人教版音樂七年級上冊教學設計
- 《圖表選擇及制作》教學設計
- 2025業務員職位工作感想總結(16篇)
- 滬科版七年級數學下冊《第七章一元一次不等式與不等式組》單元測試卷(帶答案)
- 個人社會實踐活動總結范文(20篇)
- 普工辭職報告范文(35篇)
- 《課件制作與教學應用》
- 小學班長競選稿怎么寫(16篇)
- 員工大會發言稿(18篇)
- 貴州國企招聘2025貴州路橋集團有限公司招聘35人筆試參考題庫附帶答案詳解
- 施工安全的教育培訓記錄表
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蝕工程施工及驗收規范
- 農村常用法律法規知識講座課件(村干部培訓)
- 維修電工高級技師論文(6篇推薦范文)
- 六年級下冊數學課件--總復習《圖形的運動》北師大版.--共20張PPT
- 6SE70系列變頻器講解及Drive-Monitor調試(工程師培訓)課件
- 年產5萬噸甲醇氧化制甲醛工藝及反應器設計
- 國家職業技能標準 (2021年版) 鑒定估價師(機動車鑒定評估師)
- 公司組織架構圖56832
- USB 數據線 SOP
評論
0/150
提交評論