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

📄 main.src

📁 51与ADC0804的编程实现的具体方法
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	LCALL	Display
; 	}
			; SOURCE LINE # 141
	SJMP 	?C0001
; END OF main

; }
; 
; 
; //*******************************************************
; //*                    AdcStart
; //*
; //*功能描述:启动一次ADC0804采样
; //*输入参数:无
; //*返回值:无
; //*******************************************************
; void AdcStart()

	RSEG  ?PR?AdcStart?MAIN
AdcStart:
			; SOURCE LINE # 152
; {
			; SOURCE LINE # 153
; 	ADC_CS = 0;		 //片选信号置0,ADC0804有效
			; SOURCE LINE # 154
	CLR  	ADC_CS
;     
; 	ADC_WR = 0;      //WR信号为低电平有效,启动一次ADC采样
			; SOURCE LINE # 156
	CLR  	ADC_WR
; 	//NOP
; 	ADC_WR = 1;      //采样启动完毕WR信号复位
			; SOURCE LINE # 158
	SETB 	ADC_WR
; 	//NOP
; 	ADC_CS = 1;      //片选信号复位
			; SOURCE LINE # 160
	SETB 	ADC_CS
; }
			; SOURCE LINE # 161
	RET  	
; END OF AdcStart

; 
; //*******************************************************
; //*                    AdcRead
; //*
; //*功能描述:完成一次采样后,从ADC0804的DB引脚读取采样值
; //*输入参数:无
; //*返回值:无
; //*******************************************************
; void AdcRead()

	RSEG  ?PR?AdcRead?MAIN
AdcRead:
			; SOURCE LINE # 170
; {
			; SOURCE LINE # 171
; 	ADC_CS = 0;		 //片选信号置0,ADC0804有效
			; SOURCE LINE # 172
	CLR  	ADC_CS
; 	//__NOP;
; 	ADC_RD = 0;      //RD信号为低电平有效,读出采样结果
			; SOURCE LINE # 174
	CLR  	ADC_RD
; 	//NOP
; 	SampleValue = DB; //读出采样结果
			; SOURCE LINE # 176
	MOV  	SampleValue,P2
; 
; 	ADC_RD = 1;      //采样结果读出后,RD信号复位
			; SOURCE LINE # 178
	SETB 	ADC_RD
; 	//NOP
; 	ADC_CS = 1;      //片选信号复位      
			; SOURCE LINE # 180
	SETB 	ADC_CS
; }
			; SOURCE LINE # 181
	RET  	
; END OF AdcRead

; 
; //*******************************************************
; //*                    Display
; //*
; //*功能描述:将采样结果通过八段数码管显示出来
; //*输入参数:无
; //*返回值:无
; //*******************************************************
; void Display()

	RSEG  ?PR?Display?MAIN
Display:
	USING	0
			; SOURCE LINE # 190
; {
			; SOURCE LINE # 191
;     uint8 CurBit,CurCode;
;     uint8 VoltInt;  //实际电压值的整数部分
; 	fp32  VoltDec;  //实际电压值的小数部分
; 	uint8 VoltDectoInt;
; 	RealVoltage = VREF * (SampleValue / FULLSCALE); //将二进制字节采样结果转换成实际电压值 
			; SOURCE LINE # 196
	MOV  	R6,#00H
	CLR  	A
	MOV  	R7,A
	MOV  	R4,A
	MOV  	R5,#0AH
	LCALL	?C?IMUL
	MOV  	R4,AR6
	MOV  	R5,AR7
	CLR  	A
	LCALL	?C?FCASTI
	MOV  	RealVoltage+03H,R7
	MOV  	RealVoltage+02H,R6
	MOV  	RealVoltage+01H,R5
	MOV  	RealVoltage,R4
; 	VoltInt = (uint8)RealVoltage;    //获得实际电压值的整数部分
			; SOURCE LINE # 197
	LCALL	?C?CASTF
	MOV  	VoltInt?342,R7
; 	VoltDec = RealVoltage - VoltInt; //获得实际电压值的小数部分
			; SOURCE LINE # 198
	MOV  	R4,VoltInt?342
	CLR  	A
	LCALL	?C?FCASTC
	MOV  	R0,AR4
	MOV  	R1,AR5
	MOV  	R2,AR6
	MOV  	R3,AR7
	MOV  	R7,RealVoltage+03H
	MOV  	R6,RealVoltage+02H
	MOV  	R5,RealVoltage+01H
	MOV  	R4,RealVoltage
	LCALL	?C?FPSUB
	MOV  	VoltDec?343+03H,R7
	MOV  	VoltDec?343+02H,R6
	MOV  	VoltDec?343+01H,R5
	MOV  	VoltDec?343,R4
; 	VoltDectoInt = (uint8)(VoltDec * 10000);  //小数点后保留四位
			; SOURCE LINE # 199
	MOV  	R7,#00H
	MOV  	R6,#040H
	MOV  	R5,#01CH
	MOV  	R4,#046H
	MOV  	R3,VoltDec?343+03H
	MOV  	R2,VoltDec?343+02H
	MOV  	R1,VoltDec?343+01H
	MOV  	R0,VoltDec?343
	LCALL	?C?FPMUL
	LCALL	?C?CASTF
;---- Variable 'VoltDectoInt?344' assigned to Register 'R7' ----
; 	//显示小数部分(四位)
; 	for(CurBit = 0;CurBit < 4;CurBit ++)
			; SOURCE LINE # 201
;---- Variable 'CurBit?340' assigned to Register 'R6' ----
	CLR  	A
	MOV  	R6,A
?C0006:
; 	{
			; SOURCE LINE # 202
; 		CurCode = VoltDectoInt % 10;
			; SOURCE LINE # 203
	MOV  	A,R7
	MOV  	B,#0AH
	DIV  	AB
	MOV  	CurCode?341,B
; 		VoltDectoInt /= 10;
			; SOURCE LINE # 204
	MOV  	A,R7
	MOV  	B,#0AH
	DIV  	AB
	MOV  	R7,A
; 		BITCHOOSE = bit_table[CurBit]; //选择当前显示的数码管
			; SOURCE LINE # 205
	MOV  	A,R6
	MOV  	DPTR,#bit_table
	MOVC 	A,@A+DPTR
	MOV  	P1,A
; 		BITCODE  = sled_table[CurCode]; //将选中的八段数码管赋予位编码
			; SOURCE LINE # 206
	MOV  	A,CurCode?341
	MOV  	DPTR,#sled_table
	MOVC 	A,@A+DPTR
	MOV  	P0,A
; 	}
			; SOURCE LINE # 207
	INC  	R6
	CJNE 	R6,#04H,?C0006
?C0007:
; 	//显示个位整数与小数点
; 	CurCode = VoltInt % 10;    //获得显示数据编码
			; SOURCE LINE # 209
	MOV  	A,VoltInt?342
	MOV  	B,#0AH
	DIV  	AB
	MOV  	CurCode?341,B
; 	BITCHOOSE = bit_table[5]; //选择当前显示的数码管
			; SOURCE LINE # 210
	MOV  	DPTR,#bit_table+05H
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	MOV  	P1,A
; 	BITCODE  = sled_table[CurCode]; //将选中的八段数码管赋予位编码
			; SOURCE LINE # 211
	MOV  	A,CurCode?341
	MOV  	DPTR,#sled_table
	MOVC 	A,@A+DPTR
	MOV  	P0,A
; 	DOT = 0;                        //小数点位于个位整数所在的八段数码管上
			; SOURCE LINE # 212
	CLR  	DOT
; 	//显示十位整数
; 	VoltInt /= 10;
			; SOURCE LINE # 214
	MOV  	A,VoltInt?342
	MOV  	B,#0AH
	DIV  	AB
	MOV  	VoltInt?342,A
; 	CurCode = VoltInt;	      //获得显示数据编码
			; SOURCE LINE # 215
	MOV  	CurCode?341,A
; 	BITCHOOSE = bit_table[5]; //选择当前显示的数码管
			; SOURCE LINE # 216
	MOV  	P1,R7
; 	BITCODE  = sled_table[CurCode]; //将选中的八段数码管赋予位编码
			; SOURCE LINE # 217
	MOV  	A,CurCode?341
	MOVC 	A,@A+DPTR
	MOV  	P0,A
; }
			; SOURCE LINE # 218
	RET  	
