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

📄 atmega32_project.asm

📁 Home Automation System (Source Code)
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	RJMP SAVE_USER_NAME
	IN USART_DATA, UDR
	CPI USART_DATA, 0X0D
	BREQ LOAD_NAME_INTO_EEPROM_READY
	CPI USART_DATA, 0X08
	BREQ LOAD_NAME_INTO_EEPROM_READY_B
	ST X+, USART_DATA
	MOV TEMP, USART_DATA
	RCALL TRANSMIT
	INC COUNT_IT
	RJMP SAVE_USER_NAME
LOAD_NAME_INTO_EEPROM_READY_B:
	DEC XL
	DEC COUNT_IT
	MOV TEMP, USART_DATA
	RCALL TRANSMIT
	RJMP SAVE_USER_NAME
LOAD_NAME_INTO_EEPROM_READY:
	LDI TEMP, 0X00
	CPI COUNT_IT, 21
	BRGE ADD_USER_RETRY
	ST X, TEMP
	LDI XL, LOW(201)
LOAD_NAME_INTO_EEPROM:
	INC EADD_LOW
	LD EEPROM_DATA, X+
	RCALL EEPROM_WRITE
	DEC COUNT_IT
	CPI COUNT_IT, 0X00
	BREQ NAME_SAVED
	RJMP LOAD_NAME_INTO_EEPROM
NAME_SAVED:
	INC EADD_LOW
	LDI EEPROM_DATA, 0X00
	RCALL EEPROM_WRITE
	LDI EEPROM_DATA, '1'
	POP EADD_LOW
	RCALL EEPROM_WRITE
	RJMP QUIT_ADD_USER_NAME
QUIT_ADD_USER_NAME:
	RET

ADD_USER_CONTACT:
	PUSH EADD_LOW
ADD_CONTACT_RETRY:
	CLR XH
	LDI XL, LOW(201)
	LDI ZH, HIGH(USER_PC_CHANGE_OPTIONS_STR4*2)
	LDI ZL, LOW(USER_PC_CHANGE_OPTIONS_STR4*2)
	RCALL TRANSMIT_LOOP
	CLR COUNT_IT
SAVE_USER_CONTACT:
	SBIS UCSRA, RXC
	RJMP SAVE_USER_CONTACT
	IN USART_DATA, UDR
	CPI USART_DATA, 0X0D
	BREQ LOAD_CONTACT_INTO_EEPROM_READY
	CPI USART_DATA, 0X08
	BREQ SAVE_USER_CONTACT_B
	ST X+, USART_DATA
	MOV TEMP, USART_DATA
	RCALL TRANSMIT
	INC COUNT_IT
	RJMP SAVE_USER_CONTACT
SAVE_USER_CONTACT_B:
	DEC XL
	DEC COUNT_IT
	MOV TEMP, USART_DATA
	RCALL TRANSMIT
	RJMP SAVE_USER_CONTACT
LOAD_CONTACT_INTO_EEPROM_READY:
	LDI TEMP, 0X00
	ST X, TEMP
	CPI COUNT_IT, 13
	BRNE ADD_CONTACT_RETRY
	LDI XL, LOW(201)
LOAD_CONTACT_INTO_EEPROM:
	INC EADD_LOW
	LD EEPROM_DATA, X+
	RCALL EEPROM_WRITE
	DEC COUNT_IT
	CPI COUNT_IT, 0X00
	BREQ CONTACT_SAVED
	RJMP LOAD_CONTACT_INTO_EEPROM
CONTACT_SAVED:
	INC EADD_LOW
	LDI EEPROM_DATA, 0X00
	RCALL EEPROM_WRITE
	LDI EEPROM_DATA, '1'
	POP EADD_LOW
	RCALL EEPROM_WRITE
	RJMP QUIT_ADD_USER_CONTACT
QUIT_ADD_USER_CONTACT:
	RET

;---------------------------------------------------------
;	CHANGE OR ALTER ANY MOBILE USER
CHANGE_OPTIONS:
	RCALL BREAK_UP_LINE
	LDI ZH, HIGH(USER_PC_CHANGE_OPTIONS_STR*2)
	LDI ZL, LOW(USER_PC_CHANGE_OPTIONS_STR*2)
	RCALL TRANSMIT_LOOP
RETURN_WHEN_CONFIGURED_ANY:
	RCALL USERS_INFORMATION
	CLR EADD_HIGH
	LDI EADD_LOW, USER_STATUS_BYTE
	RCALL EEPROM_READ
AGAIN_ASK_USER_NUMBER:
	LDI ZH, HIGH(USER_PC_CHANGE_OPTIONS_STR2*2)	;Do you want to configure any user
	LDI ZL, LOW(USER_PC_CHANGE_OPTIONS_STR2*2)
	RCALL TRANSMIT_LOOP
	RCALL GET_KEY_ENTERED
	CPI TEMP, '1'
	BREQ CONFIG_USER1
	CPI TEMP, '2'
	BREQ CONFIG_USER2
	CPI TEMP, '3'
	BREQ CONFIG_USER3
	CPI TEMP, 'n'
	BREQ QUIT_CHANGE_OPTIONS
	CPI TEMP, 'N'
	BREQ QUIT_CHANGE_OPTIONS
	RCALL USER_INPUT_ERROR
	RJMP AGAIN_ASK_USER_NUMBER
CONFIG_USER1:
	MOV TEMP, EEPROM_DATA				; MOVE DATA TO TEMP FROM LAST READ EEPROM ADDRESS
	ANDI TEMP, 0B11111101				; ONLY CHANGE THE STATUS OF DEFAULT USER TO 0
	MOV EEPROM_DATA, TEMP				; MOVE DATA FROM TEMP TO EEPROM DATA REGISTER
	RCALL EEPROM_WRITE					; WRITE IT BACK TO LAST ACCESSED ADDRESS
	LDI EADD_LOW, 0						; LOAD NEW ADDRESS FOR EEPROM ACCESS
	RCALL EEPROM_WRITE					; WRITE DATA INTO EEPROM ADDRESS 0 (FIRST BYTE)
	PUSH TEMP							; STACK TEMP FOR FUTURE USE
	LDI EADD_LOW, USER_NAME_AREA1		; LOAD ADDRESS OF USER1 IN EEPROM
	RCALL CONFIG_WHAT
	POP TEMP
	ORI TEMP, 0B00000010
	MOV EEPROM_DATA, TEMP
	LDI EADD_LOW, 0
	RCALL EEPROM_WRITE
	LDI EADD_LOW, USER_STATUS_BYTE
	RCALL EEPROM_WRITE
	RJMP RETURN_WHEN_CONFIGURED_ANY
CONFIG_USER2:
	MOV TEMP, EEPROM_DATA
	SBRS TEMP, 2
	RJMP NO_SUCH_USER_EXISTS
	LDI EADD_LOW, USER_NAME_AREA2
	RCALL CONFIG_WHAT
	RJMP RETURN_WHEN_CONFIGURED_ANY
CONFIG_USER3:
	MOV TEMP, EEPROM_DATA
	SBRS TEMP, 3
	RJMP NO_SUCH_USER_EXISTS
	LDI EADD_LOW, USER_NAME_AREA3
	RCALL CONFIG_WHAT
	RJMP RETURN_WHEN_CONFIGURED_ANY
NO_SUCH_USER_EXISTS:
	LDI ZH, HIGH(USER_PC_CHANGE_OPTIONS_STR7*2)	;Sorry, no such user in the list
	LDI ZL, LOW(USER_PC_CHANGE_OPTIONS_STR7*2)
	RCALL TRANSMIT_LOOP
	RJMP RETURN_WHEN_CONFIGURED_ANY
QUIT_CHANGE_OPTIONS:
	RET

CONFIG_WHAT:
	LDI ZH, HIGH(USER_PC_CHANGE_OPTIONS_STR6*2)	;Enter what to configure?(1 = Name, 2 = Contact):
	LDI ZL, LOW(USER_PC_CHANGE_OPTIONS_STR6*2)
	RCALL TRANSMIT_LOOP
	RCALL GET_KEY_ENTERED
	CPI TEMP, '1'
	BREQ CONFIG_USER_NAME
	CPI TEMP, '2'
	BREQ CONFIG_USER_CONTACT
	RCALL USER_INPUT_ERROR
	RJMP CONFIG_WHAT
CONFIG_USER_NAME:
	RCALL ADD_USER_NAME
	RJMP QUIT_CONFIG_WHAT
CONFIG_USER_CONTACT:
	LDI TEMP, 24
	ADD EADD_LOW, TEMP
	RCALL ADD_USER_CONTACT
	RJMP QUIT_CONFIG_WHAT
QUIT_CONFIG_WHAT:
	LDI ZH, HIGH(USER_PC_CHANGE_OPTIONS_STR5*2)	;Successfully Configured
	LDI ZL, LOW(USER_PC_CHANGE_OPTIONS_STR5*2)
	RCALL TRANSMIT_LOOP
	RET

;---------------------------------------------------------
;	BUZZER CONFIGURATION ROUTINE
BUZZER_OPTIONS:
	RCALL BREAK_UP_LINE
	LDI ZH, HIGH(USER_PC_BUZZER_OPTIONS_STR*2)
	LDI ZL, LOW(USER_PC_BUZZER_OPTIONS_STR*2)
	RCALL TRANSMIT_LOOP
	CLR EADD_HIGH
	LDI EADD_LOW, USER_BUZZER_BYTE
	RCALL EEPROM_READ
	CPI EEPROM_DATA, '0'
	BREQ BUZZER_IS_OFF
	LDI TEMP, 'O'
	RCALL TRANSMIT
	LDI TEMP, 'N'
	RCALL TRANSMIT
	RJMP GET_BUZZER_INPUT_READY
BUZZER_IS_OFF:
	LDI TEMP, 'O'
	RCALL TRANSMIT
	LDI TEMP, 'F'
	RCALL TRANSMIT
	LDI TEMP, 'F'
	RCALL TRANSMIT
	RJMP GET_BUZZER_INPUT_READY
GET_BUZZER_INPUT_READY:
	LDI ZH, HIGH(USER_PC_BUZZER_OPTIONS_STR2*2)
	LDI ZL, LOW(USER_PC_BUZZER_OPTIONS_STR2*2)
	RCALL TRANSMIT_LOOP
	RCALL GET_KEY_ENTERED
	CPI TEMP, '0'
	BREQ SAVE_BUZZER_STATUS
	CPI TEMP, '1'
	BREQ SAVE_BUZZER_STATUS
	RJMP GET_BUZZER_INPUT_READY
SAVE_BUZZER_STATUS:
	MOV EEPROM_DATA, TEMP
	LDI EADD_LOW, USER_BUZZER_BYTE
	RCALL EEPROM_WRITE
	RCALL DELAY_SHORT
	LDI ZH, HIGH(USER_PC_BUZZER_OPTIONS_STR3*2)
	LDI ZL, LOW(USER_PC_BUZZER_OPTIONS_STR3*2)
	RCALL TRANSMIT_LOOP
	RCALL DELAY_SHORT
	RJMP QUIT_BUZZER_OPTIONS
QUIT_BUZZER_OPTIONS:
	RCALL BREAK_UP_LINE
	RCALL SET_ACTIVE_DEFAULTS
	RCALL BUZZER
	RCALL DELAY_SHORT
	RCALL BUZZER
	RET

;---------------------------------------------------------
;	ADMINISTRATOR'S PASSWORD CONFIGURATION ROUTINE
CONFIG_PASSWORD:
	RCALL BREAK_UP_LINE
	CLT
	LDI ZH, HIGH(USER_PC_PASSWORD_OPTIONS_STR*2)	;
	LDI ZL, LOW(USER_PC_PASSWORD_OPTIONS_STR*2)
	RCALL TRANSMIT_LOOP
	RCALL PASSWORD_ENTER
	BRTC INVALID_PASSWORD_ENTERED
RETRY_OPTIONS:
	LDI ZH, HIGH(USER_PC_PASSWORD_OPTIONS_STR2*2)
	LDI ZL, LOW(USER_PC_PASSWORD_OPTIONS_STR2*2)
	RCALL TRANSMIT_LOOP
	CLR XH
	LDI XL, LOW(201)
	CLR COUNT_IT
GET_NEW_PASSWORD:
	SBIS UCSRA, RXC
	RJMP GET_NEW_PASSWORD
	IN USART_DATA, UDR
	CPI USART_DATA, 0X0D
	BREQ NEW_PASSWORD_LOAD
	CPI USART_DATA, 0X08
	BREQ GET_PASSWORD_BACKSPACE
	ST X+, USART_DATA
	LDI TEMP, '*'
	RCALL TRANSMIT
	INC COUNT_IT
	RJMP GET_NEW_PASSWORD
GET_PASSWORD_BACKSPACE:
	DEC XL
	DEC COUNT_IT
	MOV TEMP, USART_DATA
	RCALL TRANSMIT
	RJMP GET_NEW_PASSWORD
NEW_PASSWORD_LOAD:
	LDI TEMP, 0X00
	ST X, TEMP
	CPI COUNT_IT, 9
	BRSH NEW_PASSWORD_ERROR
	LDI XL, LOW(201)
	CLR EADD_HIGH
	LDI EADD_LOW, USER_PASSWORD_AREA
	LDI EEPROM_DATA, '1'
	RCALL EEPROM_WRITE
	INC EADD_LOW
SAVE_NEW_PASSWORD:
	LD EEPROM_DATA, X+
	RCALL EEPROM_WRITE
	NOP
	NOP
	INC EADD_LOW
	DEC COUNT_IT
	CPI COUNT_IT, 0X00
	BREQ SAVED_NEW_PASSWORD
	RJMP SAVE_NEW_PASSWORD
SAVED_NEW_PASSWORD:
	LDI EEPROM_DATA, 0X00
	RCALL EEPROM_WRITE
	LDI ZH, HIGH(USER_PC_PASSWORD_OPTIONS_STR5*2)
	LDI ZL, LOW(USER_PC_PASSWORD_OPTIONS_STR5*2)
	RCALL TRANSMIT_LOOP
	RJMP QUIT_CONFIG_PASSWORD
INVALID_PASSWORD_ENTERED:
	CLT
	RCALL INVALID_USER
	BRTS CONFIG_PASSWORD
	BRTC QUIT_CONFIG_PASSWORD
NEW_PASSWORD_ERROR:
	CLT
	CLR TEMP
	LDI ZH, HIGH(USER_PC_PASSWORD_OPTIONS_STR4*2)
	LDI ZL, LOW(USER_PC_PASSWORD_OPTIONS_STR4*2)
	RCALL TRANSMIT_LOOP
	RJMP RETRY_PASSWORD
RETRY_PASSWORD:
	LDI ZH, HIGH(USER_INVALID_STR2*2)
	LDI ZL, LOW(USER_INVALID_STR2*2)
	RCALL TRANSMIT_LOOP
	RCALL GET_KEY_ENTERED
RETRY_LEAVE:
	LDI ZH, HIGH(USER_PC_PASSWORD_OPTIONS_STR6*2)
	LDI ZL, LOW(USER_PC_PASSWORD_OPTIONS_STR6*2)
	RCALL TRANSMIT_LOOP
	RJMP QUIT_CONFIG_PASSWORD
QUIT_CONFIG_PASSWORD:
	RCALL BREAK_UP_LINE
	CLT
	RET


;---------------------------------------------------------
;	LOCK SWITCHE OPTIONS ROUTINE
LOCK_OPTIONS:
	RCALL BREAK_UP_LINE
	LDI ZH, HIGH(USER_PC_LOCK_SWITCHES_STR*2)
	LDI ZL, LOW(USER_PC_LOCK_SWITCHES_STR*2)
	RCALL TRANSMIT_LOOP
ASK_FOR_LOCK:
	RCALL CURRENT_LOCKED_SWITCHES
	LDI ZH, HIGH(USER_PC_LOCK_SWITCHES_STR3*2)
	LDI ZL, LOW(USER_PC_LOCK_SWITCHES_STR3*2)
	RCALL TRANSMIT_LOOP
	RCALL GET_KEY_ENTERED
	CPI TEMP, 'y'
	BREQ ASK_FOR_LOCK_GO
	CPI TEMP, 'Y'
	BREQ ASK_FOR_LOCK_GO
	CPI TEMP, 'n'
	BREQ QUIT_LOCK_OPTIONS
	CPI TEMP, 'N'
	BREQ QUIT_LOCK_OPTIONS
	RCALL USER_INPUT_ERROR
	RJMP ASK_FOR_LOCK
ASK_FOR_LOCK_GO:
	RCALL SET_LOCK_SWITCH
	RJMP ASK_FOR_LOCK
QUIT_LOCK_OPTIONS:
	RCALL BREAK_UP_LINE
	RET

CURRENT_LOCKED_SWITCHES:
	CLR EADD_HIGH
	LDI EADD_LOW, USER_DEVICE_LOCK_BYTE
	RCALL EEPROM_READ
	CPI EEPROM_DATA, 0X00
	BREQ NO_SWITCH_LOCKED
	LDI ZH, HIGH(USER_PC_LOCK_SWITCHES_STR2*2)
	LDI ZL, LOW(USER_PC_LOCK_SWITCHES_STR2*2)
	RCALL TRANSMIT_LOOP
	LDI COUNT_IT, 1
	CLC
	RJMP CHECK_LOCKED_SWITCHES
