?? tempc.src
字號:
; .\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 + -