IO端口动态测试范例
/*
本例程是以前发表的一个主题的关键部分
原主题为: <<如何保护IO管脚直接外接电源或地不烧毁?>>
本例程只给出了P1口的2种测试方法,其它PX基本同理.
本例程若加在某个定时器中断中,且在50mS时调用此2个函数(1个或2个)
将会实现对IO的实时检测,依据"理论"以后道来...
*/
/*------------------------------------
P1端口测试
主要测试管脚接电源或地及相临管脚的短路
-------------------------------------*/
unsigned char Port1Test(void)
{
unsigned char testval;
P1 = 0x55;//奇数管脚发低电平
_nop_();//延时
testval = P1 ^ 0x55;//比较发送及接收结果
P1 = 0xaa;//偶数管脚发低电平
_nop_();//延时
testval |= P1 ^ 0xaa;//比较发送及接收结果(2次的)
P1 = 0xff;//释放P1口,防止外部接入电源
return testval;//测试成功返回0
}
/*------------------------------------
P1端口扫描
实现Port1Test()的全部功能及任意管脚短路
-------------------------------------*/
unsigned char Port1Scan(void)
{
unsigned char scanval;
unsigned char val;
scanval = 0;//暂设为成功标志
if (P1 == 0xff) {//P1口未工作才测试
val = 0xfe;//从P1.0开始测起
CY = 1;//每次移入高电平
do{
P1 = val;//发送数据
_nop_();//延时
scanval = P1 ^ val;//比较发送及接收结果
P1 = 0xff;//释放P1口,防止外部接入电源
if (scanval) break;//P1管脚出错,立即退出
_rlcr_(val);//带进位位左移
}
while (CY);//8位数据未移完继续
}
return scanval;//测试成功返回0
}
文章评论(0条评论)
登录后参与讨论