NO_SWITCH_LOCKED:
	LDI ZH, HIGH(USER_PC_LOCK_SWITCHES_STRN*2)
	LDI ZL, LOW(USER_PC_LOCK_SWITCHES_STRN*2)
	RCALL TRANSMIT_LOOP
	RJMP QUIT_CURRENT_LOCKED_SWITCHES
CHECK_SWITCHES_STATUS:				; USED FOR CHECKING SWITCHES AS WELL
CHECK_LOCKED_SWITCHES:
	SBRC EEPROM_DATA, 0
	RCALL DISPLAY_LOCKED_SWITCH
	INC COUNT_IT
	CPI COUNT_IT, 9
	BREQ QUIT_CURRENT_LOCKED_SWITCHES
	ROR EEPROM_DATA
	RJMP CHECK_LOCKED_SWITCHES
QUIT_CURRENT_LOCKED_SWITCHES:
	RET

DISPLAY_LOCKED_SWITCH:
	CLR TEMP
	LDI R24, 0X30
	ADD R24, COUNT_IT
	MOV TEMP, R24
	RCALL TRANSMIT
	LDI TEMP, ','
	RCALL TRANSMIT
	LDI TEMP, ' '
	RCALL TRANSMIT
	WAIT
	RET

SET_LOCK_SWITCH:
	LDI ZH, HIGH(USER_PC_LOCK_SWITCHES_STR4*2)
	LDI ZL, LOW(USER_PC_LOCK_SWITCHES_STR4*2)
	RCALL TRANSMIT_LOOP
	RCALL GET_KEY_ENTERED
	CPI TEMP, '1'
	BREQ SET_FOR_SWITCH_1
	CPI TEMP, '2'
	BREQ SET_FOR_SWITCH_2
	CPI TEMP, '3'
	BREQ SET_FOR_SWITCH_3
	CPI TEMP, '4'
	BREQ SET_FOR_SWITCH_4
	CPI TEMP, '5'
	BREQ SET_FOR_SWITCH_5
	CPI TEMP, '6'
	BREQ SET_FOR_SWITCH_6
	CPI TEMP, '7'
	BREQ SET_FOR_SWITCH_7
	CPI TEMP, '8'
	BREQ SET_FOR_SWITCH_8
	RCALL USER_INPUT_ERROR
	RJMP SET_LOCK_SWITCH
SET_FOR_SWITCH_1:
	LDI R25, 0B00000001
	LDI R24, 0B11111110
	RCALL GET_STATUS_SET
	RJMP BACK_LOCK_SWITCH
SET_FOR_SWITCH_2:
	LDI R25, 0B00000010
	LDI R24, 0B11111101
	RCALL GET_STATUS_SET
	RJMP BACK_LOCK_SWITCH
SET_FOR_SWITCH_3:
	LDI R25, 0B00000100
	LDI R24, 0B11111011
	RCALL GET_STATUS_SET
	RJMP BACK_LOCK_SWITCH
SET_FOR_SWITCH_4:
	LDI R25, 0B00001000
	LDI R24, 0B11110111
	RCALL GET_STATUS_SET
	RJMP BACK_LOCK_SWITCH
SET_FOR_SWITCH_5:
	LDI R25, 0B00010000
	LDI R24, 0B11101111
	RCALL GET_STATUS_SET
	RJMP BACK_LOCK_SWITCH
SET_FOR_SWITCH_6:
	LDI R25, 0B00100000
	LDI R24, 0B11011111
	RCALL GET_STATUS_SET
	RJMP BACK_LOCK_SWITCH
SET_FOR_SWITCH_7:
	LDI R25, 0B01000000
	LDI R24, 0B10111111
	RCALL GET_STATUS_SET
	RJMP BACK_LOCK_SWITCH
SET_FOR_SWITCH_8:
	LDI R25, 0B10000000
	LDI R24, 0B01111111
	RCALL GET_STATUS_SET
	RJMP BACK_LOCK_SWITCH
BACK_LOCK_SWITCH:
	RET

GET_STATUS_SET:
	CLR EADD_HIGH
	LDI EADD_LOW, USER_DEVICE_LOCK_BYTE
	RCALL EEPROM_READ
