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

📄 ex1.asm

📁 基于DS1302日历时钟的单片机(51)汇编程序, 已调试通过.
💻 ASM
字号:
        ORG  0000H
        MOV SP,#30H
	LOAD EQU P2.0
	CLR LOAD
	MOV R0,#0FH
        MOV R1,#0AH    ;亮度
        ACALL TRT

        MOV R0,#02H
        MOV R1,#0BH    ;扫描位数
        ACALL TRT

        MOV R0,#0FFH
        MOV R1,#09H    ;译码
        ACALL TRT

        MOV R0,#01H
        MOV R1,#0CH
        CALL TRT
        SETB P1.0
        MOV 22H,#00H
	;以下为按键扫描输入初值子程序
KEYSET: MOV 73H,#01H         ;设温度初值为10度
        MOV 74H,#00H
	MOV 75H,#00H
	CALL DISPLAY
KEY1:   CALL KS1             ;调判断有无键按下子程序
        JNZ LK1              ;有键按下(A)<>0转消抖延时
	AJMP KEY1            ;无键按下返回,等键按下
LK1:    CALL DEL10MS         ;延时
        CALL KS1             ;若有键按下则为真实按下
	JNZ KEYI             ;键按下(A)<>0转键扫描
	AJMP KEY1            ;不是键按下返回
KEYI:   JNB ACC.0,KEYR        ;加1键未按下,转查减1键
LK2:    CALL KS1             ;等待键释放
        CALL DEL10MS
        JNZ LK2              ;未释放,等待
	INC 75H              ;末位加1
	MOV A,75H
	CJNE A,#0AH,PPA
	MOV 75H,#00H
	INC 74H
	MOV A,74H
	CJNE A,#0AH,PPA
	MOV 74H,#00H
	INC 73H
PPA:    CALL DISPLAY
        AJMP KEY1            ;转再次扫描
KEYR:   JNB ACC.1,KEYH        ;减1键未按下,转查上限确认键
LK3:    CALL KS1
        CALL DEL10MS
        JNZ LK3
        MOV A,75H
        CJNE A,#00H,PPC
        MOV 75H,#09H
        MOV A,74H
        CJNE A,#00H,PPD
        MOV 74H,#09H
        DEC 73H
        AJMP PPB
PPD:    DEC 74H
        AJMP PPB
PPC:    DEC 75H
PPB:    CALL DISPLAY
        AJMP KEY1            ;再次扫描
KEYH:   JNB ACC.2,KEYL        ;上限键未按下,转查下限确认键
LK4:    CALL KS1
        CALL DEL10MS
        JNZ LK4
	MOV A,73H
	MOV 70H,A            ;保存上限
	MOV A,74H
	MOV 71H,A
	MOV A,75H
	MOV 72H,A
	AJMP KEY1
;KEYL:   JNB ACC.3,KEY1
LK5:    CALL KS1
        CALL DEL10MS
        JNZ LK5
	MOV A,73H
	MOV 6DH,A            ;保存下限
	MOV A,74H
	MOV 6EH,A
	MOV A,75H
	MOV 6FH,A

EX_CON: ;CPL P1.3          ;使用仪器测试时用
        CALL DS18B20       ;转DS18B20采样子程序
	CALL DISPLAY
        ;以下为后向通道控制部分
CONTROL:MOV A,73H
        CJNE A,6DH,NEQA
        MOV A,74H
        CJNE A,6EH,NEQB
        CLR P1.5
        CLR P1.6
        JMP EX_CON            ;样温=下限,返回采样
NEQA:   JNC NEQD              ;CY=0,即(73H)>(6DH)时转比上限
        SETB P1.5
        CLR P1.6
        JMP EX_CON
NEQB:   JNC NEQD
        SETB P1.5
        CLR P1.6
        JMP EX_CON
NEQD:   MOV A,73H
        CJNE A,70H,NEQE
        MOV A,74H
        CJNE A,71H,NEQF
        CLR P1.5
        CLR P1.6
        JMP EX_CON            ;样温=上限,返回采样
NEQE:   JNC NEQH              ;CY=0,即(73H)>(70H)时转打开降温开关
        CLR P1.5
        CLR P1.6
        JMP EX_CON
NEQF:   JNC NEQH
        CLR P1.5
        CLR P1.6
        JMP EX_CON
NEQH:   CLR P1.5
        SETB P1.6
        JMP EX_CON
	

KS1:    MOV P0,#0FFH
        MOV A,P0
        CPL A
        ANL A,#0FH
        RET
DEL10MS:MOV R7,#20
S2:     MOV R6,#250
S1:     DJNZ R6,S1
        DJNZ R7,S2
        RET

        ;以下为显示
DISPLAY:MOV A,73H          ;字码
        MOV R0,A
        MOV R1,#01H        ;位置
        ACALL TRT

        MOV A,74H
        MOV R0, A
        MOV R1,#02H
        ACALL TRT

        MOV A,75H
        MOV R0,A
        MOV R1,#03H
        ACALL TRT
        RET
        ;JMP DIS

DS18B20:LCALL RESET         ;测试温度探头存在否?
        MOV A,#0CCH
        LCALL WRITE
        MOV A,#44H
        LCALL WRITE         ;命令字写入探头内
        MOV R7,#70D         ;延时
        CALL DE11
        LCALL RESET
        MOV A,#0CCH
        LCALL WRITE
        MOV A,#0BEH
        LCALL WRITE
        LCALL READ          ;读取探头内的温度值
        MOV B,A
        MOV 21H,A           ;保存温度值低位
        LCALL READ
        MOV 20H,A           ;保存温度值高位
        LCALL EXCHANG       ;温度值B转D并送入显示缓存
        RET

RESET:
LA:     SETB P1.0          ;复位
        NOP
LB:     CLR  P1.0          ;480US < TS < 960US
        MOV R7,#36D
        CALL DE11
        SETB P1.0          ;60US < T <90US
LC:     MOV R7,#6D
        CALL DE11
        CLR  C
        ORL  C,P1.0
        JC LB
LF:     MOV R7,#18D        ;T > 270
        CALL DE11
        SETB P1.0
        RET

WRITE:
        MOV R3,#8
WR1:    SETB P1.0
        CLR P1.0          ;延时
        MOV R4,#2
WR2:    DJNZ R4,WR2
        RRC A
        MOV P1.0,C        ;写的数据在线上需延时
        MOV R4,#18
WR3:    DJNZ R4,WR3
        NOP
        SETB P1.0
        DJNZ R3,WR1
        SETB P1.0
        RET

READ:
        MOV R3,#8
RD1:    CLR C
        SETB P1.0        ;适当延时
        NOP
        NOP
        CLR P1.0         ;适当延时
        NOP
        NOP
        SETB P1.0        ;延时
        MOV R4,#9
RD2:    DJNZ R4,RD2
        MOV C,P1.0
        RRC A
        MOV R5,#23
RD3:    DJNZ R5,RD3
        DJNZ R3,RD1
        RET

 DELAY: MOV R7,#10
 DL2:   MOV R6,#200
 DL1:   MOV R5,#250
 DL0:   DJNZ R5,DL0
        DJNZ R6,DL1
        DJNZ R7,DL2
        RET

EXCHANG: MOV A,21H
         SWAP A
         ANL A,#0FH
         MOV 24H,A
         MOV A,20H
         ANL A,#07H
         SWAP A
         ADD A,24H
         MOV B,#10D
         DIV AB
         MOV 73H,A
         MOV 74H,B
         MOV A,21H
         ANL A,#0FH
         mov dptr,#SADDR       ;小数部分的转换查表
     	 movc a,@a+dptr
         MOV 75H,A
	 ret
SADDR:   DB 00H,1H,02h		;  bo_ying address in eeprom 0800h-0A08H
	 DB 03H,3H,04h          ;  da_ling address in eeprom 0A10H-0AD3H
	 DB 04H,05H,06h         ;shou_ying address in eeprom 0AE0H-0C25H
	 DB 06H,7H,08h          ;  lu_ying address in eeprom 0C30H-0D75H
	 DB 08H,9H,9h,9H

DELAY15US:         ;12MHZ ,15US
DE11:   NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        DJNZ R7,DE11
        RET

TRT:    CLR P2.0         ;LOAD
        MOV R2,#08H
        MOV A,R1
T_1:    CLR P2.2      ;SETB P2.2         ;CLK
        RLC A
        MOV P2.1,C        ;DATA
        CALL TDELAY
        SETB P2.2      ;CLR P2.2
        DJNZ R2,T_1
        CALL TDELAY
        MOV R2, #08H
        MOV A,R0
TT2:    CLR P2.2       ;SETB P2.2
        RLC A
        MOV P2.1,C
        CALL TDELAY
        SETB P2.2      ;CLR P2.2
        DJNZ R2,TT2
        SETB P2.0      ;CLR P2.0
        RET

TDELAY: MOV R6,#01H
TMS0:   MOV R7,#03H
TMS1:   DJNZ R7,TMS1
        DJNZ R6,TMS0
        RET

⌨️ 快捷键说明

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