很多低端芯片,端口 PORTA 是没有 LATA 寄存器的,当同一个 IO 口有输入又有输出时,有一些问题是需要注意的,这里以 PORTB 为例
#include "SYSCFG.h"
void interrupt ISR(void)
{
}
main()
{
TRISA=0; //输出
PORTA=0; //输出的电平=0
TRISB0=1; //PB0设为输入
while(1) //PB2输出高电平时点亮LED试验
{
TRISB2=0; //PB2设为输出
PB2=1; //PB2输出的电平=1
TRISB2=1; //PB2设为输入
if(TRISB0) PB3=0; //这个22句23句只保留其中1句
// if(TRISB0) NOP(); //这个22句23句只保留其中1句
TRISB2=0; //PB2设为输出
NOP();
while(1);
//如果上电前就对地短路PB2,来到这里后再解除短路,结果:
//如果只保留22句,此时PB2输出的是0,LED不亮
//如果只保留23句,此时PB2输出的是1,LED点亮
//假设第22句是在中断函数里面,并且PB的某些端口驱动的是三态数码管
//如果数码管扫描程序不是在中断里面运行,而是在主程序里面运行
//这时,三态数码管就会不定时的出现不该显示的暗显示
//结论:数据手册的【写操作实际执行 ‘读-修改-写’ 的过程】是不完整的
//当然,知道了这个现象,解决的办法就很多,欢迎大家讨论解决办法
}
}
|