|
|
程序中使用R2R3暂存累加和,R2存放高8位,编程如下:
ADS: MOV R1,#40H ;置数据区首址
MOV R7,#4 ;置计数器
AD1: MOV DPTR,#0DFF8H ;置0809通道0地址
MOVX @DPTR,A ;启动A/D
JNB P1.7,$ ;查询A/D转换是否结束,未完继续查询等待
MOVX A,@DPTR ;A/D已结束,读A/D值
MOV @R1,A ;存A/D值
INC R1 ;修改数据区地址
DJNZ R7,AD1 ;判4次采集是否结束,未完继续
MOV R7,#4 ;置累加A/D数据个数
MOV R1,#40H ;置A/D数据区首址
CLR A
MOV R3,A
MOV R2,A
AD2: ADD A,@R1 ;累加
MOV R3,A ;回存
CLR A
ADDC A,#0H ;累加进位
MOV R2,A ;回存
INC R1 ;指向下以A/D数据
DJNZ R7,AD2 ;判4个数据累加是否结束,未完继续
MOV A,R2 ;求平均值,R2R3除4即右移2位
RRC A
MOV R2,A
MOV A,R3
RRC A
MOV R3,A ;R2R3右移一位
MOV A,R2
RRC A
MOV R2,A
MOV A,R3
RRC A
MOV 30H,A ;R2R3再右移一位,结果为1字节
RET |
|