專注電子技術(shù)學習與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

單板機監(jiān)控程序簡介

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2007年10月02日   【字體:

(二)        單板機監(jiān)控程序簡介

1.      什么是監(jiān)控程序?

單板機的底層管理程序,直接面向硬件,接受鍵盤命令,執(zhí)行基本操作,并向用戶提供子程序模塊。

*                        研究監(jiān)控程序,才能深入了解單板機的工作原理。

*                        監(jiān)控程序是運用匯編語言的良好實例,分析監(jiān)控程序可以學到許多基本的編程方法和軟硬結(jié)合的系統(tǒng)設(shè)計技術(shù)。

*                        了解監(jiān)控程序,以便調(diào)用其中的子程序,提高編程效率,

 

2.      單板機監(jiān)控程序的基本功能

*                        系統(tǒng)初始化。

*                        提供人機對話界面,接受鍵盤命令,顯示操作結(jié)果。

*                        執(zhí)行鍵盤命令:

1)  狀態(tài)設(shè)置

2)  檢查、修改存儲器的內(nèi)容或I/O端口的輸出。

3)  與上位機進行串行通信,傳送數(shù)據(jù)或下載程序。

4)  存儲器數(shù)據(jù)塊傳送。

5)  運行用戶程序,可單步調(diào)試。

*                        提供常用運算、A/D轉(zhuǎn)換及打印驅(qū)動等子程序。

 

3.  監(jiān)控程序占用的資源

*                        監(jiān)控程序存放在2764的前4k,0000H-0FFFH。

*                        工作寄存器用0區(qū)

*                        監(jiān)控狀態(tài)標志使用內(nèi)部2FH單元。

*                        數(shù)據(jù)緩沖區(qū)使用30H-3FH

*                        堆棧棧底 40H

*                        顯示緩沖區(qū)7EH-79H。

*                        使用INT0及T1中斷。

4.      監(jiān)控主程序分析

 

ORG    0000H

0000  00       NOP

0001  0130     AJMP   START

0003  C2A8    CLR  EX0                  ;INT0入口,用于單步執(zhí)行。

0005  02039C        LJMP   PUSH_REG   ;轉(zhuǎn)去單步現(xiàn)場保護。

                              ORG    000BH                ;T0中斷入口

000B  02200B   LJMP  200BH         ;轉(zhuǎn)至200BH,向用戶開放。

                              ORG    0013H                ;INT1入口

0013  022013   LJMP   2013H              ;轉(zhuǎn)至2013H,向用戶開放。

                          ORG      001BH            ;T1中斷入口

001B  020BB2  LJMP   0BB2H           ;監(jiān)控占用,轉(zhuǎn)去打印控制。

               ORG 0023H                ;串行口中斷入口

0023  022023   LJMP   2023H             ;轉(zhuǎn)至2023H,向用戶開放。

;*****************  監(jiān)控程序初始化  *********************

                            ORG  0030H

0030  7879  START: MOV  R0,#79H       ;監(jiān)控初始化程序段

0032  7601             MOV  @R0,#01H   ;送“CPU-51”顯示代碼。

0034  08               INC    R0

0035  7605             MOV  @R0,#05H

0037  08        INC    R0

0038  7614            MOV  @R0,#14H

003A  08              INC    R0

003B  761C          MOV  @R0,#1CH

003D  08              INC    R0

003E  7610            MOV  @R0,#10H

0040  08        INC    R0

0041  760C            MOV  @R0,#0CH

0043  758140          MOV  SP,#40H        ;堆棧指針初值設(shè)為40H。

0046  7400             MOV  A,#00H         ;監(jiān)控用的存儲單元清零。

0048  F52F            MOV  2FH,A           ;狀態(tài)標志單元2FH清零。

004A  7830            MOV  R0,#30H       ;30H—3FH單元清零。

004C  7910            MOV  R1,#10H

004E  F6    START0: MOV   @R0,A

004F  08               INC    R0

0050  D9FC           DJNZ R1,START0

;****************   監(jiān)控開始,等待鍵命令  *******************

0052  1204AF  MONITOR: LCALL    KEY_SCAN ;掃描鍵盤。

0055  7005              JNZ   KEY_PROC         ;有鍵則轉(zhuǎn)鍵處理。

0057  1204D0          LCALL    DISPLAY           ;維持顯示。

005A  0152                 AJMP    MONITOR

005C  120340  KEY_PROC: LCALL   OFF_DISP    ;鍵命令處理程序。

005F  120460   K_P1:LCALL      KEY_GET

0062  20E40D                JB ACC.4,COMMAND;功能鍵,轉(zhuǎn)命令處理。

0065  857D7E             MOV  7EH,7DH                 ;數(shù)字鍵,送顯示。

0068  857C7D            MOV  7DH,7CH

006B  857B7C            MOV  7CH,7BH

006E  F57B               MOV  7BH,A

0070  015F                AJMP K_P1

0072  5407   COMMAND:  ANL   A,#07H           ;命令分析。

0074  F8                  MOV  R0,A        ;命令功能參見附錄五。

0075  23                   RL    A

0076  28                   ADD  A,R0

0077  90007B             MOV  DPTR,#FUNCTION

007A  73                  JMP   @A+DPTR ;用散轉(zhuǎn)指令轉(zhuǎn)相應(yīng)分支。

