?? tcmain.src
字號(hào):
; .\TCMain.SRC generated from: TCMain.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE TCMain.c ROM(SMALL) 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?init_serialcomm?TCMAIN SEGMENT CODE INBLOCK
?PR?_send_char_com?TCMAIN SEGMENT CODE INBLOCK
?PR?_send_string_com?TCMAIN SEGMENT CODE INBLOCK
?DT?_send_string_com?TCMAIN SEGMENT DATA OVERLAYABLE
?PR?serial?TCMAIN SEGMENT CODE INBLOCK
?DT?serial?TCMAIN SEGMENT DATA OVERLAYABLE
?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
?C_INITSEG SEGMENT CODE
?CO?TCMAIN SEGMENT CODE
?DT?TCMAIN SEGMENT DATA
?BA?TCMAIN SEGMENT DATA BITADDRESSABLE
EXTRN CODE (?C?CLDOPTR)
EXTRN CODE (?C_STARTUP)
EXTRN CODE (?C?SCDIV)
PUBLIC count3
PUBLIC dis_8
PUBLIC PowTF
PUBLIC inbuf2
PUBLIC inbuf1
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
PUBLIC serial
PUBLIC _send_string_com
PUBLIC _send_char_com
PUBLIC init_serialcomm
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?serial?TCMAIN
?serial?BYTE:
ch?344: DS 1
RSEG ?DT?_send_string_com?TCMAIN
?_send_string_com?BYTE:
str?241: DS 3
ORG 3
strlen?242: DS 2
RSEG ?DT?TCMAIN
KeyV: DS 1
IntNum2: DS 1
IntNum3: DS 1
Sign: DS 1
KSDNum: DS 1
TempKeyV: DS 1
flag: DS 1
LED_Three: DS 1
inbuf1: DS 5
inbuf2: DS 50
LED_One: DS 1
dis_8: DS 12
IntNum: DS 1
Second: DS 1
count3: 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
RSEG ?C_INITSEG
DB 005H
DB inbuf1
DB 030H
DB 030H
DB 030H
DB 030H
DB 030H
DB 00CH
DB dis_8
DB 030H
DB 031H
DB 032H
DB 033H
DB 034H
DB 035H
DB 036H
DB 037H
DB 038H
DB 039H
DB 020H
DB 02DH
; #include <AT89X51.H>
; #include <intrins.h>
; #define Key_UP P1_5
; #define Key_DOWN P1_4
; #define Key_SET P1_6
; #define RelayOutPort P3_7
; #define LEDPort P0
; #define DELPort P3_6
; #define LEDTwoC P2_6
; #define LEDThreeC P2_7
; #define TMPort P3_3
; #define INBUF_LEN 5 //數(shù)據(jù)長(zhǎng)度
; unsigned char inbuf1[INBUF_LEN]={'0','0','0','0','0'};//發(fā)送緩沖區(qū)
; unsigned char inbuf2[50];//接收緩沖區(qū)
; unsigned char count3;
; void init_serialcomm( void )
RSEG ?PR?init_serialcomm?TCMAIN
init_serialcomm:
; SOURCE LINE # 16
; {
; SOURCE LINE # 17
; SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
; SOURCE LINE # 18
MOV SCON,#050H
; TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
; SOURCE LINE # 19
ORL TMOD,#020H
; PCON |= 0x80 ; //SMOD=1;
; SOURCE LINE # 20
ORL PCON,#080H
; TH1 = 0xFA ; //Baud:9600 fosc=11.0592MHz
; SOURCE LINE # 21
MOV TH1,#0FAH
; IE |= 0x90 ; //Enable Serial Interrupt
; SOURCE LINE # 22
ORL IE,#090H
; TR1 = 1 ; // timer 1 run
; SOURCE LINE # 23
SETB TR1
; }
; SOURCE LINE # 24
RET
; END OF init_serialcomm
; //向串口發(fā)送一個(gè)字符
; void send_char_com( unsigned char ch)
RSEG ?PR?_send_char_com?TCMAIN
L?0099:
USING 2
MOV R7,#04FH
L?0100:
ACALL _send_char_com
ACALL _send_char_com
_send_char_com:
; SOURCE LINE # 26
;---- Variable 'ch?140' assigned to Register 'R7' ----
; {
; SOURCE LINE # 27
; SBUF=ch;
; SOURCE LINE # 28
MOV SBUF,R7
?C0002:
; while (TI== 0 );
; SOURCE LINE # 29
JNB TI,?C0002
?C0003:
; TI= 0 ;
; SOURCE LINE # 30
CLR TI
; }
; SOURCE LINE # 31
RET
; END OF _send_char_com
; //向串口發(fā)送一個(gè)字符串,strlen 為該字符串長(zhǎng)度
; void send_string_com( unsigned char *str, unsigned int strlen)
RSEG ?PR?_send_string_com?TCMAIN
_send_string_com:
USING 0
; SOURCE LINE # 33
MOV str?241,R3
MOV str?241+01H,R2
MOV str?241+02H,R1
MOV strlen?242,R4
MOV strlen?242+01H,R5
; {
; SOURCE LINE # 34
; unsigned int k= 0 ;
; SOURCE LINE # 35
;---- Variable 'k?243' assigned to Register 'R4/R5' ----
CLR A
MOV R5,A
MOV R4,A
?C0007:
; do
; {
; SOURCE LINE # 37
; send_char_com(*(str + k));
; SOURCE LINE # 38
MOV R3,str?241
MOV R2,str?241+01H
MOV R1,str?241+02H
MOV DPL,R5
MOV DPH,R4
ACALL ?C?CLDOPTR
MOV R7,A
ACALL _send_char_com
; k++;
; SOURCE LINE # 39
INC R5
CJNE R5,#00H,?C0089
INC R4
?C0089:
; } while (k < strlen);
; SOURCE LINE # 40
CLR C
MOV A,R5
SUBB A,strlen?242+01H
MOV A,R4
SUBB A,strlen?242
JC ?C0007
; }
; SOURCE LINE # 41
RET
; END OF _send_string_com
CSEG AT 00023H
AJMP serial
; //串口接收中斷函數(shù)
; void serial () interrupt 4 using 3
RSEG ?PR?serial?TCMAIN
USING 3
serial:
PUSH ACC
PUSH PSW
USING 3
MOV PSW,#018H
; SOURCE LINE # 43
; {
; if (RI) //RI==開(kāi)始接收
; SOURCE LINE # 45
JNB RI,?C0012
; {
; SOURCE LINE # 46
; unsigned char ch;
; RI = 0 ; //軟件RI=0
; SOURCE LINE # 48
CLR RI
; ch=SBUF;
; SOURCE LINE # 49
MOV ch?344,SBUF
; if (ch> 1 )
; SOURCE LINE # 50
MOV A,ch?344
SETB C
SUBB A,#01H
JC ?C0010
; {
; SOURCE LINE # 51
; count3= 0 ;
; SOURCE LINE # 52
MOV count3,#00H
; inbuf2[count3]=ch;
; SOURCE LINE # 53
; }
; SOURCE LINE # 54
SJMP ?C0092
?C0010:
; else
; {
; SOURCE LINE # 56
; count3++;
; SOURCE LINE # 57
INC count3
; inbuf2[count3]=ch;
; SOURCE LINE # 58
?C0092:
MOV A,#LOW (inbuf2)
ADD A,count3
MOV R0,A
MOV @R0,ch?344
; }
; SOURCE LINE # 59
; }
; SOURCE LINE # 60
; }
; SOURCE LINE # 61
?C0012:
POP PSW
POP ACC
RETI
; END OF serial
;
; unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}; //0-9的LED筆劃,0xFF為空,0xF7為負(fù)號(hào)
; unsigned char dis_8[12]={'0','1','2','3','4','5','6','7','8','9',' ','-'};
; static unsigned char bdata StateREG; //可位尋址的狀態(tài)寄存器
; sbit DS1820ON = StateREG^0; //DS1820是否存在
; sbit SetTF = StateREG^1; //是否是在溫度設(shè)置狀態(tài)
; sbit KeySETDown = StateREG^2; //是否已按過(guò)SET鍵標(biāo)識(shí)
; sbit PowTF = StateREG^3; //電源電源標(biāo)識(shí)
; sbit KeyTF = StateREG^4; //鍵盤(pán)是否允許
;
; //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 unsigned char Second;
; static unsigned char flag;
; static signed char TMRomV _at_ 0x0027; //高溫限制
; static signed char TMSetV _at_ 0x0026; //溫度設(shè)定值
; static unsigned char KSDNum; //SET鍵連按時(shí)的采集次數(shù)
; static unsigned char IntNum,IntNum2,IntNum3; //中斷發(fā)生次數(shù),IntNum用于SET長(zhǎng)按檢測(cè),IntNum2用于設(shè)定狀態(tài)時(shí)LED閃爍
; static signed char LED_One,LED_Two,LED_Three; //LED的顯示位 LED_One為十位,LED_Two為個(gè)位
; static unsigned char Sign; //負(fù)號(hào)標(biāo)識(shí)
;
; void main(void)
RSEG ?PR?main?TCMAIN
main:
USING 0
; SOURCE LINE # 86
; {
; SOURCE LINE # 87
;
; 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);
;
; DELPort=1;
; SOURCE LINE # 104
SETB P3_6
; StateREG = 0; //初始化變量
; SOURCE LINE # 105
CLR A
MOV StateREG,A
; SetTF = 0;
; SOURCE LINE # 106
CLR SetTF
; PowTF = 0; //關(guān)電源
; SOURCE LINE # 107
CLR PowTF
; THV = 0;
; SOURCE LINE # 108
MOV THV,A
; TLV = 0;
; SOURCE LINE # 109
MOV TLV,A
; TMV = 0;
; SOURCE LINE # 110
MOV TMV,A
; KeyV = 0;
; SOURCE LINE # 111
MOV KeyV,A
; TempKeyV = 0;
; SOURCE LINE # 112
MOV TempKeyV,A
; KSDNum = 0;
; SOURCE LINE # 113
MOV KSDNum,A
; IntNum = 0;
; SOURCE LINE # 114
MOV IntNum,A
; IntNum2 = 0;
; SOURCE LINE # 115
MOV IntNum2,A
; IntNum3 = 0;
; SOURCE LINE # 116
MOV IntNum3,A
; LED_One = 0;
; SOURCE LINE # 117
MOV LED_One,A
; LED_Two = 0;
; SOURCE LINE # 118
MOV LED_Two,A
;
; InitDS1820(); //初始化
; SOURCE LINE # 120
ACALL InitDS1820
; ROMDS1820(); //跳過(guò)ROM
; SOURCE LINE # 121
ACALL ROMDS1820
; TMERDS1820(); //E2PRAM中溫度上限值調(diào)入RAM
; SOURCE LINE # 122
ACALL TMERDS1820
; InitDS1820(); //初始化
; SOURCE LINE # 123
ACALL InitDS1820
; ROMDS1820(); //跳過(guò)ROM
; SOURCE LINE # 124
ACALL ROMDS1820
; TMRDS1820(); //讀出溫度指令
; SOURCE LINE # 125
ACALL TMRDS1820
; ReadDS1820(); //讀出溫度值和上限值
; SOURCE LINE # 126
ACALL ReadDS1820
; TMSetV = TMRomV; //拷貝保存在DS18B20ROM里的上限值到TMSetV
; SOURCE LINE # 127
MOV TMSetV,TMRomV
;
; EA = 1; //允許CPU中斷
; SOURCE LINE # 129
SETB EA
; ET0 = 1; //定時(shí)器0中斷打開(kāi)
; SOURCE LINE # 130
SETB ET0
; TMOD = 0x1; //設(shè)定時(shí)器0為模式1,16位模式
; SOURCE LINE # 131
MOV TMOD,#01H
; TH0=0xB1;
; SOURCE LINE # 132
MOV TH0,#0B1H
; TL0=0xDF; //設(shè)定時(shí)值為20000us(20ms)
; SOURCE LINE # 133
MOV TL0,#0DFH
; TR0 = 1;
; SOURCE LINE # 134
SETB TR0
?C0013:
;
; while(1){ //開(kāi)始定時(shí)
; SOURCE LINE # 136
;
;
;
;
;
;
; if (flag==0){
; SOURCE LINE # 143
MOV A,flag
JNZ ?C0013
; if (Second==1){
; SOURCE LINE # 144
MOV A,Second
CJNE A,#01H,?C0013
; Delay_4s();
; SOURCE LINE # 145
ACALL Delay_4s
; Delay_4s();
; SOURCE LINE # 146
ACALL Delay_4s
; Delay_4s();
; SOURCE LINE # 147
ACALL Delay_4s
; Delay_4s();
; SOURCE LINE # 148
ACALL Delay_4s
; Delay_4s();
; SOURCE LINE # 149
ACALL Delay_4s
; Delay_4s();
; SOURCE LINE # 150
ACALL Delay_4s
;
; DELPort=0;
; SOURCE LINE # 152
CLR P3_6
; Second=0;
; SOURCE LINE # 153
CLR A
MOV Second,A
; }
; SOURCE LINE # 154
; }
; SOURCE LINE # 155
; }
; SOURCE LINE # 156
SJMP ?C0013
; END OF main
CSEG AT 0000BH
AJMP KeyAndDis_Time0
;
;
; }
;
; //定時(shí)器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 # 162
; {
; TH0=0xB1;
; SOURCE LINE # 164
MOV TH0,#0B1H
; TL0=0xDF; //設(shè)定時(shí)值為20000us(20ms)
; SOURCE LINE # 165
MOV TL0,#0DFH
;
; LEDPort = 0xFF;
; SOURCE LINE # 167
MOV P0,#0FFH
;
;
; if (inbuf2[0]==0x33){
; SOURCE LINE # 170
MOV A,inbuf2
CJNE A,#033H,?C0018
; send_char_com('O');
; SOURCE LINE # 171
; send_char_com('O');
; SOURCE LINE # 172
; send_char_com('O');
; SOURCE LINE # 173
LCALL L?0099
; SetTF = 1;
; SOURCE LINE # 174
SETB SetTF
; //send_string_com(inbuf2,1);
; //BEEP=0;
; //RELAY=0;
; send_char_com('O');
; SOURCE LINE # 178
ACALL _send_char_com
; //inbuf2[0]=0x00;
; inbuf2[0]=0x00;
; SOURCE LINE # 180
MOV inbuf2,#00H
; }
; SOURCE LINE # 181
?C0018:
;
; if (inbuf2[0]==0x36)
; SOURCE LINE # 183
MOV A,inbuf2
CJNE A,#036H,?C0019
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -