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

📄 sdprogram.txt

📁 开发环境用伟福仿真软件。 详细功能:由51系列单片机读写数字温度传感器DS1820采集到的温度
💻 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 + -