007B  02024E  FUNCTION:  LJMP MOV         ;轉(zhuǎn)MOV命令分支。

007E  0200A0             LJMP DOWN            ;轉(zhuǎn)MON命令分支。

0081  0201B1             LJMP WRIT         ;轉(zhuǎn)WRI命令分支。 

0084  020161              LJMP READ          ;轉(zhuǎn)RDS命令分支。

0087  0200AF             LJMP EXEC        ;轉(zhuǎn)EXE命令分支。

008A  0200E6             LJMP EXAM             ;轉(zhuǎn)EXA命令分支。

008D  020209             LJMP F                ;轉(zhuǎn) [F] 命令分支。

0090  0201FB             LJMP UP                 ;轉(zhuǎn)USE命令分支。

 

;*********************  MON 命令分支  *********************

                               ORG  00A0H

00A0  11A5       DOWN:   ACALL    DOWND         

00A2  020052             LJMP MONITOR

00A5  120340     DOWND: LCALL    OFF_DISP        

00A8  757E10             MOV  7EH,#10H      

00AB  752F00            MOV  2FH,#00H    ;監(jiān)控標志置待命狀態(tài)0。

00AE  22                  RET                  ;即 78H位 = 0 。

;*************  EXE 命令分支  *****************

00AF  307803  EXEC:   JNB   78H,EXECD ;待命方式0,轉(zhuǎn)連續(xù)執(zhí)行。

00B2  020520             LJMP STEP       ;待命方式1,轉(zhuǎn)單步執(zhí)行。

00B5  11BE   EXECD:   ACALL    EXECS        

00B7  020052             LJMP MONITOR

轉(zhuǎn)載須保留地址:http://www.torrancerestoration.com/mcu/291.html

;***************  USE 命令分支  ***********************

01FB  5100       UP:  ACALL    UPS

01FD  020052             LJMP MONITOR

0200  D278       UPS:     SETB 78H

0202  120340              LCALL    OFF_DISP

0205  757E1B             MOV  7EH,#1BH

0208  22                   RET

 

;***************  取鍵值子程序  ************************


           ORG  0460H

KEY_GET:ACALL   KEY_SCAN

    JNZ      K_G1

    LCALL      DISPLAY

    AJMP    KEY_GET

K_G1:      LCALL    DISPLAY

    LCALL    DISPLAY

    LCALL    KEY_SCAN

    JNZ     K_G2

    LCALL  DISPLAY

    AJMP    KEY_GET

K_G2:      MOV  R2,#0FEH

     MOV   R4,#00H

K_G3:      MOV  DPTR,#6000H

    MOV     A,R2

    MOVX  @DPTR,A

    MOV     A,P1

    JB  ACC.0,LINE1

    MOV     A,#00H

    AJMP    K_G_END

LINE1:  JB     ACC.1,LINE2

    MOV     A,#08H

    AJMP    K_G_END

  LINE2:JB  ACC.2,NEXT_COL

          MOV    A,#10H

K_G_END:     ADD  A,R4

           PUSH ACC

KEY_FREE:   LCALL    DISPLAY

          ACALL KEY_SCAN

          JNZ     KEY_FREE

          POP     ACC

          RET

NEXT_COL:   INC   R4

          MOV    A,R2

      JNB   ACC.7,KEY_NEXT

          RL       A

          MOV    R2,A

          AJMP   K_G3

KEY_NEXT:   AJMP KEY_GET

KEY_SCAN:   MOV  DPTR,#6000H

          MOV    A,#00H

          MOVX @DPTR,A

          MOV    A,P1

          CPL     A

          ANL     A,#07H

          RET


;***************    顯示掃描子程序  ******************

DIS0000: MOV A,#0FFH          ;顯示準備

MOV DPTR,#8000H

MOVX @DPTR,A

MOV  R0,#79H

MOV  R3,#01H

AJMP DIS0001

                           ORG 04D0H

DISPLAY:  AJMP  DIS0000

DIS0001:  MOV   A,R3

DISPLAY1: MOV   DPTR,#6000H

04D6  F0                   MOVX  @DPTR,A

04D7  E6                  MOV   A,@R0

04D8  2419                    ADD   A,#19H

04DA  83                  MOVC  A,@A+PC

04DB  908000             MOV   DPTR,#8000H

04DE  F0                  MOVX  @DPTR,A

04DF  91EB               ACALL  DELAY

04E1  08                   INC    R0

04E2  EB                  MOV   A,R3

04E3  20E504              JB     ACC.5,DISPLAY2

04E6  23                   RL        A

04E7  FB                  MOV   R3,A

04E8  81D3                AJMP   DISPLAY1

04EA  22      DISPLAY2: RET

;*****  延時子程序

04EB  7F02       DELAY: MOV    R7,#02H

04ED  7EFF      DELAY1: MOV      R6,#0FFH

04EF  DEFE      DELAY2: DJNZ    R6,DELAY2

04F1  DFFA                DJNZ     R7,DELAY1

04F3  22                   RET

;*******字形碼表

DB     0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H

DB     90H,88H,83H,0C6H,0A1H,86H,8EH,8CH,0DEH

DB     0F3H,91H,0BFH,7FH,0FFH,00H,0AFH,0A3H,00H

DB     0CH,0C1H,40H,79H,24H,30H,19H,12H,02H,78H,00H,10H

關(guān)閉窗口

相關(guān)文章