用C语言编写一个程序,实现数据输入,题目在下面,怎么编啊,求帮助???
采用软件查询方式,从一个输入设备接口中读取10字节数据,送到内存Buffer偏移地址处,假定DS已经设置过段值;数据端口地址为0100H;状态端口地址为0101H;从状态...
采用软件查询方式,从一个输入设备接口中读取10字节数据,送到内存Buffer偏移地址处,假定DS已经设置过段值;数据端口地址为0100H;状态端口地址为0101H;从状态端口读入的1字节状态字中,D0=1表示数据准备好,D0=0表示输入数据端口无数据,编程实现数据输入。用C语言编写,谢谢!
展开
2个回答
展开全部
这是单片机吧?我要搞清楚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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询