📄 count.asm
字号:
;********************************************************************
; APPLICATION PROGRAM FOR COUNTER(LCD ,SQUARE WAVE O/P AT PIN NO. 32 (P0.7) AND KEYBOARD MODULE)
;OUTPUT DISPLAY----->
;!!!!!!!!!!!!!!!!!!!!!
;!!STATUS:START/STOP!!
;!! 00:00sec !!
;!!!!!!!!!!!!!!!!!!!!!
;;********************************************************************
ORG 0000H
LJMP STARTUP ;POWER-ON RESET
ORG 0003H
LJMP INTRPT0 ;EXTERNAL INTERRUPT 0
ORG 000B
LJMP TIMER0X ;TIMER 0 OVERFLOW
ORG 0013H
LJMP INTRPT1 ;EXTERNAL INTERRUPT 1
ORG 001B
LJMP TIMER1Y ;TIMER 1 OVERFLOW
ORG 0023H
LJMP SERIAL ;UART RX/TX INTERRUPT
;
;********************************************************************
; BYTE VARIABLES
;
;
TEMP_KEY DATA 40H
KEY_ID DATA 41H
CHAR1 DATA 50h
CHAR2 DATA 51h
CHAR3 DATA 52h
CHAR4 DATA 53h
CHAR5 DATA 54h
CHAR6 DATA 55h
CHAR7 DATA 56h
CHAR8 DATA 57h
;
CHAR9 DATA 58h
CHAR10 DATA 59h
CHAR11 DATA 5Ah
CHAR12 DATA 5Bh
CHAR13 DATA 5Ch
CHAR14 DATA 5Dh
CHAR15 DATA 5Eh
CHAR16 DATA 5Fh
;
CHAR17 DATA 60h
CHAR18 DATA 61h
CHAR19 DATA 62h
CHAR20 DATA 63h
CHAR21 DATA 64h
CHAR22 DATA 65h
CHAR23 DATA 66h
CHAR24 DATA 67h
;
CHAR25 DATA 68h
CHAR26 DATA 69h
CHAR27 DATA 6Ah
CHAR28 DATA 6Bh
CHAR29 DATA 6Ch
CHAR30 DATA 6Dh
CHAR31 DATA 6Eh
CHAR32 DATA 6Fh
;********************************************************************
; BIT VARIABLES
;
LCD_D0 BIT P1.0
LCD_D1 BIT P1.1
LCD_D2 BIT P1.2
LCD_D3 BIT P1.3
LCD_D4 BIT P1.4
LCD_D5 BIT P1.5
LCD_D6 BIT P1.6
LCD_D7 BIT P1.7
LCD_EN BIT P3.5
LCD_RW BIT P3.6
LCD_RS BIT P3.7
LCD_DATA EQU P1
ADDR1 EQU 80h
ADDR2 EQU 90h
RUNFLG BIT 20H
;********************************************************************
; CONSTANTS/EXPRESSIONS
;
;********************************************************************
; MAIN PROGRAM STARTS HERE
;
STARTUP: MOV SP,#07h
CLR RUNFLG
LCALL RAM_INIT
CLR LCD_RS
CLR LCD_RW
SETB LCD_EN
NOP
CLR LCD_EN
LCALL LCD_INIT
LCALL DELAY
LCALL DELAY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'A'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'T'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'S'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'*'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#0C0h
LCALL SEND_CMD
LCALL CHK_BUSY
MOV A,#'C'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'E'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'N'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'T'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'I'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#20H
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'S'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'E'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'C'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'.'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#20H
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'T'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'I'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'M'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'E'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#'R'
LCALL SEND_DATA
LCALL CHK_BUSY
MOV R2,#08H
REPEAT: LCALL DELAY
DJNZ R2,REPEAT
LCALL MESSAGE1
LCALL DISP1
LCALL DISP2
CLR RUNFLG
MOV CHAR25,#30H
MOV CHAR26,#30H
MOV CHAR28,#30H
MOV CHAR29,#30H
MOV A,#0C8H
LCALL SEND_CMD
LCALL CHK_BUSY
MOV A,CHAR25
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,CHAR26
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#0CBH
LCALL SEND_CMD
LCALL CHK_BUSY
MOV A,CHAR28
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,CHAR29
LCALL SEND_DATA
LCALL CHK_BUSY
LCALL TMR0_INIT ; TIMER 0 CALL
PROCESS: LCALL WAIT_FOR_KEY
MOV A,KEY_ID
CLR C
SUBB A,#01H ;CHECK IF IT IS START/STOP KEY
JZ STRT_STP
MOV A,KEY_ID
CLR C
SUBB A,#02H ;CHECK IF IT IS RESET KEY
JZ RST_KEY
MOV A,KEY_ID
CLR C
SUBB A,#04H ;CHECK IF IT IS PULSE KEY
JZ PULSE_KEY
CLR A
MOV TEMP_KEY,A
MOV KEY_ID,A
SJMP PROCESS
RST_KEY: MOV A,#0C8H
LCALL SEND_CMD
LCALL CHK_BUSY
MOV A,#30H
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#30H
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#0CBH
LCALL SEND_CMD
LCALL CHK_BUSY
MOV A,#30H
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#30H
LCALL SEND_DATA
LCALL CHK_BUSY
RST_CNTR: MOV A,#30H
MOV CHAR29,A
MOV CHAR28,A
MOV CHAR26,A
MOV CHAR25,A
SJMP PROCESS
STRT_STP: CPL RUNFLG
MOV KEY_ID,#00H
MOV TEMP_KEY,#00H
JB RUNFLG,MODIFY
LCALL MESSAGE1
LCALL DISP1
SJMP PROCESS
MODIFY: LCALL MESSAGE2
LCALL DISP1
SJMP PROCESS
PULSE_KEY: JB RUNFLG,INCR
MOV KEY_ID,#00H
MOV TEMP_KEY,#00H
AJMP PROCESS
INCR: LCALL COUNTER
MOV A,#0C8H
LCALL SEND_CMD
LCALL CHK_BUSY
MOV A,CHAR25
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,CHAR26
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,#0CBH
LCALL SEND_CMD
LCALL CHK_BUSY
MOV A,CHAR28
LCALL SEND_DATA
LCALL CHK_BUSY
MOV A,CHAR29
LCALL SEND_DATA
LCALL CHK_BUSY
MOV KEY_ID,#00H
MOV TEMP_KEY,#00H
LJMP PROCESS
;********************************************************************
; FUNCTIONS/SUBROUTINES
RAM_INIT: MOV R0,#30H
CLR A
REPEAT3: MOV @R0,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -