使用MPC82E54(原STC12C5410)单片机的AD程序

[复制链接]
2784|3
手机看帖
扫描二维码
随时随地手机跟帖
suoma|  楼主 | 2009-9-26 20:48 | 显示全部楼层 |阅读模式
使用STC12C5410单片机的AD转换功能进行AD转换汇编程序

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

laslison| | 2009-9-26 21:19 | 显示全部楼层
挺长的,楼主辛苦了

使用特权

评论回复
huamunv| | 2009-9-27 23:11 | 显示全部楼层
:)

使用特权

评论回复
yefeng3309| | 2009-9-28 00:30 | 显示全部楼层
楼主辛苦了。:D

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

82

主题

714

帖子

5

粉丝