⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disadcr.cpp

📁 大学微型计算机接口技术实验源代码,直接就可以运行,包含了C++和asm代码,比较前面.
💻 CPP
字号:
//*------------------------------------------------------*/
//*    Cexp13.cpp(远程数据采集接收程序)           				*/
//*    查询方式接收数据 Source File              				*/
//*    Copyright (c) 2001 by HUST                        */
//*------------------------------------------------------*/
#include <conio.h>     //kbhit();
#include <stdio.h>     //printf();
#include <dos.h>       //delay();

#define data51 0x308    //8251A数据口
#define ctrl51 0x309	   //8251A命令/状态口
#define ctrl55 0x303    //8255命令口
#define timer2 0x306    //8253的2号计数器端口
#define timctl 0x307    //8253命令口
//#define clk    1193182 
#define factor 16	   //波特率因子16

unsigned long int clk = 1193182;//8251输入时钟频率(十六进制表示)
void int51();           //初始化8251a
void main()
{	
	int sletter,rletter,status,count,sendhigh,sendlow;
/*--------------------------------设置波特率------------------------------------------------*/
	count=clk/4800;
	count=count/factor;//计算计数初值
	sendhigh = (count>>8)&0x00ff;
	sendlow  = count & 0x00ff;
	outportb(timctl,0xb6);
	outportb(timer2,sendlow);//装计数初值低字节
	outportb(timer2,sendhigh);//装计数初值高字节
	int51();
	printf("\n Push 'Esc'to End\n");
	outportb(ctrl55,0x80);//置PC3=1,打开8253-5的GATE2,开始输出方波
	outportb(ctrl55,0x07);
	printf("Now is receiving......\n");
	for(;;)//判断是否Esc键
	{
		if (kbhit())				//若无键按下,则转接收
		  {
           if((sletter=getche())==0x1b)//是ESC?是,则退出,并返回DOS
				{
					outport(ctrl55,0x06);//关闭8253
					return;
				}
			}
     else
			{
				status=inportb(ctrl51);//已准备好,即有数据传送过来,则接收1个字符
				if((status&0x02)!=0)
				{
					rletter=inportb(data51);
					printf("\n%c",rletter);
				 } 
			  }
		}
 }
void int51()
{
	outportb(ctrl51,0x00);
	delay(100);
	outportb(ctrl51,0x40);//8251复位
	delay(100);
	outportb(ctrl51,0x4e);//8251A方式命令
	delay(100);
	outportb(ctrl51,0x27);//8251A工作命令
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -