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

📄 ex9-2a.asm

📁 《增强型8051单片机实用开发技术》例程代码
💻 ASM
字号:
$INCLUDE  (STC12C5A.INC)            ;包含STC12C5A60S2单片机寄存器定义文件
ADC_HI   EQU 31H                    ;A/D转换结果高2位
ADC_LOW  EQU 30H                    ;A/D转换结果低8位
    ORG    0000H
    LJMP   MAIN
	ORG	    002BH
	LJMP   ADC_ISR      	        ;ADC中断服务程序入口
    ORG    0050H 
MAIN: 
    MOV   SP, #70H              	;设置堆栈
    ORL   ADC_CONTR, #80H        	;开A/D转换电源,第一次使用时要打开内部模拟电源
    MOV   A, #20H 
    LCALL DELAY                     ;开A/D转换电源后要加适当延时,1ms以内即可 
    MOV	   P1ASF,#04H		   		;设置P1.2的模拟量功能
    MOV   ADC_CONTR,#11100010B   	;选择P1.2作为A/D转换通道
    MOV   A, #05H
    LCALL DELAY                     ;如果切换A/D转换通道,则需要加延时
	ORL		AUXR1,#04H				;设置ADC转换结果存储格式(ADRJ=1)
    ORL    ADC_CONTR, #00001000B 	;启动A/D转换
    SETB  EADC              		;EADC=1, 开放ADC的中断控制位
    SETB  EA                		;开放CPU总中断
    SJMP  $                         ;循环等待中断
ADC_ISR:   ;ADC中断服务程序入口
    ANL    ADC_CONTR, #11100111B  	;将ADC_FLAG清0
    MOV    A, ADC_RES              	;读取A/D转换结果高2位
    ANL    A,#03H                   ;屏蔽高6位
    MOV    ADC_HI, A               	;保存A/D转换结果高2位
    MOV    A, ADC_RESL              ;读取A/D转换结果低8位
    MOV    ADC_LOW, A              	;保存A/D转换结果低8位
   	ORL    ADC_CONTR, #00001000B 	;启动A/D转换
	RETI
DELAY:                              ;延时子程序
    PUSH  02                        ;将寄存器组0 的 R2 入栈 
    PUSH  03                        ;将寄存器组0 的 R3 入栈 
    PUSH  04                        ;将寄存器组0 的 R4 入栈 
    MOV   R4, A 
DELAY_LOOP0:                        ;DELAY_LOOP0循环延时200406个时钟周期
    MOV    R3, #200                 ;2个时钟周期
Delay_LOOP1:                        ;DELAY_LOOP1循环延时1002个时钟周期
    MOV    R2, #249                 ;2个时钟周期
DELAY_LOOP:
    DJNZ  R2, DELAY_LOOP            ;4个时钟周期 
    DJNZ  R3, DELAY_LOOP1           ;4个时钟周期
    DJNZ  R4, DELAY_LOOP0           ;4个时钟周期
    POP   04 
    POP   03 
    POP   02 
    RET 
    END


⌨️ 快捷键说明

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