📄 sdprogram.txt
字号:
CS BIT P1.4
DI BIT P1.5
DO BIT P1.6
SCK BIT P1.7
ORG 0000H
AJMP MAIN
MAIN:
MOV R7,#00H
MOV R5,#32
MOV 60H,#80H
MOV 50H,#80H
SETB P1.3
AA:
JNB P1.3,COUNT
JMP AA
COUNT:
LCALL DELAY01
JNB P1.3,COUNT
INC R7
MOV A,R7
MOV B,#2
DIV AB
MOV A,B
JNZ WORK ;按了奇数次,工作
JMP UNWORK ;按了偶数次,不工作
;RET
UNWORK: ;系统不工作.
MOV P0,#03H
LJMP AA
WORK: LCALL GET_TEMP
;LCALL TEMP_COV
LCALL DATA_TRAN
JNZ WORK
LCALL SD_COM
;JNB P1.3,COUNT
;JMP AA
MOV A,#01H
SJMP $
GET_TEMP: ;读出转换后的温度数据
SETB P2.0
M01:
LCALL INIT_1820
JB P2.1,S01
LJMP M01
S01:
LCALL DELAY0
MOV A,#0CCH ;跳过rom匹配
LCALL WRITE_1820
;MOV A,#4EH ;发写暂存存储器命令
;LCALL WRITE_1820
;MOV A,#1FH ;选择9位温度分辨率
;LCALL WRITE_1820
MOV A,#44H ;发出温度转换命令
LCALL WRITE_1820
LCALL DELAY1 ;750us delay
M02:
LCALL INIT_1820
JB P2.1,S02
JMP M02
S02:
LCALL DELAY0 ;delay60us
MOV A,#0CCH ;跳过rom匹配
LCALL WRITE_1820
MOV A,#0BEH ;发出读温度命令
LCALL WRITE_1820
LCALL READ_1820
RET
;SJMP $
;INIT:
; MOV 60H,#80H
;MOV R5,#4
;LJMP SD_COM
DATA_TRAN: ;-------将接收自1820的数据转化为数码管显示
MOV A,40H ;的温度数据,并分别送给377.
JB ACC.7,SIGN
SJMP UNSIGN
SIGN: ;接收到的温度数据为负值.
MOV 30H,#2DH
MOV A,41H
ANL A,#0F0H
SWAP A
MOV 41H,A
MOV A,40H
ANL A,#0FH
SWAP A
ORL A,41H
CPL A
MOV B,#10
DIV AB
ADD A,#30H
MOV 31H,A
MOV A,B
ADD A,#30H
MOV 32H,A
MOV 33H,#20H
JMP DATATR
UNSIGN: ;接收到的温度数据为正值.
MOV A,41H
ANL A,#0F0H
SWAP A
MOV 41H,A
MOV A,40H
ANL A,#07H
SWAP A
ORL A,41H
MOV B,#100
DIV AB
ADD A,#30H
MOV 30H,A
MOV A,B
MOV B,#10
DIV AB
ADD A,#30H
MOV 31H,A
MOV A,B
ADD A,#30H
MOV 32H,A
MOV 33H,#20H
JMP DATATR
DATATR: MOV R0,50H
;MOV R1,#32
;MOV R0,#80H
TRAND: MOV @R0,30H
INC R0
MOV @R0,31H
INC R0
MOV @R0,32H
INC R0
MOV @R0,33H
INC R0
MOV 50H,R0
DEC R5
MOV A,R5
;JZ JU
;JNB P1.3,JU1
;LCALL WORK
;JU1:LCALL COUNT
;DJNZ R1,TRAND
RET
SD_COM:
LCALL INIT_SD ;initial SD card
LCALL SCD
TEST:
LCALL WR_CMD241
LCALL DELAY
LCALL WR_FAT
LCALL DELAY
LCALL WR_CMD242
LCALL DELAY
LCALL WR_FAT
LCALL DELAY
LCALL WR_CMD24
LCALL DELAY
LCALL WR_ROOT
LCALL DELAY
LCALL WR_CMD243
LCALL WR_DATA1
;LJMP TEST
; SJMP $
RET
INIT_SD:
INIT:SETB DI
CLR CS
LCALL SCD
SETB SCK
CLR CS
SETB DI
SETB DO
MOV A,#40H ;send CMD0
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
LCALL WR_SD
LCALL WR_SD
LCALL WR_SD
MOV A,#95H
LCALL WR_SD
LCALL DELAY
LCALL RE_SD
;MOV R7,A
DEC A
JNZ INIT
SEN1:
CLR CS
SETB DI
SETB DO
MOV A,#41H ;send CMD1
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
LCALL WR_SD
LCALL WR_SD
LCALL WR_SD
MOV A,#55H
LCALL WR_SD
LCALL DELAY
LCALL RE_SD
;MOV R6,A
JNZ SEN1
RET
SCD: ;74时钟
MOV R0,#74
SCK1:SETB SCK
MOV R3,#2
DC0:DJNZ R3,DC0
CLR SCK
NOP
NOP
NOP
DJNZ R0,SCK1
RET
DELAY:
MOV R0,#9
SCK2:SETB SCK
NOP
NOP
CLR SCK
NOP
DJNZ R0,SCK2
RET
WR_SD: ;write SD card
CLR C
MOV R2,#8
WR:CLR SCK
NOP
RLC A
MOV DI,C ;1.2us
SETB SCK
DJNZ R2,WR
RET
RE_SD: ;read SD card
MOV R2,#8
RE1:CLR SCK
NOP
NOP
MOV C,DO
RLC A
SETB SCK
DJNZ R2,RE1
RET
SCMD16:
MOV A,#50H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
LCALL WR_SD
LCALL WR_SD
MOV A,#02H
LCALL WR_SD
MOV A,#01H
LCALL WR_SD
LCALL DELAY
LCALL RE_SD
;MOV R5,A
RET
WR_CMD24:
MOV A,#58H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#03H
LCALL WR_SD
MOV A,#0D2H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#01H
LCALL WR_SD
LCALL DELAY
LCALL RE_SD
RET
WR_CMD241:
MOV A,#58H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#02H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#01H
LCALL WR_SD
LCALL DELAY
LCALL RE_SD
RET
WR_CMD242:
MOV A,#58H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#01H
LCALL WR_SD
MOV A,#0EAH
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#01H
LCALL WR_SD
LCALL DELAY
LCALL RE_SD
RET
WR_CMD243:
MOV A,#58H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#04H
LCALL WR_SD
MOV A,#12H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#01H
LCALL WR_SD
LCALL DELAY
LCALL RE_SD
RET
WR_ROOT:
MOV A,#0FEH
LCALL WR_SD
MOV A,#0E5H
LCALL WR_SD
MOV A,#0B0H
LCALL WR_SD
MOV A,#65H
LCALL WR_SD
MOV A,#0FAH
LCALL WR_SD
MOV A,#5EH
LCALL WR_SD
MOV A,#20H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#87H
LCALL WR_SD
MOV A,#65H
LCALL WR_SD
MOV A,#2CH
LCALL WR_SD
MOV A,#67H
LCALL WR_SD
MOV A,#0FH
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#0D2H
LCALL WR_SD
MOV A,#87H
LCALL WR_SD
MOV A,#65H
LCALL WR_SD
MOV A,#63H
LCALL WR_SD
MOV A,#68H
LCALL WR_SD
MOV A,#2EH
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#74H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#78H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#74H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#0FFH
LCALL WR_SD
MOV A,#0FFH
LCALL WR_SD
MOV A,#0E5H
LCALL WR_SD
MOV A,#0C2H
LCALL WR_SD
MOV A,#0BDH
LCALL WR_SD
MOV A,#0A8H
LCALL WR_SD
MOV A,#0CEH
LCALL WR_SD
MOV A,#0C4H
LCALL WR_SD
MOV A,#7EH
LCALL WR_SD
MOV A,#31H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#58H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#20H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#0B4H
LCALL WR_SD
MOV A,#0A5H
LCALL WR_SD
MOV A,#85H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#35H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#35H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#0A6H
LCALL WR_SD
MOV A,#85H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#35H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#53H
LCALL WR_SD
MOV A,#44H
LCALL WR_SD
MOV A,#5FH
LCALL WR_SD
MOV A,#44H
LCALL WR_SD
MOV A,#41H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#41H
LCALL WR_SD
MOV A,#20H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#58H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#20H
LCALL WR_SD
MOV A,#10H
LCALL WR_SD
MOV A,#0B4H
LCALL WR_SD
MOV A,#0A5H
LCALL WR_SD
MOV A,#85H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#35H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#35H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#0DBH
LCALL WR_SD
MOV A,#85H
LCALL WR_SD
MOV A,#54H
LCALL WR_SD
MOV A,#35H
LCALL WR_SD
MOV A,#02H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#02H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
MOV R4,#02
WR_00: MOV R3,#208
WR_01: LCALL WR_SD
DJNZ R3,WR_01
DJNZ R4,WR_00
MOV A,#55H
LCALL WR_SD
MOV A,#55H
LCALL WR_SD
;LCALL DELAY
LCALL RE_SD
;MOV R7,A
CHEC: LCALL DELAY
JNB DO,CHEC
RET
WR_FAT:
MOV A,#0FEH
LCALL WR_SD
MOV A,#0F8H
LCALL WR_SD
MOV A,#0FFH
LCALL WR_SD
MOV A,#0FFH
LCALL WR_SD
MOV A,#0FFH
LCALL WR_SD
MOV A,#0FFH
LCALL WR_SD
MOV A,#0FFH
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
LCALL WR_SD
MOV A,#00H
MOV R4,#2
WRF10:MOV R3,#251
WRF11:LCALL WR_SD
DJNZ R3,WRF11
DJNZ R4,WRF10
MOV A,#55H
LCALL WR_SD
MOV A,#55H
LCALL WR_SD
;LCALL DELAY
LCALL RE_SD
;MOV R7,A
CHEC1:LCALL DELAY
JNB DO,CHEC1
RET
WR_DATA1:
MOV A,#0FEH
LCALL WR_SD
MOV R1,#80H
WRDA: MOV A,@R1
LCALL WR_SD
INC R1
MOV A,R1
JNZ WRDA ;128B
WOR1: LCALL GET_TEMP
LCALL DATA_TRAN
JNZ WOR1
;LJMP WORK
MOV R1,#80H
WRDA1: MOV A,@R1
LCALL WR_SD
INC R1
MOV A,R1
JNZ WRDA1 ;2ND 128B
WOR2: LCALL GET_TEMP
LCALL DATA_TRAN
JNZ WOR2
;LJMP WORK
MOV R1,#80H
WRDA2: MOV A,@R1
LCALL WR_SD
INC R1
MOV A,R1
JNZ WRDA2 ;3RD 128B
WOR3: LCALL GET_TEMP
LCALL DATA_TRAN
JNZ WOR3
;LJMP WORK
MOV R1,#80H
WRDA3: MOV A,@R1
LCALL WR_SD
INC R1
MOV A,R1
JNZ WRDA3 ;4TH 128B
MOV A,#55H
LCALL WR_SD
MOV A,#55H
LCALL WR_SD ;CRC
;LCALL DELAY
LCALL RE_SD
;MOV R7,A
CHEC01: LCALL DELAY
JNB DO,CHEC01
RET
INIT_1820: ;----------初始化1820.
SETB P2.0
NOP
NOP
CLR P2.0
MOV R0,#2
MM: MOV R2,#250
TSR1:DJNZ R2,TSR1
DJNZ R0,MM ;延时600us
SETB P2.0
MOV R0,#100
TSR2:JNB P2.0,TSR3
DJNZ R0,TSR2
;JNB P2.0,TSR3
LJMP TSR4
TSR3:
SETB P2.1
LJMP TSR5
TSR4:
CLR P2.1
LJMP TSR7
TSR5:
MOV R0,#2
NN:MOV R2,#250
TSR6:DJNZ R2,TSR6
DJNZ R0,NN ;600us delay
TSR7:SETB P2.0
;SJMP $
RET
WRITE_1820: ;----------写1820,往1820中写入一个字节的数据.
MOV R2,#8
CLR C
WR1:
CLR P2.0
NOP
NOP
NOP
RRC A
MOV P2.0,C
MOV R3,#50
WD: DJNZ R3,WD ;60us delay
SETB P2.0
NOP
NOP
DJNZ R2,WR1
SETB P2.0
RET
READ_1820: ;---------读1820,从1820中读出两个字节的温度数据.
MOV R4,#2 ;高位存入40h,低位存入41h
MOV R1,#41H
RE00:
MOV R2,#8
RE01:
CLR C
SETB P2.0
NOP
NOP
CLR P2.0
NOP
NOP
SETB P2.0
MOV R3,#5
RA: DJNZ R3,RA ;6us delay
MOV C,P2.0
RRC A
MOV R3,#45
RB: DJNZ R3,RB ;54us delay
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
DELAY0: ;60us延时
MOV R2,#50
DJNZ R2,$
RET
DELAY1:
MOV R2,#5
DE01:MOV R1,#78
DE02:DJNZ R1,DE02
DJNZ R2,DE01 ;750us delay
RET
DELAY01:
MOV R0,#250
EE:DJNZ R0,EE
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -