freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

單片機(jī)原理及應(yīng)用04第四章程序設(shè)計(jì)(編輯修改稿)

2025-02-10 21:23 本頁面
 

【文章內(nèi)容簡介】 設(shè)循環(huán)次數(shù)YN開始顯示模式字左移 1 位次數(shù) - 1 = 0顯示模式字送 P1 口設(shè)循環(huán)初值 用匯編語言實(shí)現(xiàn)的程序如下: ORG 0000H START: MOV R2,08H ;設(shè)置循環(huán)次數(shù) MOV A,0FEH ;從 →P 使LED逐 ;個(gè)亮過去 NEXT: MOV P1,A ;點(diǎn)亮 LED RL A ;左移一位 DJNZ R2,NEXT ;次數(shù)減 1, 不為 ;零,繼續(xù)點(diǎn)亮下一個(gè) LED SJMP START ;反復(fù)點(diǎn)亮 END 執(zhí)行上面程序后,結(jié)果是 8個(gè)燈全部被點(diǎn)亮,跟預(yù)想的結(jié)果不符,為什么呢?這是因?yàn)槌绦驁?zhí)行得很快,逐一點(diǎn)亮 LED的間隔太短,在我們看來就是同時(shí)點(diǎn)亮了,因此,必須在點(diǎn)亮一個(gè) LED后加一段延時(shí)程序,使該顯示狀態(tài)稍事停頓,人眼才能區(qū)別開來。 (2) 匯編語言源程序 。 由于程序設(shè)計(jì)中經(jīng)常會出現(xiàn)如圖所示的次數(shù)控制循 環(huán)程序結(jié)構(gòu) , 為了編程方便 , 單片機(jī)指令系統(tǒng)中專門提供了 循環(huán)指令 DJNZ, 以適用于上述結(jié)構(gòu)的編程 。 DJNZ R2, NEXT ; R2中存放控制次數(shù) , ; R21→R2 , R2≠0,轉(zhuǎn)移到 NEXT繼續(xù)循環(huán), ;否則執(zhí)行下面指令 YN次數(shù) - 1 = 0繼續(xù)循環(huán)結(jié)束循環(huán)常 見 循環(huán)程序結(jié)構(gòu) 2. 雙重循環(huán)程序設(shè)計(jì) —— 延時(shí)程序設(shè)計(jì) 在上例中使用了延時(shí)程序段之后 , 我們才能看到正確 的顯示結(jié)果 。 延時(shí)程序在單片機(jī)匯編語言程序設(shè)計(jì)中使用 非常廣泛 , 例如 , 鍵盤接口程序設(shè)計(jì)中的軟件消除抖動 、 動態(tài) LED顯示程序設(shè)計(jì) 、 LCD接口程序設(shè)計(jì) 、 串行通信接 口程序設(shè)計(jì)等 。 所謂延時(shí) , 就是讓 CPU做一些與主程序功 能無關(guān)的操作 ( 例如將一個(gè)數(shù)字逐次減 1直到為 0) 來消耗 掉 CPU的時(shí)間 。 由于我們知道 CPU執(zhí)行每條指令的準(zhǔn)確時(shí) 間 , 因此執(zhí)行整個(gè)延時(shí)程序的時(shí)間也可以精確計(jì)算出來 。 也就是說 , 我們可以寫出延時(shí)長度任意而且精度相當(dāng)高的 延時(shí)程序 。 例 設(shè)計(jì)一個(gè)延時(shí) 1 s的程序 , 設(shè)單片機(jī)時(shí)鐘晶振頻 率為 fosc=6 MHz。 (1) 題意分析 。 設(shè)計(jì)延時(shí)程序的關(guān)鍵是計(jì)算延時(shí)時(shí)間 。 延時(shí)程序一般采用循環(huán)程序結(jié)構(gòu)編程 , 通過確定循環(huán)程序中的循環(huán)次數(shù)和循環(huán)程序段兩個(gè)因素來確定延時(shí)時(shí)間 。 對于循環(huán)程序段來講 , 必須知道每一條指令的執(zhí)行時(shí)間 , 這里涉及到幾個(gè)非常重要的概念 —— 時(shí)鐘周期 、 機(jī)器周期和指令周期 。 時(shí)鐘周期 T時(shí)鐘 是計(jì)算機(jī)基本時(shí)間單位 , 同單片機(jī)使用的晶振頻率有關(guān) 。 題目給定 fosc=6 MHz, 那么 T時(shí)鐘=1/fosc=1/6 M= ns。 機(jī)器周期 T機(jī)器 是指 CPU完成一個(gè)基本操作所需要的時(shí) 間 , 如取指操作 、 讀數(shù)據(jù)操作等 , 機(jī)器周期的計(jì)算方法: T機(jī)器 =12T時(shí)鐘 = ns 12=2 181。s。 指令周期是指執(zhí)行一條指令所需要的時(shí)間 。 由于指令 匯編后有單字節(jié)指令 、 雙字節(jié)指令和三字節(jié)指令 , 因此指 令周期沒有確定值 , 一般為 1~4個(gè) T機(jī)器 。 在附錄 2的指令表 中給出了每條指令所需的機(jī)器周期數(shù) , 可以計(jì)算每一條指 令的指令周期 。 現(xiàn)在 , 我們可以來計(jì)算一下實(shí)訓(xùn) 4程序 3中延時(shí)程序段 的延時(shí)時(shí)間 。 延時(shí)程序段如下: DELAY1: MOV R3,0FFH DEL2: MOV R4,0FFH DEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 經(jīng)查指令表得到:指令 MOV R4,0FFH、 NOP、DJNZ 的執(zhí)行時(shí)間分別為 2 181。s、 2 181。s和 4 181。s。 NOP為空操作指令 , 其功能是取指 、 譯碼 , 然后不進(jìn)行 任何操作進(jìn)入下一條指令 , 經(jīng)常用于產(chǎn)生一個(gè)機(jī)器的延遲 。 延時(shí)程序段為雙重循環(huán) , 下面分別計(jì)算內(nèi)循環(huán)和外循環(huán)的延時(shí)時(shí)間 。 內(nèi)循環(huán):內(nèi)循環(huán)的循環(huán)次數(shù)為 255( 0FFH) 次 , 循環(huán)為以下兩條指令: NOP ; 2 181。s DJNZ R4,DEL1 ; 4 181。s 內(nèi)循環(huán)延時(shí)時(shí)間為 : 255 (2+4)=1530 181。s 。 外循環(huán):外循環(huán)的循環(huán)次數(shù)為 255(0FFH)次 , 循環(huán)內(nèi)容如下: MOV R4,0FFH ; 2 181。s 1530 us內(nèi)循環(huán) ; 1530 181。s DJNZ R3,DEL2 ; 4 181。s 外循環(huán)一次時(shí)間為 1530 181。s+2 181。s+4 181。s=1536 181。s , 循環(huán) 255次 , 另外加上第一條指令 MOV R3,0FFH ; 2 181。s 的循環(huán)時(shí)間 2 181。s , 因此總的循環(huán)時(shí)間為 2?181。s+(1530?181。s+2?181。s+4?181。s) 255=391682?181。s≈392 ms 以上是比較精確的計(jì)算方法 , 一般情況下 , 在外循環(huán)的計(jì)算中 , 經(jīng)常忽略比較小的時(shí)間段 , 例如將上面的外循環(huán)計(jì)算公式簡化為 1530 181。s 255 = 390 150 181。s ≈ 390 ms 了解了延時(shí)時(shí)間的計(jì)算方法,本例我們使用三重循環(huán)結(jié)構(gòu)。程序流程圖如圖 。 內(nèi)循環(huán)選擇為 1 ms,第二層循環(huán)達(dá)到延時(shí) 10 ms(循環(huán)次數(shù)為 10),第三層循環(huán)延時(shí)到 1 s(循環(huán)次數(shù)為 100)。 (2) 匯編語言源程序段 。 一般情況下 , 延時(shí)程序均是作為一個(gè)子程序段使用 ,不會獨(dú)立運(yùn)行它 , 否則單純的延時(shí)沒有實(shí)際意義 。 延時(shí) 1 s的程序流程圖 第二層循環(huán) R 1 ←1 0YN結(jié)束開始R2 - 1 = 0空操作內(nèi)循環(huán) R 2 ←7 D HYY外循環(huán)次數(shù) R 0 ←1 0 0R1 - 1 = 0R0 - 1 = 0NNDELAY: MOV R0,100 ;延時(shí) 1 s的循環(huán)次數(shù) DEL2: MOV R1,10 ;延時(shí) 10 ms的循環(huán)次數(shù) DEL1: MOV R2,7DH ;延時(shí) 1 ms的循環(huán)次數(shù) DEL0: NOP NOP DJNZ R2,DEL0 DJNZ R1,DEL1 DJNZ R0,DEL2 (3) 程序說明 。 本例中 , 第二層循環(huán)和外循環(huán)都采用了簡化計(jì)算方法 ,編程關(guān)鍵是延時(shí) 1ms的內(nèi)循環(huán)程序如何編制 。 首先確定循環(huán)程序段的內(nèi)容如下: NOP ; 2 181。s NOP ; 2 181。s DJNZ R2,DEL0 ; 4 181。s 內(nèi)循環(huán)次數(shù)設(shè)為 count, 計(jì)算方法如下式: ( 一次循環(huán)時(shí)間 ) count = 1 ms 從而得到 count = 1 ms/(2 181。s+2 181。s+4 181。s) = 125 = 7DH 本例提供了一種延時(shí)程序的基本編制方法 , 若需要延時(shí)更長或更短時(shí)間 , 只要用同樣的方法采用更多重或更少重的循環(huán)即可 。 值得注意的是 , 延時(shí)程序的目的是白白占用 CPU一段時(shí)間 , 此時(shí)不能做任何其它工作 , 就像機(jī)器在不停地空轉(zhuǎn)一樣 , 這是程序延時(shí)的缺點(diǎn) 。 若在延時(shí)過程中需要 CPU做指定的其它工作 , 就要采用單片機(jī)內(nèi)部的硬件定時(shí)器或片外的定時(shí)芯片 ( 如 8253等 ) 。 3. 數(shù)據(jù)傳送程序 例 不同存儲區(qū)域之間的數(shù)據(jù)傳輸 。 將內(nèi)部RAM 30H單元開始的內(nèi)容依次傳送到外部 RAM 0100H單元開始的區(qū)域 , 直到遇到傳送的內(nèi)容是 0為止 。 (1) 題意分析 。 本例要解決的關(guān)鍵問題是:數(shù)據(jù)塊的傳送和不同存儲區(qū)域之間的數(shù)據(jù)傳送。前者采用循環(huán)程序結(jié)構(gòu),以條件控制結(jié)束;后者采用間接尋址方式,以累加器 A作為中間變量實(shí)現(xiàn)數(shù)據(jù)傳輸。程序流程圖如圖所示。 例 地址指針 R0 賦初值地址指針增 1結(jié)束地址指針D P T R 賦初值(R 0 )→AA →(D P T R )A = 0開始YN (2) 匯編語言源程序 。 ORG 0000H MOV R0,30H ; R0 指 向 內(nèi)部 RAM數(shù)據(jù)區(qū)首地址 MOV DPTR,0100H ; DPTR 指向外部 RAM數(shù)據(jù)區(qū)首地址 TRANS: MOVA,R0 ; A←(R 0) MOVXDPTR,A; ( DPTR) ←A CJNE A,00H,NEXT SJMP FINISH ; A=0,傳送完成 NEXT: INC R0 ;修改地址指針 INC DPTR AJMP TRANS;繼續(xù)傳送 FINISH: SJMP $ END (3) 程序說明 。 ① 間接尋址指令 。 在單片機(jī)指令系統(tǒng)中 , 對內(nèi)部RAM讀 /寫數(shù)據(jù)有兩種方式:直接尋址方式和間接尋址方式 。 例如: 直接方式: MOV A,30H ; 內(nèi)部 RAM(30H)→ 累加器 A 間接方式: MOV R0,30H; 30H→R 0 MOV A,R0; 內(nèi)部 RAM(R0)→ 累加器 A 對外部 RAM的讀 /寫數(shù)據(jù)只有間接尋址方式 , 間接尋址寄存器有 R0、 R1( 尋址范圍是 00H~ FFH) 和 DPTR( 尋址范圍 0000H~ FFFFH, 整個(gè)外部 RAM區(qū) ) 。 ② 不同存儲空間之間的數(shù)據(jù)傳輸 。 MCS51系列單片機(jī)存儲器結(jié)構(gòu)的特點(diǎn)之一是存在著 4種物理存儲空間 , 即片內(nèi) RAM、 片外 RAM、 片內(nèi) ROM和片外 ROM。 不同的物理存儲空間之間的數(shù)據(jù)傳送一般以累加器 A作為數(shù)據(jù)傳輸?shù)闹行?, 如圖所示 。 不同的存儲空間是獨(dú)立編址的 , 在傳送指令中的區(qū)別在于不同的指令助記符 , 例如: MOV R0,30H MOV A,R0 ;內(nèi)部 RAM(30H)→A MOVX A,R0 ;外部 RAM(30H)→A 以累加器 A為中心的不同存儲空間的數(shù)據(jù)傳送示意圖 內(nèi)部 R A M 低128 字節(jié)外部 R A M 及I / O 端口特殊功能寄存器 SFRR O MM O VM O VM O V XM O V CM O V累加器 A 循環(huán)程序結(jié)構(gòu) 1. 循環(huán)程序組成 從以上循環(huán)程序?qū)嵗?, 我們看到循環(huán)程序的特點(diǎn)是程序中含有可以重復(fù)執(zhí)行的程序段 。 循環(huán)程序由以下 4部分組成: (1) 初始化部分 。 程序在進(jìn)入循環(huán)處理之前必須先設(shè)立初值 , 例如循環(huán)次數(shù)計(jì)數(shù)器 、 工作寄存器以及其它變量的初始值等 , 為進(jìn)入循環(huán)做準(zhǔn)備 。 (2) 循環(huán)體。循環(huán)體也稱為循環(huán)處理部分,是循環(huán)程序的核心。循環(huán)體用于處理實(shí)際的數(shù)據(jù),是重復(fù)執(zhí)行部分。 (3) 循環(huán)控制 。 在重復(fù)執(zhí)行循環(huán)體的過程中 , 不斷修改和判別循環(huán)變量 , 直到符合循環(huán)結(jié)束條件 。 一般情況下 , 循環(huán)控制有以下幾種方式: ① 計(jì)數(shù)循環(huán) —
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1