PIC18F2550 读取input pin 用MPLAB MCC18

来源:百度知道 编辑:UC知道 时间:2024/07/04 04:12:10
#include <p18f2550.h>

void main(void)
{
TRISA = 0b03;
TRISB = 0x00;

while(1)
{

if(PORTAbits.RA0 == 0)
{
PORTBbits.RB7 = 1;
}

if(PORTAbits.RA0 == 1)
{
PORTBbits.RB6 = 1;
}

if(PORTAbits.RA1 == 0)
{
PORTBbits.RB4 = 1;
}

if(PORTAbits.RA1 == 1)
{
PORTBbits.RB3 = 1;
}
}
}

就这么一个非常简单的程序,只是读取RA0和RA1,然后让在port B的LED亮。连接到RA0和RA1的可以是变化的电压,2.5V左右,也可以是PWM,但是现在试验无论怎么样,LED亮的总是不对,即使我把输入RA的线都拔了,LED之前亮的还是继续亮着。

是读取input的PORTAbits.RA0 == 0这种写法不对吗?

我也试过加入ADC的程序,但是结果也是不对。
上边不小心打错了 TRISA = 0x03 不是0b03

PORTAbits.RA0是一个整体,内部命令不需要declear

测试过PORTBbit.RBx这些都是可以正常工作的

---------------------------------------------------------------

程序的问题在于输入端口RA,按照这个程序插拔RA1和RA0之后4个LED应该全亮,但是现在是一直只有第一个和第三个LED亮,不管RA的线是不是插着,一直都是那两个LED亮。input读的永远都是0.

很想帮你,但是有很多回答了。

你的程序有问题?
RA0=1时,RB6=1,除此外看不到让RB6=0的代码。
所以RB6一旦为1,就不可能为0了。

——————
我没用过PIC。
不过如果是TTL的话,悬空意味著高电平。你应该明确接地。CMOS器件也会使用兼容TTL的接口。

我建议你可以看一下PIC的端口结构,对它裏面的电路有个大概的了解。

PORTAbits和PORTBbits是怎么声明的?
是结构体?是全局变量吗?
如果是在操作内存地址,应该在声明前加volatile(查一下C语言的书),取消编译器对它的优化(每次从实际内存地址读取数据而非从寄存器),否则可能永远读不出实际地址内容的变化

把分给我吧!