找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4394|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

誰有51控制DS12C887的程序,還有8279的程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:53053 發(fā)表于 2015-7-29 22:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
誰有51控制DS12C887的程序,還有8279的程序,初學者望大神施舍啊
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:53053 發(fā)表于 2015-7-29 22:19 | 只看該作者
我的郵箱:1039633544@qq.com
回復(fù)

使用道具 舉報

板凳
ID:7485 發(fā)表于 2015-7-31 13:19 | 只看該作者
看看這個: DS12C887中文資料[1].pdf (339.85 KB, 下載次數(shù): 17)
回復(fù)

使用道具 舉報

地板
ID:7485 發(fā)表于 2015-7-31 13:27 | 只看該作者
;*******************************************
;處理DS12887中斷子程序
;判斷中斷源,轉(zhuǎn)相應(yīng)處理子程序
;::::三個中斷的響應(yīng)順序要注意。!
;*******************************************
INT12887:
                MOV    DPTR, #7F0CH                 ;讀12887 C寄存器,判中斷源
                MOVX   A, @DPTR                                                        ;讀c寄存器后所有標志清除
;                MOV    21H,  A                     ;暫時保存中斷標志
;                JNB    21H.7, INT12887RETI         ;21.7H=IRQF,=0,表示沒有中斷
;
;                JNB    21H.4, INT12887A                          ;如果不是更新中斷,轉(zhuǎn)
                CALL   DU12887                                                         ;是更新中斷轉(zhuǎn)讀12887時間值
;INT12887A:                                                                                   ;3個中斷可能同時發(fā)生,所以要繼續(xù)處理下一個
;                JNB    21H.5,  INT12887B                         ;如果不是報警中斷,轉(zhuǎn)
;                CALL   BAO_JING                    ;轉(zhuǎn)處理12887報警中斷子程序
;INT12887B:
;                JNB    ACC.6,  INT12887RETI               ;如果不是周期中斷,轉(zhuǎn)
;                CALL   ZHOU_QI                     ;轉(zhuǎn)處理12887周期中斷子程序
;INT12887RETI:
;                CALL   DISPLAY                     ;每秒中斷一次,同時掃描一次(CH453靜態(tài))
                RETI                                ;顯示掃描要用定時器中斷,否則處理鍵盤時沒顯示
;**********************************************
;讀12887時間值
;**********************************************
DU12887:
                MOV    DPTR, #7F00H      ;DS12887的片選接的是P2.7,所以秒地址=7F00H
                MOVX   A,  @DPTR                ;"秒"地址,讀秒
                MOV    SEC, A         
                MOV    DPTR,#7F00H+2     ;"分"地址,
                MOVX   A,@DPTR           ;讀分
                                     MOV    MIN, A
                MOV    DPTR,#7F00H+4     ;"時"地址,
                MOVX   A,  @DPTR         ;讀小時
                MOV    HOUR, A
                INC    DPL
                INC    DPL                                    ;"星期"地址,
                MOVX   A,@DPTR           ;讀星期
                MOV    WEEK, A
                INC    DPTR                                   ;"日"地址
                MOVX   A,  @DPTR         ;讀日  
                MOV    DATE, A
                INC    DPTR                                   ;"月"地址
                MOVX   A,@DPTR
                MOV    MONTH, A          ;讀月
                INC    DPTR                                   ;"年"地址
                MOVX   A,  @DPTR         ;讀年  
                MOV    YEAR, A
                RET
;**********************************************
;處理12887周期中斷子程序(暫時空)
;**********************************************
ZHOU_QI:
           RET
;**********************************************
;處理12887報警中斷子程序(暫時空)
;**********************************************
BAO_JING:
           RET
;**********************************************
;初始化12887
;**********************************************
SET12887:
             PUSH   ACC
             PUSH   DPH
             PUSH   DPL
             MOV    DPTR, #7F0EH                 ;上電時,轉(zhuǎn)這里進行初始化DS12887
             MOVX   A, @DPTR                     ;判斷有無"初始化過"標記
             CJNE   A, #0A5H,SET12887A           ;如果沒有設(shè)置過,轉(zhuǎn)去設(shè)置
             JMP    SET12887RET                  ;已經(jīng)設(shè)置過,退出
SET12887A:                                       ;沒有設(shè)置過標記轉(zhuǎn)這里開始設(shè)置12887                               
             MOV        SEC,  #00                                                   ;秒初值
             MOV        MIN,  #23                       ;分初值
             MOV        HOUR, #19                                                   ;時初值
             MOV        WEEK, #06                                                   ;星期初值
             MOV        DATE, #22                                                   ;日初值
             MOV        MONTH,#10                                                   ;月初值
             MOV        YEAR, #11                                                   ;年初值
             CALL   W_12887                      ;將初始值寫入,否則任意值不方便調(diào)整。
                                  MOV    DPTR, #7F0EH
                                  MOV    A,#0A5H                      ;設(shè)置"已經(jīng)初始過DS12887"標記
             MOVX   @DPTR,A
SET12887RET:
             POP    DPL
             POP    DPH
             POP    ACC
             RET
;--------------------------------------------------------------
W_12887:                                         ;寫入12887       
             PUSH   ACC
             PUSH   DPH
             PUSH   DPL            
;             MOV    DPTR, #7f0AH
;             MOV    A, #01110000B              ;停止12887,高4位只有0010能啟動
;             MOVX   @DPTR,A
             MOV    DPTR, #7f0BH
             MOV    A, #1010010B                ;停止12887,高4位只有0010能啟動
             MOVX   @DPTR,A

             INC    DPTR
             MOV    A,#10000110B                 ;設(shè)置寄存器B,停止更新
             MOVX   @DPTR,A
             MOV    DPTR,#7f00H                  ;設(shè)置秒
             MOV    A,SEC
             MOVX   @DPTR,A
             INC    DPTR                         ;設(shè)置秒報警
             MOV    A, #0FFH                                                        ;不關(guān)心碼
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,MIN                        ;設(shè)置分
             MOVX   @DPTR,A
             INC    DPTR                         ;設(shè)置分報警
             MOV    A, #0FFH                     ;不關(guān)心碼
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,HOUR                       ;設(shè)置時
             MOVX   @DPTR,A
             INC    DPTR                         ;設(shè)置時報警
             MOV    A, #0FFH                                                        ;不關(guān)心碼
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,WEEK                       ;設(shè)置星期
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,DATE                       ;設(shè)置日
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,MONTH                      ;設(shè)置月
             MOVX   @DPTR,A
             INC    DPTR
             MOV    A,YEAR                       ;設(shè)置年
             MOVX   @DPTR,A
             MOV    DPTR, #7f0AH
             MOV    A, #00100000B                ;設(shè)置寄存器A,啟動12887,中斷周期64HZ
             MOVX   @DPTR,A
             MOV    DPTR, #7f0CH                 ;讀一次寄存器C,清除中斷標志,否則下次無法中斷。
             MOVX   A, @DPTR                                        
             MOV    DPTR, #7f0DH
             MOVX   A, @DPTR                     ;讀一次寄存器D,自動置VRT=1,內(nèi)部RAM和寄存器有效
             MOV    A,#00010110B                 ;啟動,關(guān)周期、關(guān)報警、開更新中斷,(接下行)   
             MOV    DPL,#0BH                     ;關(guān)方波輸出,二進制,24小時,無夏令時
             MOVX   @DPTR,A
             POP    DPL
             POP    DPH
             POP    ACC
             RET
回復(fù)

使用道具 舉報

5#
ID:7485 發(fā)表于 2015-7-31 13:29 | 只看該作者
本帖最后由 ahshmj 于 2015-7-31 13:33 編輯

這是我做的12864顯示的萬年歷中的有關(guān)DS12c887的部分程序。
我這里用的ds12c887的地址是自己的硬件所決定的,你要根據(jù)自己的硬件電路修改。
回復(fù)

使用道具 舉報

6#
ID:7485 發(fā)表于 2015-7-31 13:42 | 只看該作者
本帖最后由 ahshmj 于 2015-7-31 13:49 編輯

8279鍵盤、顯示接口芯片
序號:6-10
生產(chǎn)廠家:Intel公司
特性:Intel8279芯片是一種通用的可編程序的鍵盤、顯示接口器件,單個芯片就能完成鍵盤輸入和LED
顯示控制兩種功能。其內(nèi)部結(jié)構(gòu)如圖6-10-1所示。8279包括鍵盤輸入和顯示輸出兩個部分。
      鍵盤部分提供的掃描方式,可以和64個按鍵或傳感器的陣列相連。能自動消除開關(guān)抖動以及N個鍵
同時按下的保護。
      顯示部分按掃描的方式工作?梢燥@示8或16位LED顯示塊。
      一、8279電路工作原理
      根據(jù)結(jié)構(gòu)框圖,分別介紹各部分電路工作原理。
      1.I/O控制及數(shù)據(jù)緩沖器
      數(shù)據(jù)緩沖器是雙向緩沖器,連接內(nèi)、外總線,用于傳送CPU和8279之間的命令或數(shù)據(jù);I/O控制線是
CPU對8279進行控制的引線。CS是8279的片選信號,CS=0時,8279才被允許讀出或?qū)懭胄畔。WR、RD為來自
CPU的控制信號。
      A0用于區(qū)別信息特性:A0=1時,表示數(shù)據(jù)緩沖器輸入為指令、輸出為狀態(tài)字;A=0時,輸入、輸出皆為數(shù)據(jù)。
      2.控制與定時寄存器及定時控制
      控制與定時寄存器用來寄存鍵盤及顯示的工作方式,以及由CPU編程的其它操作方式。這些寄存器一旦接受并鎖存送來的命令,就通過譯碼產(chǎn)生相應(yīng)的信號,從而完成相應(yīng)的控制功能。
      定時控制包含基本記數(shù)鍵。首級計數(shù)器是一個可編程的N級計數(shù)器。N可以2~31之間由軟件編程,以便
從外界時鐘CLK分頻得到內(nèi)部所需要的100KHZ時鐘。然后再經(jīng)過分頻為鍵盤掃描提供適當?shù)闹鹦袙呙桀l率和顯示掃描時間。
     3.掃描計數(shù)器
      掃描計數(shù)器有兩種工作方式。按編碼方式工作時,計數(shù)器作二進制記數(shù)。4位記數(shù)狀態(tài)從掃描線SL0~SL3
輸出,經(jīng)外部譯碼器譯碼后,為鍵盤和顯示器提供掃描線;按譯碼方式工作時,掃描計數(shù)器的最低二位被譯碼后,從SL0~SL3輸出。因此,SL0~SL3提供了4中取1的掃描譯碼。
     4.回復(fù)緩沖器、鍵盤去抖及控制
     來自RL0~RL3的8根回復(fù)線的回復(fù)信號,由回復(fù)緩沖器緩沖并鎖存。
     在鍵盤工作方式中,回復(fù)線作為行列式鍵盤的行列輸入線。在逐行列輸入時,在逐行列掃描時,回復(fù)線用來搜索每一行列中閉合的鍵。當某一鍵閉合時,去抖電路被置位,延時等待10ms后,再檢驗該鍵是否繼續(xù)閉和,并將該鍵的地址和附加的移位、控制狀態(tài)一起形成鍵盤數(shù)據(jù)被送入8279內(nèi)部FIFO(先進先出)存儲器。鍵盤數(shù)據(jù)格式如下:
                                                                     D7   D6   D5   D4   D3   D2   D1   D0
控制        移位        掃描        回復(fù)
     控制和移位(D6、D7)的狀態(tài)由兩個獨立的附加開關(guān)決定,而掃描(D5、D4、D3)和回復(fù)(D2、D1、D0)則是被按鍵置位的數(shù)據(jù)。D5、D4、D3來自動掃描計數(shù)器,是按下鍵的行列編碼,而(D7D7D7)則來自行/列計數(shù)器,它們是根據(jù)回復(fù)信號而確定的行/列編碼。
     在傳感器開關(guān)狀態(tài)矩陣方式中,回復(fù)線的內(nèi)容直接被送往和相應(yīng)的傳感器RAM(即FIFO存儲器)。
在選通輸入方式中,回復(fù)線的內(nèi)容在CNTL/STB線的脈沖上升沿被送入FIFO存儲器。
      5.FIFO/傳感器及其狀態(tài)寄存器
FIFO/傳感器RAM是一個雙重功能的8×8RAM。
     在鍵盤或選通方式工作時,它是FIFO存儲器,其輸入或讀出遵循先入先出的原則。FIFO狀態(tài)寄存器用于存放FIFO的工作狀態(tài)。例如,RAM是滿還是空;其中存有多少數(shù)據(jù);是否操作出錯等。當FIFO存儲器不空,狀態(tài)邏輯將產(chǎn)生IRQ=1信號向CPU申請中斷。
     在傳感器矩陣方式工作時,這個存儲器以是傳感器不是存儲器。它存放著傳感器矩陣中的每一個傳感器狀態(tài)。在此方式中,若檢索出傳感器的變化,IRQ信號變?yōu)楦唠娖,向CPU申請中斷。
     6.顯示RAM和顯示地址寄存器
    顯示RAM用來存儲顯示數(shù)據(jù)。容量為16×8位。在顯示過程中,存儲的顯示數(shù)據(jù)輪流從顯示寄存器輸出。顯示寄存器分別為A、B兩組,OUTA0~3和OUTB0~3可以單獨送數(shù),也可以組成一個8位的字。顯示寄存器的輸出與顯示掃描配合,不斷從顯示RAM中讀出顯示數(shù)據(jù),同時輪流驅(qū)動被選中的顯示器件,以達到多路復(fù)用的目的,使顯示器件呈現(xiàn)穩(wěn)定的顯示狀態(tài)。
    顯示地址寄存器用來寄存由CPU進行讀/寫顯示RAM的地址,它可以由命令設(shè)定,也可以設(shè)置成每次讀寫或?qū)懭胫笞詣舆f減。
    二.管腳、引線與功能
    8279采用40引腳封裝,其管腳、引線功能如圖6-10-2所示。其引腳功能如下:
     D0~D7(數(shù)據(jù)總線):雙向、三態(tài)總線,和系統(tǒng)數(shù)據(jù)總線相連;用于CPU和8279間的數(shù)據(jù)/命令傳遞。
     CLK(系統(tǒng)時鐘):輸入線,為8279提供內(nèi)部時鐘的輸入端。
  RESET(復(fù)位):輸入線,當RESET=1時,8279復(fù)位,其復(fù)位狀態(tài)為:
    16個字符顯示;
    編碼掃描鍵盤--雙鍵鎖定;
  程序時鐘編碼為31。
    CS(片選):輸入線,當CS=0時8279被選中,允許CPU對其讀、寫,否則被禁止。
    A0(數(shù)據(jù)選擇):輸入線。當A0=1時CPU寫入數(shù)據(jù)為命令字,讀出數(shù)據(jù)為狀態(tài)字;A0=0時CPU讀、寫的字節(jié)均為數(shù)據(jù)。
    RD、WR(讀、寫信號):輸入線。低電平有效,來自CPU的控制信號,控制8279的讀、寫操作。
    IRQ(中斷請求):輸出線。高電平有效。
    在鍵盤工作方式中,當FIFO/傳感器RAM存有數(shù)據(jù)時,IRQ為高電平。CPU每次從RAM中讀出數(shù)據(jù)時,IRQ變?yōu)榈碗娖。若RAM中仍有數(shù)據(jù),則IRQ再次恢復(fù)高電平。
    在傳感器工作方式中,每當檢測到傳感器狀態(tài)變化時,IRQ就出現(xiàn)高電平。
    SL0~SL3(掃描線):輸出線。用來掃描鍵盤和顯示器。它們可以編程設(shè)定為編碼(4中取1)或譯碼輸出(16取1)。
         RL0~RL7(回復(fù)線):輸入線。它們是鍵盤矩陣或傳感矩陣的列(或行)信號輸入線。
      SHIFT(移位信號):輸入線、高電平有效。該輸入信號是鍵盤數(shù)據(jù)的最高位(D7),通常用來擴充鍵開關(guān)的功能,作為控制功能鍵用。
     在選通輸入方式時,該信號的上升沿可將來自RL0~RL7的數(shù)據(jù)存入FIFO RAM中。
     在傳感器輸入下,該信號無效。
     OUTA0~OUTA3(A組顯示信號):輸出線。
     OUTB0~OUTB3(B組顯示信號):輸出線。
     這兩組引線都是顯示數(shù)據(jù)輸出線,與多位數(shù)字顯示的掃描線SL0~SL3同步,兩組可以獨立使用,也可以合并使用。
     BD(顯示消隱):輸出線。低電平有效。該信號在數(shù)字切換顯示或使用消隱命令時,將顯示消隱。
     三、命令格式與命令字
     8279的操作方式是通過CPU對8279送入命令時來實現(xiàn)編程的。當數(shù)據(jù)選擇端A0置1時,CPU對8279寫入數(shù)據(jù)為命令字,讀出的數(shù)據(jù)為狀態(tài)字。
     8279共有八條命令。其功能及命令字定義分述如下。
    1.鍵盤/顯示方式設(shè)置命令字
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
0        0        0        D        D        K        K        K
    其中:
    D7、D6、D5=000方式設(shè)置命令特征位。
    D  D(D4、D3):來設(shè)定顯示方式,其定義如下:
                  00:8個字符顯示,左入口
                  00:16個字符顯示,左入口
                  00:8個字符顯示,右入口
                  00:16個字符顯示,右入口
     所謂左入口,即顯示位置從最左一位(最高位)開始,以后逐次輸入的顯示字符逐個向右順序排列; 所謂右入口,即顯示位置從最右一位(最低位)開始,以后逐次輸入的顯示字符時,已有的顯示字符逐個向左順序移動。
    KKK(D2、 D1、 D0):用來設(shè)定七種鍵盤、顯示工作方式:
                   000  編碼掃描鍵盤,雙鍵鎖定
                   001  譯碼掃描鍵盤,雙鍵鎖定
                   010  編碼掃描鍵盤,N鍵輪回
                   011  譯碼掃描鍵盤,N鍵輪回
                   100  編碼掃描傳感器矩陣
                   101  譯碼掃描傳感器矩陣
                   110  選通輸入,編碼顯示掃描
                   111  選通輸入,譯碼顯示掃描
    雙鍵鎖定與N鍵輪回是多鍵按下時的兩種不同的保護方式。雙鍵鎖定為兩鍵同時按下提供的保護方法。再消顫周期里,如果有兩鍵同時按下,則只有其中一個鍵彈起,而另一個鍵保持在按下位置時,才被認可。N鍵輪回為N鍵同時按下的保護方法。當有若干鍵按下時,鍵盤掃描能夠根據(jù)發(fā)現(xiàn)他們的順序,依次將它們的狀態(tài)送入FIFO RAM中。
    2.程序時鐘命令
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
0        0        1        P        P        P        P        P
    其中:
    D7、D6、D5=001為時鐘命令特征位。
    PPPPP(  D4、D3、D2、D1、D0)用來設(shè)定外部輸入CLK端的時鐘進行分頻的分頻數(shù)N。N取值為2~31。例如外部時鐘頻率為2MHZ,PPPPP被置為10100(N=20),則對輸入的外部時鐘20分頻,以獲得8279內(nèi)部要求的100KMZ的基本頻率。
    3.讀FIFO/傳感器RAM命令
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
0        1        0        AI        X        A        A        A
    其中:
    D7D6D5 =010為讀FIFO/傳感器RAM命令特征位。該命令字只在傳感器方式時使用。在CPU讀傳感器RAM之前,必須使用這條命令來設(shè)定傳感器RAM中的8個地址(每個地址一個字節(jié))。
    AAA(D2、D1、D0)為傳感器RAM中的八個字節(jié)地址。
    AI(D4)為自動增量特征位。當AI=1時,每次讀出傳感器RAM后地址自動加1使地址指針指向下一個存儲單元。這樣,下一個數(shù)據(jù)便從下一個地址讀出,而不必重新設(shè)置讀FIFO/傳感器RAM命令。
    在鍵盤工作方式中,由于讀出操做嚴格按照先入先出順序,因此,不需使用此命令。
   4.讀顯示RAM命令
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
0        1        1        AI        A        A        A        A
    其中:
    D7D6D5 =011為讀顯示RAM命令字的特征位。該命令用來設(shè)定將要讀出的顯示RAM地址。
    AAAA(D3、D2、D1、D0)用來尋址顯示RAM命令字的特征位。由位顯示RAM中有16個字節(jié)單元故需要4位尋址。
    AI(D4)為自動增量特征位。當AI=1時,每次讀出后地址自動加1指向下一地址。
    5.寫顯示RAM命令
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
1        0        0        AI        A        A        A        A
    其中:
    D7D6D5 =100為寫顯示RAM命令字的特征位。在寫顯示器RAM之前用該命令用來設(shè)定將要寫入的顯示RAM地址。
    AAAA(D3、D2、D1、D0)為將要寫入的存儲單元地址。
   AI(D4)為自動增量特征位。當AI=1時,每次寫入后地址自動加1指向下一次寫入地址。
    6.顯示禁止寫入/消隱命令特征位
    命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
