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

📄 tempc.src

📁 温度传感器程序
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; .\tempc.SRC generated from: tempc.c
; COMPILER INVOKED BY:
;        d:\Keil\C51\BIN\C51.EXE tempc.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND CODE LISTINCLUDE SYMBOLS SRC(.\tempc.SRC)

$NOMOD51

NAME	TEMPC

P0	DATA	080H
P1	DATA	090H
P2	DATA	0A0H
P3	DATA	0B0H
T0	BIT	0B0H.4
AC	BIT	0D0H.6
T1	BIT	0B0H.5
EA	BIT	0A8H.7
IE	DATA	0A8H
P3_0	BIT	0B0H.0
P3_1	BIT	0B0H.1
P3_2	BIT	0B0H.2
P3_3	BIT	0B0H.3
RD	BIT	0B0H.7
P3_4	BIT	0B0H.4
P3_5	BIT	0B0H.5
ES	BIT	0A8H.4
P3_6	BIT	0B0H.6
IP	DATA	0B8H
P3_7	BIT	0B0H.7
RI	BIT	098H.0
INT0	BIT	0B0H.2
CY	BIT	0D0H.7
TI	BIT	098H.1
INT1	BIT	0B0H.3
PS	BIT	0B8H.4
SP	DATA	081H
OV	BIT	0D0H.2
WR	BIT	0B0H.6
SBUF	DATA	099H
PCON	DATA	087H
SCON	DATA	098H
TMOD	DATA	089H
TCON	DATA	088H
IE0	BIT	088H.1
IE1	BIT	088H.3
B	DATA	0F0H
ACC	DATA	0E0H
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
TF1	BIT	088H.7
RB8	BIT	098H.2
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
TB8	BIT	098H.3
EX1	BIT	0A8H.2
IT1	BIT	088H.2
P	BIT	0D0H.0
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
PT0	BIT	0B8H.1
PT1	BIT	0B8H.3
RS0	BIT	0D0H.3
TR0	BIT	088H.4
RS1	BIT	0D0H.4
TR1	BIT	088H.6
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
DPH	DATA	083H
DPL	DATA	082H
REN	BIT	098H.4
RXD	BIT	0B0H.0
TXD	BIT	0B0H.1
F0	BIT	0D0H.5
PSW	DATA	0D0H
?PR?main?TEMPC       SEGMENT CODE INBLOCK 
?PR?KeyAndDis_Time0?TEMPC                SEGMENT CODE INBLOCK 
?PR?V2ToV?TEMPC      SEGMENT CODE INBLOCK 
?PR?InitDS1820?TEMPC SEGMENT CODE INBLOCK 
?PR?Delay_510?TEMPC  SEGMENT CODE INBLOCK 
?PR?Delay_110?TEMPC  SEGMENT CODE INBLOCK 
?PR?Delay_10ms?TEMPC SEGMENT CODE INBLOCK 
?PR?Delay_4s?TEMPC   SEGMENT CODE INBLOCK 
?PR?ROMDS1820?TEMPC  SEGMENT CODE INBLOCK 
?PR?TMVDS1820?TEMPC  SEGMENT CODE INBLOCK 
?PR?TMRDS1820?TEMPC  SEGMENT CODE INBLOCK 
?PR?TMWDS1820?TEMPC  SEGMENT CODE INBLOCK 
?PR?TMREDS1820?TEMPC SEGMENT CODE INBLOCK 
?PR?TMERDS1820?TEMPC SEGMENT CODE INBLOCK 
?PR?WriteDS1820?TEMPC                    SEGMENT CODE INBLOCK 
?PR?ReadDS1820?TEMPC SEGMENT CODE INBLOCK 
?CO?TEMPC            SEGMENT CODE 
?DT?TEMPC            SEGMENT DATA 
?BA?TEMPC            SEGMENT DATA BITADDRESSABLE 
	EXTRN	CODE (?C_STARTUP)
	EXTRN	CODE (?C?SCDIV)
	EXTRN	CODE (?C?SIDIV)
	EXTRN	CODE (?C?IMUL)
	PUBLIC	SetTF
	PUBLIC	DS18B20ON
	PUBLIC	LEDDis
	PUBLIC	ReadDS1820
	PUBLIC	WriteDS1820
	PUBLIC	TMERDS1820
	PUBLIC	TMREDS1820
	PUBLIC	TMWDS1820
	PUBLIC	TMRDS1820
	PUBLIC	TMVDS1820
	PUBLIC	ROMDS1820
	PUBLIC	Delay_4s
	PUBLIC	Delay_10ms
	PUBLIC	Delay_110
	PUBLIC	Delay_510
	PUBLIC	InitDS1820
	PUBLIC	V2ToV
	PUBLIC	KeyAndDis_Time0
	PUBLIC	main

	DSEG  AT  028H
            THV:   DS   1

	DSEG  AT  029H
            TLV:   DS   1

	RSEG  ?DT?TEMPC
           KeyV:   DS   1
           Sign:   DS   1
       TempKeyV:   DS   1
          LED_f:   DS   1
             TM:   DS   1
             wd:   DS   2
            L_1:   DS   1
            L_2:   DS   1
             zd:   DS   2
            L_3:   DS   1
            L_4:   DS   1
            L_5:   DS   1
        sign_jd:   DS   1
          LED_1:   DS   1
          LED_2:   DS   1
          LED_3:   DS   1
          LED_4:   DS   1
            TMV:   DS   1

	RSEG  ?BA?TEMPC
       StateREG:   DS   1
DS18B20ON	EQU	(StateREG+0).0
SetTF	EQU	(StateREG+0).1

	RSEG  ?CO?TEMPC
LEDDis:
	DB	05FH
	DB	006H
	DB	03BH
	DB	02FH
	DB	066H
	DB	06DH
	DB	07DH
	DB	007H
	DB	07FH
	DB	06FH

; #include <reg51.h>
; #include <intrins.h>
; 
; sbit P3_0=P3^0;
; sbit P3_1=P3^1;
; sbit P3_2=P3^2;
; sbit P3_3= P3^3;
; sbit P3_4= P3^4;
; sbit P3_5= P3^5;
; sbit P3_6= P3^6;
; sbit P3_7= P3^7;
; 
; #define LEDPort           P1      //LED控制口
; #define LEDf           P3_0    //LEDf
; #define LED1           P3_1    //LED1
; #define LED2           P3_2    //LED2
; #define LED3           P3_3    //LED3
; #define LED4           P3_4    //LED4
; #define Key_jd            P3_5    //上调温度
; #define TMPort	P3_7		//DS1820 DataPort
; 
; 
; unsigned char code LEDDis[]={0x5f,0x06,0x3b,0x2f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的LED笔划,0xFF为空,0xF7为负号
; 
; static unsigned char bdata StateREG;	//可位寻址的状态寄存器
; sbit DS18B20ON = StateREG^0;	          //DS1820是否存在
; sbit SetTF = StateREG^1;              //是否是在温度设置状态
; 
; static signed char LED_f,LED_1,LED_2,LED_3,LED_4;  //LED的显示位 LED_One为十位,LED_Two为个位
; static signed char L_1,L_2,L_3,L_4,L_5;  //LED的显示位 LED_One为十位,LED_Two为个位
; static unsigned char Sign; //负号标识
; static unsigned char sign_jd; //精度标识
; static unsigned char KeyV,TempKeyV;      //键值
; 
; static unsigned char bdata TLV _at_ 0x0029;         //温度变量高低位
; static unsigned char bdata THV _at_ 0x0028;
; static signed char TMV;       //转换后的温度值
; static signed char TM;       //转换后的温度值
; static signed int wd;       //转换后的温度值
; static signed int zd;       //转换后的温度值
; 
; void Delay_10ms(void);
; void InitDS1820(void);
; void ROMDS1820(void);
; void TMVDS1820(void);
; void Delay_510(void);
; void TMRDS1820(void);
; void ReadDS1820(void);
; void V2ToV(void);
; void Delay_110(void);
; 
; 
; 
; void main(void)

	RSEG  ?PR?main?TEMPC
main:
	USING	0
			; SOURCE LINE # 54
; {
			; SOURCE LINE # 55
;     THV = 0;
			; SOURCE LINE # 56
	CLR  	A
	MOV  	THV,A
; 	TLV = 0;
			; SOURCE LINE # 57
	MOV  	TLV,A
; 	TMV = 0;
			; SOURCE LINE # 58
	MOV  	TMV,A
; 	TM=0;
			; SOURCE LINE # 59
	MOV  	TM,A
; 	KeyV = 0;
			; SOURCE LINE # 60
	MOV  	KeyV,A
; 	TempKeyV = 0;
			; SOURCE LINE # 61
	MOV  	TempKeyV,A
;     zd=50;
			; SOURCE LINE # 62
	MOV  	zd,A
	MOV  	zd+01H,#032H
; 
; 	InitDS1820(); //初始化
			; SOURCE LINE # 64
	ACALL	InitDS1820
; 	ROMDS1820(); 	//跳过ROM
			; SOURCE LINE # 65
	ACALL	ROMDS1820
; 	TMRDS1820(); 	//读出温度指令
			; SOURCE LINE # 66
	ACALL	TMRDS1820
; 	ReadDS1820(); //读出温度值和上限值
			; SOURCE LINE # 67
	ACALL	ReadDS1820
; 
; 	EA = 1;					//允许CPU中断
			; SOURCE LINE # 69
	SETB 	EA
; 	ET0 = 1; 				//定时器0中断打开
			; SOURCE LINE # 70
	SETB 	ET0
; 	TMOD = 0x1;			//设定时器0为模式1,16位模式
			; SOURCE LINE # 71
	MOV  	TMOD,#01H
; 	TH0=0xB1;
			; SOURCE LINE # 72
	MOV  	TH0,#0B1H
; 	TL0=0xDF;				//设定时值为20000us(20ms)
			; SOURCE LINE # 73
	MOV  	TL0,#0DFH
; 	TR0 = 1;				//开始定时
			; SOURCE LINE # 74
	SETB 	TR0
?C0001:
; 	while(1);
			; SOURCE LINE # 75
	SJMP 	?C0001
; END OF main

CSEG	AT	0000BH
	AJMP	KeyAndDis_Time0

; }
; 
; //定时器0中断外理中键扫描和显示
; void KeyAndDis_Time0(void) interrupt 1 using 2

	RSEG  ?PR?KeyAndDis_Time0?TEMPC
	USING	2
KeyAndDis_Time0:
	PUSH 	ACC
	PUSH 	B
	PUSH 	DPH
	PUSH 	DPL
	PUSH 	PSW
	USING	2
	MOV  	PSW,#010H
			; SOURCE LINE # 79
; {
;   TH0=0xb1;
			; SOURCE LINE # 81
	MOV  	TH0,#0B1H
;   TL0=0xDF;				//设定时值为20000us(20ms)
			; SOURCE LINE # 82
	MOV  	TL0,#0DFH
;   Key_jd=1;
			; SOURCE LINE # 83
	SETB 	P3_5
;   LEDPort = 0x00;
			; SOURCE LINE # 84
	MOV  	P1,#00H
;   zd++;
			; SOURCE LINE # 85
	INC  	zd+01H
	MOV  	A,zd+01H
	JNZ  	?C0041
	INC  	zd
?C0041:
;   if (zd>50)
			; SOURCE LINE # 86
	SETB 	C
	SUBB 	A,#032H
	MOV  	A,zd
	XRL  	A,#080H
	SUBB 	A,#080H
	JC   	?C0004
;    {
			; SOURCE LINE # 87
;   if (!Key_jd)
			; SOURCE LINE # 88
	JB   	P3_5,?C0005
;     KeyV = 1;
			; SOURCE LINE # 89
	MOV  	KeyV,#01H
?C0005:
; 
;   if (KeyV != 0)      //有键按下
			; SOURCE LINE # 91
	MOV  	A,KeyV
	JZ   	?C0004
;     {
			; SOURCE LINE # 92
;       Delay_10ms();   //延时防抖  按下10ms再测
			; SOURCE LINE # 93
	ACALL	Delay_10ms
;       if (!Key_jd)
			; SOURCE LINE # 94
	JB   	P3_5,?C0007
;         TempKeyV = 1;
			; SOURCE LINE # 95
	MOV  	TempKeyV,#01H
?C0007:
;       if (KeyV == TempKeyV)   //两次值相等为确定接下了键
			; SOURCE LINE # 96
	MOV  	A,KeyV
	CJNE 	A,TempKeyV,?C0004
;         {
			; SOURCE LINE # 97
;           sign_jd=!sign_jd;
			; SOURCE LINE # 98
	MOV  	A,sign_jd
	JNZ  	?C0009
	MOV  	R7,#01H
	SJMP 	?C0010
?C0009:
	MOV  	R7,#00H
?C0010:
	MOV  	sign_jd,R7
; 		  zd=0;
			; SOURCE LINE # 99
	MOV  	zd,#00H
	MOV  	zd+01H,#00H
;         }
			; SOURCE LINE # 100
;     }
			; SOURCE LINE # 101
;    }
			; SOURCE LINE # 102
?C0004:
;   KeyV = 0;
			; SOURCE LINE # 103
	MOV  	KeyV,#00H
;   TempKeyV = 0;   //清空变量准备下次键扫描
			; SOURCE LINE # 104
	MOV  	TempKeyV,#00H
; 
;   if (DS18B20ON)
			; SOURCE LINE # 106
	JNB  	DS18B20ON,?C0014
;     {
			; SOURCE LINE # 107
;       InitDS1820();	//初始化
			; SOURCE LINE # 108
	ACALL	InitDS1820
;       ROMDS1820(); 	//跳过ROM
			; SOURCE LINE # 109
	ACALL	ROMDS1820
;       TMVDS1820();  //温度转换指令
			; SOURCE LINE # 110
	ACALL	TMVDS1820
; 
;       Delay_510();
			; SOURCE LINE # 112
	ACALL	Delay_510
;       Delay_510();  //延时等待转换完成
			; SOURCE LINE # 113
	ACALL	Delay_510
; 
;       InitDS1820(); //初始化
			; SOURCE LINE # 115
	ACALL	InitDS1820
;       ROMDS1820(); 	//跳过ROM
			; SOURCE LINE # 116
	ACALL	ROMDS1820
;       TMRDS1820(); 	//读出温度指令
			; SOURCE LINE # 117
	ACALL	TMRDS1820
;       ReadDS1820(); //读出温度值
			; SOURCE LINE # 118
	ACALL	ReadDS1820
;       V2ToV(); 
			; SOURCE LINE # 119
	ACALL	V2ToV
;       if (LED_f==1)//转换显示值
			; SOURCE LINE # 120
	MOV  	A,LED_f
	CJNE 	A,#01H,?C0012
;       LEDf=0;
			; SOURCE LINE # 121
	CLR  	P3_0
	SJMP 	?C0013
?C0012:
; 	  else
; 	  LEDf=1;
			; SOURCE LINE # 123
	SETB 	P3_0
?C0013:
; 	  LEDPort = ~LED_1;
			; SOURCE LINE # 124
	MOV  	A,LED_1
	CPL  	A
	MOV  	P1,A
;       LED1 = 0;
			; SOURCE LINE # 125
	CLR  	P3_1
;       Delay_510();
			; SOURCE LINE # 126
	ACALL	Delay_510
;       Delay_510();
			; SOURCE LINE # 127
	ACALL	Delay_510
;       LED1 = 1;    //显示百位数
			; SOURCE LINE # 128
	SETB 	P3_1
;       LEDPort = ~LED_2;
			; SOURCE LINE # 129
	MOV  	A,LED_2
	CPL  	A
	MOV  	P1,A
;       LED2 = 0;
			; SOURCE LINE # 130
	CLR  	P3_2
;       Delay_510();
			; SOURCE LINE # 131
	ACALL	Delay_510
;       Delay_510();
			; SOURCE LINE # 132
	ACALL	Delay_510
;       LED2 = 1;    //显示百位数
			; SOURCE LINE # 133
	SETB 	P3_2
;       LEDPort = ~LED_3;
			; SOURCE LINE # 134
	MOV  	A,LED_3
	CPL  	A
	MOV  	P1,A
;       LED3 = 0;
			; SOURCE LINE # 135
	CLR  	P3_3
;       Delay_510();
			; SOURCE LINE # 136
	ACALL	Delay_510
;       Delay_510();
			; SOURCE LINE # 137
	ACALL	Delay_510
;       LED3 = 1;    //显示百位数
			; SOURCE LINE # 138
	SETB 	P3_3
;       LEDPort = ~LED_4;
			; SOURCE LINE # 139
	MOV  	A,LED_4
	CPL  	A
	MOV  	P1,A
;       LED4 = 0;
			; SOURCE LINE # 140
	CLR  	P3_4
;       Delay_510();
			; SOURCE LINE # 141
	ACALL	Delay_510
;       Delay_510();
			; SOURCE LINE # 142
	ACALL	Delay_510
;       LED4 = 1;    //显示百位数
			; SOURCE LINE # 143
	SETB 	P3_4
; 
;     }
			; SOURCE LINE # 145
; }
			; SOURCE LINE # 146
?C0014:
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	B
	POP  	ACC
	RETI 	
; END OF KeyAndDis_Time0

; 
; 
; 
; 
; 
; void V2ToV(void)	//数值转换

	RSEG  ?PR?V2ToV?TEMPC
V2ToV:
	USING	0
			; SOURCE LINE # 152
; {
			; SOURCE LINE # 153
;   TM=TLV<<4;
			; SOURCE LINE # 154
	MOV  	A,TLV
	SWAP 	A
	ANL  	A,#0F0H
	MOV  	TM,A
;   TLV = TLV >> 4;			
			; SOURCE LINE # 155
	MOV  	A,TLV
	SWAP 	A
	ANL  	A,#0FH
	MOV  	TLV,A
;   THV = THV << 4;			//读出的高低位数值移位
			; SOURCE LINE # 156
	MOV  	A,THV
	SWAP 	A
	ANL  	A,#0F0H
	MOV  	THV,A
;   TMV = TLV | THV;		//合并高低位放入TM为实际温度值
			; SOURCE LINE # 157
	ORL  	A,TLV
	MOV  	TMV,A
;   Sign = 0;
			; SOURCE LINE # 158
	CLR  	A
	MOV  	Sign,A
;   Sign = TMV >> 7;
			; SOURCE LINE # 159
	MOV  	A,TMV
	MOV  	R0,#07H
?C0042:
	MOV  	C,ACC.7
	RRC  	A
	DJNZ 	R0,?C0042
	MOV  	Sign,A
;   if (Sign)
			; SOURCE LINE # 160
	JZ   	?C0015
; 		{
			; SOURCE LINE # 161
;     		L_1= (~(TMV-1)) / 100;							//转换百位值		
			; SOURCE LINE # 162
	MOV  	A,TMV
	DEC  	A
	CPL  	A
	MOV  	R7,A
	MOV  	B,#064H
	ACALL	?C?SCDIV
	MOV  	L_1,A
; 			L_2= ((~(TMV-1)) - L_1 * 100)/10;
			; SOURCE LINE # 163
	MOV  	B,#064H
	MUL  	AB
	MOV  	R6,A
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R6
; 			L_3 = (~(TMV-1)) - L_1 * 100 - L_2 * 10;
			; SOURCE LINE # 164
; 		}
			; SOURCE LINE # 165
	SJMP 	?C0043
?C0015:
; 	else
; 		{ 
			; SOURCE LINE # 167
;     		L_1= (TMV) / 100;							//转换百位值		
			; SOURCE LINE # 168
	MOV  	A,TMV
	MOV  	B,#064H
	ACALL	?C?SCDIV
	MOV  	L_1,A
; 			L_2= (TMV - L_1 * 100)/10;
			; SOURCE LINE # 169
	MOV  	B,#064H
	MUL  	AB
	MOV  	R7,A
	CLR  	C
	MOV  	A,TMV
	SUBB 	A,R7
?C0043:
	MOV  	R7,A
	MOV  	B,#0AH
	ACALL	?C?SCDIV
	MOV  	L_2,A
; 			L_3 = TMV - L_1 * 100 - L_2 * 10;
			; SOURCE LINE # 170
	MOV  	B,#0AH
	MUL  	AB
	MOV  	R6,A
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R6
	MOV  	L_3,A
; 		}
			; SOURCE LINE # 171
?C0016:
;   if (Sign)
			; SOURCE LINE # 172
	MOV  	A,Sign
	JZ   	?C0017
; 		{
			; SOURCE LINE # 173
;     		TM=~(TM-1);
			; SOURCE LINE # 174
	MOV  	A,TM
	DEC  	A
	CPL  	A
	MOV  	TM,A
; 			LED_f=1;
			; SOURCE LINE # 175
	MOV  	LED_f,#01H
; 		}
			; SOURCE LINE # 176
	SJMP 	?C0018
?C0017:
; 	  else
; 	   {
			; SOURCE LINE # 178
; 
; 	   LED_f=0;
			; SOURCE LINE # 180
	CLR  	A
	MOV  	LED_f,A
; 	    }
			; SOURCE LINE # 181
?C0018:
;   wd=0;	 
			; SOURCE LINE # 182
	CLR  	A
	MOV  	wd,A
	MOV  	wd+01H,A
;   if (TM & 0x80){wd=wd+5000;}
			; SOURCE LINE # 183
	MOV  	A,TM
	JNB  	ACC.7,?C0019
	MOV  	A,#088H
	ADD  	A,wd+01H
	MOV  	wd+01H,A
	MOV  	A,#013H
	ADDC 	A,wd
	MOV  	wd,A
?C0019:
;   if (TM & 0x40){wd=wd+2500;}
			; SOURCE LINE # 184
	MOV  	A,TM
	JNB  	ACC.6,?C0020
	MOV  	A,#0C4H
	ADD  	A,wd+01H
	MOV  	wd+01H,A
	MOV  	A,#09H
	ADDC 	A,wd
	MOV  	wd,A
?C0020:
;   if (TM & 0x20){wd=wd+1250;}
			; SOURCE LINE # 185
	MOV  	A,TM
	JNB  	ACC.5,?C0021
	MOV  	A,#0E2H
	ADD  	A,wd+01H
	MOV  	wd+01H,A
	MOV  	A,#04H
	ADDC 	A,wd
	MOV  	wd,A
?C0021:
;   if (TM & 0x10){wd=wd+625;}
			; SOURCE LINE # 186
	MOV  	A,TM
	JNB  	ACC.4,?C0022
	MOV  	A,#071H
	ADD  	A,wd+01H
	MOV  	wd+01H,A
	MOV  	A,#02H
	ADDC 	A,wd
	MOV  	wd,A
?C0022:
;   L_4=wd/1000;
			; SOURCE LINE # 187
	MOV  	R6,wd
	MOV  	R7,wd+01H
	MOV  	R4,#03H
	MOV  	R5,#0E8H
	ACALL	?C?SIDIV

⌨️ 快捷键说明

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