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

📄 adc.asm

📁 这是一个有关C8051F020单片机的实验教学材料,相信对于单片机的研究人员会有很大的帮助.
💻 ASM
字号:

//-----------------------------------------------------------------------------
// 版权归新华龙电子公司所有
//-----------------------------------------------------------------------------
//
// 文件名:ADC.ASM
//
// 编写人:LC 
//
// 编写时间:2005/2/25
//
// 目标器件: C8051F02x
//
// 编译工具: Silicon Laboratories IDE
//
// 程序说明:	此程序模/数转化通道AIN0.0的输入值,测试前将S6的第一拨码开关拨到ON

//------------------------------------------------------------------------------------
// // 头文件包含
//------------------------------------------------------------------------------------
$include (c8051f020.inc)                  

SYSCLK		EQU		2000000         
TC_5ms		EQU     (SYSCLK / 12) * 5
LCDBit		BIT		20H.0

	ORG		0
	AJMP	main
	ORG		7BH
	AJMP	ADC_ISR
	ORG		0100H

;延时子程序
Delay:
    MOV   R7, #01h			
Delay1:
    MOV   R6, #80h
Delay0:
    MOV   R5, #00h
    DJNZ  R5, $
    DJNZ  R6, Delay0
    DJNZ  R7, Delay1
	RET

//------------------------------------------------------------------------------------
//主程序
//------------------------------------------------------------------------------------
main:
	MOV		R1,#30H					;从地址30H开始赋常数#0AH,#0DH,#0CH,#00H,#68H,#68H
	MOV		@R1,#0AH
	INC		R1
	MOV		@R1,#0DH
	INC		R1
	MOV		@R1,#0CH
	INC		R1
	MOV		@R1,#00H
	INC		R1
	MOV		@R1,#68H
	INC		R1
	MOV		@R1,#68H
	MOV		WDTCN,#0deH
	MOV		WDTCN,#0adH				;禁止看门狗定时器
	CLR		LCDBit					;清液晶显示位
	LCALL	PORT_Init				;I/O口初始化
	LCALL	LCD_Init				;液晶初始化
	LCALL	Timer3_Init				;初始化定时3
	LCALL	ADC_Init				;初始化A/D
	SETB	EA						;使能总中断标志
	ORL		AMX0SL,#00				;通道0
    LCALL	Delay 
	;ORL	AMX0SL,#01H				通道1
	;LCALL	Delay
	;ORL	AMX0SL,#02H				通道2
	;LCALL	Delay
	;ORL	AMX0SL,#03H				通道3
	;LCALL	Delay
	;ORL	AMX0SL,#04H				通道4
	;LCALL	Delay
	;ORL	AMX0SL,#05H				通道5
	;LCALL	Delay
	;ORL	AMX0SL,#06H				通道6
	;LCALL	Delay
	;ORL	AMX0SL,#07H				通道7
LOOP:
	JNB 	LCDBit,LOOP				;是否显示到LCD
	ANL		TMR3CN,#0fbH			;关定时器3
	CLR		LCDBit					;清LCD显示位
	MOV		P7,#02H					;返回初始位置
	MOV		P6,#08H
	MOV		P6,#09H
	MOV		R1,#39H					;将A/D转化值保存到36H~39H
	MOV		A,ADC0L
	ANL		A,#0FH
	MOV		@R1,A
	MOV		A,ADC0L
	SWAP	A
	ANL		A,#0FH
	DEC		R1
	MOV		@R1,A
	MOV		A,ADC0H
	ANL		A,#0FH
	DEC		R1
	MOV		@R1,A
	MOV		A,ADC0H
	SWAP	A
	ANL		A,#0FH
	DEC		R1
	MOV		@R1,A
	MOV		P6,#0dH					;准备送数据
	LCALL	Delay					;延时
	
	MOV		R1,#30H					;显示数据首地址
	MOV		R2,#0AH					;显示数据长度
NDATA:	
	MOV		A,@R1					;将显示数据转化为液晶的显示字符码
	MOV		R0,A
	CLR		C
	SUBB	A,#0AH
	JC		KK
	MOV		A,R0
	ADD		A,#37H
	AJMP	TT
KK:
	MOV		A,R0
	ADD		A,#30H
TT:	
	MOV		P7,A					;送显示数据
	MOV		P6,#0cH
	MOV		P6,#0dH
	INC		R1
	LCALL	Delay
	DJNZ	R2,NDATA				;数据是否送完
	ORL		TMR3CN,#04H             ;使能定时器3
	SJMP	LOOP
	RET

;初始化液晶模块
LCD_Init:
	MOV		P6,#09H
	LCALL	Delay
   	MOV		P7,#38H					;两行显示
	MOV		P6,#08H
	MOV		P6,#09H
	LCALL	Delay
	MOV		P7,#0eH					;开显示,开光标,字符不闪烁
	MOV		P6,#08H
	MOV		P6,#09H
	LCALL	Delay
	MOV		P7,#06H					;AC自动增1,整体显示不移动
	MOV		P6,#08H
	MOV		P6,#09H
	LCALL	Delay
	MOV		P7,#01H					;清除DDRAM,置AC=0
	MOV		P6,#08H
	MOV		P6,#09H
	LCALL	Delay
	RET

;初始化I/O口
PORT_Init:
	MOV		XBR2,#40H				;使能交叉开关
	ORL		P74OUT,#0ffH     		;推挽输出
	RET

;初始化定时器3
Timer3_Init:
	MOV		TMR3CN,#00H
    MOV		TMR3RLH, #HIGH(-TC_5ms)	;初始化重载值
    MOV   	TMR3RLL, #LOW(-TC_5ms)
    MOV 	TMR3H, #0ffh            ;设置自动重载值
    MOV		TMR3L, #0ffh
    ORL		TMR3CN,#04H                   
	RET

;初始化A/D
ADC_Init:
	ORL		ADC0CN,#84H				;ADC0使能,定时器3溢出使能模/数转换
 	ORL		REF0CN,#03H				;内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0
	ORL		ADC0CF,#50H				;转换周期和增益为1
 	ORL		AMX0CF,#00H				;单端输入
 	ORL		EIE2,#02H				;ADC0转换结束中断
	RET

;A/D中断服务程序
ADC_ISR:
	CLR		AD0INT					;清A/D中断标志
  	SETB	LCDBit					;置LCD显示位
	RETI
	END

⌨️ 快捷键说明

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