1        0        1        X        IW
A        IW
B        BL
A        BL
B
     其中:
     D7D6D5 =101為顯示禁止寫入/消隱命令特征位。
   IW/A、IW/B(D3、D2)為A、B組顯示RAM寫入屏蔽位。由于顯示寄存器分成A、B兩組,可以單獨送數(shù),故用兩位來分別屏蔽。當A組的屏蔽位D3=1時,A組的顯示RAM禁止寫入。因此,從CPU寫入顯示器RAM數(shù)據(jù)時,不會影響A的顯示。這種情況通常在采用雙4位顯示器時使用。因為兩個雙四位顯示器是相互獨立的。為了給其中一個雙四位顯示器輸入數(shù)據(jù)而又不影響另一個四位顯示器,因此必須對另一組的輸入實行屏蔽。
    BL/A、BL/B(D1、D0)為消隱顯示位。用于對兩組顯示輸出消隱。若BL=1時,對應(yīng)組的顯示輸出被消隱。當BL=0時,則恢復(fù)顯示。
    7.清除命令
     命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
1        1        0        CD        CD        CD        CF        CA
    其中:
    D7D6D5 =110清除命令特征位。
  CDCDCD(D4D3D2)用來設(shè)定清除顯示RAM方式。共有四種消除方式,見表6-10-1。
  CF(D1)用來置空FIFO存儲器,當=1時,執(zhí)行清除命令后,F(xiàn)IFO RAM被置空,使中斷輸出線復(fù)位。同時,傳感器RAM的讀出地址也被置0。
    CA(D0)為總清的特征位。它兼有CD和CF的聯(lián)合效能。在CD=1時,對顯示的清除方式由D3、D2的編碼決定。
   清除顯示RAM約需160μS。在此期間FIFO狀態(tài)時的最高位DU=1,表示顯示無效。CPU不能向顯示RAM寫入數(shù)據(jù)。
    8.結(jié)束中斷/錯誤方式設(shè)置命令
       命令格式:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
