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

📄 510.asm

📁 采用ti公司89s51型单片机
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	   lcall  SHORT_DELAY
	   lcall  SHORT_DELAY
           MOV    A,TH0
           MOV    SBUF,A
WAIT6:     JNB    TI,WAIT6
           CLR    TI
	   lcall  SHORT_DELAY
	   lcall  SHORT_DELAY
	   lcall  SHORT_DELAY
	   lcall  SHORT_DELAY
           MOV    A,TL0
           MOV    SBUF,A
WAIT7:     JNB    TI,WAIT7
           CLR    TI
           MOV    TH0 ,#00H
	   MOV    TL0 ,#00H
	   SETB   RS0
	   CLR    RS1
	   MOV    R2,#00H                       ;R2  R3计时单元清零
           MOV    R3,#00H 
	   SETB   TR0
HER1:      JNB    RI,HER2
           AJMP   RECE
HER2:      SETB   RS0
	   CLR    RS1
           CJNE   R3,#0FFH,HER1
           AJMP   SLEE
RECE:      MOV    A,SBUF                    ;接受停止码
           CLR    RI 
           CJNE   A,#01H,HER1
HER11:     JNB    RI,HER12
           AJMP   ANSER2
HER12:     SETB   RS0
	   CLR    RS1
           CJNE   R3,#0FFH,HER11
           AJMP   SLEE
ANSER2:    
           MOV    A,SBUF                  
           CLR    RI
	   CJNE   A,#0FBH,ANSER3
	   AJMP   RIGHT                          
ANSER3:    CJNE   A,#0FAH,HER11
           AJMP   WRONG          
RIGHT:
           LCALL SETUP             ;液晶显示 ;显示答题正确信息
           CLR  A
           MOV A,#90H                ;;;;;第二行
           LCALL WRITE_COM
           MOV DPTR,#CHINESE7
           LCALL WRITE_HZ             
HERE11:     JNB    RI,HERE21
            AJMP   SENT1
HERE21:     SETB   RS0
	    CLR    RS1    
            CJNE   R3,#0FFH,HERE11            ;;时间过长,自动休眠
            AJMP   SLEE
SENT1:      MOV    A,SBUF                   
            CLR    RI 
            CJNE   A,#0FDH,HERE11          ;回答下一个题前,有清零信号  没有接到清零信号且时间在规定范围内
	                                     ;显示答题正确或错误信息
             AJMP  SLEE                ;答题前,上位机把手持器的寄存器清零
WRONG:
           LCALL SETUP             ;液晶显示
           CLR  A
           MOV A,#90H                ;;;;;第二行
           LCALL WRITE_COM
           MOV DPTR,#CHINESE8
           LCALL WRITE_HZ   
HERE12:    JNB    RI,HERE22
           AJMP   SENT2
HERE22:    SETB   RS0
	   CLR    RS1
           CJNE   R3,#0FFH,HERE12            ;;显示上位机的返回信息
           AJMP   SLEE
SENT2:     MOV    A,SBUF                    ;接受停止码
           CLR    RI 
           CJNE   A,#0FDH,HERE12          ;回答下一个题前,有清零信号  没有接到清零信号且时间在规定范围内
	                                     ;显示答题正确或错误信息
           AJMP  SLEE                ;答题前,上位机把手持器的寄存器清零

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 休眠子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SLEE:	  CLR    K
          CLR    DEL
	  CLR    ENTER
	  MOV A,#01H
          LCALL WRITE_COM
          MOV A,#08H
          LCALL WRITE_COM
          MOV    TH0,#00H                     ;定时器中断从初始化  
          MOV    TL0,#00H
          MOV    P1,#0C0H                     ;p1口0-5为低电平  6,7为高电平
	  SETB   EA
	  SETB   EX0               
          SETB   EX1
          SETB   P3.5
	  SETB   RS0
	  CLR    RS1
          MOV    R0,#00H                 
          MOV    R1,#00H
          MOV    R2,#00H                       ;R2  R3计时单元清零
          MOV    R3,#00H 
	  MOV    R4,#00H                       ;R4  R5计时单元清零
          MOV    R5,#00H
          MOV    R6,#00H
          MOV    R7,#00H                        ;按键值暂存在R7
	  MOV    P0,#00H
          MOV    P2,#00H
	  CLR    P3.4
          MOV    PCON,#82H                      ;深度休眠,晶振停振
          LJMP   KEY1                          ;LJMP  SLEE时,外部中断0正常工作,但是外1只相应1,2次中断,不知道为什么
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;中断子程序
SERVEINT0:       	  
           CLR   EX0                            ;关外部中断0,保存答案
           CLR   EX1			        ;关外部中断0,保存答案
           SETB   RS0
	   CLR    RS1
	   SETB  K
KEY00:     MOV   P1,#0FEH                       ;判断键值
           JB    P1.7,KEY01
           MOV   R7,#00H
	   AJMP  PASS0
KEY01:     MOV   P1,#0FDH
           JB    P1.7,KEY02
           MOV   R7,#01H
	   AJMP  PASS0
KEY02:     MOV   P1,#0FBH
           JB    P1.7,KEY03
           MOV   R7,#02H
	   AJMP  PASS0
KEY03:     MOV   P1,#0F7H
           JB    P1.7,KEY04
           MOV   R7,#03H
	   AJMP  PASS0
KEY04:     MOV   P1,#0EFH
           JB    P1.7,KEY05
           MOV   R7,#04H
	   AJMP  PASS0
KEY05:     MOV   P1,#0DFH
           JB    P1.7,KEY0D
           SETB  ENTER
	   AJMP  PASS0
KEY0D:     CLR   K
PASS0:	   MOV   P1,#0C0H                    ;p0口0-5为低电平  6,7为高电平
	   SETB  EX0
	   SETB  EX1
           RETI
SERVEINT1: CLR   EX0
           CLR   EX1
	   SETB   RS0
	   CLR    RS1
	   SETB  K
KEY06:     MOV   P1,#0FEH                    ;判断键值
           JB    P1.6,KEY07
           MOV   R7,#05H
	   AJMP  PASS1
KEY07:     MOV   P1,#0FDH
           JB    P1.6,KEY08
           MOV   R7,#06H
	   AJMP  PASS1
KEY08:     MOV   P1,#0FBH
           JB    P1.6,KEY09
           MOV   R7,#07H
	   AJMP  PASS1
KEY09:     MOV   P1,#0F7H
           JB    P1.6,KEY0A
           MOV   R7,#08H
	   AJMP  PASS1
KEY0A:     MOV   P1,#0EFH
           JB    P1.6,KEY0B
           MOV   R7,#09H
	   AJMP  PASS1
KEY0B:     MOV   P1,#0DFH
           JB    P1.6,KEY0C
           SETB  DEL
	   AJMP  PASS1
KEY0C:     CLR   K
PASS1:     MOV   P1,#0C0H                   ;p0口0-5为低电平  6,7为高电平
	   SETB  EX0
	   SETB  EX1
	   RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;定时器中断子程序
T0INT: 
           CLR   EA                         ;关中断
           PUSH  PSW                       ;保护现场
           PUSH  ACC
	   SETB   RS0
	   CLR    RS1
           INC   R2                 
           CJNE  R2,#0FFH,FULL
           INC   R3
     ;CJNE R3,#0FFH,FULL
      ;INC R4
FULL:      MOV   TH0,#00H
           MOV   TL0,#00H
           POP   ACC
           POP   PSW
           SETB  EA                         ;CPU开中断
           RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;延时子程序

SHORT_DELAY:     
           MOV    DELAY_NUM,#04H             ;设定延时时间为约8us
SHORT_LP:       
           DJNZ   DELAY_NUM,SHORT_LP
           RET
SETUP:
        MOV A,#01H
        LCALL WRITE_COM
        MOV A,#00110000B
        LCALL WRITE_COM
        MOV A,#00000010B
        LCALL WRITE_COM
        MOV A,#00000100B
        LCALL WRITE_COM
        MOV A,#00001110B
        LCALL WRITE_COM
        MOV A,#00000001B
        LCALL WRITE_COM
        MOV A,#10000000B
        LCALL WRITE_COM
        RET

WRITE_COM:
        PUSH DPL
        PUSH DPH
        LCALL DELAY1
	MOV DPTR,#0000H
	MOV DPTR,#0000H
       	MOVX @DPTR,A
        MOVX @DPTR,A
        LCALL DELAY1
        POP DPH
        POP DPL
        RET

WRITE_DAT:
        PUSH DPL
        PUSH DPH
        LCALL DELAY1
	MOV DPTR,#0002H
	MOV DPTR,#0002H
        MOVX @DPTR,A
        MOVX @DPTR,A
        POP DPH
        POP DPL
        RET
DELAY1: 
	SETB   RS0
	CLR    RS1
        MOV R4,#10H
D11:    MOV R5,#10H
        DJNZ R5,$
        DJNZ R4,D11
        RET
WRITE_ASCII:
        SETB   RS0
	CLR    RS1
        PUSH DPL
        PUSH DPH
DDDD:     
        CLR A
        ;MOVC A,@A+DPTR
	SETB   RS0
	CLR    RS1
        MOV   A,@R0
        LCALL WRITE_DAT
	SETB   RS0
	CLR    RS1
        INC R0
        DJNZ R6,DDDD           ;;;;;;;;使用R0-7需要换个工作区
        POP DPH
        POP DPL
        RET
WRITE_HZ:    PUSH DPL
             PUSH DPH
   	     SETB   RS0
	     CLR    RS1
             MOV R6,#08h          ;;;;;;;;使用R0-7需要换个工作区
DD:          CLR A
             MOVC A,@A+DPTR
             LCALL WRITE_DAT
             INC DPTR
             CLR A
             MOVC A,@A+DPTR
             LCALL WRITE_DAT
             INC DPTR
     	     SETB   RS0
	     CLR    RS1
             DJNZ R6,DD
             POP DPH
             POP DPL
             RET
TABLE1:
CGRAM1:DB 02H,12H
CGRAM2:DB 22H,32H
CGRAM3:DB 42H,52H
CGRAM4:DB 62H,72H
SHOW1: DB 
SHOW2: DB 
SHOW3: DB 00H
SHOW4: DB 00H
SHOW5: DB
SHOW6: DB
SHOW7: DB 
SHOW8: DB
CHINESE1:DB 0D2H,0BBH,0CEH,0BBH,0CAH,0FDH,0A3H,0ACH,0C8H,0B7H,0B6H,0A8H,0C2H,0F0H,0A3H,0BFH  ;;;一位数,确定吗? 
CHINESE2:DB 0B6H,0FEH,0CEH,0BBH,0CAH,0FDH,0A3H,0ACH,0C8H,0B7H,0B6H,0A8H,0C2H,0F0H,0A3H,0BFH  ;;;二位数,确定吗?
CHINESE3:DB 0C8H,0FDH,0CEH,0BBH,0CAH,0FDH,0A3H,0ACH,0C8H,0B7H,0B6H,0A8H,0C2H,0F0H,0A3H,0BFH  ;;;三位数,确定吗?
CHINESE4:DB 0CBH,0C4H,0CEH,0BBH,0CAH,0FDH,0A3H,0ACH,0C8H,0B7H,0B6H,0A8H,0C2H,0F0H,0A3H,0BFH ;;;四位数,确定吗?
CHINESE5:DB 0C9H,0BEH,0B6H,0FDH,0D2H,0BBH,0CEH,0BBH,0A3H,0A1H,0A1H,0A0H,0A1H,0A0H,0A1H,0A0H ;;;删除一位
CHINESE6:DB 0C8H,0B7H,0B6H,0A8H,0A3H,0A1H,0B5H,0C8H,0B4H,0FDH,0D6H,0D0H,0A9H,0A8H,0A9H,0A8H  ;;;确认!等待中....
CHINESE7:DB 0D5H,0FDH,0C8H,0B7H,0A3H,0ACH,0BAH,0C3H,0B0H,0F4H,0B0H,0A1H,0A3H,0A1H,0A3H,0A1H  ;;;正确,好棒啊!
CHINESE8:DB 0B4H,0EDH,0CEH,0F3H,0A3H,0ACH,0BCH,0CCH,0D0H,0F8H,0C5H,0ACH,0C1H,0A6H ,0A3H,0A1H;;;错误,继续努力!
            end              

⌨️ 快捷键说明

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