永发信息网

键盘驱动中rGPFCON |= ((0x01<<2*2)|(0x01<<3*2)|(0x01<<4*2))是什么意思??

答案:1  悬赏:60  手机版
解决时间 2021-01-08 22:30
键盘驱动中rGPFCON |= ((0x01<<2*2)|(0x01<<3*2)|(0x01<<4*2))是什么意思??
最佳答案
---------------------------------*/
/
/
/
/
#include //kbhit();
#include //printf();
#include //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输入时钟频率(十六进制表示)
//定时常数数组
int tc_table[8]={
110, // 0=110bps
150, // 1=150b/s
300, // 2=300b/s
600, // 3=600b/s
1200, // 4=1200b/s
2400, // 5=2400b/s
4800, // 6=4800b/s
9600 // 1=9600b/s
};

void int51(); //初始化8251a
void set_bps(int bps); //8253-5记数初值计算与装入

void main()
{
int getvalue=0;
int temp=-1;
int sletter,rletter,status;
for(;;)
{
clrscr();
printf("\n 0---110\n 1---150\n 2---300\n 3---600\n 4---1200\n 5---2400\n 6---4800\n 7---9600\n");

getvalue=getch();
if((getvalue<'0') || (getvalue>'7'))
{
printf("\n Input error! try again please! \n"); //error message
getch();
continue;
}
else
{
break;
}
}
temp = getvalue - '0';
set_bps(tc_table[temp]);
int51();
printf("\n now enter the serial communication");
printf("\n end with 'Esc'\n");
outportb(0x303,0x80);//置PC6=1,打开8253-5的GATE2,开始输出方波
outportb(0x303,0x0d);
for(;;)//判断是否Esc键
{
if (kbhit()){//若无键按下,则转接收
if((sletter=getche())==0x1b)//是ESC?是,则退出,并返回DOS
{
outport(ctrl55,0x0c);//关闭8253
return;
}
else{
status=inportb(ctrl51);//获取8253 TXRDY 状态
if((status&0x01)!=0)//已准备好,则将键入的字符发送出去
{
outportb(data51,sletter);
}
}
}
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,0x4a);//8251A方式命令
delay(100);
outportb(ctrl51,0x27);//8251A工作命令
}

void set_bps(int bps)
{
int i,sendhigh,sendlow;
i=clk/bps;
i=i/factor;//计算计数初值
sendhigh = (i>>8)&0x00ff;
sendlow = i & 0x00ff;
outportb(timctl,0xb6);
outportb(timer2,sendlow);//装计数初值低字节
outportb(timer2,sendhigh);//装计数初值高字节
}追问你这个复杂了一点,有点看不懂。可以帮我解释一下rGPFCON |= ((0x01<<2*2)|(0x01<<3*2)|(0x01<<4*2))是什么意思?
它是把rGOFCON的第2,3,4 位变为1,这个过程不是很明白麻烦解释下。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
金泉阳光景新苑怎么样?好不好?值不值得买?
圆周率3.141
我被人捅了三刀派出所现在找不到人怎么办
我在澳门输了57万,现在负债6万,我该怎么办
乐理题求教!!!把G作为和弦的根音,写出大
贵州省盘州市公有几个飞机场?都在什么地方。
英雄联盟瑞文遇到远程英雄,怎么打呢?
评副高职称要发多少篇论文
照片中的作文怎么写啊?可以从哪几个方面来写
单选题Shelly had prepared caref
五亿八千八百48万求他们的近似数是多少
桂林哪里有无印良品和Daiso大创
求2017好听的英文歌曲激情类的
小冬家本月用100度电,本月比上用少用五分之一
PSP游戏《怪物猎人2G》千里眼的珠子镶嵌上有
推荐资讯
最省内存,最好用的小说阅读器
伊索寓言精彩片段
You say you will be late,but why are
经常用清水洗脸,对皮肤有好处吗?
如何投诉蜜芽宝贝网站,服务太差了,问客服就
朱大常这个名子在哪部电影里出现过
求指导,现在入GM1和GM1s哪个好
如图,两个同心圆的半径分别为2和1,∠AOB=90
妹子对我啥感觉?
做展板1米x2.5米,需要多少DPI分辨率
单选题光滑水平桌面上有一静止的长方体木块,
意标转换插头的适用范畴
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?