迷狐直播免费版app下载-迷狐直播永久免费版下载-迷狐直播最新下载安装

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
第四章 EM78系列單片機(jī)程序設(shè)計 (3)
第四章 EM78系列單片機(jī)程序設(shè)計 (3)
 更新時間:2008-7-26 20:12:51  點(diǎn)擊數(shù):2
【字體: 字體顏色

5.3.7.  串行實(shí)時時鐘芯片的接口

HT1380串行實(shí)時時鐘芯片具有接口簡單、功耗低、工作電壓范圍寬、計時精確、功能全(可對分、秒、時、日、日期、月及帶閏年補(bǔ)償?shù)哪赀M(jìn)行計數(shù))、成本低等優(yōu)點(diǎn),因此在實(shí)際應(yīng)用中被廣泛采用,下面先簡單介紹一下該芯片的情況,然后實(shí)際工作中采用的子程序供讀者參考。
HT1380是一種串行實(shí)行時時鐘芯片,它提供秒、分、時、日、日期、月和年的信息。對于小于31天的月的月末日期能自動進(jìn)行調(diào)整,還包括閏年校正功能。低功耗設(shè)計且時鐘的運(yùn)行可以采用24小時格式或帶AM/PM指示的12小時的格式。HT1380含有若干寄存器用以存儲相應(yīng)信息。采用外部32.768KHZ晶振以提供正確定時。最少引腳數(shù)的串行I/0通信方式。與微處理器通信僅需三根線:1.YRST(復(fù)位)2.YSCLK(串行時鐘)3.YIO(數(shù)據(jù)線).數(shù)據(jù)傳送采用兩種模式,即單字節(jié)模式和多字節(jié)模式(至多為8個字節(jié),每一數(shù)據(jù)傳送由命令字節(jié)初始化,命令字節(jié)如下所示,最高位MSB(位7)必須置1;最低位LSB(位0)置1/0,表示為寫/讀周期;位3--1指定所需訪問的寄存器。

1.引腳排列
    2.引腳說明
   X1,X2:   32.768KHZ晶體振蕩器引腳
   VSS:      地
   YRST:     串行通信復(fù)位引腳
   YIO:       串行通信數(shù)據(jù)輸入/輸出引腳
   YSCLK:    串行通信的串行時鐘脈沖引腳
       VDD:      電源
3.命令字節(jié)
每一數(shù)據(jù)傳送由命令字節(jié)初始化。命令字節(jié)如下所示,最高位MSB(位7)必須置1;最低位LSB(位0)置I/O,表示為寫/讀周期;位3~1指定所需訪問的寄存器。
下表顯示寄存器地址和它的數(shù)據(jù)格式:
Pegister
Address
A2~A0
Function
Command
Address
(HEX)
Write=w
Read=R
Range
Data
(BCD)
Register Definition
7
6
5
4
3
2
1
0
0
Seconds
80
81
W
R
00~59
CH
10SEC
SEC
1
Minutes
82
83
W
R
00~59
0
10MIN
MIN
2
12HRS
24HRS
84
85
W
R
01~12
00~23
12
24
0
0
AP
10
HR
HR
HOUR
3
Date
86
87
W
R
01~31
0
0
10DATE
DATE
4
Month
88
89
W
R
01~12
0
0
0
10M
MONTH
5
Day
8A
8B
W
R
01~07
0
0
0
0
DAY
6
Year
8C
8D
W
R
00~09
10YEAR
YEAR
7
Write
Protect
8E
8F
W
R
00~80
WP
ALWAYS ZERO
注:*CH: 時鐘暫停標(biāo)志                 *寄存器2的位7:  12/24模式標(biāo)志
            CH=0 允許振蕩器工作                            位7=1:  12小時模式
            CH=1時鐘振蕩器停止                            位7=1:24小時模式
    *WP:  寫保護(hù)位                     *寄存器2的位5:  AM/PM模式設(shè)置
            WP=0 允許寫人數(shù)據(jù)                             AP=1  PM模式
            WP=1 禁止寫人數(shù)據(jù)                             AP=0  AM模式
4. 圖5.11為單字節(jié)及多字節(jié)模式傳送時隙

 
圖5.11 單字節(jié)及多字節(jié)模式傳送時隙

4.         應(yīng)用框圖
             
 
6.實(shí)際例程清單:

HT1380                        EQU 0X06
COUNT0                     EQU 0X10
TXBUF                        EQU 0X11
RXBUF                        EQU 0X12
DATABUF           EQU 0X13
ADDRPOINT              EQU 0X14
HT_SDA_IN                EQU 0B01001000
HD_SDA_OUT  EQU 0B00001000
HT_SCL                       EQU 0
HT_RST                      EQU 1
Ht_SDA                        EQU 2
;
TX_1380:  MOV         A,@HT_SDA_OUT
                            IOW          HT1380
                            BC              HT1380,HT_SCL
                            MOV         A,@8
                            MOV         COUNT0,A
TX_1380_LP:    
                            BC              HT1380,HT_SDA
                            JBC            TXBUF,0
                            BS              HT1380,HT_SDA
                            BS              HT1380,HT_SCL
                            RRC           TXBUF
                            BC              HT1380,HT_SCL
DJZ           COUNT0
JMP           TX_1380_LP
RET
;讀HT1380子程序
READ_HT:         
                            MOV         TXBUF,A
                            BC              HT1380,HT_SCL
                            BS              HT1380,HT_RST
                            MOV         A,@HT_SDA_OUT
                            IOW          HT1380
                            MOV         A,@8
                            MOV         COUNT0,A
TX_1_LP:
                            BC              HT1380,HT_SDA
                            JBC            TXBUF,0
                            BS              HT1380,HT_SDA
                            BS              HT1380,HT_SCL
                            RRC           TXBUF
                            BC              HT1380,HT_SCL
                            DJZ            COUNT0
                            JMP           TX_1_LP
                            MOV         A,@HT_SDA_IN
                            IOW          HT1380
                            MOV         A,@8
                            MOV         COUNT0,A
RX_1380_LP:
                            RRC           RXBUF
                            BC              RXBUF,7
                            JBC            HT1380,HT_SDA
                            BS              RXBUF,7
                            BS              HT1380,HT_SCL
                            BC              HT1380,HT_SCL
                            DJZ            COUNT0
                            JMP           RX_1380_LP
                            BC              HT1380,HT_RST
                            RET
;寫HT1380子程序
WRITE_HT:
                            MOV         ADDRPOINT,A
                            BC              HT1380,HT_SCL
                            BS              HT1380,HT_RST
                            MOV         A,@0B1000110
                            MOV         TXBUF,A
                            CALL         TX_1380
CLR           TXBUF
CALL        TX_1380
BC             HT1380,HT_RST
NOP
BS              HT1380,HT_RST
MOV         A,ADDRPOINT
                            MOV         TXBUF,A
                            CALL         TX_1380
MOV         A,DATABUF
MOV         TXBUF,A
CALL        TX_1380
BC             HT1380,HT_RST
NOP
BS              HT1380,HT_RST
MOV         A,@0B10001110
MOV         TXBUF,A
CALL        TX_1380
MOV         A,@0B10000000
MOV         TXBUF,A
CALL        TX_1380
BC             HT1380,HT_RST
MOV         A,HT_SDA_IN
IOW          HT1380
RET
END

5.3.8.  HD7279串行接口8位LED數(shù)碼管及64鍵鍵盤智能控制芯片

HD7279(A)是一片具有串行接口的,可同時驅(qū)動8位共陰式數(shù)碼管(或64只獨(dú)立LED)的智能顯示驅(qū)動芯片,該芯片同時還可連接多達(dá)64鍵的鍵盤矩陣。
HD7279內(nèi)部含有譯碼器,可直接接受16進(jìn)制碼,HD7279A還同時具有2種譯碼方式,HD7279(A)還具有多種控制指令,如消隱、閃爍、左移、右移、段尋址等。
特點(diǎn):
·串行接口
·各位獨(dú)立控制譯碼/不譯碼及消隱和閃爍屬性
·(循環(huán))左移/(循環(huán))右移指令
·具有段尋址指令,方便控制獨(dú)立LED
·64鍵鍵盤控制器,內(nèi)含去抖動電路
控制指令
HD7279的控制指令分為二大類——純指令和帶有數(shù)據(jù)的指令。
·純指令
1、復(fù)位(清除)指令
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
0
0
1
0
0
當(dāng)HD7279收到該指令后,將所有的顯示清除,所有設(shè)置的字符消隱、閃爍等屬性也被一起清除。執(zhí)行該指令后,芯片所處的狀態(tài)與系統(tǒng)上電后所處的狀態(tài)一樣。
2、測試指令
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
1
1
1
1
1
該指令使所有的LED全部點(diǎn)亮,并處于閃爍狀態(tài),主要用于測試。
3、左移指令
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
0
0
0
0
1
使所有的顯示自右向左(從第1位向第8位)移動一位(包括處于消隱狀態(tài)的顯示位),但對各位所設(shè)置的消隱及閃爍屬性不變。移動后,最右邊一位為空(無顯示)。例如,原顯示為
4
2
5
2
L
P
3
9
其中第2位‘3’和第4位‘L’為閃爍顯示,執(zhí)行了左移指令后,顯示變?yōu)?/DIV>
2
5
2
L
P
3
9
 
第二位‘9’和第四位‘P’為閃爍顯示。
4、右移指令
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
0
0
0
0
0
與左移指令類似,但所做移動為自左向右(從第8位向第1位)移動,移動后,最左邊一位為空。
 
5、循環(huán)左移指令
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
0
0
0
1
1
與左移指令類似,不同之處在于移動后原最左邊一位(第8位)的內(nèi)容顯示于最右位(第1位)。在上例中,執(zhí)行完循環(huán)左移指令后的顯示為
2
5
2
L
P
3
9
4
第二位‘9’和第四位‘P’為閃爍顯示。
6、循環(huán)右移指令
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
0
0
0
1
0
與循環(huán)左移指令類似,但移動方向相反。
·帶有數(shù)據(jù)的指令
1、下載數(shù)據(jù)且按方式0譯碼
D7
D6
D5
D4
D3
D2
D1
D0
 
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
0
a2
a1
a0
 
DP
X
X
X
d3
d2
d1
d0
X=無影響
命令由二個字節(jié)組成,前半部分為指令,其中a2 ,a1,a0為位地址,具體分配如下:
a2
a1
a0
顯示位
0
0
0
1
0
0
1
2
0
1
0
3
0
1
1
4
1
0
0
5
1
0
1
6
1
1
0
7
1
1
1
8
d0—d3為數(shù)據(jù),收到此指令時,HD7279(A)按以下規(guī)則(譯碼方式0)進(jìn)行譯碼,如下表:
 
十六進(jìn)制
d3
d2
d1
d0
7段顯示
00H
0
0
0
0
0
01H
0
0
0
1
1
02H
0
0
1
0
2
03H
0
0
1
1
3
04H
0
1
0
0
4
05H
0
1
0
1
5
06H
0
1
1
0
6
07H
0
1
1
1
7
08H
1
0
0
0
8
09H
1
0
0
1
9
0AH
1
0
1
0
-
0BH
1
0
1
1
E
0CH
1
1
0
0
H
0DH
1
1
0
1
L
0EH
1
1
1
0
P
0FH
1
1
1
1
(無顯示)
小數(shù)點(diǎn)的顯示由DP位控制,DP=1時,小數(shù)點(diǎn)顯示,DP=0時,小數(shù)點(diǎn)不顯示。
2、下載數(shù)據(jù)且按方式1譯碼(僅對HD7279A有效)
 
D7
D6
D5
D4
D3
D2
D1
D0
 
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0
0
1
a2
a1
a0
 
DP
X
X
X
d3
d2
d1
d0
X=無影響
此指令與上一條指令基本相同,所不同的是譯碼方式,且只有HD7279A才具有此指令。該指令的譯碼按下表進(jìn)行:
 
 
 
 
十六進(jìn)制
d3
d2
d1
d0
7段顯示
00H
0
0
0
0
0
01H
0
0
0
1
1
02H
0
0
1
0
2
03H
,
0
0
1
1
3
04H
0
1
0
0
4
05H
0
1
0
1
5
06H
0
1
1
0
6
07H
0
1
1
1
7
08H
1
0
0
0
8
09H
1
0
0
1
9
0AH
1
0
1
0
A
0BH
1
0
1
1
b
0CH
1
1
0
0
C
0DH
1
1
0
1
d
0EH
1
1
1
0
E
0FH
1
1
1
1
F
 
3、下載數(shù)據(jù)但不譯碼
 
D7
D6
D5
D4
D3
D2
D1
D0
 
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
1
0
a2
a1
a0
 
DP
A
B
C
D
E
F
G
其中,a2 ,a1,a0為位地址(參見‘下載數(shù)據(jù)且譯碼’指令),A-G和DP為顯示數(shù)據(jù),分別對應(yīng)7段LED數(shù)碼管的各段。
4、閃爍控制
 
D7
D6
D5
D4
D3
D2
D1
D0
 
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
1
0
0
0
 
d8
d7
d6
d5
d4
d3
d2
d1
此命令控制各個數(shù)碼管的閃爍屬性。d1- d8分別對應(yīng)數(shù)碼管1-8,0=閃爍,1=不閃爍。開機(jī)后,缺省的狀態(tài)為各位均不閃爍。
5、消隱控制
 
D7
D6
D5
D4
D3
D2
D1
D0
 
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
1
1
0
0
0
 
d8
d7
d6
d5
d4
d3
d2
d1
此命令控制各個數(shù)碼管的消隱屬性。d1- d8分別對應(yīng)數(shù)碼管1-8,1=顯示,0=消隱。當(dāng)某一位被賦予了消隱屬性后,HD7279在掃描時將跳過該位,因此在這種情況下無論對該位寫入何值,均不會被顯示,但寫入的值將被保留,在將該位重新設(shè)為顯示狀態(tài)后,最后一次寫入的數(shù)據(jù)將被顯示出來。當(dāng)無需用到全部8個數(shù)碼管顯示的時候,將不用的位設(shè)為消隱屬性,可以提高顯示的亮度。
注意:至少應(yīng)有一位保持顯示狀態(tài),如果消隱控制指令中d1- d8全部為0,該指令將不被接受,HD7279保持原來的消隱狀態(tài)不變。
6、段點(diǎn)亮指令
 
D7
D6
D5
D4
D3
D2
D1
D0
 
D7
D6
D5
D4
D3
D2
D1
D0
1
1
1
0
0
0
0
0
 
X
X
d5
d4
d3
d2
d1
d0
此為段尋址指令,作用為點(diǎn)亮數(shù)碼管中某一指定的段,或LED矩陣中某一指定的LED。
指令中,X=無影響;d0- d5為段地址,范圍從00H—3FH,具體分配為:
第1個數(shù)碼管的G段地址為00H,F(xiàn)段為01H,……A段為06H,小數(shù)點(diǎn)DP為07H,第2個數(shù)碼管的G段為08H,F(xiàn)段為09H,……,依此類推直至第8個數(shù)碼管的小數(shù)點(diǎn)DP地址為3FH。
7、段關(guān)閉指令
 
D7
D6
D5
D4
D3
D2
D1
D0
 
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0
0
0
0
0
0
 
X
X
d5
d4
d3
d2
d1
d0
段尋址命令,作用為關(guān)閉(熄滅)數(shù)碼管中的某一段,指令結(jié)構(gòu)與‘段點(diǎn)亮指令’相同,請參閱上文。
8、讀鍵盤數(shù)據(jù)指令
 
D7
D6
D5
D4
D3
D2
D1
D0
 
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
1
0
1
0
1
 
