原创 STC12C2052单片机的AD转换功能进行AD转换初始化设置汇编

2009-4-28 16:02 5086 5 5 分类: MCU/ 嵌入式

ADC_CONTR        EQU        0C5H         ;A/D转换寄存器


ADC_DATA         EQU        0C6H         ;A/D转换结果寄存器,为10位A/D转化结果的高8位


ADC_LOW2        EQU        0BEH        ;A/D转换结果寄存器,低2位有效,为10位A/D转换结果的低2位


                                    ;如果不用ADC_LOW2的低2位,只有ADC_DATA的8位,则为8位A/D转化


P1M0             EQU         91H         ;P1口模式选择寄存器0


P1M1             EQU         92H         ;P1口模式选择寄存器1


             ADC_POWER_ON_SPEED_CHANNEL_0        EQU        11100000B          ;P1.0作为A/D输入


             ADC_POWER_ON_SPEED_CHANNEL_1        EQU        11100001B          ;P1.1作为A/D输入


             ADC_POWER_ON_SPEED_CHANNEL_2        EQU        11100010B          ;P1.2作为A/D输入


             ADC_POWER_ON_SPEED_CHANNEL_3        EQU        11100011B          ;P1.3作为A/D输入


             ADC_POWER_ON_SPEED_CHANNEL_4        EQU        11100100B          ;P1.4作为A/D输入


             ADC_POWER_ON_SPEED_CHANNEL_5        EQU        11100101B          ;P1.5作为A/D输入


             ADC_POWER_ON_SPEED_CHANNEL_6        EQU        11100110B          ;P1.6作为A/D输入


             ADC_POWER_ON_SPEED_CHANNEL_7        EQU        11100110B          ;P1.7作为A/D输入


        ;定义变量


            ADC_CHANNEL_0RESULT           EQU 30H            ;0通道A/D转换结果


            ADC_CHANNEL_1RESULT           EQU 31H            ;1通道A/D转换结果


            ADC_CHANNEL_2RESULT           EQU 32H            ;2通道A/D转换结果


            ADC_CHANNEL_3RESULT           EQU 33H            ;3通道A/D转换结果


            ADC_CHANNEL_4RESULT           EQU 34H            ;4通道A/D转换结果


            ADC_CHANNEL_5RESULT           EQU 35H            ;5通道A/D转换结果


            ADC_CHANNEL_6RESULT           EQU 36H            ;6通道A/D转换结果


            ADC_CHANNEL_7RESULT           EQU 37H            ;7通道A/D转换结果


         ORG         0000H


         LJMP         MAIN


         ORG         0050H


MAIN:


         MOV         SP,#40H


         ACALL         ADC_POWER_ON         //;开ADC电源,第一次使用时要打开内部模拟电源


                                                   ;开ADC电源,可适当加延时,1MS以内就足够了


         ACALL         SET_P12_OPEN_DRAIN         //;设置P1.2位开漏


         ACALL         SET_ADC_CHANNEL_2           //;设置P1.2作为A/D转换通道


         ACALL         GET_ADC_RESULT         //;测量电压并且取A/D转化结果


ADC_POWER_ON:


         PUSH         ACC


         ORL         ADC_CONTR,#80H         //;开A/D转换电源


         MOV         A,#20H


         ACALL         DELAY         ;开A/D转换电源后要加延时,1MS以内就足够了


         POP         ACC


         RET


 


;设置P1.2,设置A/D通道所在的I/O为开漏模式


SET_P12_OPEN_DRAIN:


         PUSH         ACC


         MOV         A,#00000100B


         ORL         P1M0,A


         ORL         P1M1,A


         POP         ACC


         RET


SET_ADC_CHANNEL_2:


         MOV         ADC_CONTR,#ADC_POWER_ON_SPEED_CHANNEL_2        //;选择P1.2作为A/D转换通道


         MOV         A,#01H        //;更换A/D转换通道后要适当延时,使输入电压稳定


                           ;以后如果不更换A/D转换通道的话,不需要加延时


         ACALL         DELAY        //;切换A/D转换通道,加延时时20US~200US就可以了,与输入电压源的内阻有关


         RET


GET_ADC_RESULT:


         PUSH         ACC


         MOV         ADC_DATA,#0


         ORL         ADC_CONTR,#00001000B        ;启动AD转换


WAIT_AD_FINISH:


         MOV         A,#00010000B        //;判断AD转换是否完成


         ANL         A,ADC_CONTR


         JZ          WAIT_AD_FINISH        //;AD转换尚未完成,继续等待


         ANL         ADC_CONTR,#11100111B


         MOV         A,ADC_DATA       //取10位AD转换数据寄存器的高八位显示到P2口


         CLR         C


         MOV         P2,A


         LJMP         GET_ADC_RESULT       //不停的进行重复的AD采集


DELAY:


         PUSH         02


         PUSH         03


         PUSH         04


         MOV         R4,A


DELAY_LOOP0:


         MOV         R3,#50


DELAY_LOOP:


         DJNZ         R3,DELAY_LOOP


         DJNZ         R4,DELAY_LOOP0


         POP         04


         POP         03


         POP         02


         RET


         END

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条