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

📄 main.src

📁 温湿度变送器程序
💻 SRC
📖 第 1 页 / 共 2 页
字号:
;     MOV A,@R0
	  MOV A,@R0
;     MOV temp_l_h,A
	  MOV temp_l_h,A
;     INC R0
	  INC R0
;     MOV A,@R0
	  MOV A,@R0
;     MOV temp_l_l,A
	  MOV temp_l_l,A
;     
	  
; #pragma endasm 
; }
			; SOURCE LINE # 145
?C0004:
	RET  	
; END OF mach_t

; 
; 
; void mach_rh(void)

	RSEG  ?PR?mach_rh?MAIN
mach_rh:
	USING	0
			; SOURCE LINE # 148
; /******************************************************************************
;  功能  : 计算湿度转换成对应的脉宽
;  入口  : wb_rh
;  出口  : 
;  ******************************************************************************/
; {
			; SOURCE LINE # 154
;   //temp_m=out_rh*32/25*9+2880;    //电阻是200
;   //temp_m=out_rh*27/25*8+2160;    //电阻是200
;   temp_m=(out_rh+50)*27/5*4/5+1080;     //电阻是100  +30相当于实际湿度加3
			; SOURCE LINE # 157
	MOV  	A,out_rh+01H
	ADD  	A,#032H
	MOV  	R7,A
	MOV  	A,out_rh
	ADDC 	A,#00H
	MOV  	R6,A
	MOV  	R4,#00H
	MOV  	R5,#01BH
	ACALL	?C?IMUL
	MOV  	R4,#00H
	MOV  	R5,#05H
	ACALL	?C?SIDIV
	MOV  	A,R7
	MOV  	R0,#02H
?C0011:
	CLR  	C
	RLC  	A
	XCH  	A,R6
	RLC  	A
	XCH  	A,R6
	DJNZ 	R0,?C0011
	MOV  	R7,A
	MOV  	R4,#00H
	MOV  	R5,#05H
	ACALL	?C?SIDIV
	MOV  	A,R7
	ADD  	A,#038H
	MOV  	R7,A
	MOV  	A,R6
	ADDC 	A,#04H
	MOV  	R6,A
	MOV  	A,R6
	RLC  	A
	SUBB 	A,ACC
	MOV  	R5,A
	MOV  	R4,A
	MOV  	temp_m+03H,R7
	MOV  	temp_m+02H,R6
	MOV  	temp_m+01H,R5
	MOV  	temp_m,R4
;   rh_pwm_H=65536-temp_m;
			; SOURCE LINE # 158
	MOV  	R6,temp_m+02H
	MOV  	R7,temp_m+03H
	CLR  	C
	CLR  	A
	SUBB 	A,R7
	MOV  	rh_pwm_H+01H,A
	CLR  	A
	SUBB 	A,R6
	MOV  	rh_pwm_H,A
;   //rh_pwm_L=65535-(18000-temp_m);
;   rh_pwm_L=65535-(13500-temp_m);
			; SOURCE LINE # 160
	MOV  	R6,temp_m+02H
	MOV  	R7,temp_m+03H
	CLR  	C
	CLR  	A
	SUBB 	A,R7
	MOV  	R7,A
	CLR  	A
	SUBB 	A,R6
	MOV  	R6,A
	CLR  	C
	MOV  	A,#043H
	SUBB 	A,R7
	MOV  	rh_pwm_L+01H,A
	MOV  	A,#0CBH
	SUBB 	A,R6
	MOV  	rh_pwm_L,A
; 
; #pragma asm
;   MOV R0,#rh_pwm_H;
	  MOV R0,#rh_pwm_H;
;   MOV A,@R0
	  MOV A,@R0
;   MOV rh_h_h,A  
	  MOV rh_h_h,A  
;   INC R0
	  INC R0
;   MOV A,@R0
	  MOV A,@R0
;   MOV rh_h_l,A  
	  MOV rh_h_l,A  
;   MOV R0,#rh_pwm_L
	  MOV R0,#rh_pwm_L
;   MOV A,@R0
	  MOV A,@R0
;   MOV rh_l_h,A  
	  MOV rh_l_h,A  
;   INC R0
	  INC R0
;   MOV A,@R0
	  MOV A,@R0
;   MOV rh_l_l,A
	  MOV rh_l_l,A
; #pragma endasm
; 
; }
			; SOURCE LINE # 177
?C0005:
	RET  	
; END OF mach_rh

; 
; void pwm_Init(void)

	RSEG  ?PR?pwm_Init?MAIN
pwm_Init:
			; SOURCE LINE # 179
; /******************************************************************************
;  Function   : void Initpwm()
;  Parameters : (void)
;  Description: Initializes Sound Studio
;  ******************************************************************************/
; {
			; SOURCE LINE # 185
;  ES = 0;    //关串行通讯中断
			; SOURCE LINE # 186
	CLR  	ES
;  TMOD=0X11; //则T1,与T0 都设为16位定时器
			; SOURCE LINE # 187
	MOV  	TMOD,#011H
;  IE=0x8a;   //开t1,t0中断
			; SOURCE LINE # 188
	MOV  	IE,#08AH
;  TCON=0x55; //开定时器
			; SOURCE LINE # 189
	MOV  	TCON,#055H
;  P3M1=0x30; //设P3.4,P3.5推挽输出
			; SOURCE LINE # 190
	MOV  	P3M1,#030H
; 
;  #pragma asm
;    CLR P3.4
	  CLR P3.4
;    CLR P3.5
	  CLR P3.5
;  #pragma endasm
; 
;  TH0 = 0xFB;
			; SOURCE LINE # 197
	MOV  	TH0,#0FBH
;  TL0 = 0xC8;
			; SOURCE LINE # 198
	MOV  	TL0,#0C8H
;  TH1 = 0xFB;
			; SOURCE LINE # 199
	MOV  	TH1,#0FBH
;  TL1 = 0xC8;
			; SOURCE LINE # 200
	MOV  	TL1,#0C8H
;  temp_h_h = 0xFB;
			; SOURCE LINE # 201
	MOV  	temp_h_h,#0FBH
;  temp_h_l = 0xC8;
			; SOURCE LINE # 202
	MOV  	temp_h_l,#0C8H
;  temp_l_h = 0xCF;
			; SOURCE LINE # 203
	MOV  	temp_l_h,#0CFH
;  temp_l_l = 0x7C;
			; SOURCE LINE # 204
	MOV  	temp_l_l,#07CH
;  rh_h_h = 0xFB;
			; SOURCE LINE # 205
	MOV  	rh_h_h,#0FBH
;  rh_h_l = 0xC8;
			; SOURCE LINE # 206
	MOV  	rh_h_l,#0C8H
;  rh_l_h = 0xCF;
			; SOURCE LINE # 207
	MOV  	rh_l_h,#0CFH
;  rh_l_l = 0x7C;
			; SOURCE LINE # 208
	MOV  	rh_l_l,#07CH
; 
;  /*   TMOD=0x21;// SET T1  8 BYTE TIMR MODE  如果  TMOD=0X11 //则T1,与T0 都设为16位定时器
;     TCON=0x5 ;// SET T0  16 BYTE  TIMR MODE 
;     SCON=0x50;// SET SCON 1   ren on          IE=0x8a   //开t1,t0中断
;     PCON=0x80;// SMOD=0  XTAL= 18.432         TCON=0x55 //开定时器
;     TH1=0xF6;// SET T1  9600 bit  band 
;     TL1=0xF6;// new value fah old fdh 
;     TR1=1;// on T1 
;     EA =1   ;   // on intrrupt 
;     ES =1   ;
;     ET0 =1  ;
;     TR0 =1  ; */
;  }
			; SOURCE LINE # 221
?C0006:
	RET  	
; END OF pwm_Init

CSEG	AT	0000BH
	AJMP	pwm_out

; /**********************************************************************************
;     定时器 0
;     温度pwm脉宽输出中断服务程序
;     温度的脉宽值高电平在;temp_h_h+temp_h_l中
;     温度的脉宽值低电平在;temp_l_h+temp_l_l中
;     转换频率100赫兹
; ***********************************************************************************/
; void pwm_out(void) interrupt 1  using 0 

	RSEG  ?PR?pwm_out?MAIN
	USING	0
pwm_out:
			; SOURCE LINE # 229
; {
;  #pragma asm
;  PWM:
	  PWM:
;    Jb p3.4,pwm1_L
	  Jb p3.4,pwm1_L
;    CPL P3.4
	  CPL P3.4
;    CLR TR0
	  CLR TR0
;    MOV TH0,temp_h_h
	  MOV TH0,temp_h_h
;    MOV TL0,temp_h_l
	  MOV TL0,temp_h_l
;    SETB TR0
	  SETB TR0
;    RETI
	  RETI
; pwm1_L: CPL  p3.4
	  pwm1_L: CPL  p3.4
;    CLR  TR0
	  CLR  TR0
;    MOV  TH0,temp_l_h  
	  MOV  TH0,temp_l_h  
;    MOV  TL0,temp_l_l 
	  MOV  TL0,temp_l_l 
;    SETB TR0
	  SETB TR0
;    RETI
	  RETI
;  #pragma endasm
; }
			; SOURCE LINE # 247
?C0007:
	RETI 	
; END OF pwm_out

CSEG	AT	0001BH
	AJMP	pwm_rh_out

; /**********************************************************************************
;     定时器1
;     湿度pwm脉宽输出中断服务程序
;     湿度的脉宽值高电平在;rh_h_h+rh_h_l中
;     湿度的脉宽值低电平在;rh_l_h+rh_l_l中
;     转换频率100赫兹
; ***********************************************************************************/
; void pwm_rh_out(void) interrupt 3 using 0 

	RSEG  ?PR?pwm_rh_out?MAIN
	USING	0
pwm_rh_out:
			; SOURCE LINE # 255
; {
;  #pragma asm
;   PWM_rh:
	  PWM_rh:
;    Jb p3.5,pwm2_L
	  Jb p3.5,pwm2_L
;    CPL P3.5
	  CPL P3.5
;    CLR TR1
	  CLR TR1
;    MOV TH1,rh_h_h
	  MOV TH1,rh_h_h
;    MOV TL1,rh_h_l
	  MOV TL1,rh_h_l
;    SETB TR1
	  SETB TR1
;    RETI
	  RETI
; pwm2_L: CPL  p3.5
	  pwm2_L: CPL  p3.5
;    CLR  TR1
	  CLR  TR1
;    MOV  TH1,rh_l_h
	  MOV  TH1,rh_l_h
;    MOV  TL1,rh_l_l
	  MOV  TL1,rh_l_l
;    SETB TR1
	  SETB TR1
;    RETI
	  RETI
;  #pragma endasm
; }
			; SOURCE LINE # 273
?C0008:
	RETI 	
; END OF pwm_rh_out

; 
;  void PCA_Initiate(void)

	RSEG  ?PR?PCA_Initiate?MAIN
PCA_Initiate:
			; SOURCE LINE # 275
; /******************************************************************************
;       PCA定时器模块初始化程序
; *******************************************************************************/   
; {
			; SOURCE LINE # 279
;   //TMOD=0X11 //则T1,与T0 都设为16位定时器
;   //IE=0x8a   //开t1,t0中断
;   //TCON=0x55 //开定时器
;  #pragma asm
;     MOV CMOD,#10000000B      //;PCA空闲模式下记数器停止工作
	  MOV CMOD,#10000000B       
;                              //;PCA fosc/12
	  
;                              //;禁止PCA记数溢出中断
	  
;    MOV CCON,#0   //;CF=0 清记数中断标志
	  MOV CCON,#0    
;                  //CR=0 停记数器
	  
;                  //;清 PCA 各模块中断标志 CCF1=0 CCF0=0
	  
;    MOV CL,#0
	  MOV CL,#0
;    MOV CH,#0     //;清PCA记数器
	  MOV CH,#0      
;    MOV CCAP0L,#0
	  MOV CCAP0L,#0
;    MOV CCAP0H,#3CH
	  MOV CCAP0H,#3CH
;    MOV CCAPM0,#49H //;设置pca 模块0为16位定时器 ECCF0=1,允许pca模块0中断
	  MOV CCAPM0,#49H  
;                   //;当[CCAP0H,CCAP0L]=[CH,CL]中断发生
	  
;    SETB EPCA_LVD  //;开中断
	  SETB EPCA_LVD   
;    SETB CR        //;开PCA 记数(CH,CL)
	  SETB CR         
;    
	  
;  #pragma endasm 
; }
			; SOURCE LINE # 300
?C0009:
	RET  	
; END OF PCA_Initiate

CSEG	AT	00033H
	AJMP	pca_temr

; 
; /*****************************************************************************
;       PCA定时器模块中断服务程序
;       设定10ms中断一次,中断100次1秒钟
;       Counter存中断记数值
;       18.432/12=15360=3C00h
;       Channe_10mS_H=3CH
;       Channe_10mS_L=0
; ******************************************************************************/
; void pca_temr(void) interrupt 6 using 0

	RSEG  ?PR?pca_temr?MAIN
	USING	0
pca_temr:
			; SOURCE LINE # 310
; {
;  #pragma asm
; 
	  
;    PUSH ACC
	  PUSH ACC
;    PUSH PSW
	  PUSH PSW
;                    //;18.432/12=15360=3C00h
	  
;                    // ;Channe_10mS_H=3CH
	  
;    MOV A,#24H      //MOV A,#3CH       //;Channe_10mS_L=0
	  MOV A,#24H       
;    ADD A,CCAP0H
	  ADD A,CCAP0H
;    MOV CCAP0H,A
	  MOV CCAP0H,A
;    CLR CCF0
	  CLR CCF0
;    INC Counter
	  INC Counter
;    MOV A,Counter
	  MOV A,Counter
;    CLR C
	  CLR C
;    SUBB A,#100
	  SUBB A,#100
;    JC PCA_Interrupt_Exit
	  JC PCA_Interrupt_Exit
;    MOV Counter,#0
	  MOV Counter,#0
;    SETB time_1s_flag
	  SETB time_1s_flag
;    SETB read_sht_flag
	  SETB read_sht_flag
;    CLR P1.2
	  CLR P1.2
; PCA_Interrupt_Exit:
	  PCA_Interrupt_Exit:
;    POP PSW
	  POP PSW
;    POP ACC
	  POP ACC
;    RETI
	  RETI
;  #pragma endasm
; }
			; SOURCE LINE # 336
?C0010:
	RETI 	
; END OF pca_temr

	END

⌨️ 快捷键说明

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