d7
d6
d5
d4
d3
d2
d1
d0
該指令從HD7279讀出當(dāng)前的按鍵代碼。與其它指令不同,此命令的前一個字節(jié)00010101B為微控制器傳送到HD7279的指令,而后一個字節(jié)d0- d7則為HD7279返回的按鍵代碼,其范圍是0-3FH(無鍵按下時為0xFF),各鍵鍵盤代碼的定義,請參閱圖2。
此指令的前半段,HD7279的DATA引腳處于高阻輸入狀態(tài),以接受來自微處理器的指令;在指令的后半段,DATA引腳從輸入狀態(tài)轉(zhuǎn)為輸出狀態(tài),輸出鍵盤代碼的值。故微處理器連接到DATA引腳的I/O口應(yīng)有一從輸出態(tài)到輸入態(tài)的轉(zhuǎn)換過程,詳情請參閱本文‘串行接口’一節(jié)的內(nèi)容。
當(dāng)HD7279檢測到有效的按鍵時,KEY引腳從高電平變?yōu)榈碗娖�,并一直保持到按鍵結(jié)束。在此期間,如果HD7279接收到‘讀鍵盤數(shù)據(jù)指令’,則輸出當(dāng)前按鍵的鍵盤代碼;如果在收到‘讀鍵盤指令’時沒有有效按鍵,HD7279將輸出FFH (11111111B)。
串行接口
HD7279采用串行方式與微處理器通訊, 串行數(shù)據(jù)從DATA引腳送入芯片,并由CLK端同步。當(dāng)片選信號變?yōu)榈碗娖胶�,DATA引腳上的數(shù)據(jù)在CLK引腳的上升沿被寫入HD7279的緩沖寄存器。
HD7279的指令結(jié)構(gòu)有三種類型:1、不帶數(shù)據(jù)的純指令,指令的寬度為8個BIT,即微處理器需發(fā)送8個CLK脈沖。2、帶有數(shù)據(jù)的指令,寬度為16個BIT,即微處理器需發(fā)送16個CLK脈沖。3、讀取鍵盤數(shù)據(jù)指令,寬度為16個BIT,前8個為微處理器發(fā)送到HD7279的指令,后8個BIT為HD7279返回的鍵盤代碼。執(zhí)行此指令時,HD7279的DATA端在第9個CLK脈沖的上升沿變?yōu)檩敵鰻顟B(tài),并與第16個脈沖的下降沿恢復(fù)為輸入狀態(tài),等待接收下一個指令。
串行接口的時序如下圖:
1、純指令

 
2、帶數(shù)據(jù)指令
 
                8位指令(高位在前)                 8位數(shù)據(jù)(高位在前)
 
3、讀鍵盤指令
                     讀鍵盤指令(8位,高位在前)     HD7279輸出的鍵盤代碼(8位,高位在前)
 
2、EM78P156 接口程序
    硬件連接如圖,EM78P156所用時鐘頻率4MHz, 選4個時鐘周期為一個指令周期,
;轉(zhuǎn)移指令用2個指令周期。程序使用ASM456編譯程序編譯通過。程序中延時時間
;以HD7279A外接R=1.5K, C=15pF為準(zhǔn),如使用不同的CPU時鐘頻率或R/C參數(shù),
;請注意調(diào)整延時時間。
 
圖 5.14 EM78P156與HD7279A 的硬件連接
 

;**********************************
; 寄存器定義
;**********************************
STATUS        ==   0X03
P5       ==   5
C        ==   0
 
BIT_COUNT ==   0X10
DATA_OUT ==   0X11
DATA_IN       ==   0X12
TEN      ==   0X13
TIMER         ==   0X14
TIMER1        ==   0X15
 
;**********************************
; I/O口定義
;**********************************
CS       ==   0    ;CS連接于EM78P156的P50
CLK      ==   1    ;CLK連接于EM78P156的P51
DAT      ==   2    ;DAT連接于EM78P156的P52
KEY      ==   3    ;KEY連接于EM78P156的P53

 
        ORG 0x00
        JMP START
       
        ORG 0X10
;*******************************************
; 延時子程序
;*******************************************
LONG_DELAY: MOV A,@16       ;設(shè)定延時時間為約50uS
        MOV TIMER,A
DELAY_LOOP: DJZ TIMER
        JMP DELAY_LOOP
        RET
SHORT_DELAY:    MOV A,@3        ;設(shè)定延時時間為約9uS
        MOV TIMER,A
SHORT_LP:   DJZ TIMER
        JMP SHORT_LP
        RET
