用C语言编写一个程序,实现数据输入,题目在下面,怎么编啊,求帮助???

采用软件查询方式,从一个输入设备接口中读取10字节数据,送到内存Buffer偏移地址处,假定DS已经设置过段值;数据端口地址为0100H;状态端口地址为0101H;从状态... 采用软件查询方式,从一个输入设备接口中读取10字节数据,送到内存Buffer偏移地址处,假定DS已经设置过段值;数据端口地址为0100H;状态端口地址为0101H;从状态端口读入的1字节状态字中,D0=1表示数据准备好,D0=0表示输入数据端口无数据,编程实现数据输入。用C语言编写,谢谢! 展开
 我来答
451006071
2014-09-28 · TA获得超过1332个赞
知道小有建树答主
回答量:368
采纳率:57%
帮助的人:324万
展开全部
这是单片机吧?我要搞清楚DS是什么?这题目本质就是用指针变量指向对应的地址获取数据,但是我不明白DS是什么?还有一次读入的数据是不是8位的?D0是否表示读入数据的第0位?
追问
这是《微型计算机原理与接口技术》(第二版  刘彦文编写的)第五章的题目,这老师要我们用c语言编程,好无语哦,那老师很记仇的!哎
追答
//volatile关键字用于向编译器说明不要优化,也就是每次老实的从内存中把这些数据读取出来,volatile不能省。
#define  DATA    (*(volatile unsigned char*)0x100)
#define  STATUS  (*(volatile unsigned char*)0x101)
//假设缓存buffer的地址为0x200
#define  DATA_BUFFER ((unsigned char*)0x200)

void delay(unsigned int dly)
{
    unsigned int x = 0;

    for( x = 0 ; x < dly ; x++ );
}

unsigned char GetData(void)
{
    unsigned char tmp = 0;

    do
    {
        tmp = STATUS;
        delay(1);//当遇到速度慢的设备可以延时等待
    }while( 0 == (tmp & 0x01) );//D0=0表示没数据忙等待

    return DATA; //退出循环则D0=1,表示有数据
}

int main(void)
{
    unsigned char count = 0;
    unsigned char *buf = DATA_BUFFER;

    while(count < 10)
    {
        buf[count++] = GetData();
        delay(1);//按需要取舍
    }
    //获取到的数据在buf[0,9]中。
    return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
许你此世今生
2014-09-28
知道答主
回答量:4
采纳率:0%
帮助的人:5142
展开全部
飘过,啊看样子是c++啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式