; END OF Display

; 
; //*******************************************************
; //*                    delay_ms
; //*
; //*功能描述:ms级延时函数
; //*输入参数:
; //*返回值:无
; //*******************************************************
; void delay_ms(uint32 ms)

	RSEG  ?PR?_delay_ms?MAIN
_delay_ms:
	USING	0
			; SOURCE LINE # 227
	MOV  	ms?445+03H,R7
	MOV  	ms?445+02H,R6
	MOV  	ms?445+01H,R5
	MOV  	ms?445,R4
; {
			; SOURCE LINE # 228
; 	uint32 i, j;
; 	for(i = 0; i < ms; i++)
			; SOURCE LINE # 230
	CLR  	A
	MOV  	i?446+03H,A
	MOV  	i?446+02H,A
	MOV  	i?446+01H,A
	MOV  	i?446,A
?C0010:
	MOV  	R7,ms?445+03H
	MOV  	R6,ms?445+02H
	MOV  	R5,ms?445+01H
	MOV  	R4,ms?445
	MOV  	R3,i?446+03H
	MOV  	R2,i?446+02H
	MOV  	R1,i?446+01H
	MOV  	R0,i?446
	CLR  	C
	LCALL	?C?ULCMP
	JNC  	?C0016
; 		for(j = 0; j < 5000; j++);
			; SOURCE LINE # 231
	CLR  	A
	MOV  	j?447+03H,A
	MOV  	j?447+02H,A
	MOV  	j?447+01H,A
	MOV  	j?447,A
?C0013:
	CLR  	A
	MOV  	R7,#088H
	MOV  	R6,#013H
	MOV  	R5,A
	MOV  	R4,A
	MOV  	R3,j?447+03H
	MOV  	R2,j?447+02H
	MOV  	R1,j?447+01H
	MOV  	R0,j?447
	CLR  	C
	LCALL	?C?ULCMP
	JNC  	?C0012
	MOV  	A,j?447+03H
	ADD  	A,#01H
	MOV  	j?447+03H,A
	CLR  	A
	ADDC 	A,j?447+02H
	MOV  	j?447+02H,A
	CLR  	A
	ADDC 	A,j?447+01H
	MOV  	j?447+01H,A
	CLR  	A
	ADDC 	A,j?447
	MOV  	j?447,A
	SJMP 	?C0013
?C0012:
	MOV  	A,i?446+03H
	ADD  	A,#01H
	MOV  	i?446+03H,A
	CLR  	A
	ADDC 	A,i?446+02H
	MOV  	i?446+02H,A
	CLR  	A
	ADDC 	A,i?446+01H
	MOV  	i?446+01H,A
	CLR  	A
	ADDC 	A,i?446
	MOV  	i?446,A
	SJMP 	?C0010
; }			; SOURCE LINE # 232
?C0016:
	RET  	
; END OF _delay_ms

	END

⌨️ 快捷键说明

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