;*******************************************
; 發(fā)送1個字節(jié)到HD7279,高位在前
;*******************************************
SEND:       MOV DATA_OUT,A  ;待發(fā)送數(shù)據(jù)存入DATA_OUT
        MOV A,@8
        MOV BIT_COUNT,A ;設(shè)定位記數(shù)器=8
        BC  P5,CS       ;設(shè)CS為低電平
        CALL    LONG_DELAY  ;長延時
SEND_LOOP:  BC  STATUS,C
        RLC DATA_OUT    ;輸出1位
        BC  P5,DAT
        JBC STATUS,C
        BS  P5,DAT
        BS  P5,CLK      ;設(shè)CLK為高電平
        CALL    SHORT_DELAY ;短延時
        BC  P5,CLK      ;設(shè)CLK為低電平
        CALL    SHORT_DELAY
        DJZ BIT_COUNT   ;檢查是否8位均發(fā)送完畢
        JMP SEND_LOOP   ;未發(fā)送完,發(fā)送下一位
        BC  P5,DAT
        RET         ;發(fā)送完畢,返回
;*******************************************
; 從HD7279接收一個字節(jié),高位在前
;*******************************************
RECEIVE:    MOV A,@8
        MOV BIT_COUNT,A ;設(shè)定位記數(shù)器=8
        MOV A,@0B11111100   ;設(shè)P5.2(DATA)口為輸入狀態(tài)
        IOW P5
        CALL    LONG_DELAY  ;長延時
RECEIVE_LOOP:   BS  P5,CLK      ;置CLK為高電平
        CALL    SHORT_DELAY ;短延時
        BS  STATUS,C
        JBS P5,DAT
        BC  STATUS,C
        RLC DATA_IN     ;讀取一位數(shù)據(jù)
        BC  P5,CLK      ;置CLK為低電平
        CALL    SHORT_DELAY
        DJZ BIT_COUNT   ;是否已接收8位數(shù)據(jù)
        JMP RECEIVE_LOOP
        MOV A,@0B11111000   ;重新設(shè)P52(DATA)口為輸出態(tài)
        IOW P5
        RET
;*******************************************       
; 初始化
;*******************************************
START:      MOV A,@0B11111000   ;I/O口初始化
        IOW P5
        MOV A,@0B11111001
        MOV P5,A
        MOV A,@0X19     ;延時約25MS
        MOV TIMER,A
START_DELAY:    MOV A,@0XFF
        MOV TIMER1,A
START_DELAY1:   DJZ TIMER1
        JMP START_DELAY1
        DJZ TIMER
        JMP START_DELAY
        MOV A,@0B10100100   ;發(fā)復(fù)位(清除)指令
        CALL    SEND
        BS  P5,CS       ;恢復(fù)CS為高電平
;*******************************************
; 主程序
;*******************************************
MAIN:       JBC P5,KEY      ;檢測是否有鍵按下
        JMP MAIN
        MOV A,@0B00010101   ;有鍵按下,發(fā)送讀鍵盤指令
        CALL    SEND        ;發(fā)送讀鍵盤指令
        CALL    RECEIVE     ;從HD7279A讀鍵盤代碼
        BS  P5,CS       ;設(shè)CS為高電平
;*******************************************
; 16進(jìn)制——BCD碼轉(zhuǎn)換
;*******************************************
        CLR TEN
GET_DEC     MOV A,@10
        SUB A,DATA_IN
        JBS STATUS,C
        JMP OVER
        MOV DATA_IN,A
        INC TEN
        JMP GET_DEC
;*******************************************
;發(fā)送按鍵的BCD碼到HD7279A
;*******************************************
;發(fā)2次左移指令,使當(dāng)前顯示內(nèi)容左移,留出空
;位供顯示新數(shù)據(jù)
OVER        MOV A,@0B10100001   ;左移指令
        CALL    SEND                ;發(fā)送指令到HD7279A
        MOV A,@0B10100001   ;左移指令
        CALL    SEND                ;發(fā)送指令到HD7279A
        MOV A,@0B10000001   ;下載數(shù)據(jù)且譯碼指令(第2位)
        CALL    SEND                ;發(fā)送指令到HD7279A
        MOV A,TEN
        CALL    SEND                ;發(fā)送十位數(shù)字到HD7279A
        MOV A,@0B10000000   ;下載數(shù)據(jù)且譯碼指令(第1位)
        CALL    SEND                ;發(fā)送指令到HD7279A
        MOV A,DATA_IN
        CALL    SEND                ;發(fā)送個位數(shù)字到HD7279A
        BS  P5,CS
WAIT        JBS P5,KEY          ;等待按鍵放開
        JMP WAIT
        JMP MAIN
 
;EOP

5.4.      算術(shù)例程

5.4.1.  無符號的BCD加法

    二進(jìn)制做BCD加法,一定要注意每一位相加結(jié)果的調(diào)整,以轉(zhuǎn)換成BCD的數(shù)位,本程序使用二個步驟來完成結(jié)果調(diào)整,(產(chǎn)生DC標(biāo)志)
1.如果和的最低有效位是大于9的數(shù),或DC=1時,將和加6
2.經(jīng)過步驟1后,如果最高有效位大于9,或相加后C=1,則將和加上60H(即加6到MSD)
擴(kuò)展程序到2位數(shù)以上時,所有位相都必須帶C標(biāo)志(或DC)一起相加,而且上面的原則沿深到每一位數(shù)的處理,即從原數(shù)相加,步驟1、步驟2的加法所產(chǎn)生的進(jìn)位都必須進(jìn)位到下一位。
1.  流程圖
 
2.         程序:
主程序
MAIN    MOV A ,@0X99 ;
        MOV Num-1 ,A
        MOV A ,@0X99
        MOV Num-2 ,A
        CALL BCDAD
SELF   JMP SELF
        END
 
 Num-1=0X20; 0X20放加數(shù),0X21放被加數(shù)
         Result=0X20; 運(yùn)行后和放在0X21,進(jìn)位
         Num-2=0X21; 放到0X20中
         0-Flow=0X21;
;加法子程序   
BCDADD MOV  A,Num-1
             ADD  Num-2, A; 作二進(jìn)制加法
             CLR  Num-1
             RLC  Num-1; 保存進(jìn)位
             JBC  STATUS, DC; DC=0?
             JMP  Adjust; 不是,調(diào)整,LSD
             MOV  A, 0X06;
             ADD Num-2, A; 通過LSD加6,測試LSD>9否
             JBC  STATUS, ;判斷C=1?
             INC  Num-1
             JBC  STATUS , DC;DC=0?
             SUB  Num-2     ;LSD<9恢復(fù)原數(shù)據(jù)
JMP  over1
     Adjust  MOV A, @6H     jLSD加6調(diào)整;
             ADD Num-2, A
    Over1   mov A, @60H   ;MSD加6調(diào)整,           
            ADD Num2, A
            JBC STATUS,C  ;MSD<9
             JMP over3
            JBC Num-1, 0
            SUB Num-2  ;
          RET
    Over3 MOV A,@01H ;保存和的進(jìn)位 
          MOV Num-1,A
          RET

5.4.2.  無符號的BCD減法

    使用二進(jìn)制數(shù)做2位數(shù)BCD減法(即做二個數(shù)補(bǔ)碼的加法),但須注意調(diào)整其相減結(jié)果成為正確的BCD數(shù)。
    1.如果差的低4位(LSD)>9,則 從LSD減去6(產(chǎn)生的DC被加到下一位數(shù))
2.步驟1它成后,如果差的高4位(MSD)>9,則從MSD減去6。
一般擴(kuò)展到二位數(shù)以上時,每個BCD位都使用以上的原則,標(biāo)志的測試(步驟2)是在二補(bǔ)碼的加法完成后進(jìn)行,當(dāng)0X20=9,結(jié)果是VE,取十補(bǔ)碼以取得它的值。
2.  程序:
main     mov a , @0x23  ; 主程序
         mov  Num-1 , A
         mov  A ,@0x99
         mov  Num-2 , A
         call   BCDSUB
         mov   A , @0X99
         mov  Num-1, A
         mov  A , @0x00
         mov  A , Num-2
         call   BCDSUB
SELF    goto   SELF
         end
 
 
      Num-1=0X20
  Result=0X20
  Num-2=0X21
0-flow=0X21;
       BCDADD mov  A,Num-1;做二進(jìn)制減法
         SUb  Num-2, A
  CLR  Num-1;
       RLC  Num-1; 保存進(jìn)位
       JBS  STATUS, DC; DC=1?
       JMP  Adjust; 不是,LSD調(diào)整
       JBS  Num-2, 3
       JMP Over-1
       JBC  Num-2,2
       JMP  adjust1;LSD結(jié)果調(diào)整
       JBS  Num-2,1
       JMP Over-1
 Adjst1 mov A ,@6 ;不是,轉(zhuǎn)到MSD進(jìn)行處理
       JMP  over1 ;LSD調(diào)整(減6)
       Sub  Num-2,A
 Over-1 JBS Num-1,0 ;C=0?
  JMP  adjst2 ;是,進(jìn)行MSD調(diào)整
       CLR Num-1
       JBS Num-2,7 ;不是,MSD>9?
       RET
       JBC Num-2 ,6
       JMP Adjst2
       JBS  Num-2 ,5
       RET
  adjst2 mov A , @0X60  ; MSD調(diào)整
       Sub Num-2 , A
       CLR Num-1 ,
       JBS STATS,C 
       MOV   A ,  1
       MOV  Num-1,A
  Over RET
 

5.4.3.  BCD TO BIN 轉(zhuǎn)換

    這個程序是將5位BCD數(shù)轉(zhuǎn)換成一個16位二進(jìn)制數(shù),5位BCD數(shù)依次存放于R0、R1、R2、MSD在R0的最右端,將16進(jìn)制數(shù)轉(zhuǎn)出示存器H-byte和L-byte
一般轉(zhuǎn)換方法是:轉(zhuǎn)入換數(shù)X=abcde(5位BCD數(shù))
X= abcde=10[10[10[10a+b]+c]+d]+e
采用此方式,以高次向低位依次進(jìn)行二進(jìn)制的處理調(diào)整。
定義 H-byte=0X10
L-byte=0X11 
     R0   =0X12
R1   =0X13
R2   =0X14
H-temp=0x15
L-temp=0X16
BCDTOB  CLR  H-byte
mov A ,R0
and A ,@0X0FH
mov L-byte  A
call  Mpy10b  ; 結(jié)果=10a+b
swapaA  R1
call  Mpy10b   ;結(jié)果=10[10a+b]
mov  A, R1
call  Mpy10b;結(jié)果=10[10[10a+b]+c]
swapA  R2
call Mpy10b ;結(jié)果=10[10[10[10a+b]+c]+d]
mov  A, R2
and  A,@0X0FH
add  L-byte, A
JBC  STATUS,C
  JZ H-byte;果=10[10[10[10a+b]+C]+d+e
     RET        ;BCD 到BIN轉(zhuǎn)換結(jié)束 Mpy10b and  A,@OXOFH
     add  L-byte,A
    JBC  STATUS,C
     JZ   H-byte
Mpy10a  BC STATUS,C;單元及進(jìn)行除2處理
    RLCA  L-byte
     MOV   L-TEMP,A
    RLCA  H-byte      ;最低位調(diào)整,
    MOV   H-temp,A        ;
    BC    STATUS,C  逐步進(jìn)行除2處理
    RLC   L-byte
  

       RLC   H-byte
       BC  STATDS,C 進(jìn)行第三位二進(jìn)制處理
       RLC   L-byte
       RLC   H-byte
       BC    STATUS,C  ;進(jìn)行第四位三進(jìn)制處理
       RLC   L-byte
       RLC   H-byte    ;一直到第四位
       MOV   A,L-temp
       ADD   A,L-byte
       JBC   STATUS,C
       INC   H-byte
       MOV   A,H-temp
       ADD   H-byte,A
       RET         
主程序
   main  mov  A, @0x60
         mov  R0, A
         mov  A, @0x55
         mov  R1, A
         mov  A, @0x35
         mov  R2, A
         call   BCDTOB
   self   goto  self
              end
  • 上一篇: EM78系列單片機(jī)簡介
  • 下一篇: 第四章 EM78系列單片機(jī)程序設(shè)計 ( 2 )
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1