




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章
80C51單片機指令系統(tǒng)與程序設計本章重點:尋址方式指令系統(tǒng)匯編語言程序設計本章難點:尋址方式子程序的調用及堆棧的使用10.1概述
8051匯編語言與其他匯編語言非常類似。匯編語言有執(zhí)行效率高、速度快、與硬件結合緊密等特點。10.2指令格式一條指令通常由兩部分組成,即操作碼和操作數(shù)。指令的助記符,是一種幫助計算機程序員記憶的符號,匯編指令是由標號、指令助記符、指令操作數(shù)、注釋4部分組成,格式如下:標號:指令助記符指令操作數(shù);注釋例如,A1:MOVA,#08H10.3尋址方式指令執(zhí)行中所需的操作數(shù)可以在內存、寄存器、I/O端口中,尋址的“址”是指操作數(shù)所在的單元地址。訪問這些操作數(shù)的方法稱為尋址方式。表7種尋址方式舉例
對80C51指令系統(tǒng)的變址尋址和相對尋址方式作如下說明:變址尋址方式只能對程序存儲器進行尋址。變址尋址的指令只有三條:MOVCA,@A十DPIRMOVCA,@A十PCJMP@A十DPTR其中前兩條是程序存儲器讀指令,后一條是無條件轉移指令。相對尋址:相對尋址方式是為實現(xiàn)程序的相對轉移而設計的,為相對轉移指令所采用。轉移的目的地址用如下公式表示:目的地址=轉移指令地址+轉移指令字節(jié)數(shù)十rel如:SJMPrel
10.4指令系統(tǒng)80C51單片機的指令系統(tǒng)由111條指令組成,分為五大類:數(shù)據(jù)傳送類指令算術運算類指令邏輯運算及移位類指令控制轉移類指令位操作類指令指令中使用的一些符號意義:Rn:當前寄存器組的8個通用寄存器Ro—E7,所以n=0~7。Ri:可用作間接尋址的寄存器,只能是R0、R1兩個寄存器,所以i=0,1。direct:內部RAM的8位地址。即可以是內部RAM的低128個單元地址,也可以是專用寄存器的單元地址或符號。因此在指令中direct表示直接尋址方式。#data:8位立即數(shù)。#datal6:16位立即數(shù)。addrl6:16位目的地址.只限于在LCALL和LJMP指令中使用。addr11:11位目的地址,只限于在ACALL和AJMP指令中使用。rel:相對轉移指令中的偏移量,為8位帶符號補碼數(shù)。DPTR:數(shù)據(jù)指針。Bit:內部RAM(包括專用寄存器)中的直接尋址位。A:累加器。B:寄存器。C:進位標志位,它是布爾處理機的累加器,也稱之為累加位。@:間址寄存器的前綴標志。/:加在位地址的前面。表示對該位狀態(tài)取反。(x):某寄存器或某單元的內容。((×)):由×間接尋址的單元中的內容?!?箭頭左邊的內容被箭頭右邊的內容所取代。10.4.1數(shù)據(jù)傳送指令表數(shù)據(jù)傳送類指令
對數(shù)據(jù)傳送類指令功能做以下5點補充:1.內部RAM數(shù)據(jù)傳送指令把源操作數(shù)傳送到目的操作數(shù)單元,而不改變源操作數(shù)。2.外部RAM數(shù)據(jù)傳送指令片外數(shù)據(jù)存儲器與累加器A之間的傳送指令,片外數(shù)據(jù)存儲單元可用@DPTR間接尋址或@Ri
間接尋址方式表示。3.程序存儲器傳送指令將程序存儲器中的數(shù)據(jù)采用變址尋址方式,傳送到累加器A中。4.數(shù)據(jù)交換指令實現(xiàn)累加器與片內數(shù)據(jù)寄存器、存儲單元之間的數(shù)據(jù)交換。5.堆棧操作指令進棧指令PUSH:將內部RAM低128單元或專用寄存器內容送棧頂單元。出棧指令POP:將棧頂單元內容送內部RAM低128單元或專用寄存器。10.4.2算術運算指令表算術運算類指令
對算術運算指令功能作以下5點補充:
1.加法指令:兩個帶符號數(shù)相加,還有溢出的問題。如運算結果使溢出標志OV置1,則表示有溢出。
2.減法指令減法運算只有帶借位減法指令,而沒有不帶借位的減法指令。若進行不帶借位的減法運算.只需用CLRC指令先把進位標志位清0即可。
3.加l、減l指令這類指令可以對累加器、寄存器、內部RAM單元以及數(shù)據(jù)指針進行加1或減1操作。加l、減l指令的操作不影響程序狀態(tài)字PSW的狀態(tài)。4.乘除法指令(1)乘法指令MULAB
這條指令把累加器A和寄存器B中的兩個無符號8位數(shù)相乘,所得16位乘積的低位字節(jié)放在A中,高位字節(jié)放在B中。
(2)除法指令DIVAB
這條指令進行兩個8位無符號數(shù)的除法運算,其中被除數(shù)置于累加器A中,除數(shù)置于寄存器B中。指令執(zhí)行后,商存于A中,余數(shù)存于B中。5.十進制調整指令DAA
本指令僅對累加器A的內容進行修正。調整原理及方法參見3.3.2節(jié)。10.4.3邏輯運算指令表邏輯運算指令
對邏輯運算指令功能做以下兩點補充:與、或、異或、清0指令和取反指令:這些指令的操作都不影響程序狀態(tài)寄存器PSW的值。
2.循環(huán)移位指令:RL、RR指令是A的內容循環(huán)左、右移1位,執(zhí)行后不影響PSW位。RLC、RRC指令是將A的內容帶進位位CY的左、右循環(huán)移位,執(zhí)行后影響CY位。10.4.4控制轉移類指令表控制轉移類指令對控制轉移指令功能做以下5點補充:
1.無條件轉移指令:長轉移指令,允許轉移的目標地址在64KB空間的范圍內。絕對轉移指令,指令中包含有11位的轉移地址,即轉移的目標地址是在下一條指令地址開始的2KB范圍內。無條件相對轉移指令,又稱短轉移指令。
2.變址尋址轉移指令:該指令也是無條件間接轉移指令。轉移地址由數(shù)據(jù)指針DPTR和A的內容之和形成。相加之后不修改A及DPTR的內容,而是把相加的結果直接送PC寄存器。指令執(zhí)行后不影響標志位。3.子程序調用及返回指令:長調用指令,允許子程序放在64KB空間的任何地方。絕對調用指令,子程序允許調用范圍在2KB的空間。4.條件轉移指令:這類指令先測試某一條件是否滿足,當滿足條件時,程序轉移到當前PC值加偏移量的地址去執(zhí)行指令,否則繼續(xù)執(zhí)行下一條指令。使用CJNE指令不但可以進行程序轉移,而且還能進行數(shù)值比較。5.空操作指令空操作指令不進行任何操作,只消耗一個機器周期的時間。NOP指令常用于程序的等待或時間延遲10.4.5位操作指令表位操作指令注:/bit將直接尋址位取反后再進行指定操作。位地址可以是片內RAM20H一2FH單元中連續(xù)的128位和專用寄存器中的可尋址位。后者分布在80H~FFH范圍內,但不是連續(xù)的;從80H開始每8個單元有一個可以位尋址的專用寄存器。1.位傳送指令這類指令主要用于直接尋址位與位累加器之間的數(shù)據(jù)傳送。2.位復位取反置位指令該類指令的功能是清0、取反、置進位標志位和直接尋址位,指令執(zhí)行后不影響其他標志。3.位邏輯運算指令這類指令的功能是把進位C的內容與直接尋址位進行邏輯與、邏輯或的操作,操作的結果送至C中。4.判位轉移指令
JC、JNC指令:判進位位c是否為“1”或為“0”轉,當條件滿足時轉移,否則繼續(xù)執(zhí)行程序。
JB、JNB、JBC指令:判直接尋址位是否為“1”或“0”轉,條件滿足時轉移,否則繼續(xù)執(zhí)行程序。JBC指令當條件滿足時轉移,指令執(zhí)行后同時還應將該尋址位清零。10.4.6偽指令單片機中部分偽指令與微機原理中偽指令功能相似,這里只做簡單介紹。詳細使用方法參見4.3節(jié)。1.匯編起始指令ORG指令格式:ORGnn作用:將ORGnn
后的程序機器碼或數(shù)據(jù)存放以nn
為首地址的存儲單元中。2.匯編結束指令END指令格式:END或EDA標號作用:遇到偽指令END,不管其后面是否還有其他指令都將停止編譯。3.等值指令EQU指令格式:標識符EQU項或數(shù)作用:該指令的功能是把項或數(shù)的值賦給標識符。4.定義字節(jié)指令DB格式:標號:DB項或項表該偽指令的功能是用于定義字節(jié),將項或項表中的一個字節(jié)或字串數(shù)據(jù)存人標號開始的連續(xù)單元中。5.定義字指令DW格式:標號:DW項或項表該指令是用于定義字,使用方法與DB類同。6.定義存儲區(qū)指令DS格式:標號:DS數(shù)字該指令用于保留一定數(shù)目的空白存儲單元。7.位定義指令BIT格式:標識符BIT位地址表達式該指令是將位地址賦給指定的標識符。例句:CMBITP1.0將P1.0的位地址賦給標識符CM,在程序中可以用CM代替P1.0。8.定義數(shù)據(jù)存儲器地址偽指令:DATA格式:標識符:DATA數(shù)據(jù)存儲器地址其功能是將數(shù)據(jù)存儲器地址賦給指定標識符。例句:BUFF1:DATA30HBUFF2:DATA31HMOVA,BUFF1;A←(30H)ADDA,BUFF2;A←A+(31H)10.5匯編語言程序設計10.5.1匯編語言程序的基本結構
1.順序程序順序程序是按程序指令序列依次執(zhí)行的程序,是一種最簡單、最基本的程序結構。它的特點是依次執(zhí)行程序中的每一條指令,直到最后一條指令。它是構成復雜程序的基礎。例10-1.將30H中存放的壓縮BCD數(shù)轉換成二進制數(shù)存放在累加器A中。轉換方法為加數(shù)的高4位乘以10再加上低4位。源程序如下:START:MOVA,30H;A←(30H)ANLA,#0F0H;屏蔽低4位SWAPA;高低4位互換MOVB,#10;B←10MULAB;BCD數(shù)的高4位乘以10MOVB,A;結果暫存BMOVA,30H;A←(30H)ANLA,#0FH;屏蔽高4位ADDA,B;得到結果
END2.分支程序在程序的執(zhí)行過程中,執(zhí)行條件轉移指令后程序發(fā)生分支,不一定再按指令序列執(zhí)行。當條件成立時跳轉到條件轉移指令指定標號的程序處執(zhí)行,否則順序執(zhí)行,這類程序稱為分支程序。
(1)兩路分支程序設計舉例例10-2.設MH、ML、NH、NL。分別表示兩個16位無符號數(shù)M、N的高8位和低8位。比較它們的大小,將最大值存人MAX1、MAX2單元。解:比較16位無符號數(shù)的大小,沒有直接的指令完成,可以通過兩次8位數(shù)相減,檢測是否有借位,來判斷大小。源程序如下;
ORG2000HSTART:CLRCMOVA,30HSUBBA,31H;低字節(jié)相減
MOVA,32HSUBBA,33H;高字節(jié)相減
JCNEXT1;P<Q,轉NEXT1MOV40H,30H;P≥Q,存放輸出值
MOV41H,32HSJMPNEXT2NEXT1:MOV40H,31HMOV41H,33HNEXT2:SJMP$END(2)三路分支程序設計舉例例10-3.假設累加器A中存放一有符號數(shù)x,求解函數(shù)。
結果存入寄存器則中。源程序如下:START:CJNEA,#00H,NEXT1;累加器A中內容與0比較
MOVR0,#00H;(A)=0,則R0←0LJMPEXITNEXT1:JBACC.7,NEXT2MOVR0,#01H;(A)>0,則R0←1LJMPEXITNEXT2:MOVR0,#0FFH;(A)<0,則R0←-1EXIT:END本程序中使用CJNE指令實現(xiàn)三路分支,同時還兩次使用LJMP指令,其目的是避免數(shù)據(jù)經(jīng)過一次處理后又轉入下一個分支中。(3)多路分支程序設計舉例根據(jù)某變量的內容,分別轉入處理程序0、處理程序1…處理程序n。這類分支程序稱為多路分支程序,又稱為散轉程序。它主要通過散轉指令JMP@A+DPTR實現(xiàn)多路分支。例10-4.根據(jù)R0的內容,轉入不同的處理程序。
R0=0,轉PR0;
R0=1,轉PR1;......
R0=n,轉PRn;源程序如下:
ORG1000HSTART:MOVDPTR,#TAB;表的首地址送DPTR
MOVA,R0CLRCRLCA;R1*2JNCNEXT;R1*2無進位則轉NEXTINCDPH;R1*2的進位加入DPHNEXT:MOVR1,A;保存偏移量
MOVCA,@A+DPTR;取出分支地址的第一個字節(jié)
XCHA,R1INCAMOVCA,@A+DPTR;取出分支地址的第二個字節(jié)
MOVDPH,R1MOVDPL,A;分支地址送DPTRCLRAJMP@A+DPTRTAB:DWPR0,PR1,……PRn3.循環(huán)程序在程序設計中,常常要求某一段程序重復執(zhí)行多次,這時可以采用循環(huán)結構程序。例10-5.設有5個單字節(jié)數(shù),存放在片內RAM從30H開始的單元,求累加和,存放在40H、41H單元。
ORG2000HSTART:MOVR0,#30H;設置地址指針初值
MOVR7,#5MOV40H,#00HMOV41H,#00H;結果單元清零
LOOP:MOVA,@R0ADDA,41H;累加
MOV41H,AJNCNEXT;無進位,轉NEXTINC40H;有進位,高位加1NEXT:INCR0;指向下一個字節(jié)
DJNZR7,LOOPSJMP$END例10-6.編程實現(xiàn)100ms的延時程序。編制延時程序時.需要了解80C51指令的執(zhí)行時間。在使用12MHz晶振時,一個機器周期為1us,執(zhí)行一條DJNZ指令時間為2us。要求時間不長的延時子程序可以使用雙重循環(huán)結構。通用的延時子程序清單如下:DEL:MOVR7,#200;1usDEL1:MOVR6,#250;1usDJNZR6,$;2us,共(2*250)usDJNZR7,DEL1;2us,共(2+3*200+2*200*250)usRET4.子程序設計實現(xiàn)參數(shù)傳遞時,可以采用多種方法,常用的方法有以下三種:用工作寄存器或累加器傳遞參數(shù):其優(yōu)點是程序簡單,運算速度快。缺點是寄存器數(shù)量有限,傳遞參數(shù)的數(shù)量較少。用指針寄存器傳遞參數(shù):可以通過使用指針寄存器指示數(shù)據(jù)的位置來實現(xiàn)參數(shù)傳遞。用堆棧傳遞參數(shù):使用堆棧進行參數(shù)傳遞時,主程序使用PUSH指令把參數(shù)壓入堆棧中,子程序可以通過堆棧指針來間接訪問堆棧中的參數(shù),并且可以把出口參數(shù)送回堆棧中。例10-7.內部數(shù)據(jù)存儲器中50H、5lH兩單元和60H、6lH兩單元分別存放兩個4位壓縮BCD數(shù),用指針寄存器傳遞參數(shù)的方法實現(xiàn)將這兩個4位BCD數(shù)相加且存放在50H、51H單元中。使用R0和R1作為指針寄存器進行入口參數(shù)傳遞。源程序如下:;主程序START:MOVR1,#50HMOVR0,#60H;R0,R1分別指向兩個入口參數(shù)
CLRCACALLADDC1;調用子程序
MOV50H,A;存低位結果
INCR0INCR1;R0,R1指向高位數(shù)據(jù)
ACALLADDC1;調用子程序
MOV51H,A;存高位結果
……;子程序:ADDC1:MOVA,@R0;取入口參數(shù)
ADDCA,@R1DAARET10.5.2程序設計舉例
1.輸入/輸出類程序(I/O端口程序)舉例
例10-8.編制一個循環(huán)閃爍燈的程序。有8個發(fā)光二極管,每次其中某個燈閃爍點亮l0次后,轉移到下一個閃爍10次,循環(huán)不止。LED閃爍線路
當P1口輸出高電平時,LED燈亮,否則不亮。其程序如下:
MOVA,#11111110B;LED0先點亮SHIFT:LCALLFLASH;調閃爍10次子程序
RLA;左移一位
SJMPSHIFT;使下一個LED閃爍FLASH:MOVR2,#10;閃爍10次FLASH1:MOVP1,A;點亮
LCALLDELAY;延時
MOVP1,#0FFH;熄滅
LCALLDELAY;延時
DJNZR2,FLASH1;未到10次,繼續(xù)閃爍
RET2、定時器綜合應用
(1)、初始化步驟填寫工作方式控制字送TMOD寄存器。設置定時或計數(shù)器的初值。數(shù)初值必須分兩次寫入對應的計數(shù)器。對IE位賦值,開放中斷時,對應位置1;采用程序查詢方式,IE位應清0。使用SETBTRi啟動定時器(2)、計數(shù)初值的計算若設最大計數(shù)值為M.各操作模式下的M值為:模式0:M=213
=8192模式1:M=216=65536模式2:M=28=256模式3:M=256,定時器T0分成2個獨立的8位計數(shù)器,所以TH0、TL0的M均為256。計數(shù)工作方式計數(shù)工作方式時,計數(shù)脈沖由外部引入,是對外部脈沖進行計數(shù),因此計數(shù)值根據(jù)要求確定。其計數(shù)初值:X=M—計數(shù)值例如:某工序要求對外部脈沖信號計100次,x=M一100
定時工作方式定時工作方式時、因為計數(shù)脈沖由內部供給,是對機器周期進行計數(shù).故計數(shù)脈沖頻率為、計數(shù)周期,定時工作方式的計數(shù)初值X=M一計數(shù)值=式中:為振蕩器的振蕩頻率,為要求定時的時間。
例如:80C51的主頻為6MHz,要求產(chǎn)生lms的定時,試計算計數(shù)初值x。若設置定時器工作于操作模式1,定時1ms,則計數(shù)初值x等于:例10-9利用T1實現(xiàn)定時,使P1.0引腳輸出周期為50ms的方波,設晶振頻率為12MHz。解:為實現(xiàn)要求的方波,只要每隔25ms將P1.0求反—次即可。晶振為12MHz時,機器周期為1μs,因此25ms定時時間對應的機器周期數(shù)N=25000/1=25000,可見T1必須工作在方式1,其計數(shù)初值X=65536-25000=40536=9E58H。源程序如下:MOVTMOD,#10H;T1作為定時器,工作于方式1MOVTH1,#9EH;設置T1計數(shù)初值
MOVTL1,#58HSETBTR1;啟動T1NEXT:JNBTF1,$;等待T1溢出
CLRTF1;清除T1溢出標志MOVTH1,#9EH;重裝T1計數(shù)初值
MOVTL1,#58HCPLP1.0;P1.0輸出取反
SJMPNEXT;等待T1再次溢出例10-10利用T0實現(xiàn)定時,采用工作方式2,使P1.0引腳輸出1KHz的方波,設晶振頻率為6MHz。解:要使P1.0輸出1KHz的方波(周期為1ms),只要每隔500μs將P1.0求反—次即可。6MHz晶振頻率對應的機器周期為2μs,則500μs定時時間對應的機器周期數(shù)N=500/2=250,因此方式2下的計數(shù)初值X=256-250=6。源程序如下:
MOVTMOD,#02H;T0作為定時器,工作于方式2MOVTH0,#06H;設置循環(huán)計數(shù)初值
MOVTL0,#06HSETBTR0;啟動T0NEXT:JNBTF0,$;等待T0溢出
CLRTF0;清除T0溢出標志
CPLP1.0;P1.0輸出取反
SJMPNEXT;等待T0再次溢出例10-11測量引腳上出現(xiàn)的正脈沖寬度,并將結果存放在40H和41H單元中?!苯猓簩0設置為方式1的定時方式,且GATE=1,計數(shù)器初值為0,將TR1置1。當引腳上為高電平時,計數(shù)器對機器周期加1計數(shù)。反之,停止計數(shù)。程序如下:
ORG1000HMOVTMOD,#09H;置T0為定時器方式1MOVTH0,#00H;置計數(shù)初值
MOVTL0,#00HMOVR0,#40H;置地址指針初值
JBP3.2,$;等待變低
SETBTR0JNBP3.2,$;啟動定時
JBP3.2$CLRTR0;停止定時
MOV@R0,TL0;存結果
INCR0MOV@R0,TH0SJMP$END3、中斷系統(tǒng)綜合應用從軟件角度看,中斷控制實質上是對4個持殊功能寄存器TCON、SCON、IE和IP行進管理和控制。在80C51單片機中,管理和控制的項目有:(1)CPU開中斷與關中斷;(2)某個中斷源中斷請求的允許或屏蔽;(3)各中斷源優(yōu)先級別的設定;(4)外部中斷請求的觸發(fā)方式。例10-12.用定時器1定時,由P1.0輸出周期為2分鐘的方波。己知=12MHz。方法一:解:用定時器T1定時10ms;加軟件計數(shù)實現(xiàn)定時一分鐘。40H單元作ms的計數(shù)單元:1s/l0ms=100次4lH單元作s的計數(shù)單元:1min/ls=60次4FH位單元作為1min是否到的標志位T1的計數(shù)初值:X==55536=D8F0H主程序:
ORG0000HAJMP2000HORG001BHAJMP2100H
…
…ORG2000HMOVTMOD,#10H;T1定時,工作方式1MOVTH1,#0D8H;T1計數(shù)初值
MOVTL1,#0F0HMOVIE,#88H;CPU,T1開中斷
SETBTR1;啟動T1MOV40H,#100;ms計數(shù)初值
MOV41H,#60;s計數(shù)初值
CLR4FHTT:JNB4FH,TT;等待1min到
CLR4FH;清分標志位
CPLP1.0AJMPTT;反復循環(huán)T1中斷服務程序(由001BH轉來)
ORG2100HMOVTH1,#0D8H;T1重賦初值
MOVTL1,#0F0HDJNZ40H,TT1;判1S到否?
MOV40H,#100;到了重賦計數(shù)值
DJNZ41H,TT1;判1min到否?MOV41H,#60;到了重賦計數(shù)值
SETB4FH;置1min到標志位TT1:RET1;中斷返回方法二:解:采用兩個定時器合用實現(xiàn)長時間的定時,兩個定時器中一個定時,另一個作為計數(shù),定時的時間到可以輸出一個控制信號作為另一個定時器的計數(shù)脈沖。具體方法如下:設T0定時60ms,模式1;T1計數(shù)。當T060ms到控制P1.2輸出方波作為T1的計數(shù)脈沖(P1.2的輸出與T1(P3.5)連接起來);Tl計滿溢出控制P1.0輸出脈寬為2分鐘的方波,T0的計數(shù)初值X0=5536=15A0HT1的計數(shù)初值X1==64036=FE0CH主程序如下:
ORG0000HSJMPSTARTORG000BHAJMPINTR0;T0中斷服務程序入口
ORG001BHAJMPINTR1;T1中斷服務程序入口
START:MOVTMOD,#51H;T0定時模式1,T1計數(shù)模式1MOVTH0,#15H;TO計數(shù)初值
MOVTL0,#0A0HMOVTH1,#0FEH;T1計數(shù)初值
MOVTL1,#0CHMOVIE,#8AH;CPU,T0,T1開中斷
SETBTR0;啟動T0SETBTR1;啟動T1LL:SJMPLL;等待min到中斷
T0的中斷服務程序(由000BH轉來):INR0:MOVTH0,#15H;T0重賦初值
MOVTL0,#0A0HCPLP1.2;P1.2取反作T1的計數(shù)脈沖輸入
RET1;中斷返回
T1的中斷服務程序(由0001BH轉來):INR1:MOVTH0,#0FEH;T1重賦初值
MOVTL0,#0CHCPLP1.0;P1.0取反輸出
RET1;中斷返回4、串行口綜合應用串行通信是計算機與外界交換信息的一種基本通信方式。第9章已介紹了80C51單片機中的串行接口的結構、工作原理.、工作方式。本章將以實例理解串行口的應用。從軟件角度看,通過對串行口的SCON控制寄存器編程可以選擇4種工作方式,方式0和方式2采用固定波特率,方式1和方式3采用可變波特率。當使用可變波特率時,應該先對T1進行初始化。TI和RI是一幀發(fā)送數(shù)據(jù)是否發(fā)送完成或一幀接收數(shù)據(jù)是否全部接收的標志,可用于查詢;如果設置允許中斷,可產(chǎn)生中斷。因此串行通信可采用查詢方式和中斷方式編程。
例10-13在內部RAM30H到39H單元中有10個數(shù)據(jù),采用方式1串行發(fā)送出去或從串口接收。設發(fā)送速率為1200波特,晶振頻率為12MHz。解:T1采用方式2作為波特率發(fā)生器,取SMOD=0,則根據(jù):方式1的波特率=(/32)·(T1溢出率)且:T1溢出率=fosc/{12×[256–(TH1)]}則:1200=(1/32)·(12*/126(256-X)得:X=0E6H方法一:采用查詢方式發(fā)送程序:
ORG1000HMOVTMOD,#20H;T1方式2MOVTH1,#0E6HMOVTL1,#0E6H;T1時間常數(shù)
SETBTR1;啟動T1MOVSCON,#40H;串口工作方式1MOVR0,#30H;指示發(fā)送緩沖區(qū)首址
MOVR7,#10;R7作為發(fā)送數(shù)據(jù)計數(shù)LOOP:MOVSBUF,@R0;發(fā)送數(shù)據(jù)
JNBTI,$;查詢一幀是否發(fā)完
CLRTI;一幀發(fā)完后清TIINCRODJNZR7,LOOPSJMP$
接收程序:
ORG1000HMOVTMOD,#20H;T1方式2MOVTH1,#0E6HMOVTL1,#0E6H;T1時間常數(shù)
SETBTR1;啟動T1MOVSCON,#50H;串口工作方式1并允許接收
MOVR0,#30H;指示發(fā)送緩沖區(qū)首址
MOVR7,#10;R7作為發(fā)送數(shù)據(jù)計數(shù)LOOP:MOVSBUF,@R0;發(fā)送數(shù)據(jù)
JNBRI,$;查詢一幀是否收完
CLRTI;一幀收完后清RIINCRODJNZR7,LOOPSJMP$方法二:采用中斷方式中斷方式的初始化部分同查詢方式,以下僅寫不同部分。發(fā)送程序:......SETBEA;開中斷
SETBES;允許串口中斷
MOVSBUF,@R0;發(fā)送LOOP:SJMP$;等待中斷CON:DJNZR7,LOOP;數(shù)據(jù)塊未發(fā)完繼續(xù)
CLREA;發(fā)送完關中斷
SJMP$;結束
ORG0023H;中斷服務CON1:CLRTIPOPDPHPOPDPLMOVDPTR,#CONPUSHDPLPUSHDPH;INCR0MOVSBUF,@R0;發(fā)送下一個
RETI;返回接收程序:
......SETBEA;開中斷
SETBES;允許串口中斷LOOP:SJMP$;等待中斷CON:DJNZR7,LOOP;數(shù)據(jù)塊未收完繼續(xù)
CLREA;收完關中斷
SJMP$;結束
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育行業(yè)宣傳推廣材料
- 文件借閱管理表格:文件借閱申請、歸還記錄
- 公司抵押擔保借款協(xié)議書
- 三農(nóng)產(chǎn)品電商用戶體驗與滿意度提升方案
- 智能家居產(chǎn)品設計理念與實現(xiàn)方式
- 建設工程施工合同類型
- 新編股份轉讓協(xié)議合同
- 上季度財務狀況概述報表
- 國際行業(yè)市場規(guī)模表
- 公共衛(wèi)生事件應急響應模型操作手冊
- 骶髂關節(jié)損傷郭倩課件
- 內科學疾病概要-支氣管擴張課件
- 2025陜西渭南光明電力集團限公司招聘39人易考易錯模擬試題(共500題)試卷后附參考答案
- 預防感冒和流感的方法
- 2024年黑龍江職業(yè)學院高職單招語文歷年參考題庫含答案解析
- 2024年南京旅游職業(yè)學院高職單招語文歷年參考題庫含答案解析
- 人教版高中英語挖掘文本深度學習-選修二-UNIT-4(解析版)
- 股指期貨基礎知識介紹培訓課件
- 2024年北京東城社區(qū)工作者招聘筆試真題
- 2025中智集團招聘重要崗位高頻重點提升(共500題)附帶答案詳解
- 中藥學電子版教材
評論
0/150
提交評論