?? tcmain.src
字號:
; .\TCMain.SRC generated from: TCMain.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE TCMain.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND TABS(2) SRC(.\TCMain.SRC)
$NOMOD51
NAME TCMAIN
P1 DATA 090H
P3 DATA 0B0H
AC BIT 0D0H.6
T0 BIT 0B0H.4
T1 BIT 0B0H.5
EA BIT 0A8H.7
AIN0 BIT 090H.0
AIN1 BIT 090H.1
IE DATA 0A8H
P1_0 BIT 090H.0
FL BIT 0D0H.1
P1_1 BIT 090H.1
P3_0 BIT 0B0H.0
P1_2 BIT 090H.2
P3_1 BIT 0B0H.1
P1_3 BIT 090H.3
P3_2 BIT 0B0H.2
P1_4 BIT 090H.4
P3_3 BIT 0B0H.3
P1_5 BIT 090H.5
P3_4 BIT 0B0H.4
P1_6 BIT 090H.6
P3_5 BIT 0B0H.5
ES BIT 0A8H.4
P1_7 BIT 090H.7
IP DATA 0B8H
P3_7 BIT 0B0H.7
RI BIT 098H.0
CY BIT 0D0H.7
INT0 BIT 0B0H.2
INT1 BIT 0B0H.3
TI BIT 098H.1
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
AOUT BIT 0B0H.6
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
ET2 BIT 0A8H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
EX1 BIT 0A8H.2
TB8 BIT 098H.3
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
RS0 BIT 0D0H.3
PT1 BIT 0B8H.3
RS1 BIT 0D0H.4
TR0 BIT 088H.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?TCMAIN SEGMENT CODE INBLOCK
?PR?KeyAndDis_Time0?TCMAIN SEGMENT CODE INBLOCK
?PR?V2ToV?TCMAIN SEGMENT CODE INBLOCK
?PR?InitDS1820?TCMAIN SEGMENT CODE INBLOCK
?PR?ROMDS1820?TCMAIN SEGMENT CODE INBLOCK
?PR?TMVDS1820?TCMAIN SEGMENT CODE INBLOCK
?PR?TMRDS1820?TCMAIN SEGMENT CODE INBLOCK
?PR?TMWDS1820?TCMAIN SEGMENT CODE INBLOCK
?PR?TMREDS1820?TCMAIN SEGMENT CODE INBLOCK
?PR?TMERDS1820?TCMAIN SEGMENT CODE INBLOCK
?PR?WriteDS1820?TCMAIN SEGMENT CODE INBLOCK
?PR?ReadDS1820?TCMAIN SEGMENT CODE INBLOCK
?PR?Delay_510?TCMAIN SEGMENT CODE INBLOCK
?PR?Delay_110?TCMAIN SEGMENT CODE INBLOCK
?PR?Delay_10ms?TCMAIN SEGMENT CODE INBLOCK
?PR?Delay_4s?TCMAIN SEGMENT CODE INBLOCK
?CO?TCMAIN SEGMENT CODE
?DT?TCMAIN SEGMENT DATA
?BA?TCMAIN SEGMENT DATA BITADDRESSABLE
EXTRN CODE (?C_STARTUP)
EXTRN CODE (?C?SCDIV)
PUBLIC PowTF
PUBLIC SetTF
PUBLIC KeyTF
PUBLIC KeySETDown
PUBLIC DS1820ON
PUBLIC LEDDis
PUBLIC Delay_4s
PUBLIC Delay_10ms
PUBLIC Delay_110
PUBLIC Delay_510
PUBLIC ReadDS1820
PUBLIC WriteDS1820
PUBLIC TMERDS1820
PUBLIC TMREDS1820
PUBLIC TMWDS1820
PUBLIC TMRDS1820
PUBLIC TMVDS1820
PUBLIC ROMDS1820
PUBLIC InitDS1820
PUBLIC V2ToV
PUBLIC KeyAndDis_Time0
PUBLIC main
DSEG AT 026H
TMSetV: DS 1
DSEG AT 027H
TMRomV: DS 1
DSEG AT 028H
THV: DS 1
DSEG AT 029H
TLV: DS 1
RSEG ?DT?TCMAIN
KeyV: DS 1
IntNum2: DS 1
IntNum3: DS 1
Sign: DS 1
KSDNum: DS 1
TempKeyV: DS 1
LED_Three: DS 1
LED_One: DS 1
IntNum: DS 1
LED_Two: DS 1
TMV: DS 1
RSEG ?BA?TCMAIN
StateREG: DS 1
DS1820ON EQU (StateREG+0).0
KeySETDown EQU (StateREG+0).2
KeyTF EQU (StateREG+0).4
SetTF EQU (StateREG+0).1
PowTF EQU (StateREG+0).3
RSEG ?CO?TCMAIN
LEDDis:
DB 0C0H
DB 0F9H
DB 0A4H
DB 0B0H
DB 099H
DB 092H
DB 082H
DB 0F8H
DB 080H
DB 090H
DB 0FFH
DB 0BFH
; /*-------------------------------
;
; 溫度控制器V1.51
; 顯示為三個共陽極LED
; 溫度傳感器用單總線DS18B20
; CPU為2051,三個按鍵,分別為UP,DOWN,SET
; 溫度調(diào)節(jié)上限為125度,下限為-55度
; 只能用于單只18B20
;
; 本軟件僅供學(xué)習(xí)與參考,引用時請注明版權(quán)
;
; http://www.cdle.net
; 明浩 2004/9/13
; pnzwzw@cdle.net
; -------------------------------*/
;
; #include <AT89X051.H>
; #include <intrins.h>
; #define Key_UP P3_0 //上調(diào)溫度
; #define Key_DOWN P3_1 //下調(diào)溫度
; #define Key_SET P1_7 //設(shè)定鍵(溫度設(shè)定,長按開電源)
; #define RelayOutPort P3_5 //繼電器輸出
; #define LEDPort P1 //LED控制口
; #define LEDOneC P3_2 //LED DS1控制(百位)
; #define LEDTwoC P3_3 //LED DS2控制(十位)
; #define LEDThreeC P3_4 //LED DS3控制(個位)
; #define TMPort P3_7 //DS1820 DataPort
;
; unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}; //0-9的LED筆劃,0xFF為空,0xF7為負(fù)號
;
; static unsigned char bdata StateREG; //可位尋址的狀態(tài)寄存器
; sbit DS1820ON = StateREG^0; //DS1820是否存在
; sbit SetTF = StateREG^1; //是否是在溫度設(shè)置狀態(tài)
; sbit KeySETDown = StateREG^2; //是否已按過SET鍵標(biāo)識
; sbit PowTF = StateREG^3; //電源電源標(biāo)識
; sbit KeyTF = StateREG^4; //鍵盤是否允許
;
; //sbit KeySETDowning = StateREG^5; //SET是否正在按下
; static unsigned char bdata TLV _at_ 0x0029; //溫度變量高低位
; static unsigned char bdata THV _at_ 0x0028;
; static signed char TMV; //轉(zhuǎn)換后的溫度值
; static unsigned char KeyV,TempKeyV; //鍵值
; static signed char TMRomV _at_ 0x0027; //高溫限制
; static signed char TMSetV _at_ 0x0026; //溫度設(shè)定值
; static unsigned char KSDNum; //SET鍵連按時的采集次數(shù)
; static unsigned char IntNum,IntNum2,IntNum3; //中斷發(fā)生次數(shù),IntNum用于SET長按檢測,IntNum2用于設(shè)定狀態(tài)時LED閃爍
; static signed char LED_One,LED_Two,LED_Three; //LED的顯示位 LED_One為十位,LED_Two為個位
; static unsigned char Sign; //負(fù)號標(biāo)識
;
; void main(void)
RSEG ?PR?main?TCMAIN
main:
USING 0
; SOURCE LINE # 50
; {
; SOURCE LINE # 51
; void InitDS1820(void); //定義函數(shù)
; void ROMDS1820(void);
; void TMVDS1820(void);
; void TMRDS1820(void);
; void TMWDS1820(void);
; void TMREDS1820(void);
; void TMERDS1820(void);
; void ReadDS1820(void);
; void WriteDS1820(void);
; void Delay_510(void);
; void Delay_110(void);
; void Delay_10ms(void);
; void Delay_4s(void);
; void V2ToV(void);
;
; StateREG = 0; //初始化變量
; SOURCE LINE # 67
CLR A
MOV StateREG,A
; SetTF = 1;
; SOURCE LINE # 68
SETB SetTF
; PowTF = 1; //關(guān)電源
; SOURCE LINE # 69
SETB PowTF
; THV = 0;
; SOURCE LINE # 70
MOV THV,A
; TLV = 0;
; SOURCE LINE # 71
MOV TLV,A
; TMV = 0;
; SOURCE LINE # 72
MOV TMV,A
; KeyV = 0;
; SOURCE LINE # 73
MOV KeyV,A
; TempKeyV = 0;
; SOURCE LINE # 74
MOV TempKeyV,A
; KSDNum = 0;
; SOURCE LINE # 75
MOV KSDNum,A
; IntNum = 0;
; SOURCE LINE # 76
MOV IntNum,A
; IntNum2 = 0;
; SOURCE LINE # 77
MOV IntNum2,A
; IntNum3 = 0;
; SOURCE LINE # 78
MOV IntNum3,A
; LED_One = 0;
; SOURCE LINE # 79
MOV LED_One,A
; LED_Two = 0;
; SOURCE LINE # 80
MOV LED_Two,A
;
; InitDS1820(); //初始化
; SOURCE LINE # 82
ACALL InitDS1820
; ROMDS1820(); //跳過ROM
; SOURCE LINE # 83
ACALL ROMDS1820
; TMERDS1820(); //E2PRAM中溫度上限值調(diào)入RAM
; SOURCE LINE # 84
ACALL TMERDS1820
; InitDS1820(); //初始化
; SOURCE LINE # 85
ACALL InitDS1820
; ROMDS1820(); //跳過ROM
; SOURCE LINE # 86
ACALL ROMDS1820
; TMRDS1820(); //讀出溫度指令
; SOURCE LINE # 87
ACALL TMRDS1820
; ReadDS1820(); //讀出溫度值和上限值
; SOURCE LINE # 88
ACALL ReadDS1820
; TMSetV = TMRomV; //拷貝保存在DS18B20ROM里的上限值到TMSetV
; SOURCE LINE # 89
MOV TMSetV,TMRomV
;
; EA = 1; //允許CPU中斷
; SOURCE LINE # 91
SETB EA
; ET0 = 1; //定時器0中斷打開
; SOURCE LINE # 92
SETB ET0
; TMOD = 0x1; //設(shè)定時器0為模式1,16位模式
; SOURCE LINE # 93
MOV TMOD,#01H
; TH0=0xB1;
; SOURCE LINE # 94
MOV TH0,#0B1H
; TL0=0xDF; //設(shè)定時值為20000us(20ms)
; SOURCE LINE # 95
MOV TL0,#0DFH
; TR0 = 1; //開始定時
; SOURCE LINE # 96
SETB TR0
?C0001:
; while(1);
; SOURCE LINE # 97
SJMP ?C0001
; END OF main
CSEG AT 0000BH
AJMP KeyAndDis_Time0
; }
;
; //定時器0中斷外理中鍵掃描和顯示
; void KeyAndDis_Time0(void) interrupt 1 using 2
RSEG ?PR?KeyAndDis_Time0?TCMAIN
USING 2
KeyAndDis_Time0:
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
USING 2
MOV PSW,#010H
; SOURCE LINE # 101
; {
; TH0=0xB1;
; SOURCE LINE # 103
MOV TH0,#0B1H
; TL0=0xDF; //設(shè)定時值為20000us(20ms)
; SOURCE LINE # 104
MOV TL0,#0DFH
;
; LEDPort = 0xFF;
; SOURCE LINE # 106
MOV P1,#0FFH
; if (!Key_UP)
; SOURCE LINE # 107
JB P3_0,?C0004
; KeyV = 1;
; SOURCE LINE # 108
MOV KeyV,#01H
?C0004:
; if (!Key_DOWN)
; SOURCE LINE # 109
JB P3_1,?C0005
; KeyV = 2;
; SOURCE LINE # 110
MOV KeyV,#02H
?C0005:
; if (!Key_SET)
; SOURCE LINE # 111
JB P1_7,?C0006
; KeyV = 3;
; SOURCE LINE # 112
MOV KeyV,#03H
?C0006:
; //KeySETDowning = 0; //清除
; if (KeyV != 0) //有鍵按下
; SOURCE LINE # 114
MOV A,KeyV
JNZ $ + 4H
AJMP ?C0007
; {
; SOURCE LINE # 115
; Delay_10ms(); //延時防抖 按下10ms再測
; SOURCE LINE # 116
ACALL Delay_10ms
; if (!Key_UP)
; SOURCE LINE # 117
JB P3_0,?C0008
; TempKeyV = 1;
; SOURCE LINE # 118
MOV TempKeyV,#01H
?C0008:
; if (!Key_DOWN)
; SOURCE LINE # 119
JB P3_1,?C0009
; TempKeyV = 2;
; SOURCE LINE # 120
MOV TempKeyV,#02H
?C0009:
; if (!Key_SET)
; SOURCE LINE # 121
JB P1_7,?C0010
; TempKeyV = 3;
; SOURCE LINE # 122
MOV TempKeyV,#03H
?C0010:
; if (KeyV == TempKeyV) //兩次值相等為確定接下了鍵
; SOURCE LINE # 123
MOV A,KeyV
XRL A,TempKeyV
JNZ ?C0011
; {
; SOURCE LINE # 124
; if (KeyV == 3) //按下SET鍵,如在SET狀態(tài)就退出,否則進入
; SOURCE LINE # 125
MOV A,KeyV
XRL A,#03H
JNZ ?C0012
; {
; SOURCE LINE # 126
; //KeySETDowning = 1; //表明SET正在按下
; PowTF = 0; //電源標(biāo)識開
; SOURCE LINE # 128
CLR PowTF
; if (!KeyTF)
; SOURCE LINE # 129
JB KeyTF,?C0013
; if (SetTF)
; SOURCE LINE # 130
JNB SetTF,?C0014
; {
; SOURCE LINE # 131
; SetTF = 0; //標(biāo)識位標(biāo)識退出設(shè)定
; SOURCE LINE # 132
CLR SetTF
; InitDS1820(); //初始化
; SOURCE LINE # 133
ACALL InitDS1820
; ROMDS1820(); //跳過ROM
; SOURCE LINE # 134
ACALL ROMDS1820
; TMWDS1820(); //寫溫度上限指令
; SOURCE LINE # 135
ACALL TMWDS1820
; WriteDS1820(); //寫溫度上限到DS18B20ROM
; SOURCE LINE # 136
ACALL WriteDS1820
; WriteDS1820(); //寫溫度上限到DS18B20ROM
; SOURCE LINE # 137
ACALL WriteDS1820
; WriteDS1820(); //寫溫度上限到DS18B20ROM
; SOURCE LINE # 138
ACALL WriteDS1820
; InitDS1820(); //初始化
; SOURCE LINE # 139
ACALL InitDS1820
; ROMDS1820(); //跳過ROM
; SOURCE LINE # 140
ACALL ROMDS1820
; TMREDS1820(); //溫度上限值COPY回E2PRAM
; SOURCE LINE # 141
ACALL TMREDS1820
; }
; SOURCE LINE # 142
SJMP ?C0013
?C0014:
; else
; SetTF = 1;
; SOURCE LINE # 144
SETB SetTF
?C0013:
; if (!KeySETDown) //沒有第一次按下SET時,KeySETDown標(biāo)識置1
; SOURCE LINE # 145
JB KeySETDown,?C0016
; KeySETDown = 1;
; SOURCE LINE # 146
SETB KeySETDown
SJMP ?C0012
?C0016:
; else
; KSDNum = KSDNum + 1; //前一秒內(nèi)有按過SET則開始計數(shù)
; SOURCE LINE # 148
INC KSDNum
; }
; SOURCE LINE # 149
?C0012:
; if (SetTF) //在SET狀態(tài)下
; SOURCE LINE # 150
JNB SetTF,?C0018
; {
; SOURCE LINE # 151
; if ((KeyV == 1) && (!KeyTF))
; SOURCE LINE # 152
MOV A,KeyV
CJNE A,#01H,?C0019
JB KeyTF,?C0019
; TMSetV = TMSetV + 1; //上調(diào)溫度
; SOURCE LINE # 153
INC TMSetV
?C0019:
; if ((KeyV == 2) && (!KeyTF))
; SOURCE LINE # 154
MOV A,KeyV
CJNE A,#02H,?C0020
JB KeyTF,?C0020
; TMSetV = TMSetV - 1; //下調(diào)溫度
; SOURCE LINE # 155
DEC TMSetV
?C0020:
; if (TMSetV <= -55) //限制溫度上下限
; SOURCE LINE # 156
SETB C
MOV A,TMSetV
XRL A,#080H
SUBB A,#049H
JNC ?C0021
; TMSetV = -55;
; SOURCE LINE # 157
MOV TMSetV,#0C9H
?C0021:
; if (TMSetV >= 125)
; SOURCE LINE # 158
CLR C
MOV A,TMSetV
XRL A,#080H
SUBB A,#0FDH
JC ?C0018
; TMSetV = 125;
; SOURCE LINE # 159
MOV TMSetV,#07DH
; }
; SOURCE LINE # 160
?C0018:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -