共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |