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

📄 bell.a51

📁 89c51 schematics 89c51 schematics
💻 A51
📖 第 1 页 / 共 2 页
字号:
INCLUDE reg_51.pdf

RB0     EQU     000H    ; Select Register Bank 0
RB1     EQU     008H    ; Select Register Bank 1  ...poke to PSW to use

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		PORT DECLERATION
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SDA 	EQU 	P1.1  	;SDA=PIN5
SCL 	EQU 	P1.0	;SCL=PIN6

DS1307W   EQU    0D0H     ; SLAVE ADDRESS 1101 000 + 0 TO WRITE
DS1307R   EQU    0D1H     ; SLAVE ADDRESS 1101 000 + 1 TO READ

KEYS	EQU	P3

ROW1	EQU	P3.1
ROW2	EQU	P3.2
ROW3	EQU	P3.3
ROW4	EQU	P3.4
COL1	EQU	P3.5
COL2	EQU	P3.6
COL3	EQU	P3.7

DIS_A	EQU	P0.2		
DIS_B	EQU	P0.3		
DIS_C	EQU	P0.4
DIS_D	EQU	P0.6
DIS_E	EQU	P0.5
DIS_F	EQU	P0.1
DIS_G	EQU	P0.0

DIS1	EQU	P0.7
DIS2	EQU	P2.7                
DIS3	EQU	P2.6
DIS4	EQU	P2.5

RELAY	EQU	P2.4

WMCON   DATA    96h 		; watchdog and memory control register
EEMEN   EQU     00001000b 	; EEPROM access enable bit
EEMWE   EQU     00010000b 	; EEPROM write enable bit
WDTRST  EQU     00000010b 	; EEPROM RDY/BSY bit
DPS     EQU     00000100b 	; data pointer select bit
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

DSEG            ; This is internal data memory
ORG     20H     ; Bit adressable memory
FLAGS     DATA   20H
LASTREAD  BIT    FLAGS.0
SQW 	    BIT    FLAGS.4
ACK       BIT    FLAGS.5
BUS_FLT   BIT    FLAGS.6
_2W_BUSY  BIT    FLAGS.7
CANCEL    BIT    FLAGS.1
CANCEL1   BIT    FLAGS.2
ALARM	    BIT    FLAGS.3
BITCNT    DATA   21H
BYTECNT   DATA   22H
SECS      DATA   24H      ;   '   SECONDS STORAGE RAM
MINS      DATA   25H      ;   '   MINUTES   '     '
HRS       DATA   26H      ;   '   HOURS     '     '
DAY       DATA   27H      ;   '   DAY       '     '
DATE1      DATA   28H      ;   '   DATE      '     '
MONTH     DATA   29H      ;   '   MONTH     '     '
YEAR      DATA   2AH      ;   '   YEAR      '     '
CONTROL   DATA   2BH      ; FOR STORAGE OF CONTROL REGISTER WHEN READ.
ALM_HOUR  DATA   2CH      ; INTERNAL (ALARM HOURS) STORAGE.
ALM_MIN   DATA   2DH      ; INTERNAL (ALARM MINUTES) STORAGE.
ALM_CNTRL DATA   2EH      ; INTERNAL STORAGE FOR ALARM (ON) TIME.

COUNT	DATA	2FH
SPEED	DATA	30H
VALUE_1	DATA	31H
VALUE_2	DATA	32H
VALUE_3	DATA	33H
VALUE_4	DATA	34H

NUMBER1	DATA	35H	;temp to store dialled number
KBELL	DATA	36H
NUMB1	DATA	37H	;Temp Reg to store pressed Keys
NUMB2	DATA	38H	;Temp Reg to store pressed Keys
NUMB3	DATA	39H	;Temp Reg to store pressed Keys
NUMB4	DATA	3AH	;Temp Reg to store pressed Keys
KEY	DATA	3BH	
TIM   DATA  3CH




STACK	DATA	3FH
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; ***MACRO'S***

SCL_HIGH  MACRO
          SETB   SCL      ; SET SCL HIGH
          JNB    SCL,$    ; LOOP UNTIL STRONG 1 ON SCL
          ENDM
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

CSEG     AT      0        ; RESET VECTOR
;---------==========----------==========---------=========---------
;              PROCESSOR INTERRUPT AND RESET VECTORS
;---------==========----------==========---------=========---------
 
	ORG     00H    		; Reset
	JMP     MAIN

	ORG 	000BH		;Timer Interrupt0
	JMP 	REFRESH

	ORG 001BH	;Timer Interrupt1
   JMP RELAY_TIMER 
;---------==========----------==========---------=========---------
;  Main routine. Program execution starts here.
;---------==========----------==========---------=========---------
MAIN:	
	MOV PSW,#RB0      	; Select register bank 0
   MOV SP,STACK
   CLR RELAY				;Switch OFF relay

   
	MOV SPEED,#00H
	MOV COUNT,#00H
	MOV KBELL,#00H
	
	CLR ALARM
	MOV VALUE_1,#15H
	MOV VALUE_2,#15H
	MOV VALUE_3,#15H
	MOV VALUE_4,#15H
	CLR DIS1
	CLR DIS2
	CLR DIS3
	CLR DIS4
	MOV TMOD,#01H		;enable timer0 for scanning
	MOV TL0,#00H
	MOV TH0,#0FDH
	SETB ET0
	SETB EA
	SETB TR0		;Start the Timer
; **********************************************************	
;		INITILIZE RTC 
; **********************************************************	
			SETB SDA        	; ENSURE SDA HIGH
        SCL_HIGH               ; ENSURE SCL HIGH
        CLR ACK      	       ; CLEAR STATUS FLAGS
        CLR BUS_FLT
        CLR _2W_BUSY
	CLR SQW
	CALL OSC_CONTROL		;Initilize the RTC
	ACALL SQW_CONTROL_1HZ
; **********************************************************
;		CHECK FOR ENTER THE TIME 
; **********************************************************
	LCALL SEND_START 		; SEND 2WIRE START CONDITION
	MOV A,#DS1307W 			; SEND DS1307 WRITE COMMAND
	LCALL SEND_BYTE
	MOV A,#08H 			; SET POINTER TO REG 08H ON DS1307
	LCALL SEND_BYTE
	LCALL SEND_STOP 		; SEND STOP CONDITION
	LCALL SEND_START 		; SEND START CONDITION
	MOV A,#DS1307R 			; SEND DS1307 READ COMMAND
	LCALL SEND_BYTE
	LCALL READ_BYTE 		; READ A BYTE OF DATA
	MOV R1,A
	LCALL SEND_STOP 		; SEND 2WIRE STOP CONDITION

	MOV NUMBER1,#01H
	CJNE A,#0AAH,KEYBOARD1
	AJMP START_PROGRAM

;**********************************************************		
;		KEYBOARD ROUTINE
;**********************************************************	
KEYBOARD1:
	MOV KBELL,#0FFH
KEYBOARD:
	MOV KEY,#00H	
	SETB COL1
	SETB COL2
	SETB COL3
K11:	CLR ROW1
	CLR ROW2
	CLR ROW3
	CLR ROW4
	MOV A,KEYS
	ANL A,#11100000B
	CJNE A,#11100000B,K11		;check till all keys released
K2:	ACALL DEALAY            	;call 20 msec delay
	MOV A,KEYS			;see if any key is pressed
	ANL A,#11100000B		;mask unused bits
	CJNE A,#11100000B,OVER		;key pressed, await closure
	SJMP K2
OVER:	ACALL DEALAY
	MOV A,KEYS
	ANL A,#11100000B
	CJNE A,#11100000B,OVER1
	SJMP K2
OVER1:	MOV A,KEYS
	ORL A,#11111110B
	MOV KEYS,A
	CLR ROW1
	MOV A,KEYS
	ANL A,#11100000B
	CJNE A,#11100000B,ROW_1
	MOV A,KEYS
	ORL A,#11111110B
	MOV KEYS,A
	CLR ROW2
	MOV A,KEYS
	ANL A,#11100000B
	CJNE A,#11100000B,ROW_2
	MOV A,KEYS
	ORL A,#11111110B
	MOV KEYS,A
	CLR ROW3
	MOV A,KEYS
	ANL A,#11100000B
	CJNE A,#11100000B,ROW_3
	MOV A,KEYS
	ORL A,#11111110B
	MOV KEYS,A
	CLR ROW4
	MOV A,KEYS
	ANL A,#11100000B
	CJNE A,#11100000B,ROW_4
	LJMP K2


ROW_1:	RLC A
	JC MAT1
	MOV KEY,#01H
	AJMP K1
MAT1:	RLC A
	JC MAT2
	MOV KEY,#02H
	AJMP K1
MAT2:	RLC A
	JC K1
	MOV KEY,#03H
	AJMP K1

ROW_2:	RLC A
	JC MAT3
	MOV KEY,#04H
	AJMP K1
MAT3:	RLC A
	JC MAT4
	MOV KEY,#05H
	AJMP K1
MAT4:	RLC A
	JC K1
	MOV KEY,#06H
	AJMP K1

ROW_3:	RLC A
	JC MAT5
	MOV KEY,#07H
	AJMP K1
MAT5:	RLC A
	JC MAT6
	MOV KEY,#08H
	AJMP K1
MAT6:	RLC A
	JC K1
	MOV KEY,#09H
	AJMP K1

ROW_4:	RLC A
	JC MAT7
	MOV KEY,#10H			;for *
	AJMP K1
MAT7:	RLC A
	JC MAT8	
	MOV KEY,#00H			;for 0
	AJMP K1
MAT8:	RLC A
	JC K1
	MOV KEY,#12H			;for =
K1:	
	
	MOV A,KBELL
	CJNE A,#0FFH,KB_RET1

	MOV A,KEY
	CJNE A,#10H,CXCX0	;Key to Erase last dislled NUMBER1
	MOV KEY,#00H
	MOV NUMBER1,#01H
	MOV VALUE_1,#15H
	MOV VALUE_2,#15H
	MOV VALUE_3,#15H
	MOV VALUE_4,#15H
	AJMP KEYBOARD
KB_RET1: JMP KB_RET
CXCX0:	MOV A,NUMBER1
	CJNE A,#01H,CXCX1
	MOV A,KEY
	CLR C
	SUBB A,#03H			; Chk Key Pressed 0,1
	JNC CXCX5
	MOV A,KEY
	INC NUMBER1
	MOV NUMB1,KEY
	MOV VALUE_1,KEY
	AJMP KEYBOARD
CXCX1:	CJNE A,#02H,CXCX2

	MOV A,NUMB1
	CJNE A,#02,JKJL
	MOV A,KEY
	CLR C
	SUBB A,#04H			; Chk Key Pressed 0,1,2,3
	JNC CXCX5
JKJL:	MOV A,KEY
	CLR C
	SUBB A,#10H			; Chk Key Pressed 0,1...8,9
	JNC CXCX5
	INC NUMBER1
	MOV NUMB2,KEY
	MOV VALUE_2,KEY
	AJMP KEYBOARD
CXCX2:	CJNE A,#03H,CXCX3
	MOV A,KEY
	CLR C
	SUBB A,#06H			; Chk Key Pressed 0,1...,5
	JNC CXCX5
	INC NUMBER1
	MOV NUMB3,KEY
	MOV VALUE_3,KEY
	AJMP KEYBOARD
CXCX3:	CJNE A,#04H,CXCX4
	MOV A,KEY
	CLR C
	SUBB A,#10H			; Chk Key Pressed 0,1,....,8,9
	JNC CXCX5
	INC NUMBER1
	MOV NUMB4,KEY
	MOV VALUE_4,KEY
CXCX5:	AJMP KEYBOARD
CXCX4:	CJNE A,#05H,CXCX5
	MOV A,KEY
	CJNE A,#12H,CXCX5		;Key to OK TIME

	CALL FLASHING

	MOV KBELL,#00H
	MOV A,NUMB1
	SWAP A
	ORL A,NUMB2
	MOV NUMB2,A
	MOV A,NUMB3
	SWAP A
	ORL A,NUMB4
	MOV NUMB4,A

	
;(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
;		STORE THE TIME TO RTC CHIP
;(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((	
	LCALL SEND_START 		; SEND 2WIRE START CONDITION
	MOV A,#DS1307W 			; LOAD DS1307 WRITE COMMAND
	LCALL SEND_BYTE 		; SEND WRITE COMMAND
	MOV A,#08H 			; SET DS1307 DATA POINTER TO BEGINNING
	LCALL SEND_BYTE 		; OF USER RAM 08H

⌨️ 快捷键说明

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