程序一: AD2: MOV R0,#54H ;暂存转换的数据 MOV A,R5 ;R5=采样通道 MOV DPTR,#8000H ;采样地址 MOVX @DPTR,A ;选通采样通道,启动A/D转换 MOV DPTR,#8001H LOOP: MOVX A,@DPTR JB ACC.7,LOOP ;等待A/D转换结束 MOV DPTR,#8001H MOVX A,@DPTR ;读出高位采样数据 ANL A,#0FH ;屏蔽掉前4位,留下后4位作为A/D转换高4位(共12位) MOVX @R0,A ;存放采样数据高4位 INC R0 MOV DPTR,#8000H MOVX A,@DPTR ;读出低8位采样数据 MOVX @R0,A ;存放采样数据低8位 RET 程序二: uchar bdata wei; sbit a7=wei^7; void ad2(uchar channels) //采样通道 { a7=0; XBYTE[0x8000]=channels; //启动A/D printf("%c",channels); do {wei=XBYTE[8001];} while(~a7); //等待转换结束 wei=XBYTE[0x8001]; a[4]=wei&0x0f; printf("%c",a[4]); a[5]=XBYTE[0x8000]; printf("%c",a[5]); } 程序一是一个采样程序(汇编版)一个启动A/D转换的子程序,程序二是与之对应的C51版。printf是为了查看程序运行设置的,与采样无关。程序一运行正常,程序二A/D就是启动不了。郁闷至极,拜托大家给点意见! |