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

📄 ex3-6.asm

📁 《PIC单片机应用开发典型模块》源代码及图片
💻 ASM
字号:
;--------------程序信息-----------------
;文件名   : ex3-6.asm
;版本     : 1.0
;作者     :
;修改时间 :

;--------------程序说明------------------
;CHAP 3.6 LED动态显示实例

;-----------常量和变量声明---------------

 
         LED EQU P1;             	宏定义LED显示器
	 Dq BIT P2.0
	 ADDR EQU 30H;          	显示的温度值地址
	 ADDREND EQU 33H;

;--------------预定义--------------------

               ORG 0000H
               LJMP START

;------------中断入口地址分配------------
               ;ORG 0003H
               ;LJMP INT0PRG
               ;ORG 000BH
               ;LJMP INT1PRG
               ;ORG 0013H;
               ;LJMP
               ;ORG 0030H

START:
;--------------初始化子程序--------------
     MOV SP,60H;
;--------------主程序--------------------
MAIN:  	LCALL GETTEMP;    	通过传感器获得温度值
        LCALL DISP;         	动态扫描显示温度值

LJMP MAIN


;----------------子程序------------------

DISP:                         	;动态液晶显示子程序
	MOV R0,ADDR;
	MOV DPTR,#LEDDB;
DISP1:	MOVX A,@DPTR;
        MOV R1,A;
        MOV A,@R0;
	ORL A,R1;;
	MOV LED,A;
	LCALL DELAY1MS;
        INC R0;
	INC DPTR;
	MOV A,R0;
	CJNE A,#ADDREND,DISP1;
	RET;


;---------------------------------
;    DS1820温度采集主程序
;---------------------------------
GETTEMP:
        CLR PSW.4
        SETB PSW.3  		;设置工作寄存器当前所在的区域
        CLR EA     		;使用ds1820一定要禁止任何中断产生
        LCALL INT   		;调用初使化子程序
        MOV A,#0CCH
        LCALL WRITE 		;送入跳过ROM命令
        MOV A, #44H
        LCALL WRITE 	        ;送入温度转换命令
        LCALL INT   		;温度转换完全,再次初使化ds1820
        MOV A,#0CCH
        LCALL WRITE 		;送入跳过ROM命令
        MOV A,#0BEH
        LCALL WRITE 		;送入读温度暂存器命令
        LCALL READ
        MOV R7,A 		;读出温度值低字节存入R7
        LCALL READ
        MOV R6,A ;		读出谩度值高字节存入R6
	;LCALL TEMPCHANGE;
        ;SETB EA
        RET
INT: 				;初始化ds1820子程序
       	CLR EA
L0:	CLR dq 		        ;ds1820总线为低复位电平
        MOV R2,#200
L1:	CLR dq
        DJNZ R2,L1		;总线复位电平保持400us
        SETB dq 		;释放ds1820总线
        MOV R2,#30
L4:	DJNZ R2,L4 	        ;释放ds1820总线保持60us
   	CLR C 		        ;清存在信号
    	ORL C,dq
    	JC L0			 ;存在吗?不存在则重新来
  	MOV R6,#80
L5:	ORL C,dq
        JC L3
        DJNZ R6,L5
        SJMP L0
L3:	MOV R2,#240
L2:	DJNZ R2,L2
        RET
WRITE: 					;向ds1820写操作命令子程序
        CLR EA
        MOV R3,#8		 ;写入ds1820的bit数,一个字节8个bit
WR1:	SETB dq

        MOV R4,#8
        RRC A			 ;把一个字节data(A)分成8个bit环移给 C
        CLR dq			 ;开始写入ds1820总线要处于复位(低)状态
WR2:	DJNZ R4,WR2		 ;ds1820总线复位保持16us
        MOV dq,C			 ;写入一个bit
        MOV R4,#20
WR3:	DJNZ R4,WR3		 ;等待40us
        DJNZ R3,WR1 		;写入下一个bit
        SETB dq 			;重新释放ds1820总线
        RET
READ:
        CLR EA
        MOV R6,#8		 ;连续读8个bit
RE1:		CLR dq 			;读前总线保持为低
        MOV R4,#4
        NOP
        SETB dq 			;开始读总线释放
RE2:		DJNZ R4,RE2 		;持续8us
        MOV C,dq			 ;从ds1820总线读得一个bit
        RRC A 			;把读得的位值环移给 A
        MOV R5,#30
RE3:	DJNZ R5,RE3	;持续60us
        DJNZ R6,RE1		 ;读下一个bit
        SETB dq 		 ;重新释放ds1820总线
        RET


;--------------中断子程序----------------

;---------------延时子程序---------------

DELAY1MS: MOV R5,#02H;
 DELAY10: MOV R6,#00F4H;
 DELAY11: MOV R7,#0FFH;
 DELAY12: DJNZ R7,DELAY12;
        DJNZ R6,DELAY11;
        DJNZ R5,DELAY10;
        RET;

LEDDB: 	DB 10H,20H,40H;   	 高位表示LED的片选端

END

;---------------注意事项-----------------

⌨️ 快捷键说明

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