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

📄 main_b0.asm

📁 这是一个MSC51单片机程序它读出片外RAM中的数据从串行口发向机
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;********************************************************************
;      朱 学 兵 支 标 打 印 项 目 程 序
;       M C U :  AT89C51   晶体振荡器: 11.0952MHz
;       编 制 :  成 光 清  2005/09/15
;      工 作 过 程 描 述:
;      通过将串行口接口(DB9)的第9脚拉低,使单片机89C52的PIN31为高电平,
;      这样,它就会运行片内程序,正常工作时DB9/PIN9为高,89C52/PIN31为低,
;      单片机运行片外程序.
;      片内程序工作过程如下:   单片机初始化后串行口设中按收状态;
;                              在收到一个数据包后,单片机进入工作状态;
;           数据包格式如下:    第一字节: 0AAH 数据包开始标志
;                              第二字节: 0A6h 单片机向上位机发送数据
;                                        0A9h 上位机向单片机发数据
;                              第三字节: 结束标志(055H)
;********************************************************************
;#INCLUDE        "REG52.INC"
; 系统硬件配置定义
;--------------------------------------------------------------------
;内存配置定义
TEMP            EQU     30H
CNT             EQU     31H
NUM             EQU     32H
LINE            EQU     33H
RECIEVE_NUM     EQU     34H

BLOCK_NUM       EQU     38H     ;0-3
RECORD_HIGH     EQU     39H     ;记录号高字节
RECORD_LOW      EQU     3AH     ;记录号低字节
ADDR_HIGH       EQU     3BH     ;地址高字节
ADDR_LOW        EQU     3CH     ;地址低字节
SYS_STATUS      EQU     3DH

COMMAND0        EQU     40H
COMMAND1        EQU     41H
COMMAND2        EQU     42H
COMMAND3        EQU     43H
COMMAND4        EQU     44H
COMMAND5        EQU     45H
COMMAND6        EQU     46H
COMMAND7        EQU     47H
RECIEVE_POINT   EQU     48H

;--------------------------------------------------------------------
;常量定义
ADDR_BIN        EQU     060H    ; 16进制数据缓冲区首地址
ADDR_HEX        EQU     080H    ; 此段每记录为43字节(BCD)=2Bh
;--------------------------------------------------------------------
                ORG          0000H
                LJMP         PORT_RST
;--------------------------------------------------------------------
                ORG          0003H
                LJMP         PORT_INT0
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
                ORG          000BH
                LJMP         PORT_TMR0
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
                ORG          0013H
                LJMP         PORT_INT1
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
                ORG          001BH
                LJMP         PORT_TMR1
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
                ORG          0023H
                LJMP         PORT_SERIAL
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
                ORG          002BH
                LJMP         PORT_TMR2
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
                ORG     0040H
PORT_INT0:      RETI
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
PORT_INT1:      RETI
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
PORT_TMR0:      ;
                RETI
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
PORT_TMR1:      ;
                RETI
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
PORT_TMR2:      ;
                RETI
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
PORT_SERIAL:    ; 串行口中断处理程序
                PUSH     A
                PUSH     PSW
                JB       RI,PORT_SR
                JB       TI,PORT_ST
PORT_RRR:       POP      PSW
                POP      A
                RETI
PORT_SR:        ;接收中断
                MOV      A,#0A0H
                XRL      A,SYS_STATUS
                JNZ      PORT_RRR
                MOV      A,SBUF
                MOV      @R0,A
                INC      R0
                CLR      RI
                DJNZ     RECIEVE_NUM,PORT_RRR
                MOV      SYS_STATUS,#0A1H
                CLR      REN
                POP      PSW
                POP      A
                RETI
PORT_ST:        CLR      TI
                MOV      A,@R0
                MOV      SBUF,A
                DJNZ     NUM,PORT_RRR
                MOV      SYS_STATUS,#0A5H
                POP      PSW
                POP      A
                RETI
                NOP
                NOP
                LJMP          ERR
;--------------------------------------------------------------------
ERR:            ;出错处理段落程序
                NOP
                NOP
                LJMP    MAIN_RRR
;*******************************************************************
PORT_RST:       MOV     SP,#0E0H
                MOV     R0,#0FFH
                CLR     A
LP_CLRRAM:      MOV     @R0,A
                DJNZ    R0,LP_CLRRAM
                MOV     PCON,#00H
                MOV     SCON,#50H       ; 串行口工作在方式1,接收允许
                MOV     TMOD,#20H       ; TMR1工作在MODE2(8位自动重装方式)
                ;MOV     TH1,#0F3H
                ;MOV     TL1,#0F3H       ; 波特率为2400(12MHz)
                MOV     TH1,#0F4H
                MOV     TL1,#0F4H       ; 波特率为2400(11.0592MHz)
                SETB    TR1             ; 启动T1
                MOV     SYS_STATUS,#0A0H; 系统设定为接收状态
                MOV     RECIEVE_NUM,#06H; 设定从上位机发来的命令字长为6字节
                MOV     R0,#COMMAND0
                CLR     RI
LPR:
MAIN_RRR:       SETB    REN
                JNB     RI,LPR
                MOV     A,SBUF
                MOV     @R0,A
                CLR     RI
                INC     R0
                DJNZ    RECIEVE_NUM,LPR
                CLR     REN
                MOV     SYS_STATUS,0A1H
;---------------------------------------------------------
MAIN_BLOCK:     ;接收结束后的数据检查处理
                MOV     A,#41H
                XRL     A,COMMAND0
                JNZ     COMMAND_ERR
                MOV     A,#41H
                XRL     A,COMMAND1
                JNZ     COMMAND_ERR
                MOV     A,#35H
                XRL     A,COMMAND4
                JNZ     COMMAND_ERR
                MOV     A,#35H
                XRL     A,COMMAND5
                JNZ     COMMAND_ERR
                MOV     A,COMMAND2
                ANL     A,#0FH
                SWAP    A
                MOV     BLOCK_NUM,A
                MOV     A,COMMAND3
                ANL     A,#0FH
                ADD     A,BLOCK_NUM
                MOV     BLOCK_NUM,A
                MOV     SYS_STATUS,#0A2H

⌨️ 快捷键说明

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