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

采用软件查询方式,从一个输入设备接口中读取10字节数据,送到内存Buffer偏移地址处,假定DS已经设置过段值;数据端口地址为0100H;状态端口地址为0101H;从状态端口读入的1字节状态字中,D0=1表示数据准备好,D0=0表示输入数据端口无数据,编程实现数据输入。用C语言编写,谢谢!

第1个回答  2014-09-28
这是单片机吧?我要搞清楚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;
}

本回答被网友采纳
第2个回答  2014-09-28
飘过,啊看样子是c++啊