可編程定時 / 計數器應用實驗

可編程定時 / 計數器應用實驗

1、實驗目的

瞭解定時器 / 計數器 8253 的原理,掌握編制定時器 / 計數器程序設計方法。編程

2、實驗內容

設計連線和程序,以 1MHz 的信號爲時鐘信號,利用 8253 產生 1s 的定時控制發光二極管變化。設計

3、實驗連線

  1. 用戶時鐘的 1MHz 輸出接 8253 的 CLK1
  2. 8253 的 GATE1+5V (在實驗箱的左上角和右上角)。
  3. 8253 OUT1 接 8253 的 CLK2
  4. 8253 的 GATE2+5V
  5. 8253 的 OUT2 的輸出爲 1s 方波,接 M 區的一個發光二極管。
    1. 區的 OE# 接實驗箱的地線(在實驗箱的左下角和右下角)。模塊電源部分( L 區)的 JP7 (控制 LED)短接。
  6. 將 B 區 J1 的插頭插上扁平電纜和微機相連。
  7. 將 A 區的電源開關撥到 「內」 位置。

4、編寫程序

1. 各端口的地址

  • 0 號計數器地址 304H
  • 1 號計數器地址 305H
  • 2 號計數器地址 306H
  • 計數器控制寄存器地址 307H

2. 程序源代碼

CODE    SEGMENT 'code'
ASSUME  CS:CODE
START:  MOV     DX,307H                 ;
        MOV     AL,01110110B            ;計數器一,先讀寫低八位,後讀寫高八位,方式 3,二進制計數
        OUT     DX,AL                   ;
        MOV     DX,305H                 ;一號計數器
        MOV     AL,0E8H                 ;
        OUT     DX,AL                   ;
        MOV     AL,03H                  ;
        OUT     DX,AL                   ;送計數初值 03E8H = 1000
        MOV     DX,307H                 ;
        MOV     AL,10110110B            ;計數器二,先讀寫低八位,後讀寫高八位,方式 3,二進制計數
        OUT     DX,AL                   ;
        MOV     DX,306H                 ;二號計數器
        MOV     AL,0E8H                 ;
        OUT     DX,AL                   ;
        MOV     AL,03H                  ;
        OUT     DX,AL                   ;送計數初值 03E8H=1000
        MOV     AH,4CH                  ;
        INT     21H                     ;
CODE    ENDS
        END START

5、思考題

利用 8253 和 8255 設計查詢方式走馬燈電路,8253 每秒使的 PC4 的電位變化一次,編程查詢 PC4 的狀態,當 PC4 爲低電平時從 8255 的 A 端口輸出一個數據,使得和 A 端口相連的 8 個發光二極管依次變亮且每次只亮一個。

1. 修改連線:

  • 8253 的 OUT2 的輸出爲 1s 方波,接 8255 的 PC4
  • 8255 的 PA0~PA7 接 M 區的發光二極管 L1~L8
  • 模塊電源( L 區)短接 JP7

2. 修改程序:

PORTA=300H
PORTB=301H
PORTC=302H
CONTROL=303H
CODE SEGMENT 'code'
ASSUME CS:CODE
START:  MOV    DX,307H                 ;{工做方式初始化
        MOV    AL,01110110B            ;計數器一,先讀寫低八位,後讀寫高八位,方式3,二進制計數
        OUT    DX,AL                   ;}
        MOV    DX,305H                 ;{一號計數器
        MOV    AL,0E8H                 ;
        OUT    DX,AL                   ;
        MOV    AL,03H                  ;送計數初值 03E8H = 1000
        OUT    DX,AL                   ;}
        MOV    DX,307H                 ;{工做方式初始化
        MOV    AL,10110110B            ;計數器二,先讀寫低八位,後讀寫高八位,方式3,二進制計數
        OUT    DX,AL                   ;}
        MOV    DX,306H                 ;{二號計數器
        MOV    AL,0E8H                 ;
        OUT    DX,AL                   ;
        MOV    AL,03H                  ;送計數初值 03E8H = 1000
        OUT    DX,AL                   ;}
        MOV    DX,CONTROL              ;{工做方式初始化
        MOV    AL,88H                  ;A 口輸出,C 口高四位輸入
        OUT    DX,AL                   ;}
        MOV    BL,11111110B            ;二極管初始顯示狀態
        MOV    DX,PORTC                ;{
L1:     IN     AL,DX                   ;
        TEST   AL,10H                  ;判斷 AL 第 5 位是否爲 1
        JNZ    L1                      ;ZF = 0 轉移到標號地址}
        MOV    DX,PORTA                ;{
        MOV    AL,BL                   ;將 BL 的值輸出到二極管
        OUT    DX,AL                   ;}
        ROL    BL,1                    ;循環左移一位
L2:     MOV    DX,PORTC                ;{
        IN     AL,DX                   ;
        TEST   AL,10H                  ;判斷 AL 第 5 位是否爲 1
        JZ     L2                      ;ZF = 1 轉移到標號地址}
        JMP    L1                      ;
        MOV    AH,4CH                  ;
        INT    21H                     ;
CODE    ENDS
        END START

6、實驗小結

本次實驗,加深了我對定時器 / 計數器 8253 的原理的瞭解,掌握了編制定時器 / 計數器程序設計方法。在最後的思考題中,經過不斷的嘗試、修改連線和程序,我對接口編程更加熟練了,爲我從此的實驗及課程設計打下了良好的基礎。code

相關文章
相關標籤/搜索