打印

PIC16F676的程序为什么运行异常呢?有代码有仿真

[复制链接]
2310|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kdljdh|  楼主 | 2013-3-25 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这段时间刚玩PIC,用PIC16F877A和PIC16F876A,写了几个简单程序,都可以正常运行,
唯独用到16F676时,就出问题了,位操作不正常,
请教下高手们,16F676和16F877A编程上面有什么不一样的吗?
MCU配置寄存器是严格按数据手册上配置的,
在主函数里面操作一个位可以正常运行,
但再在后面连续操作其它位端口的时候,就不正常了
看代码:

#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
/*****************************************************************/
__CONFIG(0X1D1);  //前面是两个下杠  00000111010001
      //13、12-BG1-BG0,用于欠压检测和上电复位电压的带隙校准位
      // 00=最低带隙电压,11=最高带隙电压
      //11-9,未用=0
      //8、CPD,数据代码保护全能位,   1=禁止数据存储器代码保护,0=使能数据存储代码保护
      //7、CP,程序代码保护使能位,   1=禁止程序代码保护,0=使能程序代码保护
      //6、BODEN,欠压检测BOD使能位,   1=使能,0=禁止
      //5、MCLRE,RA3/MCLR引脚功能选择,  1=RA3为MCLR,0=RA3为数字IO,MCLR内部连接到VDD
      //4、PWRTE,上电复位定时器PWRT使能位, 1=禁止PWRT,0=使能PWRT
      //3、WDTE, 看门狗定时器WDT使能位,  1=使能WDT,0=禁止WDT
      //2-0,FOSC2-0,振荡器选择位
      //111=RC振荡器,
      //111 = RC 振荡器:  RA4/OSC2/CLKOUT 作为 CLKOUT 引脚 , RA5/OSC1/CLKIN 作为RC 输入引脚
      //110 = RC振荡器:  RA4/OSC2/CLKOUT 作为I/O 引脚,RA5/OSC1/CLKIN 作为 RC输入引脚。
      //101 = INTOSC振荡器: RA4/OSC2/CLKOUT 作为 CLKOUT引脚 ,RA5/OSC1/CLKIN作为I/O引脚。
      //100 = INTOSC振荡器: RA4/OSC2/CLKOUT 作为 I/O引脚, RA5/OSC1/CLKIN 作为 I/O引脚
      //011 = EC:RA4/OSC2/CLKOUT 作为I/O 引脚, RA5/OSC1/CLKIN作为 CLKIN引脚
      //010 = HS 振荡器: 高速晶体 /谐振器接到RA4/OSC2/CLKOUT 和 RA5/OSC1/CLKIN
      //001 = XT 振荡器: 晶振/谐振器接到 RA4/OSC2/CLKOUT 和 RA5/OSC1/CLKIN
      //000 = LP 振荡器:低功耗晶振接到 RA4/OSC2/CLKOUT 和 RA5/OSC1/CLKIN  
        
     
/*****************************************************************/
#define D1 RC0
#define D2 RC1
#define D3 RC2
#define D4 RC3
/*****************************************************************/
void delayms(uint z)
{
uint y;
while(z--)
for(y=100;y>0;y--);  //晶振频率为4M时,Y=100,延时1MS
}
/*****************************************************************/
void mcu_init()
{
TRISA=0X02;    //设置RA的IO方向,高为输入,低为输出
TRISC=0X00;
// OPTICN_REG=    //100
// IOCA=0X02;    //使能RA3引脚为外部中断引脚
// WPUA=0X02;    //A端口弱上拉使能,输入状态时用
// GIE=1;     //开总中断
}
/*****************************************************************/
void main()
{
uchar i;
mcu_init();
RC0=1;
RC1=1;
RC2=1;
do
{
/*  D1=1;
  delayms(500);
  D2=1;
  delayms(500);
  D3=1;
  delayms(500);
  D4=1;
  delayms(500);
// PORTC=0;
*/ // delayms(500);
}
while(1);
}
/*****************************************************************/
void interrupt RA()
{
RAIF=0;    //中断标志位清零
D1=D2=D3=D4=1;
delayms(1000);
D1=D2=D3=D4=0;
}
沙发
NE5532| | 2013-3-25 11:19 | 只看该作者
8层是端口的模拟功能没关闭。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:皇冠网址www.hg00888888.com

1

主题

2

帖子

0

粉丝