BACK_STATUS_TO_SET:
	LDI ZH, HIGH(USER_PC_LOCK_SWITCHES_STR5*2)
	LDI ZL, LOW(USER_PC_LOCK_SWITCHES_STR5*2)
	RCALL TRANSMIT_LOOP
	RCALL GET_KEY_ENTERED
	CPI TEMP, '0'
	BREQ SET_IT_UNLOCKED
	CPI TEMP, '1'
	BREQ SET_IT_LOCKED
	RCALL USER_INPUT_ERROR
	RJMP BACK_STATUS_TO_SET
SET_IT_UNLOCKED:
	MOV TEMP, EEPROM_DATA
	AND TEMP, R24
	MOV EEPROM_DATA, TEMP
	RJMP QUIT_GET_STATUS_TO_SET
SET_IT_LOCKED:
	MOV TEMP, EEPROM_DATA
	OR TEMP, R25
	MOV EEPROM_DATA, TEMP
	RJMP QUIT_GET_STATUS_TO_SET
QUIT_GET_STATUS_TO_SET:
	RCALL EEPROM_WRITE
	LDI ZH, HIGH(USER_PC_LOCK_SWITCHES_STR6*2)	
	LDI ZL, LOW(USER_PC_LOCK_SWITCHES_STR6*2)
	RCALL TRANSMIT_LOOP
	WAIT
	RET


;---------------------------------------------------------
;	USERS INFORMATION ROUTINE
USERS_INFORMATION:
	LDI ZH, HIGH(USER_PC_USERS_INFO_STR*2)
	LDI ZL, LOW(USER_PC_USERS_INFO_STR*2)
	RCALL TRANSMIT_LOOP
	RCALL USER_INFORMATION_1
	LDI EADD_LOW, USER_STATUS_BYTE
	RCALL EEPROM_READ
	MOV R24, EEPROM_DATA
	SBRS R24, 2
	RJMP THIRD_USER_INFO
	RCALL USER_INFORMATION_2
THIRD_USER_INFO:
	SBRC R24, 3
	RCALL USER_INFORMATION_3 
	RJMP QUIT_USER_INFORMATION
	RJMP QUIT_USER_INFORMATION
QUIT_USER_INFORMATION:
	RCALL BREAK_UP_LINE
	RET
USER_INFORMATION_1:
	LDI ZH, HIGH(USER_PC_USERS_INFO_STR1*2)
	LDI ZL, LOW(USER_PC_USERS_INFO_STR1*2)
	RCALL TRANSMIT_LOOP
	CLR EADD_HIGH
	LDI EADD_LOW, USER_NAME_AREA1
	LDI COUNT_IT, 20
	RCALL DISPLAY_IT_FROM_EEPROM
	LDI EADD_LOW, USER_CONTACT_AREA1
	LDI COUNT_IT, 14
	RCALL DISPLAY_IT_FROM_EEPROM
	LDI ZH, HIGH(USER_PC_USERS_INFO_STRD*2)
	LDI ZL, LOW(USER_PC_USERS_INFO_STRD*2)
	RCALL TRANSMIT_LOOP
	RET
USER_INFORMATION_2:
	LDI ZH, HIGH(USER_PC_USERS_INFO_STR2*2)
	LDI ZL, LOW(USER_PC_USERS_INFO_STR2*2)
	RCALL TRANSMIT_LOOP
	LDI EADD_LOW, USER_NAME_AREA2
	LDI COUNT_IT, 20
	RCALL DISPLAY_IT_FROM_EEPROM
	LDI EADD_LOW, USER_CONTACT_AREA2
	LDI COUNT_IT, 14
	RCALL DISPLAY_IT_FROM_EEPROM
	RET
USER_INFORMATION_3:
	LDI ZH, HIGH(USER_PC_USERS_INFO_STR3*2)
	LDI ZL, LOW(USER_PC_USERS_INFO_STR3*2)
	RCALL TRANSMIT_LOOP
	LDI EADD_LOW, USER_NAME_AREA3
	LDI COUNT_IT, 20
	RCALL DISPLAY_IT_FROM_EEPROM
	LDI EADD_LOW, USER_CONTACT_AREA3
	LDI COUNT_IT, 14
	RCALL DISPLAY_IT_FROM_EEPROM
	RET

DISPLAY_IT_FROM_EEPROM:
	INC EADD_LOW
	RCALL EEPROM_READ
	CPI EEPROM_DATA, 0X00
	BREQ FILL_UP_SPACE
	DEC COUNT_IT
	MOV TEMP, EEPROM_DATA
	RCALL TRANSMIT
	RJMP DISPLAY_IT_FROM_EEPROM
FILL_UP_SPACE:

⌨️ 快捷键说明

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