1        1        1        E        ×        ×        ×        ×
      其中:
      D7D6D5 =111為該命令的特征位。此命令有兩種不同的作用。
  (1)作為結(jié)束中斷命令。在傳感器工作方式中使用。每當傳感器狀態(tài)出現(xiàn)變化時,掃描檢測電路將其狀態(tài)寫入傳感器RAM,并啟動中斷邏輯,使IRQ變高,向CPU請求中斷,并且禁止寫入傳感器RAM。此時,若傳感器RAM讀出地址的自動遞增特征沒有置位(AI=0),則中斷請求IRQ在CPU第一次從傳感器RAM讀出數(shù)據(jù)時就被清除。若自動遞增特征已置位(AI=1),則CPU對傳感器RAM的讀出并不能清除IRQ,而必須通過給8279寫入結(jié)束中斷/錯誤方式設(shè)置命令才能使IRQ變低。因此在傳感器工作方式中,此命令用來結(jié)束傳感器RAM的中斷請求。
  (2)作為特定錯誤方式設(shè)置命令。在8279已被設(shè)定為鍵盤掃描N鍵輪回方式以后,如果CPU給8279又寫入結(jié)束中斷/錯誤方式設(shè)置命令(E=1),則8279將以一種特定的錯誤方式工作。這種方式的特點是:在8279的消顫周期內(nèi),如果發(fā)現(xiàn)多個按鍵同時按下,則FIFO狀態(tài)字中的錯誤特征位S/E將置1,并產(chǎn)生中斷請求信號和阻止寫入FIFO RAM。
   上述八種用于確定8279操作方式的命令字皆由D7D6D5特征位確定,輸入8279后能自動尋址相應(yīng)的命令寄存器。因此,寫入命令字時唯一的要求是使數(shù)據(jù)選擇信號A0=1。
   四、狀態(tài)格式與狀態(tài)字
   8279的FIFO狀態(tài)字,主要用于鍵盤和選通工作方式,以指示FIFO RAM中的字符數(shù)和有無錯誤發(fā)生。其格式為:
                                                                       D7   D6   D5   D4   D3   D2   D1   D0
DU        S/E        O        U        F        N        N        N
   其中:
   DU( D7)為顯示無效特征位。當DU=1表示顯示無效。當顯示RAM由于清除顯示或全清命令尚未完成時,DU=1。
                             表6-10-1    CD位定義的清除方式
D4           D3         D2         清除方式
1        0        ×        將顯示RAM全部清零
        1        0        將顯示RAM清成20H(A組=0010;B組=0000)
        1        1        將顯示RAM全部置1
0        不清除(若CA=1,則D3、D2仍有效)


;鍵盤和LED顯示程序
;
;*********************************************
;*8279初始化*
;* KEYCOM為8279命令口KEYDAT為8279數(shù)據(jù)口*
;*********************************************
KEYCOM XDATA 0E601H
KEYDAT XDATA 0E600H
KEYCAM  EQU  30H;定義存放按鍵值RAM起始地址
ORG 0000H
AJMP START
ORG 0003H
LJMP AAA
ORG 0060H
START: MOVR0,#10
MOVDPTR,#KEYCOM ;命令口地址
MOV A, #10H;鍵盤/顯示方式命令字8字符顯示左入口,編碼鍵盤,雙鍵鎖定
MOVX @DPTR,A
MOV A,#34H;程序時鐘命令 26分頻對外部輸入時鐘
MOVX @DPTR,A
MOV A,#0DFH ;清除顯示緩沖區(qū)命令
MOVX @DPTR,A
BUSY1:
MOVX A,@DPTR
JBACC.7,BUSY1
MOV IE,#81H
MOVDPTR,#KEYDAT
MOV A,#0C8H
MOVX @DPTR,A;字型送入8279
INC DPTR
MOV A,#90H
MOVX @DPTR,A;字位送入8279(顯示P)
HA7S2:MOV30H,#80H
MOV 31H,#40H
HA7S3:MOVDPTR,#KEYCOM
MOVX A ,@DPTR
ANL A,#07H
CJNE A,#00H,HA7S4;
AJMP HA7S3
HA7S4:MOVDPTR ,#KEYDAT
MOVX A,@DPTR
MOV B,A ;取鍵值
MOV R1,#00H
MOV DPTR,#KEYTAB ;數(shù)字鍵鍵值表
HA7S5:MOV A ,#00H
MOVCA,@A+DPTR
CJNE A , B,HA7S6;查鍵值表是否相同
AJMP HA7SA; 轉(zhuǎn)數(shù)字鍵處理程序
HA7S6:INCDPTR ;鍵值表地址加1
INC R1;查找次數(shù)加1
MOV A,R1
JB ACC.4,HA7S7;是功能鍵嗎?
AJMPHA7S5 ; 繼續(xù)查找
HA7S7:MOVR1,#00H
MOV DPTR,#KEYTAB1 ;功能鍵表地址
HA7S8:MOV A,#00H
MOVCA,@A+DPTR ;取出功能鍵鍵值
CJNEA,B,HA7S9;鍵值相同嗎?
AJMP HA7SC;轉(zhuǎn)功能鍵處理子程序
HA7S9:INCDPTR
INC R1
MOV A,R1
JNBACC.2,HA7S8 ;繼續(xù)查找
LJMP START
;;;AJMP HA7SD;無按鍵返回
HA7SD:LJMPSTART
HA7SA:MOV A,30H
MOV DPTR,#0FE01H
MOVX @DPTR,A; 字位送入8279
MOV A,R1
MOV R0,31H
MOV @R0,A
INC 31H
MOV DPTR,#CDATA
MOVCA,@A+DPTR;取字型代碼
MOVDPTR,#KEYDAT
MOVX @DPTR,A;送8279顯示
INC 30H
MOV A,30H ;字位加1
CJNEA,#88H,HA7SB;
LJMP HA7S2
HA7SB:AJMPHA7S3
HA7SC:MOVDPTR ,#KJPADDR
MOV A,R1
RL A
;;ADD A,R1
ADD A,#00H
JMP @A+DPTR ;
KJPADDR:LJMPLOOP0
LJMP LOOP1
LJMP LOOP2
KEYTAB: DB 0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH,0D1H,0D9H
DB 0DAH,0C3H,0CBH,0D2H,0D3H,0DBH
KEYTAB1:DB0E3H,0E2H,0E1H
CDATA: DB0CH,9FH,4AH,0BH,99H,29H,28H,8FH,08H,09H,88H,38H,6CH,1AH,68H,0E8H
LOOP0:MOVR5,#0CH;0
LJMP DISPC
LOOP1:MOVR5,#9FH;1
LJMP DISPC
LOOP2:MOVR5,#4aH;2
DISPC: MOVR6,#80H
DISPC1: MOVDPTR ,#KEYCOM
MOVX @DPTR,A;字位送8279
MOV A ,R5
MOVDPTR,#KEYDAT ;字形送8279
MOVX @DPTR ,A
LCALL DELAY1
;MOV A ,#0FFH
;MOVX @DPTR,A ;關(guān)顯示
;INC R6 ;
;CJNER6,#88H,DISPC1
;AJMP DISPC;
LJMP HA7S2
AAA: NOP
NOP
RETI
DELAY1:MOVR1,#0FAH
DELAY2:NOP
NOP
DJNZR1,DELAY2
DJNZR0,DELAY1
RET
END


回復(fù)

使用道具 舉報

7#
ID:7485 發(fā)表于 2015-7-31 13:56 | 只看該作者
8279中文資料[1].pdf (291.27 KB, 下載次數(shù): 7)
回復(fù)

使用道具 舉報

8#
ID:53053 發(fā)表于 2015-8-11 15:57 | 只看該作者
ahshmj 發(fā)表于 2015-7-31 13:42
8279鍵盤、顯示接口芯片
序號:6-10
生產(chǎn)廠家:Intel公司

好感謝你的回復(fù),但是我不會匯編,看不懂。!謝謝
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表