PIC移植出错

[复制链接]
 楼主| xyz549040622 发表于 2013-6-14 21:54 | 显示全部楼层 |阅读模式
本帖最后由 xyz549040622 于 2013-6-14 22:54 编辑

DA所用为AD5662,官方给的一段程序为
  1. /*******************************************************************
  2. *   Function:    AD5662_reg_write
  3. *   Description: writes to the AD5662 via the SPI port.
  4.                                  P1.4->SCLK,P1.6->DIN,P2.5->/SYNC
  5. *******************************************************************/
  6. void AD5662_reg_write(unsigned int Mode, unsigned int RegisterData)
  7. {
  8.         unsigned int ControlValue = 0;
  9.         unsigned int i = 0;

  10.         //Create the 24-bit
  11.         ControlValue = (Mode << 16) | RegisterData;
  12.         
  13.         SET_CS();
  14.         CLR_SCL();
  15.         delay(3);
  16.         CLR_CS();         //bring CS low
  17.         delay(3);

  18.         //Write out the control word
  19.         for(i=0; i<24; i++)
  20.         {
  21.                 SET_SCL();
  22.                 if(0x800000 == (ControlValue & 0x800000))
  23.                 {
  24.                         SET_SDO();          //Send one to SDO pin
  25.                 }
  26.                 else
  27.                 {
  28.                         CLR_SDO();          //Send zero to SDO pin
  29.                 }
  30.                 delay(3);
  31.                 CLR_SCL();
  32.                 delay(3);
  33.                 ControlValue <<= 1;        //Rotate data
  34.         }
  35.         
  36.         SET_CS();        //bring CS high again
  37. }

移植到PIC16F1936后的代码为
  1. //************************DA写数据程序***********************************************
  2. /*******************************************************************
  3. *   Function:    AD5662_reg_write
  4. *   Description:  输入参数为选通的通道号码,进行的模式,写入的数据
  5. *******************************************************************/
  6. void AD5662_reg_write(unsigned int En_DA_Num, unsigned long Mode, unsigned long RegisterData)
  7. {
  8.         unsigned long ControlValue = 0;
  9.         unsigned int i = 0;
  10.         ControlValue = (Mode << 16)| RegisterData;

  11.         SET_CS();//片选位拉高
  12.         CLR_SCL();//时钟拉高
  13.         delayR();//延时
  14.             delayR();//延时
  15.             delayR();//延时
  16.         switch(En_DA_Num)//根据使能的口,拉低片选位,使数据有效
  17.         {
  18.         case 1: CLR_CS1(); break;
  19.         case 2: CLR_CS2(); break;
  20.         case 3: CLR_CS3(); break;
  21.         case 4: CLR_CS4(); break;
  22.         case 5: CLR_CS5(); break;
  23.         case 6: CLR_CS6(); break;
  24.         case 7: CLR_CS7(); break;
  25.         default: SET_CS(); break;//如果都不是,Y1-Y7都关闭,此时无法写入数据
  26.         }
  27.         delayR();//延时
  28.         //Write out the control word
  29.         for(i=0; i<24; i++)
  30.         {
  31.                 SET_SCL();//时钟拉高
  32.                 if(0x800000 == (ControlValue & 0x800000))//发送数据
  33.                 {
  34.                         SET_SDO();          //Send one to SDO pin
  35.                 }
  36.                 else
  37.                 {
  38.                         CLR_SDO();          //Send zero to SDO pin
  39.                 }
  40.                 delayR();//数据保持
  41.                         CLR_SCL();//时钟拉低
  42.                         delayR();//数据保持
  43.                 ControlValue <<= 1;        //Rotate data
  44.                         delayR();//数据保持
  45.         

  46.         }
  47.         SET_CS();//把片选位拉高
  48.             delayR();//数据保持
  49. }
  1. void delayR()//延时1us,16MHZ
  2. {
  3.         NOP();NOP();NOP();NOP();
  4. }

只修改延时函数,但是DA结果无输出,官方的程序应该也是没错的,那么移植过程哪里出错了呢?

弓长月月鸟 发表于 2013-6-15 08:04 | 显示全部楼层
仔细看了一下您的程序,自己有几点看法:
1、首先你修改了延时程序,是否跟例程中的延时一致?
2、例程中只是用了一个SET_CS();//片选位拉高,按照我对你程序的理解。你的程序应该是对CS选择了多个。但是12行和49行是不是也应该和19——27行的代码一致呢?
希望能帮助您。


 楼主| xyz549040622 发表于 2013-6-16 08:25 | 显示全部楼层
弓长月月鸟 发表于 2013-6-15 08:04
仔细看了一下您的程序,自己有几点看法:
1、首先你修改了延时程序,是否跟例程中的延时一致?
2、例程中只 ...

找到了,疯了,工程师的硬件出错,哈哈
 楼主| xyz549040622 发表于 2013-6-16 14:17 | 显示全部楼层
结贴,工程师的硬件错误!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

粉丝
快速回复 在线客服 返回列表 返回顶部