《PIC单片机应用开发典型模块》源代码及图片

源代码在线查看: ex3-6.asm

软件大小: 4123 K
上传用户: fufuaihaitun
关键词: PIC 单片机 典型 应用开发
下载地址: 免注册下载 普通下载 VIP

相关代码

				;--------------程序信息-----------------
				;文件名   : 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
				
				;---------------注意事项-----------------
				
							

相关资源