我正在尝试在我的PIC16F818微控制器上将RB0 -7设置为数字输入。为了做到这一点,我使用了以下配置:
void config() {
//cmcon = 0x07; // Sets all IO pins to digital
trisa = 0xFF; // Set porta as inputs
trisb = 0x00; // Set portb as outputs
adcon1 = 0x07; // For PIC16F84A comment the line above and uncomment this statement
portb = 0x00; // Reset value of portb (portb = 0)
_CONFIG & _CP_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF & _MCLR_OFF & _INTRC_IO & _WRT_ENABLE_OFF & _PWRTE_OFF;
}我通过将我的端口A (8位开关块)映射到端口B (8位led块)来测试此设置,开关0-4工作正常,但开关5-7没有响应,但是位由一些其他PIC函数内部设置并输出:(b5)0 (b6)0 (b7)1。
发布于 2017-04-01 02:45:21
这是人们在使用Microchip控制器时经常遇到的问题。在stackexchange上有很多地方的咒语是:“写LATx,读PORTx”
PORTx为您提供端口的当前状态。
LATX是输出锁存器。
在初始化过程中,应为每个端口设置TRISx、ANSELx (模拟选择)、CNPUx/CNPDx (上拉/下拉)的值。
发布于 2017-03-30 20:05:09
我建议使用Latch将数据输出到端口。
所以在你的例子中使用"latb“代替"portb”。
请注意,根据您使用的编译器,"latb“的定义可能会有所不同。
如果它解决了问题,请告诉我。
此外,有关闩锁和端口使用之间的差异的更多信息,请参阅此链接
Difference between PORT and LATCH on PIC
在这种情况下,他询问了PIC18F家庭,但给出的答案对于一般的图片编程非常好(无论是什么家庭),所以你也会从中受益。
https://stackoverflow.com/questions/43093030
复制相似问题