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

📄 tcmain.src

📁 PC与单片机双向通讯智能温控程序 #include <AT89X51.H> #include <intrins.h> #define Key_UP P1_0 #def
💻 SRC
📖 第 1 页 / 共 3 页
字号:
; .\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_0 
; #define Key_DOWN          P1_1   
; #define Key_SET           P1_2   
; #define RelayOutPort      P2_0  
; #define LEDPort           P0      
; #define DELPort           P2_1   
; #define LEDTwoC           P3_6    
; #define LEDThreeC         P3_7    
; #define TMPort			  P2_7
; #define INBUF_LEN 5 //数据长度
; unsigned char inbuf1[INBUF_LEN]={'0','0','0','0','0'};//发送缓冲区
; unsigned char inbuf2[50];//接收缓冲区
; 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:4800 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

; //向串口发送一个字符
; 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

; //向串口发送一个字符串,strlen 为该字符串长度
; 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

; //串口接收中断函数
; 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==开始接收
			; 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为负号
; unsigned char dis_8[12]={'0','1','2','3','4','5','6','7','8','9',' ','-'};
; 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 unsigned char Second;
; static unsigned char flag;
; static signed char TMRomV _at_ 0x0027;    //高温限制
; static signed char TMSetV _at_ 0x0026;    //温度设定值
; static unsigned char KSDNum;    //SET键连按时的采集次数
; static unsigned char IntNum,IntNum2,IntNum3;    //中断发生次数,IntNum用于SET长按检测,IntNum2用于设定状态时LED闪烁
; static signed char LED_One,LED_Two,LED_Three;  //LED的显示位 LED_One为十位,LED_Two为个位
; static unsigned char Sign; //负号标识
; 
; void main(void)

	RSEG  ?PR?main?TCMAIN
main:
	USING	0
			; SOURCE LINE # 86
; {
			; SOURCE LINE # 87
; 
; 	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);
; 	
; 	 DELPort=1;
			; SOURCE LINE # 104
	SETB 	P2_1
; 	StateREG = 0;   //初始化变量
			; SOURCE LINE # 105
	CLR  	A
	MOV  	StateREG,A
; 	SetTF = 0;	
			; SOURCE LINE # 106
	CLR  	SetTF
; 	PowTF = 0;			//关电源
			; 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(); 	//跳过ROM
			; SOURCE LINE # 121
	ACALL	ROMDS1820
; 	TMERDS1820();  //E2PRAM中温度上限值调入RAM
			; SOURCE LINE # 122
	ACALL	TMERDS1820
; 	InitDS1820(); //初始化
			; SOURCE LINE # 123
	ACALL	InitDS1820
; 	ROMDS1820(); 	//跳过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; 				//定时器0中断打开
			; SOURCE LINE # 130
	SETB 	ET0
; 	TMOD = 0x1;			//设定时器0为模式1,16位模式
			; SOURCE LINE # 131
	MOV  	TMOD,#01H
; 	TH0=0xB1;
			; SOURCE LINE # 132
	MOV  	TH0,#0B1H
; 	TL0=0xDF;				//设定时值为20000us(20ms)
			; SOURCE LINE # 133
	MOV  	TL0,#0DFH
; 	TR0 = 1;
			; SOURCE LINE # 134
	SETB 	TR0
?C0013:
; 	
; 	while(1){				//开始定时
			; 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  	P2_1
; 		  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

; 	
; 	
; }
; 
; //定时器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;				//设定时值为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
; 
; //send_string_com(inbuf2,1);

⌨️ 快捷键说明

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