Microchip
直播中

李婷

8年用户 189经验值
私信 关注
[问答]

使用dspic33fj128gp802I怎么从低端口读取一个字节?

你好!我叫路易斯,来自阿根廷。我正在使用dspic33fj128gp802I,想从低端口(RB7到RB0)读取一个字节,并通过SPI(在RB10到RB13中映射)将它存储在uSD中。如果我在这个引脚中读取一个高值(“1”),我不能存储整个字节,但是,如果它低(“0”),就没有问题……有什么问题吗?我不是在调试,而是在硬件上直接测试。我配置的端口是这样的:TRISBbits.TRISB0=1;TRISBbits.TRISB1=1;TRISBbits.TRISB2=1;TRISBbits.TRISB3=1;TRISBbits.TRISB4=1;TRISBbits.TRISBbits.TRISB5=1;TRISBbits.TRISB6=1;TRISBbits.TRISBbits.TRISB7=1;我这样读的:data=(char)(PORTB);//data data=/data被定义为Chan感谢在前进。问候!路易斯

回帖(6)

罗宏达

2019-8-28 08:47:12
为什么不分配整个TrISB而不是每个单独的位呢?(FYI TRIS寄存器默认为高(输入),但我想设置它们以确保它们的状态)我将使用stdint.h库的uint8_t而不是char,因为它更好地描述了您的意图。你不需要没有签名吗?我不认为您需要强制转换,因为如果您不写它,它将只占用最低有效位(如果我错了请更正我)。上面的实现在PIC24FJ上为我工作。如果这不能工作,您能确认没有外围设备使用引脚代替吗?当RB6的值高时,您可以得到另一个引脚(如RA2(PIDOOMA))来变高,这将告诉您是否正在作为输入工作。
举报

李涛

2019-8-28 09:04:00
data=(char)(PORTB);//data被定义为charunsigned int data;data=PORTB&0xff;SPIxBUF=data将是更好的方法,如果SPIx处于8位模式,那么您甚至不需要&0xff。
举报

李淑英

2019-8-28 09:18:02
非常感谢您的回复。我已经尝试过您的建议,但是什么也没有……根据数据表,这个引脚有:PGEC3/ASCL1/RP6/CN24/PMD6/RB6I非常确定没有外围设备在RB6中工作,因为我正在使用PEGEC1编程,I2C正在处理它的自然引脚;没有外围设备在RB6中工作。此处映射;不允许更改通知,并关闭主端口。为了测试,我添加了这行代码:LATAbits.LAT0=PORTBbits.RB6;//Led连接到RA0并且led正确地打开/关闭……因此,我假设这不是硬件问题,因为我能够读取RB6端口……也许当我使用FAT系统(SD)时,当RB6很高时,这个库就不能保存字节。很奇怪…我会继续寻找解决办法,我会告诉你的。非常感谢!我希望我的英语很好!路易斯。
举报

刘秀英

2019-8-28 09:32:19
非常感谢您的回复。我已经尝试过您的建议,但是什么也没有……根据数据表,这个引脚有:PGEC3/ASCL1/RP6/CN24/PMD6/RB6I非常确定没有外围设备在RB6中工作,因为我正在使用PEGEC1编程,I2C正在处理它的自然引脚;没有外围设备在RB6中工作。此处映射;不允许更改通知,并关闭主端口。为了测试,我添加了这行代码:LATAbits.LAT0=PORTBbits.RB6;//Led连接到RA0并且led正确地打开/关闭……因此,我假设这不是硬件问题,因为我能够读取RB6端口……也许当我使用FAT系统(SD)时,当RB6很高时,这个库就不能保存字节。很奇怪…我会继续寻找解决办法,我会告诉你的。非常感谢!我希望我的英语很好!路易斯。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分