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

📄 wadc0.asm

📁 c8051f020 内部12位的ADC0 效果比较啊好,调通了 如果不行 我还有其他人写的一个程序.我传的代码都有比较爱完整的注释啊
💻 ASM
字号:
;参考程序A.WADC0.ASM程序转化通道AIN0.0的输入值,LCD显示两位16进制数.
;测试前将S6的第一拨码开关拨到ON.
$include (c8051f020.inc)                  
TCMS  		EQU   1234H  ;设定T3初始化重载计数值
INTBit		BIT	  20H.0
     ORG		0
	AJMP	main
	ORG		7BH
	AJMP	ADC_ISR
	ORG		0100H
main: MOV WDTCN,#0deH
	MOV WDTCN,#0adH	;禁止看门狗定时器
	MOV R1,#30H	;从地址30H开始赋常数#0AH,#0DH,#0CH,#00H,#68H,#68H
	MOV @R1,#0AH     ;准备显示字符"ADC0"
	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
	CLR INTBit	;清INTBIT位
LCALL	PORT_Init;I/O口初始化
	LCALL	LCD_Init  ;液晶初始化
	LCALL	Timer3_Init ;初始化定时3
	LCALL	ADC_Init    ;初始化A/D
	SETB	EA	    ;使能总中断标志
	MOV   AMX0SL,#00     ;选择通道0
    LCALL	Delay 
LOOP:JNB 	INTBit,LOOP  ;ADC0中断是否发生?
	ANL	TMR3CN,#0fbH ;ADC0中断已经发生,关定时器3
	CLR	INTBit	     ;清INTBIT位
    MOV	P7,#02H	     ;返回初始位置,LCD的归位指令
	MOV	P6,#1H       ;写LCD的命令寄存器
    MOV     P6,#0H         ;结束写LCD的命令寄存器的操作
	MOV	R1,#39H	    ;将A/D转化值保存到RAM 36H,37H,38H,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,#05H	  ;准备送数据
	LCALL	Delay	  ;延时
MOV	R1,#30H	  ;显示数据首地址
	MOV	R2,#0AH	   ;显示数据长度
NDATA:	MOV	A,@R1;将显示数据转化为液晶的显示字符码
	MOV	R0,A
	CLR	C
	SUBB	A,#0AH
	JC	KK            ;C=1,A=0----9
	MOV	A,R0          ;C=0,A=0AH----0FH
	ADD	A,#37H        ;将BCD码转换为ASCII码. 0AH+37H=41H    ('A')
	AJMP	TT
KK: MOV	A,R0
	ADD	A,#30H         ;将BCD码转换为ASCII码. 0H+30H=30H    ('0')
TT:	MOV	P7,A		;送显示数据
	MOV	P6,#05H
	MOV	P6,#04H
	INC	R1
	LCALL	Delay
	DJNZ	R2,NDATA	;数据是否送完
	ORL	TMR3CN,#04H      ;使能定时器3
	SJMP	LOOP
	RET
LCD_Init:MOV	P6,#1H    ;初始化液晶模块
	LCALL	Delay
    MOV	P7,#38H		;两行显示
	MOV	P6,#1H           ; 写命令
	MOV	P6,#0H
	LCALL	Delay
	MOV	P7,#0EH	;LCD显示开关控制命令,开显示,开光标,字符不闪烁
	MOV	P6,#01H         ;写命令
	MOV	P6,#0H
	LCALL	Delay
	MOV	P7,#1cH		;AC自动增1,整体显示不移动
	MOV	P6,#1H            ; 写命令
	MOV	P6,#0H
	LCALL	Delay
	MOV	P7,#01H		;清除DDRAM,置AC=0
	MOV	P6,#1H           ; 写命令
	MOV	P6,#0H
	LCALL	Delay
	RET
Timer3_Init: ;初始化定时器3
	MOV   TMR3CN,#00H
    MOV   TMR3RLH, #HIGH(-TCMS)	;初始化重载值
    MOV   TMR3RLL, #LOW(-TCMS)
    MOV   TMR3H, #0ffh            ;设置自动重载值
    MOV   TMR3L, #0ffh
    ORL   TMR3CN,#04H                   
	RET
ADC_Init: ;初始化A/D
	ORL	ADC0CN,#84H;ADC0使能,定时器3溢出使能模/数转换
 	ORL	REF0CN,#03H;内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0
	ORL	ADC0CF,#50H;设定转换周期,设定增益为1
 	ORL	AMX0CF,#00H;单端输入
 	ORL	EIE2,#02H  ;允许ADC0转换结束中断
	RET
;初始化I/O口
PORT_Init:
	ORL	P74OUT,#0c0H    ;P6,P7为推挽输出
	RET
  ADC_ISR: ;A/D中断服务程序
	CLR	AD0INT	;清ADC0的中断标志位
  	SETB	INTBit	;置INTBIT位
	RETI
Delay:	MOV   R7, #01h		;延时子程序	
Delay1: MOV   R6, #80h
Delay0: MOV   R5, #00h
        DJNZ  R5, $
        DJNZ  R6, Delay0
        DJNZ  R7, Delay1
	    RET
	    END

⌨️ 快捷键说明

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