?? transmitter.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
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DS1621W EQU 90H ; SLAVE ADDRESS 1001 000 + 0 TO WRITE
DS1621R EQU 91H ; SLAVE ADDRESS 1001 000 + 1 TO READ
DB0 EQU P1.1
DB1 EQU P1.0
DB2 EQU P3.7
DB3 EQU P3.1
SDA EQU P3.4
SCL EQU P3.3
BUZZER EQU P3.0
HEART EQU P3.5
; ***LCD CONTROL***
LCD_RS EQU P1.7 ;LCD REGISTER SELECT LINE
LCD_E EQU P1.6 ;LCD ENABLE LINE
LCD_DB4 EQU P1.5 ;PORT 1 IS USED FOR DATA
LCD_DB5 EQU P1.4 ;USED FOR DATA
LCD_DB6 EQU P1.3 ;FOR DATA
LCD_DB7 EQU P1.2 ;FOR DATA
; ***CURSOR CONTROL INSTRUCTIONS***
OFFCUR EQU 0CH
BLINKCUR EQU 0DH
; ***DISPLAY CONTROL INSTRUCTIONS***
CLRDSP EQU 01H
ONDSP EQU 0CH
; ***SYSTEM INSTRUCTIONS***
CONFIG EQU 28H ; 4-BIT DATA,2 LINES,5X7 MATRIX LCD
ENTRYMODE EQU 6 ; INCREMENT CURSOR DON'T SHIFT DISPLAY
DSEG ; This is internal data memory
ORG 20H ; Bit adressable memory
FLAGS: DS 1
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
FLAAGS: DS 1
STATUS BIT FLAAGS.2
STATUS1 BIT FLAAGS.3
BITCNT: DS 1
TEMPM: DS 1
TEMPL: DS 1
VALUE_1: DS 1
VALUE_2: DS 1
VALUE_3: DS 1
VALUE_4: DS 1
BEATS: DS 1
VALU_1: DS 1
VALU_2: DS 1
COUNT: DS 1
STACK: DS 1
; ***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
;---------==========----------==========---------=========---------
MOV PSW,#RB0 ; Select register bank 0
MOV SP,#60H
CLR BUZZER
MOV COUNT,#00H
CALL RESETLCD4
CALL INITLCD4
CALL TITLES
CALL DELAYS
TOPP:
CALL SEND_START
MOV A,#DS1621W
ACALL SEND_BYTE
MOV A,#0EEH
ACALL SEND_BYTE
ACALL SEND_STOP
CALL MDELAY
ACALL SEND_START
MOV A,#DS1621W
ACALL SEND_BYTE
MOV A,#0AAH
ACALL SEND_BYTE
ACALL SEND_STOP
CALL MDELAY
ACALL SEND_START
MOV A,#DS1621R
ACALL SEND_BYTE
ACALL READ_BYTE
MOV TEMPM,A
ACALL READ_BYTE
MOV TEMPL,A
ACALL SEND_STOP
MOV R4,TEMPL
CJNE R4,#80H,GFG1
MOV VALUE_4,#35H
AJMP GFG2
GFG1: MOV VALUE_4,#30H
GFG2:
MOV R2,TEMPM
MOV R1,#00H
MOV R3,#00D
MOV R4,#00D
MOV R5,#00D
MOV R6,#00D
CALL HEX2BCD
MOV VALUE_3,R3
MOV VALUE_2,R4
MOV VALUE_1,R5
CALL DISP_TEMP ;display temperature
CALL MDELAY
MOV A,VALUE_1
CJNE A,#00H,HJY
AJMP NEXT
HJY: ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
NEXT: MOV A,VALUE_2
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV A,VALUE_3
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV R4,#'.'
CALL WRLCDDATA
CALL MDELAY
MOV TMOD,#60H
MOV TH1,#00H
MOV TL1,#00H
SETB HEART
SETB TR1
MOV R3,#30
REPPS: CALL DELAYSS ;1 SEC DELAY
DJNZ R3,REPPS
MOV BEATS,TL1
CLR TR1
CLR TF1
MOV A,BEATS
CJNE A,#00H,DOWNSX1
AJMP DOWNSX
DOWNSX1:
SUBB A,#10H
JNC DOWNSU ;JMP IF ABNORMAL
AJMP DOWNSX
DOWNSU: MOV A,BEATS ;multiply into 2
ADD A,BEATS
MOV BEATS,A
DOWNSX:
MOV R2,BEATS
MOV R1,#00H
MOV R3,#00D
MOV R4,#00D
MOV R5,#00D
MOV R6,#00D
CALL HEX2BCD
MOV VALU_1,R4
MOV VALU_2,R3
CALL HEART_DISP ;Display Heart beats
CALL MDELAY
MOV A,VALU_1
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV A,VALU_2
ADD A,#30H
MOV R4,A
CALL WRLCDDATA
CALL MDELAY
MOV A,VALU_1
SWAP A
ORL A,VALU_2
MOV BEATS,A
CALL DELAY
CJNE A,#00H,RTY131
CLR STATUS
AJMP RTY25
RTY131: MOV A,BEATS
CLR C
SUBB A,#80H
JNC DOWNS ;JMP IF ABNORMAL
MOV A,BEATS
CLR C
SUBB A,#65H
JC DOWNS ;JMP IF ABNORMAL
CLR STATUS
AJMP RTY25
DOWNS: SETB STATUS
RTY25: MOV A,TEMPM
CJNE A,#00H,RTY1S1
CLR STATUS1
AJMP RTY22
RTY1S1: MOV A,TEMPM
CLR C
SUBB A,#40
JNC DOWNSS ;JMP IF ABNORMAL
MOV A,TEMPM
CLR C
SUBB A,#27
JC DOWNSS ;JMP IF ABNORMAL
CLR STATUS1
AJMP RTY22
DOWNSS: SETB STATUS1
RTY22: JB STATUS,ON_BUZZ
JB STATUS1,ON_BUZZ
CLR BUZZER
AJMP TOPPS
ON_BUZZ: SETB BUZZER
AJMP TOPPS
TOPPS: MOV A,#0DH
CALL SEND_DATA
CALL DEELAYS
MOV A,VALUE_1
CALL SEND_DATA
CALL DEELAYS
MOV A,VALUE_2
CALL SEND_DATA
CALL DEELAYS
MOV A,VALUE_3
CALL SEND_DATA
CALL DEELAYS
MOV A,#0EH
CALL SEND_DATA
CALL DEELAYS
MOV A,VALU_1
CALL SEND_DATA
CALL DEELAYS
MOV A,VALU_2
CALL SEND_DATA
CALL DEELAYS
MOV A,VALU_2
CALL SEND_DATA
CALL DEELAYS
AJMP TOPP
;---------==========----------==========---------=========---------
;######################################################
SEND_DATA:
JNB ACC.0,FG1
SETB DB0
AJMP FG2
FG1: CLR DB0
FG2: JNB ACC.1,FG3
SETB DB1
AJMP FG4
FG3: CLR DB1
FG4: JNB ACC.2,FG5
SETB DB2
AJMP FG6
FG5: CLR DB2
FG6: JNB ACC.3,FG7
SETB DB3
AJMP FG8
FG7: CLR DB3
FG8: RET
;##########################################################
; DISPLAY ROUTINES
;##########################################################
TITLES:
MOV DPTR,#MSAG
CALL LCD_MSG
RET
MSAG:
DB 1H,81H,'* BIOMEDICAL *',0C1H,'MONITORING SYS',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DISP_TEMP:
MOV DPTR,#MSAG1
CALL LCD_MSG
RET
MSAG1:
DB 1H,80H,'Temperature:+',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HEART_DISP:
MOV DPTR,#MSAG2
CALL LCD_MSG
RET
MSAG2:
DB 0C1H,'Heart Beat:',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DELAYSS:
MOV R0,#0BH
RV3: MOV R1,#0FFH
RV1: MOV R2,#0FFH
RV2: DJNZ R2,RV2
DJNZ R1,RV1
DJNZ R0,RV3
RET
;**************************************************
HEX2BCD:
MOV R3,#00D
MOV R4,#00D
MOV R5,#00D
MOV R6,#00D
MOV R7,#00D
MOV B,#10D
MOV A,R2
DIV AB
MOV R3,B ;
MOV B,#10 ; R7,R6,R5,R4,R3
DIV AB
MOV R4,B
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -