打印

C51与汇编程序对照

[复制链接]
1816|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wy3168|  楼主 | 2007-8-30 17:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序一:
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就是启动不了。郁闷至极,拜托大家给点意见!

相关帖子

沙发
gjg191| | 2007-8-30 17:09 | 只看该作者

dd

c里面从片外读数据不是你这个样子啊

使用特权

评论回复
板凳
wy3168|  楼主 | 2007-8-30 17:12 | 只看该作者

好像看过网上这样写过,我用过指针也不行啊

使用特权

评论回复
地板
wy3168|  楼主 | 2007-8-30 22:44 | 只看该作者

谁能给个意见啊?

使用特权

评论回复
5
duanhnhy| | 2007-8-31 07:49 | 只看该作者

定义一个指向XDATA的指针

uchar xdata *pf

pf=0x8000;
*pf=channels;

使用特权

评论回复
6
wy3168|  楼主 | 2007-8-31 08:08 | 只看该作者

这样我用过,也不行啊.

使用特权

评论回复
7
duanhnhy| | 2007-8-31 11:46 | 只看该作者

RE

    do
    {wei=XBYTE[8001];}
    while(a7);            //等待转换结束

应该改成这样吧?

使用特权

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

本版积分规则

25

主题

88

帖子

1

粉丝