共2条
1/1 1 跳转至页
ㄐ偶际?PS 接收PS/2条形码扫描器数据源程序,有问题!!
问
用外部中断去读取PS/2接口的数据端,但是发现从头到尾的数据位都为1,显然是有错误,请大家看看有什么问题!!
//========================================================
// 读取条形码扫描器传送的编码数据程序
//========================================================
#include "SPCE061A.h"
#define CLK_Port 0x0004 //IOB2接时钟口
#define Data_Port 0x0001 //IOB0接数据口
void main()
{
int i;
int clkinput=0x0001,datainput;
char getchar=0x00;
//设置IOB口为悬浮式输入
*P_IOB_Dir=0x0000;
*P_IOB_Attrib=0xffff;
*P_IOB_Data=0xffff;
for(i=0;i<8;i++)
{
while(clkinput)//等待时钟线变低,即产生下降沿
{
*P_Watchdog_Clear=0x0001;
clkinput=*P_IOB_Data;
clkinput&=CLK_Port;
}
datainput=*P_IOB_Data; //立刻读数据端获得数据位
datainput&=Data_Port;
getchar|=datainput;
getchar<<=1; //左移一位准备接收下一位
getchar&=0xfffe;
while(!clkinput)//等待时钟线变高,一位数据接受完毕准备下次接收
{
*P_Watchdog_Clear=0x0001;
clkinput=*P_IOB_Data;
clkinput&=CLK_Port;
}
*P_Watchdog_Clear=0x0001;
}
while(1)
{
*P_Watchdog_Clear=0x0001;
}
}
答 1: 这样试试for(i=0;i<8;i++)
{
getchar<<=1; //左移一位准备接收下一位
getchar&=0xfffe;
while(clkinput)//等待时钟线变低,即产生下降沿
{
*P_Watchdog_Clear=0x0001;
clkinput=*P_IOB_Data;
clkinput&=CLK_Port;
}
datainput=*P_IOB_Data; //立刻读数据端获得数据位
datainput&=Data_Port;
getchar|=datainput;
while(!clkinput)//等待时钟线变高,一位数据接受完毕准备下次接收
{
*P_Watchdog_Clear=0x0001;
clkinput=*P_IOB_Data;
clkinput&=CLK_Port;
}
*P_Watchdog_Clear=0x0001;
}
答 2: 请问这样跟上面的有什么不同吗?请问这样跟上面的有什么不同吗? 答 3: 按照你原来的程序,8位的最低一位会丢失
//========================================================
// 读取条形码扫描器传送的编码数据程序
//========================================================
#include "SPCE061A.h"
#define CLK_Port 0x0004 //IOB2接时钟口
#define Data_Port 0x0001 //IOB0接数据口
void main()
{
int i;
int clkinput=0x0001,datainput;
char getchar=0x00;
//设置IOB口为悬浮式输入
*P_IOB_Dir=0x0000;
*P_IOB_Attrib=0xffff;
*P_IOB_Data=0xffff;
for(i=0;i<8;i++)
{
while(clkinput)//等待时钟线变低,即产生下降沿
{
*P_Watchdog_Clear=0x0001;
clkinput=*P_IOB_Data;
clkinput&=CLK_Port;
}
datainput=*P_IOB_Data; //立刻读数据端获得数据位
datainput&=Data_Port;
getchar|=datainput;
getchar<<=1; //左移一位准备接收下一位
getchar&=0xfffe;
while(!clkinput)//等待时钟线变高,一位数据接受完毕准备下次接收
{
*P_Watchdog_Clear=0x0001;
clkinput=*P_IOB_Data;
clkinput&=CLK_Port;
}
*P_Watchdog_Clear=0x0001;
}
while(1)
{
*P_Watchdog_Clear=0x0001;
}
}
答 1: 这样试试for(i=0;i<8;i++)
{
getchar<<=1; //左移一位准备接收下一位
getchar&=0xfffe;
while(clkinput)//等待时钟线变低,即产生下降沿
{
*P_Watchdog_Clear=0x0001;
clkinput=*P_IOB_Data;
clkinput&=CLK_Port;
}
datainput=*P_IOB_Data; //立刻读数据端获得数据位
datainput&=Data_Port;
getchar|=datainput;
while(!clkinput)//等待时钟线变高,一位数据接受完毕准备下次接收
{
*P_Watchdog_Clear=0x0001;
clkinput=*P_IOB_Data;
clkinput&=CLK_Port;
}
*P_Watchdog_Clear=0x0001;
}
答 2: 请问这样跟上面的有什么不同吗?请问这样跟上面的有什么不同吗? 答 3: 按照你原来的程序,8位的最低一位会丢失
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |