⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 install.a51

📁 单片机C语言参考程序
💻 A51
📖 第 1 页 / 共 3 页
字号:
CKCON   DATA    08EH
SCON1   DATA    0C0H
SBUF1   DATA    0C1H
WDCON   DATA    0D8H
RI1     BIT     0C0H.0

InitSerial:     PROMCHECK               ; Check if PROM in System
                MOV     DPS,#00H
                MOV     TMOD,#00100000B ;C/T = 0, Mode = 2

                MOV     TH1,#0F6H       ; 9600 baud @ 12 MHz
                ORL     CKCON,#010H     ; Timer 1 uses a divide by 4 clock
;                ORL     WDCON,#10000000B; 19200 baud @ 12 MHz

;                MOV     TH1,#0FDH       ; 9600 baud @ 11.0592 MHz

;                MOV     TH1,#0FFH       ; 57600 baud @ 11.0592 MHz
;                ORL     WDCON,#10000000B

;                MOV     TH1,#0E5H       ; 9600 baud @ 33 MHz
;                ORL     CKCON,#010H     ; Timer 1 uses a divide by 4 clock
;                ORL     WDCON,#10000000B; 19200 baud @ 33 MHz

                SETB    TR1
                MOV     SCON1,#01011010B ; Init Serial Interface
                JMP     Mon51
$ENDIF

$IF (SERIAL = 6)
;********************************************************************
;*  Using external UART 16450/16550                                 *
;*  UART Oscillator frequency = 12.000 MHz                          *
;*  Set Baudrate to 9600 Baud                                       *
;********************************************************************
SIOCLK    EQU   3686400                 ; EXTERNAL SIO XTAL FREQUENZY
BAUDRATE  EQU   9600                    ;9600 bps
BAUDDIV   EQU   (SIOCLK / 16) / BAUDRATE
SIOADDR   EQU   0FC00H                  ; SIO Address

InitSerial:     PROMCHECK               ; Check if PROM in System
                MOV     DPTR,#SIOADDR+3
                MOV     A,#83H          ; Select Baudrate Registers
                MOVX    @DPTR,A
                MOV     DPTR,#SIOADDR
                MOV     A,#LOW (BAUDDIV)
                MOVX    @DPTR,A
                INC     DPTR
                MOV     A,#HIGH (BAUDDIV)
                MOVX    @DPTR,A
                MOV     DPTR,#SIOADDR+3
                MOV     A,#03H          ; Mode: 8-bit, 1 stop, no parity
                MOVX    @DPTR,A
                MOV     DPTR,#SIOADDR+1
                CLR     A
                MOVX    @DPTR,A         ; disable all interrupts
                MOV     DPTR,#SIOADDR+4
                MOVX    @DPTR,A
                JMP     Mon51


$ELSEIF (SERIAL = 7)
;********************************************************************
;*  Using Timer 1 to generate Baud Rates                            *
;*  for 8052 and compatibles except Dallas 80C320/520/530           *
;*  Oscillator frequency = don't care                               *
;*  Automatic Baudrate Adjustment                                   *
;********************************************************************

InitSerial:     PROMCHECK               ; Check if PROM in System
                CLR     TR1
                CLR     TF1
                CLR     A
                MOV     TL1,A
                MOV     TH1,A
                MOV     TMOD,#010H
L4:             JB      RXD,L4
L6:             JNB     RXD,L6
L7:             SETB    TR1
L8:             JNB     RXD,L10
                JNB     TF1,L8
L10:            JNB     RXD,L10
L12:            JNB     RXD,L14
                JNB     TF1,L12
L14:            JNB     RXD,L14
L15:            CLR     TR1
                JB      TF1,InitSerial
                MOV     R7,TL1
                MOV     R6,TH1

                MOV     A,R7
                ADD     A,#040H
                MOV     R7,A
                CLR     A
                ADDC    A,R6
                MOV     R6,A

                MOV     A,R7
                RLC     A
                MOV     A,R6
                RLC     A
                MOV     R7,A
                CLR     C
                CLR     A
                SUBB    A,R7
                MOV     TH1,A
                CLR     A
                MOV     TL1,A
                MOV     TMOD,#00100000B ;C/T = 0, Mode = 2
                SETB    TR1
                ORL     PCON,#080H
                MOV     SCON,#05AH

L16:            CLR     RI
                JNB     RI,$
                MOV     A,SBUF
                CJNE    A,#011H,L16
                JMP     Mon51


$ELSEIF (SERIAL = 8)
;********************************************************************
;*  Using Timer 2 to generate Baud Rates (8052 and compatibles)     *
;*  Oscillator frequency = don't care                               *
;*  Automatic Baudrate Adjustment                                   *
;********************************************************************
T2CON   DATA    0C8H
T2MOD   DATA    0C9H
RC2L    DATA    0CAH
RC2H    DATA    0CBH
TL2     DATA    0CCH
TH2     DATA    0CDH
TR2     BIT     0C8H.2
TF2     BIT     0C8H.7
  
InitSerial:     PROMCHECK               ; Check if PROM in System
                CLR     A
                MOV     RC2H,A
                MOV     RC2L,A
                MOV     TL2,A
                MOV     TH2,A
                MOV     T2MOD,A
                MOV     T2CON,A
L4:             JB      RXD,L4
L6:             JNB     RXD,L6
L7:             SETB    TR2
L8:             JNB     RXD,L10
                JNB     TF2,L8
L10:            JNB     RXD,L10
L12:            JNB     RXD,L14
                JNB     TF2,L12
L14:            JNB     RXD,L14
L15:            CLR     TR2
                JB      TF2,InitSerial
                MOV     R7,TL2
                MOV     R6,TH2

                MOV     A,R6
                CLR     C
                RRC     A
                MOV     R4,A
                MOV     A,R7
                RRC     A
                ADD     A,R7
                MOV     R7,A
                MOV     A,R4
                ADDC    A,R6
                MOV     R6,A

                MOV     A,R7
                ADD     A,#010H
                MOV     R7,A
                CLR     A
                ADDC    A,R6
                MOV     R6,A

                MOV     A,R7
                MOV     R0,#05H
L22:            XCH     A,R6
                CLR     C
                RRC     A
                XCH     A,R6
                RRC     A
                DJNZ    R0,L22
                MOV     R7,A
                CLR     C
                CLR     A
                SUBB    A,R7
                MOV     RC2L,A
                MOV     TL2,A
                CLR     A
                SUBB    A,R6
                MOV     RC2H,A
                MOV     TH2,A

                MOV     T2CON,#034H
                MOV     SCON,#05AH
L16:            CLR     RI
                JNB     RI,$
                MOV     A,SBUF
                CJNE    A,#011H,L16
                JMP     Mon51

  
$ELSEIF (SERIAL = 9)
;********************************************************************
;*  Using internal Baudrate Generator to generate Baud Rates        *
;*  Oscillator frequency = don't care                               *
;*  Automatic Baudrate Adjustment                                   *
;********************************************************************
SRELL   DATA    0AAH
SRELH   DATA    0BAH
ADCON   DATA    0D8H

BD      BIT     0D8H.7

InitSerial:     PROMCHECK               ; Check if PROM in System
                CLR     TR1
                CLR     TF1
                CLR     A
                MOV     TL1,A
                MOV     TH1,A
                MOV     TMOD,#010H
L4:             JB      RXD,L4
L6:             JNB     RXD,L6
L7:             SETB    TR1
L8:             JNB     RXD,L10
                JNB     TF1,L8
L10:            JNB     RXD,L10
L12:            JNB     RXD,L14
                JNB     TF1,L12
L14:            JNB     RXD,L14
L15:            CLR     TR1
                JB      TF1,InitSerial
                MOV     R7,TL1
                MOV     R6,TH1

                MOV     A,R6
                CLR     C
                RRC     A
                MOV     R4,A
                MOV     A,R7
                RRC     A
                ADD     A,R7
                MOV     R7,A
                MOV     A,R4
                ADDC    A,R6
                MOV     R6,A

                MOV     A,R7
                ADD     A,#010H
                MOV     R7,A
                CLR     A
                ADDC    A,R6
                MOV     R6,A

                MOV     A,R7
                MOV     R0,#05H
L22:            XCH     A,R6
                CLR     C
                RRC     A
                XCH     A,R6
                RRC     A
                DJNZ    R0,L22
                MOV     R7,A
                CLR     C
                CLR     A
                SUBB    A,R7
                MOV     SRELL,A
                MOV     A,#04H
                SUBB    A,R6
                MOV     SRELH,A

                SETB    BD
                ORL     PCON,#080H
                MOV     SCON,#05AH
                CLR     TF1
                CLR     A
                MOV     TL1,A
                MOV     TH1,A
                MOV     TMOD,A
L16:            CLR     RI
                JNB     RI,$
                MOV     A,SBUF
                CJNE    A,#011H,L16
                JMP     Mon51

$ELSEIF (SERIAL = 10)
;********************************************************************
;*  Using internal Baudrate Generator with serial interface 1       *
;*  Only for 80C517 and 80C517A                                     *
;*  Oscillator frequency = don't care                               *
;*  Automatic Baudrate Adjustment                                   *
;********************************************************************
S1REL   DATA    09DH
S1RELH  DATA    0BBH
S1CON   DATA    09BH
S1BUF   DATA    09CH
P6      DATA    0FAH
IEN2    DATA    09AH

InitSerial:     PROMCHECK               ; Check if PROM in System
                CLR     TR1
                CLR     TF1
                CLR     A
                MOV     TL1,A
                MOV     TH1,A
                MOV     TMOD,#010H
L4:             MOV     A,P6
                JB      ACC.1,L4
L6:             MOV     A,P6
                JNB     ACC.1,L6
L7:             SETB    TR1
L8:             MOV     A,P6
                JNB     ACC.1,L10
                JNB     TF1,L8
L10:            MOV     A,P6
                JNB     ACC.1,L10
L12:            MOV     A,P6
                JNB     ACC.1,L14
                JNB     TF1,L12
L14:            MOV     A,P6
                JNB     ACC.1,L14
L15:            CLR     TR1
                JB      TF1,InitSerial
                MOV     R7,TL1
                MOV     R6,TH1

                MOV     A,R6
                CLR     C
                RRC     A
                MOV     R4,A
                MOV     A,R7
                RRC     A
                ADD     A,R7
                MOV     R7,A
                MOV     A,R4
                ADDC    A,R6
                MOV     R6,A

                MOV     A,R7
                ADD     A,#010H
                MOV     R7,A
                CLR     A
                ADDC    A,R6
                MOV     R6,A

                MOV     A,R7
                MOV     R0,#05H
L22:            XCH     A,R6
                CLR     C
                RRC     A
                XCH     A,R6
                RRC     A
                DJNZ    R0,L22
                MOV     R7,A
                CLR     C
                CLR     A
                SUBB    A,R7
                MOV     S1REL,A
                MOV     A,#04H
                SUBB    A,R6
                MOV     S1RELH,A

                MOV     S1CON,#10111010B ; Init Serial Interface
                CLR     TF1
                CLR     A
                MOV     TL1,A
                MOV     TH1,A
                MOV     TMOD,A
L16:            ANL     S1CON,#0FEH
L17:            MOV     A,S1CON
                JNB     ACC.0,L17
                MOV     A,S1BUF
                CJNE    A,#011H,L16
                JMP     Mon51


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -