问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-05-25 12:14

我来回答

1个回答

热心网友 时间:2023-10-26 14:40

---------------------------------*/
//* Cexp7.cpp(查询方式全双工串行通信接口实验) */
//* 查询方式全双工串行通信程序 Source File */
//* Copyright (c) 2001 by yezi */
//*------------------------------------------------------*/
#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输入时钟频率(十六进制表示)
//定时常数数组
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,这个过程不是很明白麻烦解释下。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 linux 内核中物理地址转换为虚拟地址一些不懂的地方,麻烦指点 *pGPFCON &= ~((3&lt;&lt;8)|(3&lt;&lt;10)(3&lt;&lt;12)) ; 2440的rGPFCON寄存器每个位的作用? arm有37个寄存器,但是我们在使用的时候遇到了很多很多具体的寄存器,比如GPFCON等等,有什么直接关系? gpfcon与gpfdat的关系是怎样的 ARM驱动开发中的. GPFCON 和GPFDAT 是什么寄存器,为什么要设置这2个? 一加3(全网通)屏幕是什么品牌? SONY液晶电视与一些国产品牌液晶电视的屏幕区别是什么?(请真正这行的帮助!谢谢) jtd是什么牌子屏幕 iPhone5是什么品牌的屏幕? 笔记本品牌中屏幕那个好,有什么介绍。 PMP资格认证到底能说明什么能力? QQ三国中的推举孝廉任务,怎么能全部通过,有答案么? 跪求中世纪英国历史的电影,【在线观看】免费百度云资源 高分!重装系统后系统崩溃,C盘提示已坏不能格式化! 生化危机4来生已经更新 在线观看地址 边看边下载 吸血鬼之吻高清完整版下载地址 求HP之你好,我是马尔福家规全文,请发到我邮箱yhmyzz@126.com,谢谢^-^! 谁知道迈克杰克逊在小时候就唱过的一首很好听得歌的名字? 二代智能英特尔酷睿i3-2350M或i3-2330M.i3-2370M处理器和二代智能英特尔酷睿i5,那个给力? 消防工程开票交多少税 ARM9按键驱动程序,有个看不懂的地方~请指教。 老师,小规模纳税人的消防工程公司税率是多少?都需要缴纳什么税? ARM开发板如何使用扩展口增加LED显示灯 合同额100万的消防工程交税都交哪些税? linux中可以直接访问S3C2410的ADC寄存器吗?? 一些专家说经期后一周是最佳减肥时间,这是真的吗? 经期后一周减肥什么方法好 求 嵌入式ARM中 注明开发板型号 LED一盏灯亮,灭,中间设置延迟。c 或汇编 消防工程税率征收 消防业务咨询开票是多少税点? 营改增后消防工程税率 经期后怎么减肥 经期后减肥的2个妙招 女人什么时候减肥好 经期后一周减肥最佳 DR戒指一克拉的多少钱? 50分DR戒指价格多少?一克拉的呢? DR钻戒多少钱起步?买一克拉要多少钱? 带窗纱的窗帘好吗 求双截棍经典套路视频 求醉拳套路视频