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

📄 main.asm

📁 这是一段温度传感器电路仿真原理图
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;Main program
;LCD Registers addresses//定义LCD地址
LCD_CMD_WR	equ 0FCFFH
LCD_DATA_WR	equ	0FDFFH
LCD_BUSY_RD	equ	0FEFFH
LCD_DATA_RD	equ	0FFFFH

;LCD Commands
LCD_CLS		    equ	1
LCD_HOME	    equ	2
LCD_SETMODE	    equ	4
LCD_SETVISIBLE	equ	8
LCD_SHIFT	    equ	16
LCD_SETFUNCTION	equ	32
LCD_SETCGADDR	equ	64
LCD_SETDDADDR	equ	128

RTC             EQU     32H
WEEK            DATA    RTC
YEAR            DATA    WEEK+1
MONTH           DATA    WEEK+2
DATE            DATA    WEEK+3
HOUR            DATA    WEEK+4
MINU            DATA    WEEK+5
WORK_DATA       EQU     38H
S1_HOUR_DATA    DATA    WORK_DATA
S1_MINU_DATA    DATA    WORK_DATA+1
T1_HOUR_DATA    DATA    WORK_DATA+2
T1_MINU_DATA    DATA    WORK_DATA+3
S2_HOUR_DATA    DATA    WORK_DATA+4
S2_MINU_DATA    DATA    WORK_DATA+5
T2_HOUR_DATA    DATA    WORK_DATA+6
T2_MINU_DATA    DATA    WORK_DATA+7

;DS1302	 //1302定义引脚
RST             BIT     P1.5
IO_DATA         BIT     P1.6
SCLK            BIT     P1.7

;others register difined
KEY_I0          BIT     P3.4
T_RST           BIT     P3.5
KEY_DATA        EQU     30H
UESLESS_BIT     BIT     08H
T_DATA          EQU     40H
TH_DATA         EQU     41H
TIME_COUNTER    EQU     42H
LCD_STAT        EQU     43h
AC_ADD          EQU     44H
AC_DATA         EQU     45H
TIME0_CN        EQU     46H
CHAR_           EQU     47H
T_DATAH         EQU     48H
T_DATAL         EQU     49H
POINTER         EQU     4AH
LAST_           EQU     4BH
;********************************
;*        start of program      *
;********************************

         ORG     0000H
         AJMP    START

         ORG     0003H
         AJMP    INT_INT0

         ORG     000BH
         DEC     TIME0_CN
         MOV     TH0,#3CH
         MOV     TL0,#0B0H
         AJMP    INT_TIME0

         ORG     001BH
         AJMP    INT_TIME1

         ORG     0100H
START:   MOV     SP,#50H
         MOV     IE,#83H

         MOV     TMOD,#11H
         MOV     TH0,#3CH
         MOV     TL0,#0B0H

         MOV     P1,#0C3h
         CLR     T_RST
         MOV     POINTER,#46
         MOV     TIME0_CN,#1
         MOV     TIME_COUNTER,#0
         mov     lcd_stat,#0

         MOV    R0,#WORK_DATA
         MOV    R2,#8
         MOV    R4,#0CFH
         CALL   READ_DS1302

         mov     A,#38h
	     call    wrcmd

         SETB    TR0

LOP:
         ORL     PCON,#1               ;系统进入低功耗状态
         JMP     LOP
         ;中断子程序
;int0*********************************************
INT_INT0:
        CLR     EA
        CLR     TR0
        CALL    DELAY8MS
        MOV     A,P3
        JNB     ACC.2,BDUAN_STAT
        SETB    EA
        SETB    TR0
        RETI
BDUAN_STAT:
        POP     ACC
        POP     ACC
        MOV     DPTR,#START_
        PUSH    DPL
        PUSH    DPH
        RETI
;TIMER0  INTERRUPT PROGRAM********************************
INT_TIME0:
         CLR     EA
         CLR     TR0

         MOV    A,TIME0_CN
         XRL    A,#3
         JZ     SET_DS1620
   BACK8:MOV    A,TIME0_CN
         JNZ    QUIT_TIME0
         MOV    TIME0_CN,#4

         MOV    R2,#0AAH
         CALL   READ_T_DATA

         MOV    DPTR,#T_NO
         MOV    A,TH_DATA
         JNB    ACC.0,POS_
         JMP    NEG_
    NEG_:MOV    CHAR_,#45
         MOV    A,T_DATA
         RRC     A
         SUBB   A,#1
         CPL    A
         MOVC   A,@A+DPTR
         MOV    T_DATA,A
         JMP    P_C
    POS_:MOV    CHAR_,#43
         MOV    A,T_DATA
         RRC    A
         MOVC   A,@A+DPTR
         MOV    T_DATA,A
     P_C:JC     INC_5
         JMP    INC_0
   INC_5:MOV    LAST_,#53
         JMP    CHANGE_T
   INC_0:MOV    LAST_,#48
         JMP    CHANGE_T
CHANGE_T:MOV    A,T_DATA
         ANL    A,#0FH
         ADD    A,#48
         MOV    T_DATAL,A
         MOV    A,T_DATA
         ANL    A,#0F0H
         SWAP   A
         ADD    A,#48
         MOV    T_DATAH,A

         MOV    R0,#WEEK
         MOV    R2,#6
         MOV    R4,#8DH
         CALL   READ_DS1302
         ;交换年与星期的值
         MOV    A,32H
         MOV    R0,#33H
         XCH    A,@R0
         MOV    32H,A

         CALL    LCD_DISPLAY

         CALL    COMPAIR
QUIT_TIME0:
           SETB    EA
           SETB    TR0
           RETI
SET_DS1620:
           MOV         R2,#0CH
           MOV         R4,#01H
           CALL        HAVE_DATA_WR
           JMP         BACK8 
;**********************************TIME1
INT_TIME1:
        PUSH    ACC
        PUSH    PSW
        CLR     EA
        CLR     TR1
        INC     TIME_COUNTER
        MOV     TH1,#9EH
        MOV     TL1,#58H
        SETB    TR1
        SETB    EA
        POP     PSW
        POP     ACC
        RETI

;====================================键扫描子程序
KEY_SCANF:
        MOV     A,P1
        ANL     A,#0E3H
        JNB     ACC.0,COM0
        JNB     ACC.1,COM1
        RET
COM0:
        MOV     P1,#0FEH
        MOV     A,P1
        JNB     ACC.2,PRESS1
        JNB     ACC.3,PRESS3
        JNB     ACC.4,PRESS5
        RET
COM1:
        MOV     P1,#0FDH
        MOV     A,P1
        JNB     ACC.2,PRESS2
        JNB     ACC.3,PRESS4
        JNB     ACC.4,PRESS6
        RET
PRESS1: MOV     KEY_DATA,#1
        RET
PRESS2: MOV     KEY_DATA,#2
        RET
PRESS3: MOV     KEY_DATA,#3
        RET
PRESS4: MOV     KEY_DATA,#4
        RET
PRESS5: MOV     KEY_DATA,#5
        RET
PRESS6: MOV     KEY_DATA,#6
        RET

;读DS1302里的值$$$$$$$$$$$$$$$$$$$$
READ_DS1302:
         CLR    SCLK
RD_DATA0:SETB   RST
         MOV    A,R4
         MOV    R3,#8
    LOPP:CLR    SCLK
         RRC    A
         MOV    IO_DATA,C
         SETB   SCLK
         nop
         DJNZ   R3,LOPP
         MOV    A,R4
         CLR    C
         SUBB   A,#02
         MOV    R4,A
         MOV    R3,#8
RD_DATA1:CLR    SCLK
         nop
         MOV    C,IO_DATA
         RRC    A
         SETB   SCLK
         DJNZ   R3,RD_DATA1
         MOV    @R0,A
         INC    R0
         CLR    RST
         DJNZ   R2,RD_DATA0
         RET
;DS1620读写子程序(r2:commond    r4:data       R5:READ_TIMES)
NO_DATA_WR:                                 ;不带数据的写子程序
            CLR         SCLK
            SETB        T_RST
            MOV         R3,#8               ;8 bits need to write into ds1620
            MOV         A,R2                ;R2里存将要发送的数据
      GON1:CLR         SCLK
            RRC         A                   ;将要发送位右移到C中
            MOV         IO_DATA,C
            SETB        SCLK
            NOP
            DJNZ        R3,GON1
            CLR         T_RST
            RET
HAVE_DATA_WR:                                ;带数据传送的子程序
            CLR         SCLK
            SETB        T_RST
            MOV         R3,#8
            MOV         A,R2
      GON2:CLR         SCLK
            RRC         A
            MOV         IO_DATA,C
            SETB        SCLK
            NOP
            DJNZ        R3,GON2
            MOV         R3,#8
            MOV         A,R4
      GON3:CLR         SCLK
            RRC         A
            MOV         IO_DATA,C
            SETB        SCLK
            NOP
            DJNZ        R3,GON3
            CLR         T_RST
            RET
READ_T_DATA:
            CLR         SCLK
            SETB        T_RST
            MOV         R3,#8               ;8 bits need to write into ds1620
            MOV         A,R2                ;R2里存将要发送的数据
      GON4:CLR         SCLK
            RRC         A                   ;将要发送位右移到C中
            MOV         IO_DATA,C
            SETB        SCLK
            NOP
            DJNZ        R3,GON4
            CLR         SCLK
            MOV         R5,#2
            MOV         R1,#T_DATA
RD_HIGH_BYE:MOV         R3,#8
      GON5:CLR         SCLK
            NOP
            MOV         C,IO_DATA
            RRC         A
            SETB        SCLK
            DJNZ        R3,GON5
            MOV         @R1,A
            INC         R1
            DJNZ        R5,RD_HIGH_BYE
            CLR         T_RST
            RET
T_NO:
     DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H
     DB 20H,12H,22H,23H,24H,25H,26H,27H,28H,29H,30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
     DB 40H,41H,42H,43H,44H,45H,46H,47H,48H,49H,50H,51H,52H,53H,54H,55H,56H,57H,58H,59H
 
;LCD子程序
LCD_DISPLAY:

        MOV A,#LCD_SETDDADDR
        CALL WRCMD

        mov DPTR,#LINE1
        mov r1,#year
	    call wrstr

        mov a,#LCD_SETDDADDR+64
        CALL WRCMD

        mov dptr,#line2
        mov r1,#HOUR
        call wrstr

        mov A,#LCD_SETVISIBLE+4 	;Make the display & blink visible:
	    call wrcmd
        RET
wrstr:
	    clr A
	    movc A,@A+DPTR
	    jz wrstr1
        cjne a,#42,goon2
        JMP  WEN
GOON2:  CJNE A,#35,GOON3
        JMP  WEEK0
GOON3:  CJNE A,#37,GOON
        MOV  R0,#CHAR_
        MOV  R2,#5
KTJ:    MOV  A,@R0
        CALL SET_DATA
        INC  R0
        DJNZ R2,KTJ
        INC  DPTR
        INC  DPTR
        INC  DPTR
        JMP  GOON1
WEN:    mov a,@r1
        anl a,#0f0h
        swap a
        add a,#48
        call set_data
        mov a,@r1
        anl a,#0fh
        add a,#48
        call set_data
        inc r1
        jmp goon1
goon:   call set_data
goon1:	inc DPTR
        jmp wrstr
set_data:
        push dpl
        push dph
        mov dptr,#LCD_DATA_WR
        movx @dptr,A
	    call wtbusy
        pop dph
        pop dpl
wrstr1: ret

wrcmd:	mov dptr,#LCD_CMD_WR
	    movx @dptr,A
	    jmp wtbusy

wtbusy: mov dptr,#LCD_BUSY_RD
	    movx A,@dptr
	    jb ACC.7,wtbusy
	    reT
    
WEEK0:  MOV  A,32H
        XRL A,#02H
        JNZ NEXT1
        JMP MONDAY
  NEXT1:MOV A,32H
        XRL A,#03H
        JNZ NEXT2
        JMP TUESDAY
  NEXT2:MOV A,32H
        XRL A,#04H
        JNZ NEXT3
        JMP WEDNESDAY
  NEXT3:MOV A,32H
        XRL A,#05H
        JNZ NEXT4
        JMP THURSDAY
  NEXT4:MOV A,32H
        XRL A,#06H
        JNZ NEXT5
        JMP FRIDAY
  NEXT5:MOV A,32H
        XRL A,#07H
        JNZ NEXT6
        JMP SATERDAY
  NEXT6:JMP SUNDAY
;*********************
 MONDAY:MOV DPTR,#MON
        CALL WRSTR
        ret
TUESDAY:MOV DPTR,#TUE
        CALL WRSTR
        ret
WEDNESDAY:MOV DPTR,#WED
        CALL WRSTR
        ret
THURSDAY:MOV DPTR,#THU
        CALL WRSTR
        ret
FRIDAY: MOV DPTR,#FRI
        CALL WRSTR
        ret
SATERDAY:MOV DPTR,#SAT
        CALL WRSTR
        ret
SUNDAY: MOV DPTR,#SUN
        CALL WRSTR
        ret
;++++++++++++++++++++++++++++++++++lcd tab1
MON:DB 'Monday    '
    DB 0
TUE:DB 'Tuesday   '
    DB 0
WED:DB 'Wednesday '
    DB 0
THU:DB 'Thursday  '
    DB 0
FRI:DB 'Friday    '
    DB 0
SAT:DB 'Saturday  '
    DB 0
SUN:DB 'Sunday    '
    DB 0
line1:db '20*/*/* #           '
      db 0
line2:db '  *:*    %   C      '
      db 0

⌨️ 快捷键说明

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