欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      微機(jī)硬件課設(shè)(紅綠燈)(推薦五篇)

      時間:2019-05-14 09:39:33下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《微機(jī)硬件課設(shè)(紅綠燈)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《微機(jī)硬件課設(shè)(紅綠燈)》。

      第一篇:微機(jī)硬件課設(shè)(紅綠燈)

      微機(jī)原理實驗課程設(shè)計

      硬件部分

      東華大學(xué)信息學(xué)院

      2013.1

      一. 基礎(chǔ)實驗部分

      實驗1存儲器讀寫實驗

      一、實驗?zāi)康?/p>

      1.掌握PC機(jī)外存擴(kuò)展的方法。2.熟悉6264芯片的接口方法。

      3.掌握8086十六位數(shù)據(jù)存儲的方法。

      二、實驗設(shè)備

      微機(jī)實驗箱、8086CPU模塊。

      三、實驗內(nèi)容

      向02000~020FFH單元的偶地址送入AAH,奇地址送入55H。

      四、實驗原理介紹

      本實驗用到存儲器電路

      五、實驗步驟和要求

      1、實驗接線:本實驗無需接線。

      2、編寫調(diào)試程序

      3、運(yùn)行實驗程序,可采取單步、設(shè)置斷點方式,打開內(nèi)存窗口可看到內(nèi)存區(qū)的變化。本實驗的主要目的是學(xué)會用使用工具軟件,掌握用單步執(zhí)行和斷點方式運(yùn)行程序,觀察寄存器和內(nèi)存中的數(shù)據(jù)變化等程序調(diào)試的手段。

      六、實驗提示

      七、實驗范例程序框圖及源代碼(實驗程序名:RAM.ASM)

      八、思考題

      1、單步執(zhí)行到“intram”標(biāo)號的語句時,ds寄存器的數(shù)據(jù)是什么?采用斷點方式運(yùn)行時執(zhí)行到第一個斷點處,2000H~202FH內(nèi)存單元的數(shù)據(jù)是什么?執(zhí)行到第二個斷點處,2000H~200FH內(nèi)存單元的數(shù)據(jù)是什么?并根據(jù)觀察結(jié)果和對源程序的判讀簡述源程序的運(yùn)行效果。

      答:單步執(zhí)行到“intram”標(biāo)號的語句時,ds寄存器的數(shù)據(jù)都為00。

      斷點方式運(yùn)行時執(zhí)行到第一個斷點處時,2000H~202FH內(nèi)存單元的數(shù)據(jù)都為00。

      到第二個斷點處,2000H~200FH內(nèi)存單元偶地址都為AA,奇地址都為00。

      2、修改程序,實現(xiàn)從2000H到200FH單元依次賦值00H~0FH的功能。答:只需改變intram 和 fil中相關(guān)的程序: 需改動的原程序:

      intram: mov [si],al

      incsi loopintram mov si,1000h;設(shè)置斷點處 mov cx,100h mov ax,55aah fil:

      mov [si],ax;RAM區(qū)循環(huán)置數(shù) incsi

      改為:

      intram: mov [si],al incsi loopintram mov si,1000h;設(shè)置斷點處

      mov cx,100h mov ax,0100h fil:

      mov [si],ax incsi addax,0202h incsi loopfil

      ;RAM區(qū)循環(huán)置數(shù)

      實驗2簡單I/O口擴(kuò)展實驗

      一、實驗?zāi)康?/p>

      1、熟悉74LS273,74LS244的應(yīng)用接口方法。

      2、掌握用鎖存器、三態(tài)門擴(kuò)展簡單并行輸入、輸出口的方法。

      二、實驗設(shè)備

      微機(jī)實驗箱、8086CPU模塊。

      三、實驗內(nèi)容

      邏輯電平開關(guān)的狀態(tài)輸入74LS244,然后通過74LS273鎖存輸出,利用LED顯示電路作為輸出的狀態(tài)顯示。

      四、實驗原理介紹

      本實驗用到兩部分電路:開關(guān)量輸入輸出電路,簡單I/O口擴(kuò)展電路。

      五、實驗步驟

      1、實驗接線:(?表示相互連接)CS0 ?CS244; CS1?CS273;平推開關(guān)的輸出K1~K8 ? IN0~I(xiàn)N7(對應(yīng)連接); O0~O7?LED1~LED8。

      2、編輯程序,單步運(yùn)行,調(diào)試程序

      3、調(diào)試通過后,全速運(yùn)行程序,觀看實驗結(jié)果。

      4、編寫實驗報告。

      六、實驗提示

      七、實驗結(jié)果

      程序全速運(yùn)行后,邏輯電平開關(guān)的狀態(tài)改變應(yīng)能在LED上顯示出來。例如:K2置于L位置,則對應(yīng)的LED2應(yīng)該點亮。

      八、實驗范例程序框圖(實驗程序名: T244273.ASM)

      九、程序源代碼清單

      十、思考題:

      將74LS244的片選信號CS244改接CS2,將74LS273的片選信號CS273改接CS3,修改程序?qū)崿F(xiàn)與范例程序相同的功能。

      答:只需改變程序中start相應(yīng)的輸入輸出口地址。需改動的原程序:

      start:

      mov dx,04a0h

      inal,dx mov dx,04b0h outdx,al 改為:

      start:

      mov dx,04c0h

      inal,dx mov dx,04d0h outdx,al

      實驗3 8255并行口實驗

      一、實驗?zāi)康?/p>

      掌握8255A的編程原理。

      二、實驗設(shè)備

      微機(jī)實驗箱、8086CPU模塊。

      三、實驗內(nèi)容

      8255A的A口作為輸入口,與邏輯電平開關(guān)相連。8255A的B口作為輸出口,與發(fā)光二極管相連。編寫程序,使得邏輯電平開關(guān)的變化在發(fā)光二極管上顯示出來。

      四、實驗原理介紹

      本實驗用到兩部分電路:開關(guān)量輸入輸出電路和8255可編程并口電路。

      五、實驗步驟

      1、實驗接線

      CS0?CS8255; PA0~PA7?平推開關(guān)的輸出K1~K8; PB0~PB7?發(fā)光二極管的輸入LED1~LED8。

      2、編程并全速或單步運(yùn)行。

      3、全速運(yùn)行時撥動開關(guān),觀察發(fā)光二極管的變化。當(dāng)開關(guān)某位置于L時,對應(yīng)的發(fā)光二極管點亮,置于H時熄滅。

      六、實驗提示

      七、實驗結(jié)果

      程序全速運(yùn)行后,邏輯電平開關(guān)的狀態(tài)改變應(yīng)能在LED上顯示出來。例如: K2置于L位置,則對應(yīng)的LED2應(yīng)該點亮。

      八、實驗范例程序框圖及源代碼(實驗程序名:t8255.asm)

      九、思考題:

      1、修改接線CS2?CS8255,并要求開關(guān)置“H”(下)位置時對應(yīng)LED亮,修改程序?qū)崿F(xiàn)相應(yīng)功能。

      答:改變相應(yīng)的輸入輸出口地址,并將讀入ax的值取反。

      需改動的原程序: start:

      mov dx,04a6h

      mov ax,90h

      out dx,ax

      start1:

      mov dx,04a0h

      in ax,dx

      mov dx,04a2h

      out dx,ax

      jmp start1 改動后: start:

      mov dx,04c6h

      mov ax,90h

      out dx,ax

      start1:

      mov dx,04c0h

      in ax,dx

      mov dx,04c2h not

      ax

      out dx,ax

      jmp start1

      實驗4 8253定時器/計數(shù)器接口實驗

      一、實驗?zāi)康?/p>

      掌握8253定時器的編程原理,用示波器觀察不同模式下的輸出波形。

      二、實驗設(shè)備

      微機(jī)實驗箱、8086CPU模塊、示波器。

      三、實驗內(nèi)容

      了解8253計數(shù)器的不同工作方式,掌握其初始化控制字對定時/記數(shù)效果的影響。

      四、實驗原理介紹

      本實驗用到兩部分電路:脈沖產(chǎn)生電路、8253定時器/計數(shù)器電路

      五、實驗步驟

      1、實驗連線:

      CS0?CS8253OUT0?8253CLK2 OUT2?LED1 OUT1?LED2 CLK3?8253CLK0,CLK3?8253CLK1

      2、編程調(diào)試程序

      3、全速運(yùn)行,觀察實驗結(jié)果

      六、實驗提示

      七、實驗結(jié)果

      程序全速運(yùn)行后,LED1按一定周期閃爍(周期理論值為0.2s),LED2在高頻脈沖信號(約15KHz)影響下,有微弱的光亮,但無明顯的周期變化現(xiàn)象。

      八、實驗范例程序框圖及源代碼(實驗程序名:t8253.asm)

      九、思考題:

      1、為什么說范例程序運(yùn)行時LED1閃爍周期的理論值是0.2秒?在范例程序設(shè)置LED2的最大閃爍周期是多少?請分析說明。

      答:因為T2采用OUT0的輸出為時鐘,且T2中設(shè)置初值為04h,則OUT2輸出方波周期為4*0.05s=0.2s 因為OUT1?LED2,則LED2的周期即為計數(shù)器T1的周期,且T1的計數(shù)初值由程序知為32h=50d,所以最大周期為50*4/3*10^6=6.67x10^-5s。

      2、修改片選信號接線使CS1和CS8253連接,并要求LED1的閃爍周期變?yōu)?秒(亮2秒,滅2秒),修改程序?qū)崿F(xiàn)功能。答:因為4/0.05=80d=50h,所以只需改變相應(yīng)的計數(shù)值和片選接口地址。

      需改動的原程序: mov ax,0b6h

      out dx,ax mov dx,04a4h mov ax,04h out dx,ax mov ax,0 out dx,ax 改動后:

      mov ax,0b6h

      out dx,ax mov dx,04b4h mov ax,50h out dx,ax mov ax,0 out dx,ax 其余列出的程序段都只要將片選接口地址中的a改為b即可。

      實驗5 8259中斷控制器實驗

      一、實驗?zāi)康?/p>

      1、掌握8259A的工作原理。

      2、掌握編寫中斷服務(wù)程序方法。

      3、掌握初始化中斷向量的方法。

      二、實驗設(shè)備

      微機(jī)實驗箱、8086CPU模塊。

      三、實驗內(nèi)容

      了解中斷處理的原理,掌握利用中斷控制器進(jìn)行中斷申請和中斷操作的方法。

      四、實驗原理介紹

      本實驗用到三部分電路:電平開關(guān)電路、簡單I/O口擴(kuò)展電路和8259中斷控制器電路。

      五、實驗步驟

      1、實驗接線

      CS0?CS8259

      CS3 ?CS273 O0~O3?LED1~LED4

      K1~K4?IR0~I(xiàn)R3 INT?INT(8086CPU板)INTA?INTA(8086CPU板)CS0?CS8253OUT0?8253CLK2 OUT2?LED1 OUT1?LED2 CLK3?8253CLK0,CLK3?8253CLK1

      2、編譯調(diào)試程序

      3、全速運(yùn)行程序,撥動某一電平開關(guān),觀察LED的亮滅情況。

      六、實驗提示

      七、實驗結(jié)果

      全速運(yùn)行程序,由上往下?lián)軇娱_關(guān)時,相應(yīng)位置的LED點亮,其余LED全滅。

      八、實驗范例程序框圖及源代碼(實驗程序名:t8259.asm)

      九、思考題:

      1、說明源代碼8259初始化所設(shè)置的所有中斷控制字的值和含義(按位說明)。

      答:ICW1為初始化字,13h即00010011b,對應(yīng)于邊沿觸發(fā),間距為8,單片8259A,需要ICW4。

      ICW2為中斷類型碼字,80h即10000000b,對應(yīng)于IR0~IR7的中斷類型碼為80h~87h。

      ICW3為中斷結(jié)束方式字,01h即00000001b,對應(yīng)于普通全嵌套方式,非緩沖方式,正常EOI,8086/8088模式。

      OCW1為屏蔽控制字,00h即00000000b,對應(yīng)于8為全部復(fù)位屏蔽。

      2、修改接線IR3?P+(實驗箱右下角),并修改源程序,使按實驗箱右下角“Pules”鍵時LED1~LED4全亮。

      答:改變程序最后IR2的中斷服務(wù)程序的設(shè)定值,即由0fbh改為0f0h.二、綜合設(shè)計實驗部分

      一、設(shè)計要求

      參考基礎(chǔ)實驗的實驗1~實驗5所使用的硬件和范例程序,設(shè)計一個簡單的紅綠燈控制系統(tǒng),用LED1~LED4表示兩組紅綠燈,每組紅燈、綠燈各1只。要求實現(xiàn)以下功能:

      (1)紅綠燈的定時切換(每10秒切換一次)

      (2)設(shè)置燈光測試開關(guān)K1,當(dāng)K1打開(高電平)時,LED1~LED4全亮,關(guān)閉后恢復(fù)正常。

      二、實驗設(shè)備

      微機(jī)實驗箱、8086CPU模塊。

      三、實驗內(nèi)容

      了解中斷處理的原理,掌握利用中斷控制器進(jìn)行中斷申請和中斷操作的方法。

      四、實驗原理介紹

      本實驗用到五部分電路:電平開關(guān)電路、簡單I/O口擴(kuò)展電路和8259中斷控制器電路,脈沖產(chǎn)生電路、8253定時器/計數(shù)器電路

      五、實驗步驟

      1、實驗接線

      CS0?CS8259CS0?CS8253 CS0?CS273 O0?LED101?LED2 02?LED403?LED3 INT?INT(8086CPU板)INTA?INTA(8086CPU板)OUT0?8253CLK2 OUT2?IR0 OUT1?k1 IR1?k1CLK3?8253CLK0,CLK3?8253CLK1

      2、編譯調(diào)試程序

      3、全速運(yùn)行程序,觀察結(jié)果。

      六、實驗提示

      (1)定時功能可利用8253實現(xiàn),利用定時器輸出作為中斷申請,利用中斷處理切換LED的顯示;LED狀態(tài)可用內(nèi)存保存或用I/O口讀取。

      (2)測試功能運(yùn)行可在主循環(huán)中通過I/O口讀取開關(guān)狀態(tài)后判定,或利用中斷處理方式運(yùn)行。

      七、實驗結(jié)果

      全速運(yùn)行程序,LED1和LED3為一組,LED12和LED4為一組,兩組燈每亮10秒切換一次,撥動k1開關(guān),觀察是否出現(xiàn)LED1~LED4全亮,關(guān)閉后恢復(fù)正常。

      八、程序框圖及源代碼

      ASSUME

      CS:CODE CODE SEGMENT

      PUBLIC

      ORG

      100H START:

      MOV

      CX,0

      MOV

      BX,0FAH START1:

      CLI

      MOV

      DX,04A0H

      MOV

      AX,13H

      OUT

      DX,AX

      ;ICW1, ICW4 NEEDED

      MOV

      DX,04A2H

      MOV

      AX,80H

      OUT

      DX,AX

      ;ICW2 中斷類型80h

      MOV

      AX,01H

      ;01

      OUT

      DX,AX

      ;ICW4

      MOV

      AX,00H

      OUT

      DX,AX

      ;OCW1, 開放所有中斷

      NOP

      ;以上為8259初始化

      MOV

      AX,0

      MOV

      DS,AX

      MOV

      DI,200H

      ;初始化中斷向量表

      MOV

      AX,OFFSETINT0

      MOV

      DS:[DI],AX

      ADD

      DI,2

      MOV

      DS:[DI],100H

      ADD

      DI,2

      MOV

      AX,OFFSET INT1

      MOV

      DS:[DI],AX

      ADD

      DI,2

      MOV

      DS:[DI],100H

      ADD

      DI,2

      MOV

      AX,OFFSET INT2

      MOV

      DS:[DI],AX

      ADD

      DI,2

      MOV

      DS:[DI],100H

      ADD

      DI,2

      MOV

      AX,OFFSETINT3

      MOV

      DS:[DI],AX

      ADD

      DI,2

      ;上述程序為芯片8259的初始化程序

      MOV

      DS:[DI],100H

      ;建議不熟練者不要修改。

      MOV

      DX,04A6H

      ;控制寄存器

      MOV

      AX,36H

      ;計數(shù)器0,方式3

      OUT

      DX,AX

      MOV

      DX,04A0H

      MOV

      AX,7CH

      OUT

      DX,AX

      MOV

      AX,92H

      OUT

      DX,AX

      ;計數(shù)值927Ch

      MOV

      DX,04A6H

      MOV

      AX,0B6H

      ;計數(shù)器2,方式3

      OUT

      DX,AX

      MOV

      DX,04A4H

      MAIN:

      WAITING:

      DELAY:

      INT0:

      NOT

      INT1:

      MOV

      INT2:

      INT3:

      NOP

      MOV

      CODE

      MOV

      AX,90H

      OUT

      DX,AX

      MOV

      AX,01H

      ;計數(shù)初值0190h

      OUT

      DX,AX

      MOV

      AX,0H

      STI

      ;開中斷。

      CMP

      AX,0H

      JE

      WAITING

      ;沒發(fā)生中斷,則等待

      NOP

      NOP

      MOV

      DX,04A0H

      OUT

      DX,AX

      ;對應(yīng)LED燈亮

      MOV

      CX,0

      LOOP

      DELAY

      ;數(shù)字濾波,按鍵去抖

      JMP

      START1

      CLI

      ;關(guān)中斷。以下類推。

      NOP

      ;此兩行為IR0的中斷服務(wù)程序 BX

      ;輸出取反

      MOV

      AX,BX

      ;用戶可修改。

      IRET

      ;中斷返回,以下類推。

      CLI

      NOP

      ;此兩行為IR1的中斷服務(wù)程序,AX,0F0H

      ;用戶可修改。

      IRET

      CLI

      NOP

      ;此兩行為IR2的中斷服務(wù)程序,MOV

      AX,0F5H

      ;用戶可修改。

      IRET

      CLI

      ;此兩行為IR3的中斷服務(wù)程序,AX,0F7H

      ;用戶可修改。

      IRET

      ENDS

      END

      START

      九.運(yùn)行結(jié)果調(diào)試問題及解決方法

      1.對于亮10秒鐘的時間設(shè)定問題,一開始是算好初值為190h,直接將其賦給AX而忽略了其高位低位的情況,導(dǎo)致驗證結(jié)果時總是只有3秒左右,發(fā)現(xiàn)后改為先低位后高位復(fù)制即達(dá)到設(shè)定要求:

      MOV

      AX,90H OUT

      DX,AX

      MOV

      AX,01H

      ;計數(shù)初值0190h

      OUT

      DX,AX

      2.對于撥動k1開關(guān)后LED1~LED4全亮的情況,一開始實驗結(jié)果總是四個燈都亮但都只保持10秒的設(shè)定時間,之后又恢復(fù)到兩組燈每亮10秒切換一次的情況。當(dāng)將開關(guān)量k1改為脈沖輸入的時候發(fā)現(xiàn)每一次脈沖信號也可以產(chǎn)生相同的實驗結(jié)果,由此想到所設(shè)計的程序運(yùn)行周期的情況,一次中斷的產(chǎn)生與有效作用的時間只在這一總線周期內(nèi),因此可以在原有中斷的基礎(chǔ)上再人為的加上周期小于總線周期的脈沖有效信號,使其在k1為高電平時期不斷地執(zhí)行中斷程序,因此可在k1有效時使LED1~LED4一直保持全亮,而k1低電平后又恢復(fù)原狀態(tài),具體操作為將脈沖輸出out1也接到k1上

      第二篇:微機(jī)原理課設(shè)

      目錄

      一.課程設(shè)計的實驗?zāi)康呐c要求……………………………2 1.教學(xué)目的……………………………2 2.教學(xué)要求……………………………2 3.主要技術(shù)指標(biāo)……………………………2 二.課程設(shè)計課題的分析……………………………2 三.課程設(shè)計的結(jié)果……………………………4 1.實驗代碼……………………………4 2.實驗現(xiàn)象……………………………10 四.心得體會 ……………………………12 五.參考文獻(xiàn) ……………………………12

      一、課程設(shè)計的目的與要求 1.教學(xué)目的

      本課程的課程設(shè)計是自動化專業(yè)學(xué)生學(xué)習(xí)完《微機(jī)原理及應(yīng)用》課程后,進(jìn)行的一次以匯編語言為主,硬件設(shè)計為輔的綜合訓(xùn)練。本課程設(shè)計的其目的在于加深對微機(jī)原理基本知識的理解,掌握匯編語言程序設(shè)計的基本方法;掌握運(yùn)用微機(jī)原理開發(fā)系統(tǒng)的基本方法。2.教學(xué)要求

      從課程設(shè)計的目的出發(fā),通過設(shè)計工作的各個環(huán)節(jié),達(dá)到以下要求: 1)掌握匯編語言程序設(shè)計的基本方法。

      2)進(jìn)一步理解各種接口電路的應(yīng)用。例如8255并行接口,8253定時器等。3)掌握利用PC機(jī)揚(yáng)聲器發(fā)出不同頻率聲音的方法。3.主要技術(shù)指標(biāo)

      1)在程序運(yùn)行時使PC即成為一架可彈奏的電子琴。當(dāng)按下數(shù)字鍵1-8時,依次發(fā)出1,2,3,4,5,6,7,I這八個音調(diào)。2)在程序運(yùn)行時使PC自動按要求提示演奏樂曲。

      二、課程設(shè)計課題的分析

      圖1.揚(yáng)聲器工作原理圖示

      圖2.主程序工作流程圖

      圖3.樂曲演奏子程序工作流程圖 圖4.電子琴子程序工作流程圖

      圖5.揚(yáng)聲器工作流程圖

      三、課程設(shè)計的結(jié)果

      1、實驗代碼

      DATA

      SEGMENT INFO1

      DB 0AH, 0DH, 'WELCOME YOU TO COME HERE!$'

      DB 0AH, 0DH, 'THIS IS A MUSIC PROGRAM!$' DB 0AH, 0DH, 'PLEASE SELECLT!$' INFO4

      DB 0AH, 0DH, 'INPUT ERROR!$' INFO5

      DB 0AH, 0DH, 'PLEASE INPUT AGAIN!$' MUSLIST

      DB 0AH, 0DH, '========================='

      DB 0AH, 0DH, 'Press1

      HuanLeSong' DB 0AH, 0DH, 'Press2

      KaiXin' DB 0AH, 0DH, 'Press3

      XiaoBuWuQu' DB 0AH, 0DH, 'Press4

      Wonderful' DB 0AH, 0DH, 'Press5

      SCALE PLAY ' DB 0AH, 0DH, 'Press6

      EXIT' DB 0AH, 0DH, '=========================' DB 0AH, 0DH, '$' MUS_FRQ1

      DW 330, 330, 350, 393, 393, 350, 330, 294

      DW 262, 262, 294, 330, 330, 294, 294 DW 330, 330, 350, 393, 393, 350, 330, 294

      DW 262, 262, 294, 330, 294, 262, 262 DW 294, 294, 330, 262, 294, 330, 350, 330, 262 DW 294, 330, 350, 330, 262, 262, 294, 393 DW 330, 330, 350, 393, 393, 350, 330, 294 DW 262, 262, 294, 330, 294, 262, 262,-1 MUS_TIM1

      DW 8 DUP(100)

      DW 7 DUP(100),200 DW 8 DUP(100)DW 7 DUP(100),200 DW 5 DUP(100),50,50,2 DUP(100)DW 100,50,50,4 DUP(100),200 DW 8 DUP(100)DW 7 DUP(100),200 MUS_FRQ2

      DW 330, 294, 262, 294, 3 DUP(330)DW 3 DUP(294), 330, 392, 392 DW 330, 294, 262, 294, 4 DUP(330)DW 294, 294, 330, 294, 262,-1 MUS_TIM2

      DW 6 DUP(100),200 DW 2 DUP(100,100,200)DW 8 DUP(100)DW 4 DUP(100),400 MUS_FRQ3

      DW 392, 262, 294, 330, 350, 392, 262, 262 DW 440, 350, 392, 440, 494, 524, 262, 262 DW 350, 392, 350, 330, 294, 330

      DW 350, 330, 294, 262, 294, 330, 294, 262, 247, 262,-1 MUS_TIM3

      DW 200, 4 DUP(100), 200, 200, 200 DW 200, 4 DUP(100), 200, 200, 200 DW 200, 4 DUP(100), 200 DW 4 DUP(100), 200, 4 DUP(100), 400 MUS_FRQ4

      DW 330, 392, 330, 294, 330, 392, 330, 394, 330 DW 330, 392, 330, 294, 262, 294, 330, 392, 294

      DW 262, 262, 220, 196, 196, 220, 262, 294, 330, 262,-1 MUS_TIM4

      DW 3 DUP(200), 100, 100, 200, 100, 100, 400 DW 2 DUP(200,200,100,100), 400 DW 3 DUP(200,100,100), 400 TABLE

      DW 262, 294, 330, 349, 392, 440, 494, 525

      NUMB

      DB 0AH, 0DH, 'Keyboard number 1~8 keys play notes of the scale'

      DB 0AH, 0DH, 'Enter or Ctrl+C to exit' DB 0AH, 0DH, '$' DATA

      ENDS STACK

      SEGMENT

      PARA STACK 'STACK'

      STA

      DB 200 DUP('STACK')

      STACK

      ENDS CODE

      SEGMENT ASSUME DS: DATA, SS: STACK, CS: CODE, ES: DATA START:

      MOV AX, DATA

      MOV DS, AX MOV ES, AX MOV AX, STACK

      MOV SS, AX SHOW

      MACRO B MOV DX, OFFSET B

      MOV AH, 09H

      INT 21H ENDM SHOW INFO1 LOP:

      SHOW MUSLIST MOV AH, 01H

      INT

      21H

      CMP AL, 36H

      JZ

      RETU

      CMP AL, 31H

      JNZ

      B0 CALL MUSIC1

      JMP

      EXIT1 B0:

      CMP

      AL, 32H

      JNZ

      C0 CALL MUSIC2

      JMP

      EXIT1 C0:

      CMP

      AL, 33H

      JNZ

      D0 CALL MUSIC3

      JMP

      EXIT1 D0:

      CMP

      AL, 34H

      JNZ

      E0 CALL MUSIC4

      JMP

      EXIT1 E0:

      CMP

      AL, 35H

      JNZ

      EXIT SHOW NUMB CALL MUSIC5 EXIT1:

      SHOW INFO5

      JMP

      LOP EXIT:

      SHOW INFO4 SHOW INFO5

      JMP

      LOP RETU:

      MOV AX, 4C00H

      INT

      21H MUSIC1

      PROC

      LEA

      SI, MUS_FRQ1

      LEA

      BP,DS: MUS_TIM1 FREQ1:

      MOV DI, [SI] CMP DI,-1

      JE

      END_MUS1 MOV BX, DS: [BP] CALL GENSOUND

      ADD

      SI,2

      ADD

      BP,2 JMP FREQ1

      END_MUS1:RET MUSIC1

      ENDP MUSIC2

      PROC

      LEA

      SI, MUS_FRQ2

      LEA

      BP,DS: MUS_TIM2 FREQ2:

      MOV DI, [SI] CMP DI,-1

      JE

      END_MUS2 MOV BX, DS: [BP] CALL GENSOUND

      ADD

      SI,2

      ADD

      BP,2

      JMP FREQ2

      END_MUS2:RET MUSIC2

      ENDP MUSIC3

      PROC

      LEA

      SI, MUS_FRQ3

      LEA

      BP,DS: MUS_TIM3 FREQ3:

      MOV DI, [SI] CMP DI,-1

      JE

      END_MUS3 MOV BX, DS: [BP] CALL GENSOUND

      ADD

      SI,2

      ADD

      BP,2 JMP FREQ3

      END_MUS3:RET MUSIC3

      ENDP MUSIC4

      PROC

      LEA

      SI, MUS_FRQ4

      LEA

      BP,DS: MUS_TIM4 FREQ4:

      MOV DI, [SI] CMP DI,-1

      JE

      END_MUS4 MOV BX, DS: [BP] CALL GENSOUND

      ADD

      SI,2

      ADD

      BP,2 JMP FREQ4

      END_MUS4:RET MUSIC4

      ENDP MUSIC5

      PROC NEAR PUSH AX PUSH BX PUSH CX LOP5:

      MOV AH, 01H

      INT

      21H

      CMP AL, 0DH

      JE

      EXIT5

      CMP AL, 31H

      JB

      LOP5

      CMP AL, 38H

      JA

      LOP5

      AND AX, 0FH

      SHL

      AX, 1

      SUB

      AX, 2

      MOV SI, AX MOV BX, OFFSET TABLE MOV DI, [BX][SI]

      MOV BX, 100

      CALL

      GENSOUND

      JMP LOP5 EXIT5:

      POP CX POP BX POP AX

      RET MUSIC5

      ENDP GENSOUND

      PROC

      PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL, 0B6H

      OUT

      43H, AL

      MOV

      DX, 12H

      MOV AX, 533H*896 DIV DI OUT 42H, AL

      MOV AL, AH OUT 42H, AL

      IN AL, 61H

      MOV AH, AL OR AL, 3

      OUT 61H, AL

      PUSH AX

      WAIT1:

      MOV CX, 1200

      DELA1:

      IN AL, 61H

      AND AL, 10H CMP AL, AH JE DELA1 MOV AH,AL LOOP DELA1 DEC BX JNZ WAIT1 POP AX MOV AL, AH OUT 61H, AL

      POP DI POP DX POP CX

      POP

      BX POP AX

      RET GENSOUND ENDP CODE

      ENDS END

      START

      2、實驗現(xiàn)象

      1.進(jìn)入DOS后在DOS界面進(jìn)行匯編鏈接并生成可執(zhí)行文件.exe 2.雙擊可執(zhí)行文件DZQ.exe進(jìn)入操作界面如圖所示

      操作界面初始界面

      3.在進(jìn)行操作的時候只要在鍵盤上按1-4這數(shù)字鍵就可以聽取歌曲1-4,按數(shù)字鍵5時進(jìn)入電子琴界面,這時候1-8分別表示音樂CDEFGABC這幾個音符。按回車后退出電子琴操作界面,這時候按6退出程序。

      按數(shù)字鍵5后進(jìn)入電子琴界面

      四、心得體會

      這次課程設(shè)計給我的感覺是:與其說這次課設(shè)是一個任務(wù),不如說是期末對微機(jī)原理的一次系統(tǒng)的復(fù)習(xí)。通過課設(shè),我弄清楚了課本上一些比較晦澀但是又非常重要的章節(jié)的內(nèi)容,例如:鍵盤和顯示器DOS功能調(diào)用,數(shù)據(jù)定義偽指令的使用,子程序的嵌套,8253芯片的初始化等等。

      剛拿到課設(shè)題目時可以說是毫無思緒,但是通過查閱資料,模仿別人的程序,不斷理解,拼湊,改進(jìn),終于按照課設(shè)要求完成任務(wù)。剛開始上機(jī)運(yùn)行程序出現(xiàn)的問題不可謂不多,但是通過匯編的錯誤提示,我很容易的發(fā)現(xiàn)了問題并改正了它,如果不是上機(jī)運(yùn)行,而是一味的盯著程序檢查,那樣的話真可謂無從下手,事倍功半。這個告訴我有時候動動手實踐,遠(yuǎn)比啃書學(xué)習(xí)知識的效率要高得多。

      五、參考文獻(xiàn)

      [1] 王忠民.微型計算機(jī)原理(第二版).西安:西安電子科技大學(xué)出版社,2007年

      [2] 馬春燕.微機(jī)原理與接口技術(shù)實驗與學(xué)習(xí)輔導(dǎo).北京:電子工業(yè)出版社.2007年

      第三篇:微機(jī)原理課設(shè)

      微機(jī)應(yīng)用系統(tǒng)設(shè)計與綜合專業(yè)班級學(xué)生姓名學(xué)生學(xué)號指導(dǎo)老師實驗課程設(shè)計

      ——信號發(fā)生器功能程序設(shè)計

      第一章

      設(shè)計課題概述

      本學(xué)期開設(shè)的《微型計算機(jī)原理與接口技術(shù)》理論課程是一門專業(yè)基礎(chǔ)課程,1.1 課程設(shè)計目的

      它的主要內(nèi)容包括微型計算機(jī)體系結(jié)構(gòu)、8086 微處理器和指令系統(tǒng)、匯編語言設(shè)計以及微型計算機(jī)各個組成部分介紹等內(nèi)容。要求學(xué)生對微機(jī)原理中的基本概念有較深入的了解,能夠系統(tǒng)地掌握微型計算機(jī)的結(jié)構(gòu)、8086 微處理器和指令系統(tǒng)、匯編語言程序設(shè)計方法、微機(jī)系統(tǒng)的接口電路設(shè)計及編程方法等,并具有綜合運(yùn)用所學(xué)知識分析問題和解決問題的能力。

      《微機(jī)應(yīng)用系統(tǒng)設(shè)計與綜合實驗(實踐)》課程設(shè)計,讓學(xué)生對微機(jī)系統(tǒng)有一個較全面的理解,掌握常規(guī)的芯片使用方法、掌握簡單的微型計算機(jī)應(yīng)用系統(tǒng)軟硬件的設(shè)計方法,對典型數(shù)字接口電路的應(yīng)用技術(shù)有一個較深入的掌握,并對應(yīng)用系統(tǒng)進(jìn)行硬件原理和軟件編程進(jìn)行分析、設(shè)計和調(diào)試,達(dá)到基本掌握簡單微型計算機(jī)應(yīng)用系統(tǒng)軟硬件的設(shè)計方法,提高項目開發(fā)能力的目的。課程中要求學(xué)生根據(jù)課程設(shè)計指導(dǎo)書來選擇課題,并且獨立完成課題,寫出課程設(shè)計說明書,畫出電路原理圖,說明工作原理,畫出電路板圖,編寫程序以及程序流程圖。

      針對《信號發(fā)生器功能程序設(shè)計》這一課題,主要涉及到硬件的連接(主要用到芯片有:8086CPU,DAC0832,8255,74LS273,74LS138,運(yùn)放等)以及數(shù)碼管,鍵盤矩陣硬件,示波器等連接原理圖,程序的編寫(主要涉及到顯示波形,數(shù)碼管顯示以及通過小鍵盤來對波形進(jìn)行選擇控制)以及各個子程序或程序段的程序流程等,通過課程設(shè)計不僅可以鍛煉學(xué)生在微機(jī)應(yīng)用方面的實際工作能力,將所學(xué)轉(zhuǎn)化為所用,更是一個鍛煉解決實際問題能力的很好機(jī)會。

      1.2 課程設(shè)計要求

      (1)、分別用C語言和匯編語言編程完成硬件接口功能設(shè)計;(2)、硬件電路基于80x86微機(jī)的接口電路;

      (3)、程序功能要求:小鍵盤給定、數(shù)碼管(屏幕)顯示,并產(chǎn)生對應(yīng)信號波形(D/A)輸出(信號波形包括正弦波、三角波、方波、鋸齒波)、輸出信號波形幅度、頻率可調(diào)。(注意:按鍵數(shù)量應(yīng)盡量少)。

      ? 實現(xiàn)技術(shù)指標(biāo)

      (1)、完全用小鍵盤控制各波形間的切換和頻率和幅值的調(diào)節(jié)以及退出。(2)、實現(xiàn)正弦波、三角波、方波和鋸齒波信號的產(chǎn)生。(3)、數(shù)碼管同步顯示當(dāng)前工作波形的頻率和幅值。(4)、實現(xiàn)頻率的1到5倍可調(diào)。(5)、實現(xiàn)幅值的1到5倍可調(diào)。

      ? 使用說明

      (1)、小鍵盤第一列對應(yīng)0-3,第二列對應(yīng)4—7。

      (2)、開始選擇0—3分別對應(yīng)方波,三角波,鋸齒波,正弦波。同時數(shù)碼管會顯示當(dāng)前波形的幅值和頻率。

      (3)、有波形產(chǎn)生以后,再調(diào)節(jié)幅值和頻率。0對應(yīng)增大頻率,1對應(yīng)減小頻率,2對應(yīng)減小幅值,3對應(yīng)增大幅值。

      (4)、頻率和幅值可以實現(xiàn)1到5倍可調(diào),同時數(shù)碼管會顯示當(dāng)前波形的幅值和頻率的倍數(shù)(1~5)。

      (5)、任何時候4都對應(yīng)退出,回到最開始的選擇波形狀態(tài),數(shù)碼管歸零。

      第二章 設(shè)計思想和實施方案

      2.1功能分析

      2.1.1波形產(chǎn)生

      由于要由數(shù)字信號轉(zhuǎn)換為模擬信號來產(chǎn)生波形,因此要由D/A轉(zhuǎn)換芯片DAC0832來完成此項任務(wù)。通過匯編語言編寫各個波形子程序,由于要顯示波形,所以每輸出一個值,都要進(jìn)行一定時間的延時,掃描沒有按鍵按下后再輸出下一個值,直到形成一個周期的代碼。利用循環(huán),就可產(chǎn)生連續(xù)波形代碼,再通過8255輸出給DAC0832,將數(shù)字量轉(zhuǎn)換成模擬量輸出,即可得各種波形。具體方案在后面有分析。

      2.1.2波形切換

      波形的選擇和調(diào)節(jié)由小鍵盤控制。第一列從上到下編碼為0,1,2,3,分別對應(yīng)方波、三角波、鋸齒波、正弦波。第二列第一個鍵的鍵值為4,對應(yīng)退出波形,可以重新選擇波形,實現(xiàn)波形切換。當(dāng)沒有輸出波形的時候,也就是輸出為零,選擇0到3就會進(jìn)入相應(yīng)的波形子程序。進(jìn)入波形子程序以后,每一個點輸出之前都會調(diào)用掃描子程序,判斷是否有鍵按下,有則跳轉(zhuǎn)到相應(yīng)的程序斷去執(zhí)行,無則繼續(xù)。由于小鍵盤掃描在程序總是存在的,因此可隨時進(jìn)行波形間的切換。

      2.1.3 數(shù)碼管顯示

      數(shù)碼管同步顯示當(dāng)前波形的幅值和頻率。硬件上由8086將數(shù)據(jù)輸出給8255,8255再將輸出送給數(shù)碼管的A~Dp,顯示相應(yīng)字符。軟件上定義一個緩沖區(qū)存放波形的幅值和頻率,顯示數(shù)碼管時,利用緩沖區(qū)的數(shù)值查找數(shù)碼管鍵值表再輸出對應(yīng)數(shù)值。循環(huán)輸出波形時也循環(huán)輸出緩沖區(qū)內(nèi)容對應(yīng)的值,就可以同步顯示波形的幅值和頻率。利用小鍵盤掃描得到的鍵值進(jìn)行判斷,對緩沖區(qū)內(nèi)的幅值頻率進(jìn)行相應(yīng)的改變,使數(shù)碼管能顯示不同的幅值和頻率。

      2.1.4小鍵盤控制

      使用實驗箱上4×4鍵盤,可以實現(xiàn)切換波形,調(diào)頻、調(diào)幅和退出波形的控制功能。Protues內(nèi)的鍵盤矩陣掃描時輪流選通一行,然后從端口處讀取列數(shù)據(jù),如果有按鍵則讀取的數(shù)據(jù)肯定有一位為0,經(jīng)過取反后,盡有一位為1,然后再根據(jù)選取的列和讀取的行值,確定按的是哪一個鍵,然后將鍵值編碼保存在一個名為keyass的存儲單元里。當(dāng)有鍵按下時,從keyass內(nèi)取出鍵值進(jìn)行判斷,就能轉(zhuǎn)入相應(yīng)的子程序進(jìn)行控制,并且鍵盤掃描、獲取鍵值等子程序也能夠很好的嵌入在其他程序中,方便調(diào)用。

      2.1.5有極調(diào)頻

      改變波形子程序中的各個數(shù)據(jù)輸出時間,即延時,就可改變整個波形的頻率。延時越短頻率越高。定義三個緩沖區(qū)來存放延時,其中一個存放初始值3,一個存放當(dāng)前波形的延時,還有一個作為中間暫存用。產(chǎn)生波形以后,取出延時初值存入中間暫存緩沖區(qū),再掃描鍵盤:0對應(yīng)減小延時,1對應(yīng)增大延時,無鍵則不改變延時。對暫存區(qū)的數(shù)值進(jìn)行相應(yīng)操作后,將最后的值存入名為tiaopin的緩沖區(qū)內(nèi)作為當(dāng)前波形的延時。

      2.1.6有極調(diào)幅

      和有級調(diào)頻類似,有極調(diào)幅也是定義三個緩沖區(qū),功能和有極調(diào)頻類似。幅值緩沖區(qū)存放的是輸出點的值的放大倍數(shù),調(diào)節(jié)放大倍數(shù)也就使幅值改變了。產(chǎn)生波形以后,取出倍數(shù)初值存入中間暫存緩沖區(qū),再掃描鍵盤:2對應(yīng)減小倍數(shù),3對應(yīng)增大倍數(shù),無鍵則不改變倍數(shù)。對暫存區(qū)的數(shù)值進(jìn)行相應(yīng)操作后,將最后的值存入名為tiaofu的緩沖區(qū)內(nèi)作為當(dāng)前波形的幅值放大倍數(shù)。

      2.1.6開始結(jié)束

      用小鍵盤第二列第一個也就是4來結(jié)束波形,無論在什么時候只在小鍵盤掃描到了4鍵,它就會無條件跳出程序,返回起始狀態(tài),等待選擇波形,同時數(shù)碼管顯示零。

      2.2所用芯片功能簡介

      2.2.1 8086功能簡介

      8086 CPU是由總線接口部件BIU和執(zhí)行部件EU這兩大部分構(gòu)成??偩€接口部件BIU是8086 CPU在存儲器和I/O設(shè)備之間的接口部件,負(fù)責(zé)對全部引腳的操作,即8086對存儲器和I/O設(shè)備的所有操作都是由BIU完成的。所有對外部總線的操作都必須有正確的地址和適當(dāng)?shù)目刂菩盘?,BIU中的各部件主要是圍繞這個目標(biāo)設(shè)計的。它提供了16位雙向數(shù)據(jù)總線、20位地址總線和若干條控制總線。

      其具體任務(wù)是:負(fù)責(zé)從內(nèi)存單元中預(yù)取指令,并將它們送到指令隊列緩沖器暫存。CPU執(zhí)行指令時,總線接口單元要配合執(zhí)行單元,從指定的內(nèi)存單元或I/O端口中取出數(shù)據(jù)傳送給執(zhí)行單元,或者把執(zhí)行單元的處理結(jié)果傳送到指定的內(nèi)存單元或I/O端口中。

      執(zhí)行單元EU中包含1個16位的運(yùn)算器ALU、8個16位的寄存器、1個16位標(biāo)志寄存器FR、1個運(yùn)算暫存器和執(zhí)行單元的控制電路。這個單元進(jìn)行所有指令的解釋和執(zhí)行,同時管理上述有關(guān)的寄存器。EU對指令的執(zhí)行是從取指令操作碼開始的,它從總線接口單元的指令隊列緩沖器中每次取一個字節(jié)。如果指令隊列緩沖器中是空的,那么EU就要等待BIU通過外部總線從存儲器中取得指令并送到EU,通過譯碼電路分析,發(fā)出相應(yīng)控制命令,控制ALU數(shù)據(jù)總線中數(shù)據(jù)的流向。

      管腳圖如下:

      2.2.2 8255A功能簡介

      8255A具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過它CPU可直接與外設(shè)相連。

      8255A在使用前要寫入一個方式控制字,選擇A、B、C三個端口各自的工作方式,共有三種。方式0 :基本的輸入輸出方式,即無須聯(lián)絡(luò)就可以直接進(jìn)行的 I/O方式。其中A、B、C口的高四位或低四位可分別設(shè)置成輸入或輸出;方式1 :選通I/O,此時接口和外圍設(shè)備需聯(lián)絡(luò)信號進(jìn)行協(xié)調(diào),只有A口和B口可以工作在方式1,此時C口的某些線被規(guī)定為A口或B口與外圍設(shè)備的聯(lián)絡(luò)信號,余下的線只有基本的I/O功能,即只工作在方式0;方式2: 雙向I/O方式,只有A口可以工作在這種方式,該I/O線即可輸入又可輸出,此時C口有5條線被規(guī)定為A口和外圍設(shè)備的雙向聯(lián)絡(luò)線,C口剩下的三條線可作為B口方式1的聯(lián)絡(luò)線,也可以和B口一起方式0的I/O線。

      管腳圖如下:

      2.2.3 DAC0832功能簡介

      DAC0832是采用CMOS工藝制成的單片電流輸出型8位數(shù) / 模轉(zhuǎn)換器。它由倒T型R-2R電阻網(wǎng)絡(luò)、模擬開關(guān)、運(yùn)算放大器和參考電壓VREF四大部分組成。電路有極好的溫度跟隨性,使用了COMS電流開關(guān)和控制邏輯而獲得低功耗、低輸出的泄漏電流誤差。集成電路內(nèi)有兩級輸入寄存器,使DAC0832芯片具備雙緩沖、單緩沖和直通三種輸入方式,以便適于各種電路的需要.DAC0832有8個輸入端(其中每個輸入端是8位二進(jìn)制數(shù)的一位),有一個模擬輸出端。輸入可有2的8次方,即256個不同的二進(jìn)制組態(tài),輸出為256個電壓之一,即輸出電壓不是整個電壓范圍內(nèi)任意值,而只能是256個可能值。

      D/A轉(zhuǎn)換結(jié)果采用電流形式輸出。若需要相應(yīng)的模擬電壓信號,可通過一個高輸入阻抗的線性運(yùn)算放大器實現(xiàn)。運(yùn)放的反饋電阻可通過RFB端引用片內(nèi)固有電阻,也可外接。DAC0832邏輯輸入滿足TTL電平,可直接與TTL電路或微機(jī)電路連接。

      DAC0832的管腳圖如下:

      2.2.4 74LS273功能簡介

      地址鎖存器就是一個暫存器,它根據(jù)控制信號的狀態(tài),將總線上地址代碼暫存起來。8086/8088數(shù)據(jù)和地址總線采用分時復(fù)用操作方法,即用同一總線既傳輸數(shù)據(jù)又傳輸?shù)刂?。?dāng)微處理器與存儲器交換信號時,首先由CPU發(fā)出存儲器地址,同時發(fā)出允許鎖存信號ALE給鎖存器,當(dāng)鎖存器接到該信號后將地址/數(shù)據(jù)總線上的地址鎖存在總線上,隨后才能傳輸數(shù)據(jù)。

      地址鎖存器74LS273是帶清除端的八D觸發(fā)器,只有清除端為高電平時才具有鎖存功能,鎖存控制端為11腳CLK,在上升沿鎖存。8086的ALE端輸出的鎖存控制信號必須經(jīng)反相器后才能連到74LS273的CLK端,以滿足CLK在上升沿鎖存的要求。74LS273的引腳1D~8D為數(shù)據(jù)輸入端,1Q~8Q為數(shù)據(jù)輸出端,WR:主清除端,低電平觸發(fā),即當(dāng)為低電平時,芯片被清除,輸出全為0。CP(CLK):觸發(fā)端,上升沿觸發(fā),即當(dāng)CP從低到高電平時,D0~D7的數(shù)據(jù)通過芯片,為0時將數(shù)據(jù)鎖存,D0~D7的數(shù)據(jù)不變。由于8086有20位物理地址,所以需要用3片74LS273級聯(lián)。

      74LS273的管腳圖如右:

      2.3 實施方案

      2.3.1系統(tǒng)總體設(shè)計方案

      該設(shè)計包括硬件設(shè)計和軟件設(shè)計兩部分。

      1.硬件上要求以8086CPU為核心進(jìn)行電路設(shè)計。完全用小鍵盤對波形進(jìn)行控制。小鍵盤作為產(chǎn)生波形、波形切換、調(diào)節(jié)頻率,調(diào)節(jié)幅值、退出波形的控制端口。8255A芯片完成對小鍵盤掃描,獲取鍵值編碼以及輸出到數(shù)碼管。通過DAC0832將數(shù)字量轉(zhuǎn)換成模擬量輸出,再由轉(zhuǎn)換電路將電流輸出轉(zhuǎn)換為電壓輸出產(chǎn)生各種波形,通過虛擬示波器顯示出波形。由于8255A的A,B,C端口都已使用,所以采用鍵盤控制進(jìn)行幅值和頻率的有極調(diào)節(jié)。

      2.軟件方面要設(shè)計方波,三角波,鋸齒波,正弦波何時產(chǎn)生,如何產(chǎn)生,何時退出,并且還要設(shè)計如何通過對按鍵的判斷,對頻率和幅值進(jìn)行調(diào)節(jié)。

      方波比較簡單,先掃描鍵盤,無鍵按下時輸出零,保持一個延時,再掃描鍵盤,無鍵按下時輸出20H的倍數(shù),該倍數(shù)就是我定義的幅值,再延時,循環(huán)該周期就可得到方波。如果有鍵按下就會轉(zhuǎn)入相應(yīng)子程序。

      三角波分為兩段,因它的上升斜坡和下降斜坡都是線性關(guān)系,所以只要由數(shù)字量的增減來控制就可以了。產(chǎn)生上升斜坡時讓輸出值從零開始逐漸遞增,其上升的最大值是30乘以放大倍數(shù),相反,產(chǎn)生下降斜坡時,讓輸出值從最大值逐漸遞減到零。為簡單起見,這里采用的是查表法,在數(shù)據(jù)段定義了三角波函數(shù)表,規(guī)律如上。其幅值由放大倍數(shù)控制,頻率是由輸出點之間的延時來控制。

      鋸齒波截取三角波的上升斜坡部分,到達(dá)最大值后就跳回最低值0,方法與三角波相同,也采用查表法。先定義了鋸齒波的函數(shù)表,輸出時只要按著函數(shù)表一個一個往下輸出,當(dāng)顯示到最大值即一個周期內(nèi)的最后一個值再將指針指向表的首地址就開始了新的周期。其幅值由放大倍數(shù)控制,頻率是由輸出點之間的延時來控制。

      正弦波也是用的查表法。該方法的優(yōu)點是速度快,但在精度高的情況下要求的存儲器容量也要增大,所以此種方法應(yīng)用在對精度要求不高的場合。本程序中制造了一張正弦數(shù)字量表,即查函數(shù)表得到的值轉(zhuǎn)換成十進(jìn)制數(shù)填表。一個周期內(nèi),采樣點越多,精度越高,本實驗中采樣點為40點/周期。正弦數(shù)字量表中的值為參考值,對于不同幅值的正弦波可以通過把表中的每個值乘以相同的倍數(shù)得到,其頻率由改變輸出點之間的延時來實現(xiàn)。

      頻率和幅值的調(diào)節(jié)由每個點的延時和幅值的放大倍數(shù)決定。在各個波形輸出之前,先讀取頻率和幅值的初值,若要增加(減?。╊l率,則使延時減(加)1;若要增大(減?。┓?,則使原幅值基礎(chǔ)值得放大倍數(shù)加(減)1。然后再將改變后的幅值頻率送給原波形進(jìn)行輸出,同時,幅值和頻率的值作為偏移量查找數(shù)碼管顯示表,然后送給對應(yīng)的數(shù)碼管顯示。

      2.3.2系統(tǒng)設(shè)計方框圖

      第三章 典型程序模塊及編程技巧分析

      3.1鍵盤掃描模塊

      小鍵盤工作原理:

      (1)初始化8255的工作方式:A,B口作為輸出,C口低四位作為輸入。矩陣的X1~X4接到輸出端口PA0-PA3上,用程序控制4條行線的輸出。4條列線Y1~Y4連接到輸入端口C的PC0-PC3。用讀指令讀取C口狀態(tài)時,可讀取鍵盤的列號。

      (2)在無鍵按下的時候,由于接到+5V上的上拉電阻的作用,列線被置成高電平。壓下某一個鍵所在的行線和列線接通。這時,如果向被壓下的鍵所在的行線上輸出一個低電平信號,則對應(yīng)的列線也呈現(xiàn)低電平。當(dāng)從C口讀取列線信號時,便能檢測到該列線上的低電平。

      (3)掃描鍵盤時,A口輸出全0,讀C口,取低四位再取反,若為0則無鍵輸入,若不為零則轉(zhuǎn)獲取鍵值子程序。獲取鍵值時,對X1到X4輪流選中,即輪流輸出0。先把第一行賦0,讀C口檢測是不是第一行,不是再繼續(xù)第二行,沒有的話總共循環(huán)4次跳出循環(huán),這樣根據(jù)選中的行和讀入的列狀態(tài)中低電平的位置,便能確定哪個鍵被按下了。檢測到按鍵后,對壓下的鍵進(jìn)行編碼,將該鍵的行列信號轉(zhuǎn)化成16進(jìn)制碼,將鍵值存入緩沖區(qū),以便以后利用進(jìn)行判斷比較。接著繼續(xù)掃描按鍵,等待按鍵釋放。

      具體的實現(xiàn)如下:

      CCSCAN掃描按鍵是否有鍵按下: CCSCAN PROC

      NEAR

      ;掃描是否有按鍵閉合子程序

      MOV

      AL,00H

      MOV

      DX,MY8255_A;將4列全選通,X1~X4置0

      OUT

      DX,AL

      MOV

      DX,MY8255_C

      IN

      AL,DX

      ;讀Y1~Y4

      NOT

      AL

      AND

      AL,0FH

      ;取出Y1~Y4的反值

      RET

      CCSCAN ENDP

      如果有按鍵,就獲取按鍵碼的功能,4×4鍵盤的編碼, 從上到下,從左到右,依次編碼為0~F, 如果有按鍵, 則轉(zhuǎn)入到按鍵處理子程序模塊執(zhí)行, 如果沒有,則返回主程序循環(huán)。具體的實現(xiàn)代碼如下:

      GETKEY1 PROC

      NEAR

      ;獲取鍵值子程序

      CALL

      DIS

      ;顯示刷新

      CALL

      DALLY

      ;延時

      CALL

      DALLY

      ;延時

      CALL

      CLEAR

      ;清屏

      CALL

      JNZ

      JMP

      GETKEY2: MOV

      MOV

      COLUM: MOV

      MOV

      OUT

      MOV

      IN

      L1: TEST

      JNZ

      MOV

      JMP

      L2: TEST

      JNZ

      MOV

      JMP

      L3: TEST

      JNZ

      MOV

      JMP

      L4: TEST

      JNZ

      MOV

      KCODE: ADD

      CCSCAN

      ;再次掃描按鍵

      GETKEY2

      ;有鍵按下則跳置GETKEY2 BEGIN1

      ;否則跳回開始繼續(xù)循環(huán)

      CH,0FEH

      CL,00H

      ;設(shè)置當(dāng)前檢測的是第幾列

      AL,CH

      ;選取一列,將X1~X4中一個置0

      DX,MY8255_A DX,AL

      DX,MY8255_C;讀Y1~Y4,用于判斷哪一行按鍵閉合 AL,DX

      AL,01H

      ;是否為第1行 L2

      ;不是則繼續(xù)判斷

      AL,00H

      ;設(shè)置第1行第1列的對應(yīng)的鍵值

      KCODE

      AL,02H

      ;是否為第2行 L3

      ;不是則繼續(xù)判斷

      AL,04H

      ;設(shè)置第2行第1列的對應(yīng)的鍵值

      KCODE

      AL,04H

      ;是否為第3行 L4

      ;不是則繼續(xù)判斷

      AL,08H

      ;設(shè)置第3行第1列的對應(yīng)的鍵值

      KCODE

      AL,08H

      ;是否為第4行 NEXT

      ;不是則繼續(xù)判斷

      AL,0CH

      ;設(shè)置第4行第1列的對應(yīng)的鍵值

      AL,CL

      ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值

      CALL

      PUTBUF

      ;保存按鍵值

      PUSH

      AX

      KON: CALL

      DIS

      ;顯示刷新

      CALL

      CLEAR

      ;清屏

      CALL

      CCSCAN

      ;掃描按鍵,判斷按鍵是否彈起

      JNZ

      KON

      ;未彈起則繼續(xù)循環(huán)等待彈起

      POP

      AX

      NEXT: INC

      CL

      ;當(dāng)前檢測的列數(shù)遞增

      MOV

      AL,CH

      TEST

      AL,08H

      ;檢測是否掃描到第4列

      JZ

      KERR

      ;是則跳回到開始處

      ROL

      AL,1

      ;沒檢測到第4列則準(zhǔn)備檢測下一列

      MOV

      CH,AL

      JMP

      COLUM

      KERR: RET

      GETKEY1 ENDP PUTBUF PROC

      NEAR

      ;保存鍵值子程序

      MOV

      DI,OFFSET KEY

      MOV

      [DI],AL

      CMP

      DI,2FFFH

      JNZ

      GOBACK

      MOV

      DI,3004H

      GOBACK: RET

      PUTBUF ENDP

      3.2數(shù)碼管顯示模塊

      4個數(shù)碼管的X端為選通端,將小鍵盤的X1~X4對應(yīng)接到數(shù)碼管,這樣掃描小鍵盤的時候,也就選中了數(shù)碼管,當(dāng)調(diào)用getkey1獲取鍵值子程序的時候,數(shù)碼管輪流選中,也就可以控制哪個數(shù)碼管顯示什么內(nèi)容。通過對8255寫入數(shù)據(jù),由B口輸出給數(shù)碼管的A~Dp,當(dāng)沒有波形輸入時,數(shù)碼管顯示0數(shù)碼管;定義兩個緩沖區(qū)存放幅值和頻率,有波形輸出時,同步顯示該波形的幅值和頻率。

      先在數(shù)據(jù)段定義一個緩沖區(qū)存放數(shù)碼管顯示0~F的段位值表: DTABLE DB

      3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB

      7FH,6FH,77H,7CH,39H,5EH,79H,71H 因為要一直顯示數(shù)碼管,所以將顯示部分作為子程序,方便經(jīng)常調(diào)用。DIS PROC

      NEAR

      ;顯示鍵值子程序

      AGAIN:

      PUSH

      AX

      ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值

      并顯示

      MOV

      SI,3000H

      ;緩沖區(qū)3000H內(nèi)存放了當(dāng)前波形的幅

      值,3001H存放了頻率。

      MOV

      DL,0F7H MOV

      AL,DL PUSH

      DX MOV

      DX,MY8255_A OUT

      DX,AL

      ;設(shè)置X1~X4,選通一個數(shù)碼管 MOV

      AL,[SI]

      ;取出緩沖區(qū)中存放鍵值 MOV

      BX,OFFSET DTABLE AND

      AX,00FFH ADD

      BX,AX MOV

      AL,[BX]

      ;將鍵值作為偏移和鍵值基地址相加得到

      相應(yīng)的鍵值

      MOV

      DX,MY8255_B OUT

      DX,AL

      ;寫入數(shù)碼管A~Dp CALL

      DALLY INC

      SI

      ;取下一個鍵值 POP

      DX MOV

      AL,DL TEST

      AL,01H

      ;判斷是否顯示完? JZ

      OUT1

      ;顯示完,返回 ROR

      AL,1 MOV

      DL,AL

      JMP

      AGAIN

      ;未顯示完,跳回繼續(xù)

      OUT1: POP

      AX

      RET

      DIS ENDP 3.3有級調(diào)頻調(diào)幅判斷及控制模塊

      改變波形產(chǎn)生子程序中的各個數(shù)據(jù)輸出時間,及延時,就可改變整個波形的頻率。改變波形產(chǎn)生子程序中的每次輸出數(shù)值的放大倍數(shù),就可以改變整個波形的幅值。而實現(xiàn)有級變化的初值是在數(shù)據(jù)段預(yù)先定義的數(shù)據(jù)表。

      在選擇波形以后,才能調(diào)節(jié)頻率和幅值,頻率和幅值的調(diào)節(jié)由小鍵盤控制。在3000H和3001H的緩沖區(qū)內(nèi)存放了幅值和頻率的初值3,在每個波形輸出之前先掃描鍵盤,鍵值存在KEY里,對KEY值進(jìn)行判斷后,取出緩沖區(qū)的初值做相應(yīng)改變:0選擇增大頻率,1選擇減小頻率,2選擇減小幅值,3選擇增大幅值,4退出波形,返回開始狀態(tài)。

      具體的實現(xiàn)代碼如下:

      AMPLFENC PROC

      NEAR

      ;調(diào)節(jié)幅值頻率子程序

      CALL

      DIS

      ;刷新

      CALL

      CCSCAN

      ;再次掃描按鍵

      JNZ

      TRI1

      ;有鍵按下則跳置tri1

      JMP

      TRI5

      ;沒按鍵按下就跳出該子程序

      TRI1: CALL

      DIS

      ;刷新

      CALL

      GETKEY1

      MOV

      SI,OFFSET KEY

      MOV

      AL,[SI]

      CMP

      AL,4

      ;第五個鍵就退出

      JZ

      TRI10

      JZ

      TRI5

      CMP

      AL,0

      ;第一個鍵減少周期

      JNZ

      TRI2

      MOV

      DI,3001H

      ;取延時初值

      MOV

      BL,[DI]

      CMP

      BL,01H

      JE

      TRI5

      DEC

      BL

      MOV

      [DI],BL

      JMP

      TRI5

      TRI2: CMP

      AL,1

      ;第二個鍵增加周期

      JNZ

      MOV

      MOV

      CMP

      JE

      INC

      MOV

      JMP

      TRI3: CMP

      JNZ

      MOV

      MOV

      CMP

      JE

      DEC

      MOV

      JMP

      TRI4: CMP

      JNZ

      MOV

      MOV

      CMP

      JE

      INC

      MOV

      JMP

      TRI3

      DI,3001H BL,[DI] BL,05H TRI5 BL [DI],BL TRI5

      AL,2

      TRI4 DI,3000H

      BL,[DI]

      BL,01H TRI5 BL [DI],BL TRI5

      AL,3

      TRI5 DI,3000H

      BL,[DI]

      BL,05H TRI5 BL [DI],BL TRI5

      ;取延時初值;第三個鍵減少幅度

      ;取幅值初值;第四個鍵增加幅度

      ;取幅值初值

      TRI10: JMP

      FAR PTR BEGIN0

      TRI5: RET

      AMPLFENC ENDP

      3.4 波形切換及基本控制模塊

      這個模塊是本次設(shè)計的主程序,它控制了波形的輸出和切換。它是根據(jù)對小鍵盤的操作來實現(xiàn)的,不同按鍵對應(yīng)的編碼轉(zhuǎn)入不同模塊(0:方波,1:三角波,2:鋸齒波,3:正弦波,4:退出波形)。先掃描鍵盤是否有鍵按下,若無循環(huán)等待,若有則將鍵值保存再比較,然后實現(xiàn)相應(yīng)操作。為使程序可循環(huán)使用,不至于顯示一次波形就退出,在執(zhí)行完子程序返回時,不退出系統(tǒng),而是返回到開始等待輸入狀態(tài),這樣就能切換波形。

      具體的實現(xiàn)代碼如下:

      BEGIN0: MOV

      SI,3000H

      ;把數(shù)碼管清0

      MOV

      AL,00H

      ;先初始化鍵值為0

      MOV

      [SI],AL

      MOV

      AL,00H

      MOV

      [SI+1],AL

      MOV

      AL,00H

      MOV

      [SI+2],AL

      MOV

      AL,00H

      MOV

      [SI+3],AL

      MOV

      SI,OFFSET KEY

      MOV

      AL,00H

      MOV

      [SI],AL BEGIN1: CALL

      DIS

      ;顯示刷新

      CALL

      CCSCAN

      ;再次掃描按鍵

      JNZ

      LBEGIN0

      ;有鍵按下則跳置LBEGIN0

      JMP

      BEGIN1;不是按下第一或二鍵就繼續(xù)等待輸入

      LBEGIN0: CALL

      GETKEY1

      ;第二個菜單等待輸入

      CALL

      DIS

      MOV

      SI,OFFSET KEY

      MOV

      AL,[SI]

      CMP

      AL,4

      ;第5個鍵退出

      JZ

      BEGIN0

      CMP

      AL,0

      ;第1個鍵到squ(方波)函數(shù)

      JZ

      LBEGIN1

      CMP

      AL,1

      ;第2個鍵到tri(三角波)函數(shù)

      JZ

      LBEGIN2

      CMP

      AL,2

      ;第3個鍵到rec(鋸齒)函數(shù)

      JZ

      LBEGIN3

      CMP

      AL,3

      ;第4個鍵到sin(正弦)函數(shù)

      JZ

      LBEGIN4

      JMP

      BEGIN1

      ;其他鍵則跳到繼續(xù)等待輸入

      LBEGIN1: CALL

      SQUREW

      ;SQUARE

      JMP

      BEGIN0

      LBEGIN2: CALL

      TRIW

      ;TRIANGLE

      JMP

      BEGIN0

      LBEGIN3: CALL

      RCTW

      ;RECANGLE

      JMP

      BEGIN0

      LBEGIN4: CALL

      SINW

      ;SIN

      JMP

      BEGIN0

      ;執(zhí)行完輸出波形之后 回到開始狀態(tài)

      JMP

      BEGIN0

      3.5波形產(chǎn)生模塊 3.5.1方波

      方波的產(chǎn)生只要使DAC0832輸出一個較大值(此處用20H),并延時一段時間,再輸出一個較小值(此處用00F),延時一段相同時間,就是方波的一個周期。但因為實現(xiàn)過程中結(jié)合了數(shù)碼管的顯示以及頻率幅值的調(diào)節(jié)所以并不那么簡單。先將幅值和頻率的初值放入暫存緩沖區(qū),使數(shù)碼管顯示,掃描鍵盤,無鍵按下則繼續(xù),有鍵按下則先判斷是否為0到3,是則調(diào)節(jié)頻率幅值,是4則退出波形。執(zhí)行相應(yīng)操作后刷新數(shù)碼管,將新的幅值和頻率存在TIAOFU和TIAOPIN的緩沖區(qū)內(nèi),把低電平的值乘以TIAOFU輸出,延遲時間乘以TIAOPIN,使該值持續(xù)一段時間,輸出高電平的過程與低電平相同,循環(huán)該周期就得到連續(xù)方波。

      具體的實現(xiàn)代碼如下:

      SQUREW PROC

      NEAR

      ;方波發(fā)生子程序

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      SQUR1: CALL 調(diào)節(jié)幅值頻率

      MOV

      MOV

      CMP

      JZ

      CALL

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      TRILOOP1: MOV

      MOV

      DI,OFFSET FENC

      ;初始化顯示管的值為3

      AL,[DI]

      SI,3000H

      [SI],AL

      DI,OFFSET AMPL

      AL,[DI]

      SI,3001H

      [SI],AL

      AMPLFENC

      ;調(diào)節(jié)幅值頻率子程序,有鍵按下是

      SI,OFFSET KEY

      ;按下第五個鍵就退出

      AL,4

      [SI],AL

      SQUA

      DIS

      ;刷新數(shù)碼管

      SI,3000H

      BL,[SI]

      DI,OFFSET TIAOFU

      [DI],BL

      SI,3001H

      AL,[SI]

      SI,OFFSET TIAOPIN

      [SI],AL

      DX,DA0832

      ;輸出低電平

      輸出方波形

      AL,00H

      OUT

      DX,AL

      CALL

      DIS

      ;刷新

      PUSH

      CX

      PUSH

      AX

      MOV

      CL,TIAOPIN

      MOV

      CH,00H

      D11: MOV

      D21: DEC

      PUSH

      PUSH

      CALL

      CALL

      JNZ

      POP

      POP

      JNZ

      LOOP

      POP

      POP

      CALL

      JNZ

      MOV

      MOV

      MUL

      MOV

      OUT

      CALL

      PUSH

      PUSH

      MOV

      MOV

      D12: MOV

      AX,00FFH AX AX CX DIS

      CCSCAN

      ;再次掃描按鍵 SQUR1

      ;有鍵按下則跳置squr1, CX AX D21 D11 AX CX

      CCSCAN

      ;再次掃描按鍵

      SQUR1;有鍵按下則跳置squr1,改變幅值頻率 BL,TIAOFU AL,20H BL

      DX,DA0832

      ;輸出高電平DX,AL

      DIS

      ;刷新 CX AX CL,TIAOPIN CH,00H AX,00FFH

      D22: DEC

      AX

      PUSH

      AX

      PUSH

      CX

      CALL

      DIS

      CALL

      CCSCAN

      ;再次掃描按鍵

      JNZ

      SQUR1

      ;有鍵按下則跳置tri1

      POP

      CX

      POP

      AX

      JNZ

      D22

      LOOP

      D12

      POP

      AX

      POP

      CX

      JZ

      TRILOOP1

      ;沒按鍵時繼續(xù)輸出波形

      SQUA: RET

      SQUREW ENDP

      3.5.2三角波

      三角波理論上有兩段,上升和下降,上升時從最低值開始自增,直到最大值,然后再自減至最低。本設(shè)計中,因為對波形精度要求不是很高,所以采用按列表輸出的方式,即先在數(shù)據(jù)段定義了一段三角波一個周期內(nèi)的采樣值的數(shù)字量表,采樣頻率為60點/周期。數(shù)字量表中的值為參考值,輸出三角波時通過把表中的每個值乘以相同的倍數(shù),該倍數(shù)為我們設(shè)定的幅值。波形輸出方式都相同,這里簡要說明:先將幅值和頻率的初值放入暫存緩沖區(qū),使數(shù)碼管顯示,掃描鍵盤,執(zhí)行相應(yīng)操作后刷新數(shù)碼管,將新的幅值和頻率存在TIAOFU和TIAOPIN的緩沖區(qū)內(nèi),將第一個數(shù)字量乘以TIAOFU輸出,延遲時間乘以TIAOPIN,再掃描,輸出第二個值,直到指針指完該數(shù)字量表再循環(huán)該周期就得到連續(xù)三角波。

      具體的實現(xiàn)代碼如下:

      TRITAB

      DB

      1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;三角函數(shù)表

      DB

      16,17,18,19,20,21,22,23,24,25,26,27,28,29,30

      DB

      30,29,28,27,26,25,24,23,22,21,20,19,18,17,16

      DB

      15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 TRIW PROC

      NEAR

      ;三角波形子程序

      MOV

      DI,OFFSET FENC

      MOV

      AL,[DI]

      MOV

      SI,3000H

      MOV

      [SI],AL

      TRA1:

      TRLOOP1:

      TRLOOP2:

      MOV

      DI,OFFSET AMPL MOV

      AL,[DI] MOV

      SI,3001H MOV

      [SI],AL CALL

      AMPLFENC MOV

      SI,OFFSET KEY MOV

      AL,4 CMP

      [SI],AL JZ

      TRIA CALL

      DIS MOV

      SI,3000H MOV

      BL,[SI] MOV

      DI,OFFSET TIAOFU MOV

      [DI],BL MOV

      SI,3001H MOV

      AL,[SI] MOV

      SI,OFFSET TIAOPIN MOV

      [SI],AL MOV

      SI,OFFSET TRITAB MOV

      AL,[SI] MOV

      BL,TIAOFU MUL

      BL MOV

      DX,DA0832

      ;啟動D/A轉(zhuǎn)換 OUT

      DX,AL PUSH

      AX PUSH

      SI

      PUSH

      CX

      MOV

      CL,TIAOPIN

      MOV

      CH,00H

      DALLYTRI1: CALL

      DIS

      CALL

      CCSCAN

      JNZ

      TRA1

      LOOP

      DALLYTRI1

      POP

      CX

      POP

      SI

      POP

      AX

      INC

      SI

      CMP

      SI,OFFSET RCTTAB

      JNZ

      TRLOOP2

      JMP

      TRLOOP1

      TRIA: RET

      TRIW ENDP

      3.5.3鋸齒波

      鋸齒波就是截取了三角波的上升部分,由最小值自增到達(dá)最大值后下一個值就返回最小值。本設(shè)計中鋸齒波的產(chǎn)生方式也是對鋸齒波采樣,采樣周期為32點/周期,然后以采樣表為基礎(chǔ)輸出。鋸齒波的輸出方式與三角波相同,這里不再重復(fù)。

      具體的實現(xiàn)代碼如下:

      先在數(shù)據(jù)段定義一張鋸齒波采樣后的數(shù)字量表: RCTTAB DB

      1,2,3,4,5,6,7,8

      ;鋸齒函數(shù)表

      DB

      9,10,11,12,13,14,15,16

      DB

      17,18,19,20,21,22,23,24

      DB

      25,26,27,28,29,30,31,32 RCTW PROC

      NEAR

      ;鋸齒波形子程序

      MOV

      DI,OFFSET FENC

      MOV

      AL,[DI]

      MOV

      SI,3000H

      MOV

      [SI],AL

      MOV

      DI,OFFSET AMPL

      MOV

      AL,[DI]

      MOV

      SI,3001H

      MOV

      [SI],AL

      RCT1: CALL

      AMPLFENC

      MOV

      MOV

      CMP

      JZ

      CALL

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      RCLOOP1: MOV

      RCLOOP2: MOV

      MOV

      MUL

      MOV

      OUT

      PUSH

      PUSH

      PUSH

      MOV

      MOV

      DALLYRCT1: CALL

      CALL

      SI,OFFSET KEY AL,4 [SI],AL DIS SI,3000H BL,[SI]

      DI,OFFSET TIAOFU [DI],BL SI,3001H AL,[SI]

      SI,OFFSET TIAOPIN [SI],AL

      SI,OFFSET RCTTAB AL,[SI] BL,TIAOFU BL

      DX,DA0832

      ;啟動D/A轉(zhuǎn)換 DX,AL AX SI CX CL,TIAOPIN CH,00H

      ;刷新,掃描,延時CCSCAN

      RCTA

      DIS

      JNZ

      RCT1

      LOOP

      DALLYRCT1

      POP

      CX

      POP

      SI

      POP

      AX

      INC

      SI

      ;下一個值

      CMP

      SI,OFFSET STR1

      JNZ

      RCLOOP2

      JMP

      RCLOOP1

      RCTA: RET

      RCTW ENDP

      3.5.4正弦波

      正弦波的產(chǎn)生方式有兩種,一種是通過調(diào)用函數(shù)輸出,精度較高,第二種為采樣查表法。本實驗精度要求不高,所以采用第二種。該方法與前面的三角波,鋸齒波方法相同,對一個周期內(nèi)的正弦波采樣,采樣周期為40點/周期,輸出方式與三角波相同,不再重復(fù)。

      先在數(shù)據(jù)段定義正弦波的采樣數(shù)字量表:

      SINTAB DB

      16,19,21,23,25,27,29,30,31,32,32,32

      ;正弦函數(shù)表

      DB

      31,30,29,27,25,23,21,19,16,13,11,9

      DB

      7,5,3,2,1,0,0,0,1,2,3,5,7,9,11,13 SINW PROC

      NEAR

      ;正弦波的子程序

      MOV

      DI,OFFSET FENC

      MOV

      AL,[DI]

      MOV

      SI,3000H

      ;取幅值初值

      MOV

      [SI],AL

      MOV

      DI,OFFSET AMPL

      MOV

      AL,[DI]

      MOV

      SI,3001H

      ;取頻率初值

      MOV

      [SI],AL

      SINA1: CALL

      AMPLFENC

      MOV

      SI,OFFSET KEY

      MOV

      AL,4

      CMP

      [SI],AL

      JZ

      SINA

      CALL

      DIS

      MOV

      SI,3000H

      MOV

      BL,[SI]

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      SINLOOP1: MOV

      SINLOOP2: MOV

      MOV

      MUL

      MOV

      OUT

      PUSH

      PUSH

      PUSH

      MOV

      MOV

      DALLYSIN1: CALL

      CALL

      JNZ

      LOOP

      POP

      POP

      POP

      INC

      CMP

      DI,OFFSET TIAOFU [DI],BL SI,3001H AL,[SI]

      SI,OFFSET TIAOPIN [SI],AL

      SI,OFFSET SINTAB AL,[SI] BL,TIAOFU BL

      DX,DA0832

      ;啟動D/A轉(zhuǎn)換

      DX,AL AX SI CX CL,TIAOPIN CH,00H CCSCAN SINA1 DALLYSIN1 CX SI AX SI

      SI,OFFSET TRITAB

      ;是否結(jié)束一個周期

      DIS

      JNZ

      SINLOOP2

      JMP

      SINLOOP1

      SINA: RET

      SINW ENDP

      第四章 系統(tǒng)調(diào)試遇到的問題及解決方法

      本次課程設(shè)計是對前幾次微機(jī)原理實驗的檢驗,也是微機(jī)原理與接口技術(shù)這門課程的綜合應(yīng)用。前幾次軟件實驗,我都積極地實現(xiàn)了拓展題目的要求,所以在選擇課題的時候,我第一印象就感覺到信號發(fā)生器對軟件要求要大于硬件要求,重點是編程,所以,在選擇了這個題目以后我就開始思考用何種方式實現(xiàn)。

      整體分析后,硬件電路的系統(tǒng)設(shè)計比較簡單,主程序的設(shè)計思路也比較清晰,主要分為波形產(chǎn)生,數(shù)碼管顯示,鍵盤控制,頻率幅值調(diào)節(jié)四個模塊。但是具體每個模塊的實現(xiàn)卻又遇到了很多的問題,方案上也有些調(diào)整。

      在此次實驗系統(tǒng)調(diào)試的過程中,把整個大的程序劃分為幾個小模塊分開調(diào)試好,無誤后再寫主程序?qū)⒏鱾€子程序整合起來。雖然一開始感覺思路是很好的,但是在實現(xiàn)過程中遇到了很大的麻煩。

      1.硬件的連線。硬件連好后,將方波子程序載入8086,最開始示波器連輸出都沒有,DAC0832的片選端一直沒有被選中,我總是以為是地址的問題,可是怎么檢查程序也是沒有理由出錯的,最后發(fā)現(xiàn)DAC0832的WR端虛接了,軟件畫圖容易出現(xiàn)虛接的情況,所以連線的時候一定要小心。

      2.小鍵盤控制,這也是整個程序中最核心的部分。這個子程序加在程序的最前面的,如果沒有掃描到鍵值,整個程序就會陷入死循環(huán),不會有任何輸出變化。要使鍵盤掃描得到鍵值,我參考了實驗指導(dǎo)書上的小鍵盤控制,先把小鍵盤掃描的程序單獨給出來,看能否顯示數(shù)字,結(jié)果并不能正常顯示,反復(fù)檢查調(diào)試以后,修改了鍵值的存儲方式以及延時,將其修改后,小鍵盤方面能正常掃描了。

      3.其實最復(fù)雜的是將數(shù)碼管顯示和小鍵盤掃描整合在一起。數(shù)碼管顯示問題一直很復(fù)雜,總是不能正常的顯示,明明小鍵盤Y端有變化,表明有鍵按下,但是數(shù)碼管就是不能將要顯示的數(shù)平穩(wěn)地顯示,剛開始只顯示零,后來經(jīng)修改后,會偶爾顯示一下幅值或頻率但又立馬變了,并且顯示的數(shù)字也不正確,貌似會和之前顯示的數(shù)字有重雙影。查唐都的實驗說明得知,數(shù)碼管只提供了一個8位數(shù)據(jù)端口,一次只能讓一個數(shù)碼管顯示數(shù)據(jù),然后顯示過程特別地快,基本上看不到想要的結(jié)果,并且閃爍得特別厲害。經(jīng)過反復(fù)一直地查找修改,終于發(fā)現(xiàn),有兩個數(shù)碼管顯示的內(nèi)容重疊了,原來是要顯示的兩個存儲單元的地址弄混了,并且延時也有問題。但是數(shù)碼管的延時又涉及到波形每個輸出點的延時,所以將波形產(chǎn)生方面,我改用了采樣數(shù)字量表,使所有的波形產(chǎn)生都簡化了,同時也使延時更短,改為增加循環(huán)次數(shù),并且使數(shù)碼管顯示也加入循環(huán)里,這樣利用視覺暫留,就能看到同時顯示幅值和頻率。

      4.在小鍵盤實現(xiàn)中還出現(xiàn)了一個很重要的問題,就是在執(zhí)行到對應(yīng)的波形時要怎么樣跳出然后執(zhí)行到另外一個波形里面去。原本我想多設(shè)置幾個按鍵,4個負(fù)責(zé)選擇波形,4個負(fù)責(zé)調(diào)幅調(diào)頻,還要加一個退出按鍵,每輸出一個周期就掃描一次,可是這樣按鍵太多了程序顯得臃腫,并且沒有波形的情況調(diào)節(jié)頻率也是沒有意義的,而且一個周期的時間,很有可能使你的按鍵落空,沒有掃描進(jìn)去。最后決定只用5個鍵。沒有波形時4個按鍵選擇波形,每次執(zhí)行完一個點后再重新鍵盤掃描,此時那4個鍵又代表調(diào)幅和調(diào)頻,而4鍵從始至終設(shè)置為退出鍵,只要任何時候掃描到此鍵就返回初始狀態(tài),重新進(jìn)入波形選擇,這樣就實現(xiàn)了波形的切換,又使按鍵有效率更高,而且按鍵數(shù)量也很少。

      5.方波和三角波的波形產(chǎn)生的程序并不難。鋸齒波就是截取三角波的一半,而正弦波,我找到的正弦波采樣值序列表都很長,而且值都比較大,所以最后,我用計算器在0~2π內(nèi)取了40個點的正弦值。最后在調(diào)節(jié)幅值的時候,當(dāng)調(diào)到最大幅值時,有兩種波形失真了,尤其正弦波和三角波形被截頂了。但是我觀察到鋸齒波卻能正常顯示,原來鋸齒波的采樣數(shù)字量表的最大值比較小,經(jīng)放大最大倍數(shù)后也沒有超出范圍。這可能是因為放大后正弦波的最大值已經(jīng)超出了運(yùn)放輸出的最大電壓,所以導(dǎo)致截頂失真。所以我將數(shù)字量的值整體縮小了,最后總算達(dá)到滿意的效果。第五章 課程設(shè)計收獲與體會

      本次課程設(shè)計在面臨考試的巨大壓力和編程難度的雙重壓力下終于完成了。這讓我對于微機(jī)原理與接口技術(shù)這門課程又有了更深的了解,尤其是匯編語言的運(yùn)用。這是一次很好的實踐的機(jī)會,將我們之前幾個星期做的微機(jī)原理與接口技術(shù)實驗的軟件和硬件部分都結(jié)合起來,靈活的運(yùn)用,鍛煉我們學(xué)以致用,解決實際問題的能力。我在此次課程設(shè)計中受益匪淺,收獲良多。

      本次設(shè)計我是用仿真完成的,因為上學(xué)期在模電數(shù)電課程設(shè)計中也使用到了protues軟件,所以這次的設(shè)計,對于protues的使用我一點也不陌生。但是,這次的仿真比起以前模電數(shù)電仿真要復(fù)雜多了。因為這次我選擇的信號發(fā)生器重點就是匯編語言程序的編寫和調(diào)試,程序出現(xiàn)的錯誤比硬件出現(xiàn)的錯要難找的多,尤其是邏輯錯誤,有的時候看都看不出來。但是我還是比較喜歡匯編語言的,可能是對C已經(jīng)忘得差不多了的緣故吧,腦子里只有匯編。匯編是一門很原始的語言,但是也是一門很有用的語言,通過這么一個比較大的實驗,讓我對匯編的理解有了進(jìn)一步的加深。雖然中間過程有苦有煎熬,但是還是很值得回味的,因為我們就是在這樣一次又一次煎熬中才熬出了頭,才不斷成長為更加強(qiáng)大的人。

      在這次設(shè)計中,一開始想的比較簡單和樂觀,因為在做微機(jī)原理編程實驗的時候,我們接觸的都是幾十行到一百來行的小程序,寫完一檢查就能比較輕松地查找到錯誤,但是這次的題目重點就在編程。一開始,我以為這些程序不會錯,電路也比較簡單。所以當(dāng)我很快的連好電路,再幾個子程序都加載進(jìn)去的時候,就完全不是我想象的那樣輸出。而且從整個電路分析,我也找不到問題到底出在哪里。我必須要一步一步地再回頭檢查錯誤。這樣有可能還檢查不出來,最后我只能從一個小模塊開始重新連電路,再將該模塊對應(yīng)的程序加載,有問題再改。就這樣,一步一步,只有解決了局部的問題,才能為解決整體的問題提供可能。

      在小鍵盤和數(shù)碼管顯示的模塊,確實一度陷入瓶頸,不知道問題出在哪里,為什么就是不能顯示。我去了幾次實驗室,想和大家交流一下,但是選擇這個題目的人真的很少,最后找到幾個同學(xué),但是他們迫于考試壓力要么放棄了仿真,要么放棄了小鍵盤,當(dāng)時的情緒真是非常抑郁,難道就真的做不出來了嗎?怎么可能?就是不相信,感覺就差一點點,就要實現(xiàn)了,因為堅持,因為堅信,因為堅定,哪怕這個茬再難找也會原形畢露的。當(dāng)看到數(shù)碼管顯示正常,自己的心血終于有了結(jié)果,內(nèi)心的喜悅溢于言表。有句話說得對:失敗就是離成功最近的地方,邁過去了就是另一片天。

      這次的課程設(shè)計,我要十分感謝同學(xué)們給予我的幫助,還有李志明老師的指導(dǎo),讓我在短短的幾個星期里學(xué)到了很多很實用的知識,通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才是真正的知識,才能提高自己的實際動手能力和獨立思考的能力。而且在做課程設(shè)計的過程中,不僅是考驗自己所學(xué)的《微機(jī)原理》知識,更是要鍛煉自己的分析問題的能力和解決實際問題的能力,而在此次課程設(shè)計過程中得到了充分的體現(xiàn)。雖然在設(shè)計的過程遇到了各種各樣的問題,但同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設(shè)計,把以前所學(xué)過的知識重新溫習(xí),加以鞏固。

      這回顧起此次課程設(shè)計,我收獲頗豐,不僅鞏固了《微機(jī)原理》的知識,而且鍛煉了動手設(shè)計,解決實際問題的能力,同時讓我堅定了一個信念,學(xué)習(xí)上,沒有攀登不了的山峰,即使山重水復(fù)疑無路,只要堅持下去,也會看到柳暗花明又一村。在今后的學(xué)習(xí)中,我也會將以這樣的精神面對所有的困難。

      第六章 參考文獻(xiàn)

      1.《微機(jī)原理與接口技術(shù)(第4版)》周荷琴等 中國科學(xué)技術(shù)大學(xué)出版社 2.《TD-PIT+實驗教程》 3.《TD-PIT+用戶手冊》

      第七章 附錄

      7.1匯編源程序

      IOY0 EQU

      0C400H

      ;片選IOY0對應(yīng)的端口始地址

      IOY1 EQU

      0C440H

      ;片選IOY0對應(yīng)的端口始地址;*****************************************************************

      MY8255_A EQU

      IOY0+00H*4;8255的A口地址

      MY8255_B EQU

      IOY0+01H*4;8255的B口地址

      MY8255_C EQU

      IOY0+02H*4;8255的C口地址

      MY8255_MODE EQU

      IOY0+03H*4;8255的控制寄存器地址

      DA0832 EQU

      IOY1+00H*4;DA0832的端口地址

      STACK1 SEGMENT

      STACK

      DW

      256 DUP(?)

      STACK1 ENDS

      DATA SEGMENT

      DTABLE DB

      3FH,06H,5BH,4FH,66H,6DH,7DH DB

      07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

      ;鍵值表,0~F對應(yīng)的7段數(shù)碼管的段位值

      SINTAB DB

      16,19,21,23,25,27,29,30,31,32,32,32 DB

      31,30,29,27,25,23,21,19,16

      ;正弦函數(shù)表

      DB

      13,11,9,7,5,3,2,1,0,0,0,1,2,3,5,7,9,11,13

      TRITAB DB

      1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;三角函數(shù)表

      DB

      16,17,18,19,20,21,22,23,24,25,26,27,28,29,30

      DB

      30,29,28,27,26,25,24,23,22,21,20,19,18,17,16

      DB

      15,14,13,12,11,10,9,8,7,6,5,4,3,2,1

      RCTTAB DB

      1,2,3,4,5,6,7,8

      ;鋸齒函數(shù)表

      DB

      9,10,11,12,13,14,15,16

      DB

      17,18,19,20,21,22,23,24

      DB

      25,26,27,28,29,30,31,32

      STR1 DB

      'press 0~3 to output wave',0AH,0DH

      DB

      'press 4to quit ',0AH,0DH,'$'

      AMPL DB

      FENC DB

      TIAOFU DB

      ?

      TIAOPIN DB

      ?

      KEY DB

      ?

      DATA ENDS

      CODE SEGMENT

      ASSUME

      CS:CODE,DS:DATA

      START: MOV

      AX,DATA

      MOV

      DS,AX

      MOV

      DX,MY8255_MODE

      ;初始化8255工作方式

      MOV

      AL,81H

      ;方式0,A口、B口輸出,C口低4位輸入

      OUT

      DX,AL

      BEGIN0: MOV

      SI,3000H

      ;把數(shù)碼管清0

      MOV

      AL,00H

      ;先初始化鍵值為0

      MOV

      [SI],AL

      MOV

      AL,00H

      MOV

      [SI+1],AL

      MOV

      AL,00H

      MOV

      [SI+2],AL

      MOV

      AL,00H

      MOV

      [SI+3],AL

      MOV

      SI,OFFSET KEY

      MOV

      AL,00H

      MOV

      [SI],AL

      BEGIN1: CALL

      DIS

      ;顯示刷新

      CALL

      CCSCAN

      ;再次掃描按鍵

      JNZ

      LBEGIN0

      ;有鍵按下則跳置LBEGIN0

      JMP

      BEGIN1

      ;不是按下第一或二鍵就繼續(xù)等待輸入

      LBEGIN0: CALL

      GETKEY1

      ;第二個菜單等待輸入

      CALL

      DIS

      MOV

      SI,OFFSET KEY

      MOV

      AL,[SI]

      CMP

      AL,4

      ;第5個鍵退出

      JZ

      BEGIN0

      CMP

      AL,0

      ;第1個鍵到squ(方波)函數(shù)

      JZ

      CMP

      JZ

      CMP

      JZ

      CMP

      JZ

      JMP

      LBEGIN1: CALL

      JMP

      LBEGIN2: CALL

      JMP

      LBEGIN3: CALL

      JMP

      LBEGIN4: CALL

      JMP

      JMP

      SQUREW PROC

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      LBEGIN1

      AL,1

      ;第2個鍵到tri(三角波)函數(shù) LBEGIN2

      AL,2

      ;第3個鍵到rec(鋸齒)函數(shù) LBEGIN3

      AL,3

      ;第4個鍵到sin(正弦)函數(shù) LBEGIN4

      BEGIN1

      ;其他鍵則跳到繼續(xù)等待輸入 SQUREW

      ;SQUARE BEGIN0

      TRIW

      ;TRIANGLE BEGIN0

      RCTW

      ;RECANGLE BEGIN0

      SINW

      ;SIN

      BEGIN0

      ;執(zhí)行完輸出波形之后 回到開始狀態(tài) BEGIN0

      ;上面是主程序

      NEAR

      ;方波發(fā)生子程序

      DI,OFFSET FENC

      ;初始化顯示管的值為3 AL,[DI] SI,3000H [SI],AL

      DI,OFFSET AMPL AL,[DI] SI,3001H

      MOV

      [SI],AL

      SQUR1: CALL

      AMPLFENC

      ;調(diào)節(jié)幅值頻率子程序,有鍵按下是調(diào)節(jié)幅值頻率

      MOV

      SI,OFFSET KEY

      ;按下第五個鍵就退出

      MOV

      AL,4

      CMP

      [SI],AL

      TRILOOP1:

      D11:

      D21:

      JZ

      SQUA CALL

      DIS MOV

      SI,3000H MOV

      BL,[SI] MOV

      DI,OFFSET TIAOFU MOV

      [DI],BL MOV

      SI,3001H MOV

      AL,[SI] MOV

      SI,OFFSET TIAOPIN MOV

      [SI],AL

      DX,DA0832

      ;輸出低電平

      輸出方波形 MOV

      AL,00H OUT

      DX,AL CALL

      DIS

      ;刷新 PUSH

      CX PUSH

      AX MOV

      CL,TIAOPIN MOV

      CH,00H MOV

      AX,00FFH DEC

      AX PUSH

      AX PUSH

      CX CALL

      DIS CALL

      CCSCAN

      ;再次掃描按鍵 JNZ

      SQUR1

      ;有鍵按下則跳置squr1, POP

      CX

      MOV

      POP

      AX

      JNZ

      D21

      LOOP

      D11

      POP

      AX

      POP

      CX

      CALL

      CCSCAN

      ;再次掃描按鍵

      JNZ

      MOV

      MOV

      MUL

      MOV

      OUT

      CALL

      PUSH

      PUSH

      MOV

      MOV

      D12: MOV

      D22: DEC

      PUSH

      PUSH

      CALL

      CALL

      JNZ

      POP

      POP

      JNZ

      LOOP

      POP

      POP

      JZ

      SQUA: RET

      SQUR1

      ;有鍵按下則跳置squr1,改變幅值頻率 BL,TIAOFU AL,20H BL

      DX,DA0832

      ;輸出高電平

      DX,AL

      DIS

      ;刷新

      CX AX CL,TIAOPIN CH,00H AX,00FFH AX AX CX DIS

      CCSCAN

      ;再次掃描按鍵 SQUR1

      ;有鍵按下則跳置tri1 CX AX D22 D12 AX CX

      TRILOOP1

      ;沒按鍵時繼續(xù)輸出波形

      SQUREW ENDP

      TRIW PROC

      NEAR

      ;三角波形子程序

      MOV

      DI,OFFSET FENC

      MOV

      AL,[DI]

      MOV

      SI,3000H

      TRA1:

      TRLOOP1:

      TRLOOP2:

      MOV

      [SI],AL MOV

      DI,OFFSET AMPL MOV

      AL,[DI] MOV

      SI,3001H MOV

      [SI],AL CALL

      AMPLFENC MOV

      SI,OFFSET KEY MOV

      AL,4 CMP

      [SI],AL JZ

      TRIA CALL

      DIS MOV

      SI,3000H MOV

      BL,[SI] MOV

      DI,OFFSET TIAOFU MOV

      [DI],BL MOV

      SI,3001H MOV

      AL,[SI] MOV

      SI,OFFSET TIAOPIN MOV

      [SI],AL MOV

      SI,OFFSET TRITAB MOV

      AL,[SI] MOV

      BL,TIAOFU MUL

      BL MOV

      DX,DA0832

      ;啟動D/A轉(zhuǎn)換 OUT

      DX,AL PUSH

      AX

      PUSH

      SI

      PUSH

      CX

      MOV

      CL,TIAOPIN

      MOV

      CH,00H

      DALLYTRI1: CALL

      DIS

      CALL

      CCSCAN

      JNZ

      LOOP

      POP

      POP

      POP

      INC

      CMP

      JNZ

      JMP

      TRIA: RET

      TRIW ENDP

      RCTW PROC

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      MOV

      RCT1: CALL

      MOV

      MOV

      CMP

      JZ

      CALL

      TRA1 DALLYTRI1 CX SI AX SI

      SI,OFFSET RCTTAB TRLOOP2 TRLOOP1

      NEAR

      ;鋸齒波形子程序 DI,OFFSET FENC AL,[DI] SI,3000H [SI],AL

      DI,OFFSET AMPL AL,[DI] SI,3001H [SI],AL AMPLFENC SI,OFFSET KEY AL,4 [SI],AL RCTA DIS

      MOV

      SI,3000H

      MOV

      BL,[SI]

      MOV

      DI,OFFSET TIAOFU

      MOV

      [DI],BL

      MOV

      SI,3001H

      MOV

      AL,[SI]

      MOV

      MOV

      RCLOOP1: MOV

      RCLOOP2: MOV

      MOV

      MUL

      MOV

      OUT

      PUSH

      PUSH

      PUSH

      MOV

      MOV

      DALLYRCT1: CALL

      CALL

      JNZ

      LOOP

      POP

      POP

      POP

      INC

      CMP

      JNZ

      JMP

      RCTA: RET

      RCTW ENDP

      SI,OFFSET TIAOPIN [SI],AL

      SI,OFFSET RCTTAB AL,[SI] BL,TIAOFU BL

      DX,DA0832

      ;啟動D/A轉(zhuǎn)換 DX,AL AX SI CX CL,TIAOPIN CH,00H CCSCAN RCT1 DALLYRCT1 CX SI AX SI

      SI,OFFSET STR1 RCLOOP2 RCLOOP1

      DIS

      SINW PROC

      NEAR

      ;正弦波的子程序

      MOV

      DI,OFFSET FENC

      MOV

      AL,[DI]

      MOV

      SI,3000H

      MOV

      [SI],AL

      SINA1:

      SINLOOP1:

      SINLOOP2:

      MOV

      DI,OFFSET AMPL MOV

      AL,[DI] MOV

      SI,3001H MOV

      [SI],AL CALL

      AMPLFENC MOV

      SI,OFFSET KEY MOV

      AL,4 CMP

      [SI],AL JZ

      SINA CALL

      DIS MOV

      SI,3000H MOV

      BL,[SI] MOV

      DI,OFFSET TIAOFU MOV

      [DI],BL MOV

      SI,3001H MOV

      AL,[SI] MOV

      SI,OFFSET TIAOPIN MOV

      [SI],AL MOV

      SI,OFFSET SINTAB MOV

      AL,[SI] MOV

      BL,TIAOFU MUL

      BL MOV

      DX,DA0832

      ;啟動D/A轉(zhuǎn)換 OUT

      DX,AL PUSH

      AX PUSH

      SI

      PUSH

      CX

      MOV

      CL,TIAOPIN

      MOV

      CH,00H

      DALLYSIN1: CALL

      DIS

      CALL

      CCSCAN

      JNZ

      SINA1

      LOOP

      POP

      POP

      POP

      INC

      CMP

      JNZ

      JMP

      SINA: RET

      SINW ENDP

      AMPLFENC PROC

      CALL

      CALL

      JNZ

      JMP

      TRI1: CALL

      CALL

      MOV

      MOV

      CMP

      JZ

      JZ

      CMP

      JNZ

      MOV

      DALLYSIN1 CX SI AX SI

      SI,OFFSET TRITAB SINLOOP2 SINLOOP1

      NEAR

      ;調(diào)節(jié)幅值頻率子程序 DIS

      ;刷新

      CCSCAN

      ;再次掃描按鍵 TRI1

      ;有鍵按下則跳置tri1 TRI5

      ;沒按鍵按下就跳出該子程序DIS

      ;刷新 GETKEY1

      SI,OFFSET KEY

      AL,[SI]

      AL,4

      ;第五個鍵就退出 TRI10 TRI5

      AL,0

      ;第一個鍵減少周期 TRI2

      DI,3001H

      MOV

      BL,[DI]

      CMP

      BL,01H

      JE

      TRI5

      DEC

      BL

      MOV

      [DI],BL

      JMP

      TRI5

      TRI2: CMP

      JNZ

      MOV

      MOV

      CMP

      JE

      INC

      MOV

      JMP

      TRI3: CMP

      JNZ

      MOV

      MOV

      CMP

      JE

      DEC

      MOV

      JMP

      TRI4: CMP

      JNZ

      MOV

      MOV

      CMP

      JE

      INC

      MOV

      AL,1

      TRI3 DI,3001H BL,[DI] BL,05H TRI5 BL [DI],BL TRI5

      AL,2

      TRI4 DI,3000H BL,[DI] BL,01H TRI5 BL [DI],BL TRI5

      AL,3

      TRI5 DI,3000H BL,[DI] BL,05H TRI5 BL [DI],BL

      ;第二個鍵增加周期;第三個鍵減少幅度;第四個鍵增加幅度

      JMP

      TRI5

      TRI10: JMP

      FAR PTR BEGIN0

      TRI5: RET

      AMPLFENC ENDP

      GETKEY1 PROC

      NEAR

      CALL

      CALL

      CALL

      CALL

      CALL

      JNZ

      JMP

      GETKEY2: MOV

      MOV

      COLUM: MOV

      MOV

      OUT

      MOV

      IN

      L1: TEST

      JNZ

      MOV

      JMP

      L2: TEST

      JNZ

      MOV

      JMP

      L3: TEST

      JNZ

      MOV

      JMP

      DIS

      ;顯示刷新 DALLY DALLY

      CLEAR

      ;清屏

      CCSCAN

      ;再次掃描按鍵

      GETKEY2

      ;有鍵按下則跳置GETKEY2 BEGIN1

      ;否則跳回開始繼續(xù)循環(huán)

      CH,0FEH

      CL,00H

      ;設(shè)置當(dāng)前檢測的是第幾列

      AL,CH

      ;選取一列,將X1~X4中一個置0

      DX,MY8255_A DX,AL

      DX,MY8255_C;讀Y1~Y4,用于判斷是哪一行按鍵閉合AL,DX

      AL,01H

      ;是否為第1行 L2

      ;不是則繼續(xù)判斷

      AL,00H

      ;設(shè)置第1行第1列的對應(yīng)的鍵值

      KCODE

      AL,02H

      ;是否為第2行 L3

      ;不是則繼續(xù)判斷

      AL,04H

      ;設(shè)置第2行第1列的對應(yīng)的鍵值

      KCODE

      AL,04H

      ;是否為第3行 L4

      ;不是則繼續(xù)判斷

      AL,08H

      ;設(shè)置第3行第1列的對應(yīng)的鍵值

      KCODE

      L4: TEST

      AL,08H

      ;是否為第4行

      JNZ

      NEXT

      ;不是則繼續(xù)判斷

      MOV

      AL,0CH

      ;設(shè)置第4行第1列的對應(yīng)的鍵值

      KCODE: ADD

      AL,CL

      ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值

      CALL

      PUTBUF

      ;保存按鍵值

      PUSH

      AX

      KON: CALL

      CALL

      CALL

      JNZ

      POP

      NEXT: INC

      MOV

      TEST

      JZ

      ROL

      MOV

      JMP

      KERR: RET

      GETKEY1 ENDP

      CCSCAN PROC

      MOV

      MOV

      OUT

      MOV

      IN

      NOT

      AND

      RET

      CCSCAN ENDP

      DIS

      ;顯示刷新 CLEAR

      ;清屏

      CCSCAN

      ;掃描按鍵,判斷按鍵是否彈起 KON

      ;未彈起則繼續(xù)循環(huán)等待彈起 AX

      CL

      ;當(dāng)前檢測的列數(shù)遞增

      AL,CH

      AL,08H

      ;檢測是否掃描到第4列 KERR

      ;是則跳回到開始處

      AL,1

      ;沒檢測到第4列則準(zhǔn)備檢測下一列

      CH,AL COLUM NEAR

      ;掃描是否有按鍵閉合子程序

      AL,00H

      DX,MY8255_A;將4列全選通,X1~X4置0 DX,AL DX,MY8255_C AL,DX

      ;讀Y1~Y4 AL

      AL,0FH

      ;取出Y1~Y4的反值

      CLEAR PROC

      NEAR

      ;清除數(shù)碼管顯示子程序

      MOV

      DX,MY8255_B;段位置0即可清除數(shù)碼管顯示

      MOV

      AL,00H

      OUT

      DX,AL

      RET

      CLEAR ENDP

      DIS

      鍵值并顯示

      AGAIN:

      相應(yīng)的鍵值

      NEAR

      ;顯示鍵值子程序

      PUSH

      AX

      ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到MOV

      SI,3000H MOV

      DL,0F7H MOV

      AL,DL PUSH

      DX MOV

      DX,MY8255_A OUT

      DX,AL

      ;設(shè)置X1~X4,選通一個數(shù)碼管 MOV

      AL,[SI]

      ;取出緩沖區(qū)中存放鍵值 MOV

      BX,OFFSET DTABLE AND

      AX,00FFH ADD

      BX,AX MOV

      AL,[BX]

      ;將鍵值作為偏移和鍵值基地址相加得到MOV

      DX,MY8255_B OUT

      DX,AL

      ;寫入數(shù)碼管A~Dp CALL

      DALLY INC

      SI

      ;取下一個鍵值 POP

      DX MOV

      AL,DL TEST

      AL,01H

      ;判斷是否顯示完? JZ

      OUT1

      ;顯示完,返回 ROR

      AL,1 MOV

      DL,AL PROC

      JMP

      AGAIN

      ;未顯示完,跳回繼續(xù)

      OUT1: POP

      AX

      RET

      DIS ENDP

      PUTBUF PROC

      NEAR

      ;保存鍵值子程序

      MOV

      MOV

      CMP

      JNZ

      MOV

      GOBACK: RET

      PUTBUF ENDP

      DALLY PROC

      PUSH

      MOV

      D1: MOV

      D2: DEC

      JNZ

      LOOP

      POP

      RET

      DALLY ENDP

      CODE ENDS

      END

      DI,OFFSET KEY [DI],AL DI,2FFFH GOBACK DI,3004H NEAR

      ;軟件延時子程序 CX CX,000FH AX,000FH AX D2 D1 CX START

      7.2 8086 最小模式的硬件連接圖

      第四篇:微機(jī)硬件實驗心得

      實訓(xùn)四底板LED點陣控制實訓(xùn)個人總結(jié)

      通過led點陣實驗的實踐,使我在理論的基礎(chǔ)上更深刻的掌握了嵌入式系統(tǒng)的深層內(nèi)容及實際生活中的應(yīng)用,實踐鍛煉了自己動手能力和思維能力,還有在軟件方面的編程能力,讓我受益匪淺,同時也暴露出一些平時學(xué)習(xí)上的問題,這次實踐讓我懂得了如何編寫一些簡單的程序,這幾周我們經(jīng)過老師耐心的講解和指導(dǎo)通過自己認(rèn)真的動手操作,終于完成了本次實訓(xùn)。

      在這次實訓(xùn)過程中我們鍛煉了自己的思考能力、動手能力和排除故障的能力。雖說在實訓(xùn)過程中遇到很多不懂的地方,但我們還是在老師和同學(xué)的幫助下完成了。對于點陣這個實驗,剛開始的步驟就不用多說了,和之前的一樣,關(guān)鍵在于程序的改寫。首先,我們運(yùn)行原始程序并單步調(diào)試觀察每一句執(zhí)行后的結(jié)果,對數(shù)據(jù)寄存器rGPFDAT進(jìn)行分析,DM1_RL1高四位控制左邊點陣前兩行,DM1_RL2控制左邊點陣中間四行,DM1_RL3低四位控制左邊點陣后兩行,DM1_RL3高四位控制右邊點陣前兩行,DM1_RL4控制右邊點陣中間四行,DM1_RL5低四位控制右邊點陣后兩行。如果顯示姓名首字母縮寫,在點陣中將亮的點置一,寫出對應(yīng)的十六進(jìn)制數(shù),右邊比左邊高,下邊比上邊高,依次寫出DM1_RL1、DM1_RL2、DM1_RL3、DM1_RL4、DM1_RL5寄存器中所存的十六進(jìn)制數(shù)據(jù)。修改完程序,編譯運(yùn)行程序,最終點陣顯示寄存器寫入的數(shù)據(jù),點陣呈現(xiàn)所設(shè)姓名首字母字樣。

      通過這次試驗,使我更加深入的了解了寄存器是如何控制點陣的以及簡單程序的編寫,加強(qiáng)了我們的實際動手操作能力。

      實訓(xùn)三底板LED數(shù)碼管控制實訓(xùn)個人總結(jié)

      這次實訓(xùn)主要目的是用led數(shù)碼管顯示學(xué)號的后八位,實踐鍛煉

      了自己動手能力和思維能力,還有在軟件方面的編程能力。實驗開始

      忘記了八段數(shù)碼管是如何控制顯示的,但在請教同學(xué)之后,我們就很

      快寫出了學(xué)號所對應(yīng)的十六進(jìn)制數(shù)。雖然實驗過程并不順利,但最終

      還是完成了實驗內(nèi)容。

      打開實驗原始程序,首先,我們運(yùn)行原始程序并單步調(diào)試觀察每一句執(zhí)行后的結(jié)果,對數(shù)據(jù)寄存器rGPFDAT進(jìn)行分析,觀察每步調(diào)試

      后的數(shù)碼管顯示變化,對寄存器進(jìn)行分析。根據(jù)試驗任務(wù)要顯示三個

      人的學(xué)號,前四位為8033,led燈顯示幾,八段數(shù)碼管的哪位置一,例如八段數(shù)碼管顯示8,則對應(yīng)hgfe dcba分別為0111 1111,即對應(yīng)

      十六進(jìn)制為7f,依次寫出對應(yīng)的十六進(jìn)制,DM1_RL1控制左邊數(shù)碼

      管,DM1_RL2控制右邊數(shù)碼管。例如8033對應(yīng)的十六進(jìn)制為7f3f4f4f,數(shù)碼管右邊為高位,對應(yīng)寄存器中應(yīng)為4f4f3f7f,同理可寫出學(xué)號的后四位。修改完程序,編譯運(yùn)行程序在不出現(xiàn)錯誤的情況下可以交替

      顯示三個不同的學(xué)號。

      這次實驗還算比較順利,不過在最初的過程中由于理解錯誤顯示的學(xué)號是反著的,修改程序后最終得到了想要的效果。這次實驗使我掌握了寄存器是如何控制八段數(shù)碼管的基本原理,鍛煉了我們的動手

      能力。掌握了編程的基本方法,更加熟悉了c語言的編寫以及運(yùn)用,在學(xué)習(xí)的過程中也享受了編程的樂趣。

      實訓(xùn)二 16個LED燈實訓(xùn)個人總結(jié)

      第二次實驗具體是編程利用實驗板控制底板的led數(shù)碼管閃爍,實現(xiàn)底版上16個LED的單 雙 三燈的跑馬燈過程以及LED(16個)的單燈匯集。在這次的實驗過程中,對軟件的應(yīng)用更加深刻熟練。在修改程序的過程中又溫習(xí)了c語言的編寫以及應(yīng)用,通過這次實驗掌

      握了不少的知識,對于寄存器有了更深的認(rèn)識。

      對于這次的實驗,我們首先用ARM軟件打開工程,編譯連接工

      程,用AXD 進(jìn)行調(diào)試,觀察源程序,單步運(yùn)行分析程序,觀察每一

      步執(zhí)行后led燈的顯示效果,根據(jù)實驗任務(wù)修改程序。Led0到led15

      分別由四位十六進(jìn)制代碼控制,即16位二進(jìn)制代碼控制,二進(jìn)制的最低為控制led15,最高位控制led0,置一時對應(yīng)位置的led燈亮。

      首先,用rGPFDAT=rGPFDAT&0xfffffffe;設(shè)置I/O口GPBDAT相應(yīng)LED

      寄存器的初始值,分別設(shè)置寄存器DM1_RL1=0x00000000;

      DM1_RL1=0x00010000;接著用for、while循環(huán)實現(xiàn)燈的移位及匯聚效

      果,寄存器分別保存移位前和移位后的數(shù)值,單燈跑馬燈,從左向右

      跑到另一側(cè)停止,且一直保持亮的狀態(tài)。

      這次試驗要比第一次的實驗難,在改寫代碼這一環(huán)節(jié)我們就遇

      到了很大的困難,要實現(xiàn)跑馬燈用源程序類似的代碼需要很長一段,為了減少代碼使程序簡明易懂我們在請教同學(xué)的基礎(chǔ)上對程序進(jìn)行

      了修改,采用了for循環(huán)。這次試驗證明c語言在編程中的重要性,而且從這次的實驗中我發(fā)現(xiàn)了自己c語言的功底還是有待提高,以后的日子里還需努力。

      實訓(xùn)一對四個led燈編程個人總結(jié)

      微機(jī)與嵌入式系統(tǒng)實訓(xùn)是我們第一次接觸硬件操作,在老師的帶領(lǐng)下

      我們進(jìn)入第一節(jié)實訓(xùn)課。通過這次實訓(xùn)對微機(jī)與嵌入式的硬件操作有

      了基本的了解。

      首先要進(jìn)行的是pc機(jī)與主板的連接,運(yùn)行H-Jtag并進(jìn)行設(shè)置,用ARM

      軟件打開工程,編譯連接工程,用AXD 進(jìn)行調(diào)試,觀察源程序,單

      步運(yùn)行分析程序,對原程序進(jìn)行修改。在運(yùn)行源程序的過程中,由于

      第一次接觸,最初的設(shè)置不成功導(dǎo)致程序運(yùn)行不出,在同學(xué)的指導(dǎo)下,最終順利運(yùn)行。接著的難題就是修改程序,根據(jù)試驗任務(wù),實驗中的四個燈由上到下依次分別由三位十六進(jìn)制數(shù)700H、380H、580H、680H

      控制,對應(yīng)的二進(jìn)制代碼D7D8D9D10位分別控制 led1、led2、led3、led4的亮滅,置1時對應(yīng)的led燈滅,置0時對應(yīng)的led燈亮,即低

      電平有效。首先設(shè)用rGPBCON=rGPBCON&0xffc03fff;設(shè)置I/O口

      GPBCON相應(yīng)LED寄存器為輸出屬性,GPBCON=rGPBCON|0xffd57fff;

      rGPBDAT=rGPBDAT&0xfffff87f;設(shè)置I/O口GPBDAT相應(yīng)LED寄存器的初

      始值。然后根據(jù)推算的十六進(jìn)制代碼改寫數(shù)據(jù)寄存器rGPBDAT的內(nèi)容。

      在程序中,對于循環(huán)不是很懂,因此用了好幾段程序來分別控制led

      燈由上到下,再由下到上,最終全亮的效果。修改完程序之后編譯運(yùn)

      行,效果不是很明顯,因此對于匯編延遲函數(shù)delay進(jìn)行了修改延長

      時間。

      這次試驗讓我更深認(rèn)識了c語言的重要性,對于微機(jī)與嵌入式的編程

      運(yùn)行以及寄存器的工作原理有了更深的了解,增強(qiáng)了我們的動手能力。

      第五篇:微機(jī)原理紅綠燈課程設(shè)計報告

      微機(jī)原理紅綠燈課程設(shè)計報告

      實驗報告 2009-09-02 18:16:02 閱讀1337 評論2 字號:

      大中小

      摘要:

      介紹了基于8255A的交通燈系統(tǒng)設(shè)計方案,重點論述了軟件系統(tǒng)的編寫方法。實際結(jié)果表明該系統(tǒng)方案切實可行。

      近年來隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷深入,同時帶動傳統(tǒng)控制檢測技術(shù)日益更新。在實時檢測和自動控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往作為一個核心部件來使用,僅單片機(jī)方面知識是不夠的,還應(yīng)根據(jù)具體硬件結(jié)

      構(gòu)軟硬件結(jié)合,加以完善。

      十字路口車輛穿梭,行人熙攘,車行車道,人行人道,有條不紊。那么靠什么來實現(xiàn)這井然秩序呢?靠的就是交通信號燈的自動指揮系統(tǒng)。交通信號燈控制方式很多。本系統(tǒng)采用8255A芯片實現(xiàn)了A、B口設(shè)置紅、綠燈點亮?xí)r間的功能;紅綠燈循環(huán)點亮,紅綠燈變換之間,黃燈閃爍5秒

      關(guān)鍵字: 交通燈、軟件系統(tǒng)

      設(shè)計內(nèi)容 本次課程設(shè)計是交通燈實時控制器,主要是用發(fā)光二極管模擬十字路口的紅綠燈,如下圖所示。交通燈控制器的設(shè)計與實現(xiàn)主要是通過編寫匯編語言程序利用8255的A口和B口對燈的亮與滅進(jìn)行控制。由于實驗室的儀器上只有16個發(fā)光二極管,所以還得弄清楚是每個發(fā)光二極管所代表的燈的顏色及方向。16個發(fā)光二級管,且從高到低依次為:D15D14D13D12D11D10D9D8 D7D6D5D4D3D2D1D0。在設(shè)計的過程中做了如下的規(guī)定:R表示紅燈,G表示綠燈,Y表示黃燈,E表示方向東,W表示方向西,S表示方向南,N表示方向北,D15D14表示ER,D13D12表示SR,D11D10表示EG,D9D8表示SG,D7D6表示W(wǎng)R,D5D4表示NR,D3D2表示W(wǎng)G,D1D0表示NG,D15D14D11D10表示EY,D7D6D3D2表示W(wǎng)Y,D13D12D9D8表示SY,D5D4D1D0

      表示NY。交通燈控制示意圖 具體時間的分配和控制如下:

      東西方向綠燈亮,南北方向紅燈亮,時間20秒 東西方向黃燈閃爍,南北方向紅燈亮,時間5秒 東西方向紅燈亮,南北方向綠燈亮,時間20秒 東西方向紅燈亮,南北方向黃燈閃爍,時間5秒

      設(shè)計器材設(shè)備 微機(jī)、TD-PIT++實驗箱

      實驗電路圖 設(shè)計流程圖

      總體設(shè)計過程

      1.根據(jù)選擇題目的要求,結(jié)合所參考的資料,選擇8255單元芯片以及LED顯示單元電路。

      1)

      電路元器件的選擇 可編程并行通信接口芯片8255 2)

      完成8255單元電路的設(shè)計及參數(shù)計算

      8255的A口地址是:IOY0+00H*4

      B口地址是:IOY0+01H*4 C口地址是:IOY0+02H*4 控制端口地址是:IOY0+03H*4

      2.軟件流程圖的設(shè)計 3.電路接線圖的設(shè)計 4.軟件的設(shè)計(程序見附錄)1)

      芯片初始化,寫8255的方式字 2)

      延時,延時是通過設(shè)置指令的循環(huán)次數(shù)實現(xiàn)的 3)

      東西方向綠燈亮,南北方向紅燈亮,時間20秒 4)

      東西方向黃燈閃爍,南北方向紅燈亮,時間5秒 5)

      東西方向紅燈亮,南北方向綠燈亮,時間20秒 6)

      東西方向紅燈亮,南北方向黃燈閃爍,時間5秒

      7)判斷是否有鍵按下 8)

      返回到DOS 5.進(jìn)行軟硬件調(diào)試

      因采用了pc機(jī)和微機(jī)原理實驗箱,硬件電路設(shè)計相對比較簡單,利用微機(jī)實驗箱上的8255并行口、發(fā)光二級管,便構(gòu)成了交通燈控制系統(tǒng)。

      心得體會

      通過這次課程設(shè)計,加強(qiáng)了我的動手、思考和分析解決問題的能力。在整個設(shè)計過程中,我們按照老師給出的總體方案設(shè)計了一套電路原理和電路連接圖。通過查閱各方面資料我們編寫了程序代碼,并通過了調(diào)試,最終證實了該系統(tǒng)

      方案確實可行。在設(shè)計過程中,了解了很多元器件的功能,并且對于其在電路中的使用有了更多的認(rèn)識。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做,難免會遇到過各種各樣的問題,同時也在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢

      固。

      這次課程設(shè)計使我懂得了理論與實際相結(jié)合的重要性,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,才能夠真正掌握理論知識,從而提高自己的實際動手能力和獨立思考的能力。

      附錄(程序代碼)

      IOY0 EQU 0E000H PORTA EQU IOY0+00H*4 PORTB EQU IOY0+01H*4 PORTK EQU IOY0+03H*4 STACK1 SEGMENT STACK DW 256 DUP(?)

      STACK1 ENDS

      CODE SEGMENT

      ASSUME CS:CODE START: MOV AL, 80H MOV DX, PORTK ;8255工作在方式0,A、B口均輸出

      OUT DX, AL MOV AL, 3CH MOV DX, PORTA ;A口東方向綠燈亮,南方向紅燈亮

      OUT DX, AL MOV AL, 3CH MOV DX, PORTB ;B口西方向綠燈亮,北方向紅燈亮

      OUT DX, AL CALL DELAY ;調(diào)用20s延時子程序

      MOV CX, 5 START1: MOV AL, 0FCH MOV DX, PORTA ;A口東方向黃燈亮,南方向紅燈亮

      OUT DX, AL MOV AL, 0FCH MOV DX, PORTB ;B口西方向黃燈亮,北方向紅燈亮

      OUT DX, AL CALL DELAY1 ;調(diào)用0.5s延時子程序

      MOV AL, 30H MOV DX, PORTA ;A口東方向黃燈滅,南方向紅燈亮

      OUT DX, AL MOV AL, 30H MOV DX, PORTB ;B口西方向黃燈滅,北方向紅燈亮

      OUT DX, AL CALL DELAY1 ;調(diào)用延時0.5s子程序

      LOOP START1 ;CX≠0則循環(huán)

      MOV AL, 0C3H MOV DX, PORTA ;A口東方向紅燈亮,南方向綠燈亮

      OUT DX, AL MOV AL, 0C3H MOV DX, PORTB ;B口西方向紅燈亮,北方向綠燈亮

      OUT DX, AL CALL DELAY ;調(diào)用20s延時子程序

      MOV CX, 5 START2: MOV AL, 0F3H MOV DX, PORTA ;A口東方向紅燈亮,南方向黃燈亮

      OUT DX, AL MOV AL, 0F3H MOV DX, PORTB ;B口西方向紅燈亮,北方向黃燈亮

      OUT DX, AL CALL DELAY1 ;調(diào)用0.5s延時子程序

      MOV AL, 0C0H MOV DX, PORTA ;A口東方向紅燈亮,南方向黃燈滅

      OUT DX, AL MOV AL, 0C0H MOV DX, PORTB ;B口西方向紅燈亮,北方向黃燈滅

      OUT DX, AL CALL DELAY1 ;調(diào)用0.5s延時子程序

      LOOP START2 MOV AH, 1 INT 16H JZ START ;判斷是否有鍵按下,無

      按鍵則

      QUIT: MOV AX, 4C00H 調(diào)回繼續(xù)循環(huán),有

      則退出

      INT 21H DELAY PROC NEAR ;20s延時子程序

      PUSH CX PUSH DX PUSH BX

      MOV BX, 3 MOV DX, 27880 LAB: MOV CX, 0FFFFH

      LOOP $ DEC DX JNZ LAB DEC BX JNZ LAB POP BX

      POP DX POP CX RET DELAY ENDP PROC NEAR ;0.5s延時子程序 PUSH CX PUSH DX MOV DX, 6970 LAB1: MOV CX, 0FFFFH DELAY1

      LOOP $ DEC DX

      JNZ LAB1 POP DX POP CX RET DELAY1 ENDP CODE ENDS END START

      下載微機(jī)硬件課設(shè)(紅綠燈)(推薦五篇)word格式文檔
      下載微機(jī)硬件課設(shè)(紅綠燈)(推薦五篇).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        微機(jī)課演講稿

        丟棄鼠標(biāo) Windows 常用五組快捷鍵 1 丟棄鼠標(biāo) Windows 常用五組快捷鍵 Windows 旗幟鍵+d : 這是高手最常用的第一快捷組合鍵。 這個快捷鍵組合可以將桌面上的 所有窗口瞬間......

        微機(jī)課評課稿

        中學(xué)信息技術(shù)課評課稿《photoshop封面設(shè)計》、《flash的引導(dǎo)層動畫》現(xiàn)將自己聽課的一些感受寫出來,大家交流,如有不當(dāng)之處,歡迎大家指正。優(yōu)點: 講課的教師亮點也很多我想按照......

        數(shù)據(jù)結(jié)構(gòu)課設(shè)

        數(shù)據(jù)結(jié)構(gòu)課設(shè) 大整數(shù)計數(shù)器 1. 問題描述 實現(xiàn)大整數(shù)(200位以內(nèi)的整數(shù))的加、減、乘、除運(yùn)算。 2. 設(shè)計要求 設(shè)計程序?qū)崿F(xiàn)兩個大整數(shù)的四則運(yùn)算,輸出這兩個大整數(shù)的和、差、積、......

        計算機(jī)網(wǎng)絡(luò)課設(shè)

        計算機(jī)網(wǎng)絡(luò)應(yīng)用課程設(shè)計報告 系 (院): 計算機(jī)科學(xué)學(xué)院 專業(yè)班級: 計科11511 姓名: 鐘燦均 學(xué)號: 201503687 指導(dǎo)教師: 余紹文 設(shè)計時間: 2017.6.12 - 2017.6.23 設(shè)計地點: 12教1......

        課設(shè)小結(jié)

        本次課程設(shè)計我們小組順利的完成了鍋爐內(nèi)膽水溫與循環(huán)水流量串級控制系統(tǒng)。我們通過討論對過程參數(shù)方面的知識有了更加深入的了解。我負(fù)責(zé)的是傳模擬量采集模塊。 和以前做......

        課設(shè)規(guī)范

        電 子 工 程 學(xué) 院 課程設(shè)計報告格式及要求 一、封面:單獨1頁(見樣件) 二、摘要、關(guān)鍵詞:中文(250~300字)、英文;單獨1頁 中文摘要前加:“摘要:”,英文摘要前加“Abstract:”。 關(guān)鍵詞一......

        高頻課設(shè)資料

        一、課程設(shè)計目的 由于高頻振動器所產(chǎn)生的高頻振動信號的功率很小,不能滿足發(fā)射機(jī)天線對發(fā)射機(jī)的功率要求,所以在發(fā)射之前需要經(jīng)過功率放大后才能獲得足夠的功率輸出。 本次課......

        操作系統(tǒng)課設(shè)

        操作系統(tǒng)課程設(shè)計 一實驗?zāi)康? 在多道程序或多任務(wù)系統(tǒng)中,系統(tǒng)中同時處于就緒態(tài)的進(jìn)程有若干個,也就是說能運(yùn)行的進(jìn)程數(shù)遠(yuǎn)遠(yuǎn)大于處理機(jī)個數(shù)。為了使系統(tǒng)中的各進(jìn)程能有條不紊......