原创 IO端口动态测试范例

2008-5-12 23:22 2345 4 4 分类: MCU/ 嵌入式


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
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条