?? bell.a51
字號:
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 + -