📄 tcmain.src
字号:
; .\TCMain.SRC generated from: TCMain.c
; COMPILER INVOKED BY:
; D:\Program Files\Keil51\C51\BIN\C51.EXE TCMain.c BROWSE DEBUG OBJECTEXTEND SRC(.\TCMain.SRC)
$NOMOD51
NAME TCMAIN
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
AC BIT 0D0H.6
T0 BIT 0B0H.4
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
P0_0 BIT 080H.0
P1_0 BIT 090H.0
P0_1 BIT 080H.1
FL BIT 0D0H.1
P2_0 BIT 0A0H.0
P1_1 BIT 090H.1
P0_2 BIT 080H.2
P3_0 BIT 0B0H.0
P2_1 BIT 0A0H.1
P1_2 BIT 090H.2
P0_3 BIT 080H.3
P3_1 BIT 0B0H.1
P2_2 BIT 0A0H.2
P1_3 BIT 090H.3
P0_4 BIT 080H.4
P3_2 BIT 0B0H.2
P2_3 BIT 0A0H.3
P1_4 BIT 090H.4
P0_5 BIT 080H.5
RD BIT 0B0H.7
P3_3 BIT 0B0H.3
P2_4 BIT 0A0H.4
P1_5 BIT 090H.5
P0_6 BIT 080H.6
P3_4 BIT 0B0H.4
P2_5 BIT 0A0H.5
P1_6 BIT 090H.6
P0_7 BIT 080H.7
P3_5 BIT 0B0H.5
ES BIT 0A8H.4
P2_6 BIT 0A0H.6
P1_7 BIT 090H.7
P3_6 BIT 0B0H.6
P2_7 BIT 0A0H.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
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
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
PT2 BIT 0B8H.5
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
?PR?int_0?TCMAIN SEGMENT CODE
?PR?int_1?TCMAIN SEGMENT CODE
?PR?timer_1?TCMAIN SEGMENT CODE
?PR?KeyAndDis_Time0?TCMAIN SEGMENT CODE
?PR?V2ToV?TCMAIN SEGMENT CODE
?PR?InitDS1820?TCMAIN SEGMENT CODE
?PR?ROMDS1820?TCMAIN SEGMENT CODE
?PR?TMVDS1820?TCMAIN SEGMENT CODE
?PR?TMRDS1820?TCMAIN SEGMENT CODE
?PR?TMWDS1820?TCMAIN SEGMENT CODE
?PR?TMREDS1820?TCMAIN SEGMENT CODE
?PR?TMERDS1820?TCMAIN SEGMENT CODE
?PR?WriteDS1820?TCMAIN SEGMENT CODE
?PR?ReadDS1820?TCMAIN SEGMENT CODE
?PR?Delay_510?TCMAIN SEGMENT CODE
?PR?Delay_110?TCMAIN SEGMENT CODE
?PR?Delay_10ms?TCMAIN SEGMENT CODE
?PR?Delay_4s?TCMAIN SEGMENT CODE
?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 timer_1
PUBLIC int_1
PUBLIC int_0
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
T10Stimes0: DS 1
T10Stimes1: DS 1
INTF0: DS 1
INTF1: 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
; /*-------------------------------
; 温度控制器
; 显示为三个共阳极LED
; 温度传感器用单总线DS18B20
; CPU为89C51,三个按键,分别为UP,DOWN,SET
; 2个检测,
; 温度调节上限为125度,下限为-55度
; -------------------------------*/
;
; #include <AT89X51.H>
; #include <intrins.h>
; #define Key_ONE p3_2 //检测1路
; #define Key_TWO p3_3 //检测2路
; #define Key_UP P3_4 //上调温度
; #define Key_DOWN P3_5 //下调温度
; #define Key_SET P3_6 //设定键(温度设定,长按开电源)
; #define RelayOutPort P1_5 //继电器输出(加温)
; #define RelayOutfan P1_6 //继电器输出(风扇)
; #define RelayOutsignal P1_7 //给节电器信号
; #define LEDPort P0 //LED控制口
; #define LEDOneC P2_0 //LED DS1控制(百位)
; #define LEDTwoC P2_1 //LED DS2控制(十位)
; #define LEDThreeC P2_2 //LED DS3控制(个位)
; #define LEDhigh P1_0 //LED高温指示灯
; #define LEDlow P1_1 //LED低温指示灯
; #define LEDmalfunction P1_2 //LED故障指示灯
; #define TMPort P3_0 //DS1820 DataPort温度
;
; unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}; //0-9的LED笔划,0xFF为空,0xF7为负号
;
; static unsigned char bdata StateREG; //可位寻址的状态寄存器
; sbit DS1820ON = StateREG^0; //DS1820是否存在
; sbit SetTF = StateREG^1; //是否是在温度设置状态
; sbit KeySETDown = StateREG^2; //是否已按过SET键标识
; sbit PowTF = StateREG^3; //电源标识
; 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; //转换后的温度值
; static unsigned char KeyV,TempKeyV; //键值
; static signed char TMRomV _at_ 0x0027; //高温限制
; static signed char TMSetV _at_ 0x0026; //温度设定值
; static unsigned char KSDNum; //SET键连按时的采集次数
; static unsigned char IntNum2,IntNum3; //中断发生次数,IntNum用于SET长按检测,IntNum2用于设定状态时LED闪烁
; static signed char LED_One,LED_Two,LED_Three; //LED的显示位 LED_One为十位,LED_Two为个位
; static unsigned char Sign; //负号标识
;
; static unsigned char T10Stimes0;
; static unsigned char T10Stimes1;
; static unsigned char INTF0;
; static unsigned char INTF1;
; void int_0(void); //外部中断0
; void int_1(void); //外部中断1
;
; void main(void)
RSEG ?PR?main?TCMAIN
main:
USING 0
; SOURCE LINE # 57
; {
; SOURCE LINE # 58
; void InitDS1820(void); //定义函数
; 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 # 74
CLR A
MOV StateREG,A
; SetTF = 1;
; SOURCE LINE # 75
SETB SetTF
; PowTF = 0; //开电源
; SOURCE LINE # 76
CLR PowTF
; SetTF = 0;
; SOURCE LINE # 77
CLR SetTF
; THV = 0;
; SOURCE LINE # 78
MOV THV,A
; TLV = 0;
; SOURCE LINE # 79
MOV TLV,A
; TMV = 0;
; SOURCE LINE # 80
MOV TMV,A
; KeyV = 0;
; SOURCE LINE # 81
MOV KeyV,A
; TempKeyV = 0;
; SOURCE LINE # 82
MOV TempKeyV,A
; KSDNum = 0;
; SOURCE LINE # 83
MOV KSDNum,A
; //IntNum = 0;
; IntNum2 = 0;
; SOURCE LINE # 85
MOV IntNum2,A
; IntNum3 = 0;
; SOURCE LINE # 86
MOV IntNum3,A
; LED_One = 0;
; SOURCE LINE # 87
MOV LED_One,A
; LED_Two = 0;
; SOURCE LINE # 88
MOV LED_Two,A
;
; InitDS1820(); //初始化
; SOURCE LINE # 90
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 91
LCALL ROMDS1820
; TMERDS1820(); //E2PRAM中温度上限值调入RAM
; SOURCE LINE # 92
LCALL TMERDS1820
; InitDS1820(); //初始化
; SOURCE LINE # 93
LCALL InitDS1820
; ROMDS1820(); //跳过ROM
; SOURCE LINE # 94
LCALL ROMDS1820
; TMRDS1820(); //读出温度指令
; SOURCE LINE # 95
LCALL TMRDS1820
; ReadDS1820(); //读出温度值和上限值
; SOURCE LINE # 96
LCALL ReadDS1820
; TMSetV = TMRomV; //拷贝保存在DS18B20ROM里的上限值到TMSetV
; SOURCE LINE # 97
MOV TMSetV,TMRomV
;
; T10Stimes0 = 0;
; SOURCE LINE # 99
CLR A
MOV T10Stimes0,A
; T10Stimes1 = 0;
; SOURCE LINE # 100
MOV T10Stimes1,A
; EX0 = 1;
; SOURCE LINE # 101
SETB EX0
; IT0 = 0;
; SOURCE LINE # 102
CLR IT0
; EX1 = 1;
; SOURCE LINE # 103
SETB EX1
; IT1 = 0;
; SOURCE LINE # 104
CLR IT1
; ET0 = 1; //定时器0中断打开
; SOURCE LINE # 105
SETB ET0
; ET1 = 1;
; SOURCE LINE # 106
SETB ET1
; // TMOD = 0x1; //设定时器0为模式1,16位模式
; TMOD = 0x11;
; SOURCE LINE # 108
MOV TMOD,#011H
; TH1=0x3C;
; SOURCE LINE # 109
MOV TH1,#03CH
; TL1=0xB0; //定时50ms
; SOURCE LINE # 110
MOV TL1,#0B0H
; TH0=0xB1;
; SOURCE LINE # 111
MOV TH0,#0B1H
; TL0=0xDF; //设定时值为20000us(20ms)
; SOURCE LINE # 112
MOV TL0,#0DFH
; EA = 1; //允许CPU中断
; SOURCE LINE # 113
SETB EA
; TR0 = 1; //开始定时
; SOURCE LINE # 114
SETB TR0
; TR1 = 1;
; SOURCE LINE # 115
SETB TR1
?C0001:
; while(1);
; SOURCE LINE # 116
SJMP ?C0001
; END OF main
CSEG AT 00003H
LJMP int_0
; }
;
; void int_0(void) interrupt 0 using 0
RSEG ?PR?int_0?TCMAIN
USING 0
int_0:
; SOURCE LINE # 119
; {
; EX0 = 0; //关外部中断0
; SOURCE LINE # 121
CLR EX0
; T10Stimes0 = 0xC8; //200次,共10s
; SOURCE LINE # 122
MOV T10Stimes0,#0C8H
; INTF0 = 1; //置位检测标志
; SOURCE LINE # 123
MOV INTF0,#01H
; }
; SOURCE LINE # 124
RETI
; END OF int_0
CSEG AT 00013H
LJMP int_1
; void int_1(void) interrupt 2 using 1
RSEG ?PR?int_1?TCMAIN
USING 1
int_1:
; SOURCE LINE # 125
; {
; EX1 = 0;
; SOURCE LINE # 127
CLR EX1
; T10Stimes1 = 0xC8;
; SOURCE LINE # 128
MOV T10Stimes1,#0C8H
; INTF1 = 1;
; SOURCE LINE # 129
MOV INTF1,#01H
; }
; SOURCE LINE # 130
RETI
; END OF int_1
CSEG AT 0001BH
LJMP timer_1
; void timer_1(void) interrupt 3 using 3
RSEG ?PR?timer_1?TCMAIN
USING 3
timer_1:
PUSH ACC
; SOURCE LINE # 131
; {
; TH1=0x3C;
; SOURCE LINE # 133
MOV TH1,#03CH
; TL1=0xB0;
; SOURCE LINE # 134
MOV TL1,#0B0H
;
; if(INTF0==1)
; SOURCE LINE # 136
MOV A,INTF0
XRL A,#01H
JNZ ?C0006
; {
; SOURCE LINE # 137
; if(P3_2==0)
; SOURCE LINE # 138
JB P3_2,?C0007
; {
; SOURCE LINE # 139
; T10Stimes0--;
; SOURCE LINE # 140
DJNZ T10Stimes0,?C0010
; if(T10Stimes0==0)
; SOURCE LINE # 141
; {
; SOURCE LINE # 142
; P1_7=1;
; SOURCE LINE # 143
SETB P1_7
; INTF0=0;
; SOURCE LINE # 144
MOV INTF0,A
; T10Stimes0=0;
; SOURCE LINE # 145
MOV T10Stimes0,A
; EX0=1;
; SOURCE LINE # 146
SETB EX0
; }
; SOURCE LINE # 147
; }
; SOURCE LINE # 148
SJMP ?C0010
?C0007:
; else
; {
; SOURCE LINE # 150
; // P1_7=0; //输出后要不要停??
; INTF0=0;
; SOURCE LINE # 152
MOV INTF0,#00H
; EX0=1;
; SOURCE LINE # 153
SETB EX0
; T10Stimes0=0;
; SOURCE LINE # 154
MOV T10Stimes0,#00H
; }
; SOURCE LINE # 155
; }
; SOURCE LINE # 156
SJMP ?C0010
?C0006:
; else
; {
; SOURCE LINE # 158
; INTF0=0;
; SOURCE LINE # 159
MOV INTF0,#00H
; T10Stimes0=0;
; SOURCE LINE # 160
MOV T10Stimes0,#00H
; EX0=1;
; SOURCE LINE # 161
SETB EX0
; }
; SOURCE LINE # 162
?C0010:
;
; if(INTF1==1)
; SOURCE LINE # 164
MOV A,INTF1
XRL A,#01H
JNZ ?C0011
; {
; SOURCE LINE # 165
; if(P3_3==0)
; SOURCE LINE # 166
JB P3_3,?C0012
; {
; SOURCE LINE # 167
; T10Stimes1--;
; SOURCE LINE # 168
DJNZ T10Stimes1,?C0016
; if(T10Stimes1==0)
; SOURCE LINE # 169
; {
; SOURCE LINE # 170
; P1_7=1;
; SOURCE LINE # 171
SETB P1_7
; INTF1=0;
; SOURCE LINE # 172
MOV INTF1,A
; T10Stimes1=0;
; SOURCE LINE # 173
MOV T10Stimes1,A
; EX1=1;
; SOURCE LINE # 174
SETB EX1
; }
; SOURCE LINE # 175
; }
; SOURCE LINE # 176
SJMP ?C0016
?C0012:
; else
; {
; SOURCE LINE # 178
; //P1_7=0; //输出后要不要停??
; INTF1=0;
; SOURCE LINE # 180
MOV INTF1,#00H
; EX1=1;
; SOURCE LINE # 181
SETB EX1
; T10Stimes1=0;
; SOURCE LINE # 182
MOV T10Stimes1,#00H
; }
; SOURCE LINE # 183
; }
; SOURCE LINE # 184
SJMP ?C0016
?C0011:
; else
; {
; SOURCE LINE # 186
; INTF1=0;
; SOURCE LINE # 187
MOV INTF1,#00H
; T10Stimes1=0;
; SOURCE LINE # 188
MOV T10Stimes1,#00H
; EX1=1;
; SOURCE LINE # 189
SETB EX1
; }
; SOURCE LINE # 190
; }
; SOURCE LINE # 191
?C0016:
POP ACC
RETI
; END OF timer_1
CSEG AT 0000BH
LJMP 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 # 194
; {
; TH0=0xB1;
; SOURCE LINE # 196
MOV TH0,#0B1H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -