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

📄 加狗9.8main.asm

📁 程序为51单片机小系统一完整程序有看门狗 和各种中断
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*******************************************
;*************   主程序   ******************
;*******************************************
            ORG          0000H
            AJMP         MAIN
            ORG          0003H
            LJMP         INT0REC              ;INT0中断
            ORG          000BH
            LJMP         TIMEREC              ;定时中断
            ORG          0023H
            LJMP         CHUANKOU             ;串口中断

            ORG          0100H
MAIN:       NOP
            CPL          P1.2
            NOP
            LCALL        KAISHI
            NOP
            LCALL        TIME
            NOP
            CPL          P1.2
            NOP
MAIN00:     NOP
            JNB          00H,MAIN01           ;00H位为 0 表示无自检  则跳转
            NOP
            LCALL        ZIJIAN               ;自检
            NOP
            SJMP         MAIN00
MAIN01:     NOP
            JB           05H,MAIN03           ;05H 为 1 表示CAN报警  则跳转
            JB           01H,MAIN02           ;01H 为 1 表示报警    则跳转
            JNB          04H,MAIN001          ;04H 为 0 表示为无数据接收到
            NOP
            CPL          P1.2                 ;看门狗
            NOP
            CLR          P1.0
            LCALL        DELAY10
            SETB         P1.0
            CLR          04H
            NOP
            SJMP         MAIN00
MAIN001:    NOP
            CPL          P1.2
            LCALL        DELAY                ;正常 无报警  循环
            NOP
            SJMP         MAIN00
MAIN02:     NOP
            LCALL        BAOJING              ;报警   直到消除报警
            NOP
            SJMP         MAIN00
MAIN03:     NOP
            LCALL        BJCAN                ;CAN报警 直到报警消除
            NOP
            SJMP         MAIN00   
;********************************************************
;***********************  TIME  **************************
;********************************************************
TIME:      NOP
           NOP
	    MOV      TMOD,#21H			;T1 方式 2 为 波特率方式
	    MOV      TL1,#0FAH                   ;T0 方式 1 为 定时方式
	    MOV      TH1,#0FAH
	    MOV      SCON,#50H
	    MOV      PCON,#80H			;波特率:9600
	    MOV      TL0,#00H
	    MOV      TH0,#4CH                    ;50MS
           SETB     TR1                         ;开始定时
           SETB     TR0
	    SETB     ET0                         ;开定时T0中断
           SETB     ES                          ;开串口中断
           SETB     EX0                         ;开外部INT0中断
           SETB     EA                          ;开总中断允许位
	    NOP
	    RET
;************************************************************
;**************    定时中断    **********************************
;************************************************************
TIMEREC:   CLR       EA
           NOP
           PUSH      ACC
           MOV       TL0,#00H                    ;定时50毫秒
	    MOV       TH0,#4CH
	    NOP
	    INC       R5
           CJNE      R5,#14H,RECERET             ;20次即一秒
           NOP
           MOV       R5,#00H
           INC       R6
           CJNE      R6,#40H,RECERET             ;120次即两分钟
           MOV       R6,#00H
           SETB      03H                         ;对03H位 置位视为了给主程序判别
           NOP
RECERET:   NOP
           POP       ACC
           SETB      EA
           RETI
;******************************************************************************
;******************     INT0中断服务程序    ************************************
;******************************************************************************
INT0REC:   CLR        EA
           NOP
           JNB        P1.5,JINGYIN                 ;P1.5为0表示静音
           NOP
           JB         P1.7,INT0RET                 ;P1.7为0表示自检
           NOP
           SETB       00H                          ;00H位 置位表示  自检
           NOP
           SJMP       INT0RET
JINGYIN:   NOP
           SETB       02H                          ;02位 置位表示   静音
           NOP
INT0RET:   NOP
           SETB      P1.5
           SETB      P1.7
           CLR       P1.6
           NOP
           SETB       EA
           RETI
;**************************************************************************
;******************       串口中断        **********************************
;**************************************************************************
CHUANKOU:  CLR        EA
           PUSH       A                           ;保护断点
           NOP
           CLR        RI                          ;清除 接收中断标志
           MOV        A,SBUF                      ;接收数据
           NOP
           ANL        A,#7FH                      ;删去校验位
           NOP
           CJNE       R2,#00H,CHUAN01             ;R2位串口接收专用  用来计数
           NOP
           CJNE       A,#24H,CHUANRET0            ;24H为 $ 符  为第一个接收字符
           INC        R2                         ;只有对了才能接收第二个字符
           LJMP       CHUANRET1
CHUAN01:   NOP
           CJNE       R2,#01H,CHUAN02            ;正常标志为$OK<CR><LF> 24H 4FH 4BH 0DH 0AH
           NOP                                   ;报警标志为$ALARM<CR><LF>$24H A41H L4CH A41H R52H M4DH 0DH 0AH
           NOP                                   ;无数据报警$NODATA<CR><LF>$24H N4EH O4FH D44H A41H T57H A41H 0DH 0AH  9个
           CJNE       A,#4FH,CHUAN10             ;4FH为 O 符  为 正常 的 第二个字符
           INC        R2
           NOP
           LJMP       CHUANRET1                  ;不清除R2
CHUAN10:   NOP
           CJNE       A,#41H,CHUAN100            ;41H为 A 符  为 报警 的第二个字符
           MOV        R2,#12H
           NOP
           LJMP       CHUANRET1
CHUAN100:  NOP
           CJNE       A,#4EH,CHUANRET0                    ;4EH为 N 符  为 无数据报警 的第二个字符
           MOV        R2,#22H
           NOP
           LJMP       CHUANRET1
CHUAN02:   NOP
           CJNE       R2,#02H,CHUAN03
           NOP
           CJNE       A,#4BH,CHUANRET0             ;4BH为 K 符  为 正常 的 第3个字符
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUANRET0: NOP
           LJMP       CHUANRET                    ;带有清除R2
CHUAN03:   NOP
           CJNE       R2,#03H,CHUAN04
           NOP
           CJNE       A,#0DH,CHUANRET0             ;0DH为 <CR> 符  为 正常 的 第4个字符
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN04:   NOP
           CJNE       R2,#04H,CHUAN20
           NOP
           CJNE       A,#0AH,CHUANRET0            ;0AH为 <LF> 符  为 正常 的 第5个字符
           MOV        R2,#00H
           NOP
           CLR        05H                        ;05H位为 0 表示为CAN正常 给主程序判断
           CLR        01H                        ;01H位为 0 表示为正常 给主程序判断
           SETB       04H                        ;04H位为 1 为了给主程序判断说明接收到数据
           NOP
           LJMP       CHUANRET
CHUAN20:   NOP
           CJNE       R2,#12H,CHUAN30
           NOP
           CJNE       A,#4CH,CHUANRET0            ;4CH为 L 符  为 报警 的第3个字符
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN30:   NOP
           CJNE       R2,#13H,CHUAN40
           NOP
           CJNE       A,#41H,CHUANRET0            ;41H为 A 符  为 报警 的第4个字符
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN40:   NOP
           CJNE       R2,#14H,CHUAN50
           NOP
           CJNE       A,#52H,CHUANRET             ;52H为 R 符  为 报警 的第5个字符
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN50:   NOP
           CJNE       R2,#15H,CHUAN60
           NOP
           CJNE       A,#4DH,CHUANRET             ;52H为 M 符  为 报警 的第6个字符
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN60:   NOP
           CJNE       R2,#16H,CHUAN70
           NOP
           CJNE       A,#0DH,CHUANRET             ;0DH为 <CR> 符  为 报警 的第7个字符
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN70:   NOP
           CJNE       R2,#17H,CHUAN101
           NOP
           CJNE       A,#0AH,CHUANRET             ;0AH为 <LF> 符  为 报警 的第8个字符
           NOP
           CLR        05H                         ;05H位为 0 表示为CAN正常 给主程序判断
           SETB       01H                         ;01H位为 1 表示为报警 给主程序判断
           SETB       04H                         ;04H位为 1 为了给主程序判断说明接收到数据
           NOP
           LJMP       CHUANRET
CHUAN101:  NOP
           CJNE       R2,#22H,CHUAN102 
           NOP
           CJNE       A,#4FH,CHUANRET             ;4FH为  N 符  为了给CAN报警的第3个字符
           NOP
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN102:  NOP
           CJNE       R2,#23H,CHUAN103 
           NOP
           CJNE       A,#44H,CHUANRET             ;44H为  D  符  为了给CAN报警的第4个字符
           NOP
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN103:  NOP
           CJNE       R2,#24H,CHUAN104 
           NOP
           CJNE       A,#41H,CHUANRET             ;41H为  A 符  为了给CAN报警的第5个字符
           NOP
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN104:  NOP
           CJNE       R2,#25H,CHUAN105 
           NOP
           CJNE       A,#57H,CHUANRET             ;57H为  T 符  为了给CAN报警的第6个字符
           NOP
           INC        R2
           NOP
           LJMP       CHUANRET1
CHUAN105:  NOP
           CJNE       R2,#26H,CHUAN106
           NOP
           CJNE       A,#41H,CHUANRET             ;41H为  A 符  为了给CAN报警的第7个字符
           NOP
           INC        R2
           NOP

⌨️ 快捷键说明

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