维库电子市场网
登录 免费注册 首页 | 行业黑名单 | 委托交易 | 帮助 | English
 
IC供应
IC求购
非IC供应
非IC求购
电子资讯
技术资料
商人论坛
 
技术文章 PDF资料 IC价格 引脚说明 电路图 IC替换 IC厂商 电子辞典
作者 主题 内容
采购元器件好去处--维库电子市场网推荐
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

绝对是pic12f675有问题,我想高手们也会回答错

来源:21ic 作者:sunzefeng 栏目:单片机
绝对是PIC12F675.html">PIC12F675有问题,我想高手们也会回答错
我最近编了一个PIC12F675程序,由于没有仿真器,所以只能烧一次试一次,真是被害惨了,绞尽脑汁也想不出问题所在,最后做了一个简单的程序测试了一下,发现应该是芯片的问题(因为我想不出其因理由来解释)
我的简单测试程序如下:
   org  000h
      goto  main
      org  0004h
      retfie
main:
      call  3ff        ;取晶振校正值
   bsf   STATUS,RP0
      movwf OSCCAL     ;晶振校正
   movlw b'11000000'
      movwf TRISI0       ;设置所有口为输出
   clrw
      movwf ANSEL      ;设置所有口为数字口
   bcf   STATUS,RP0
      
      movlw 0ffh
      movwf GPIO       ;点亮所有灯

   bcf   GPIO,0     ;关闭为灯1
      goto  $
   end
我把675的5个口全用作数字口(除GP3),在每个引脚上接一个LED,当然有限流电阻,烧写设置,看门狗关闭,GP3设置为复位脚,有上拉电阻,选择内部4M,RC振荡,GP4,GP5,都设为I/O口,
   请大家分析一下,最后能亮几个灯,分别是那几个,为什么?
  如果大家没有做过实验我想肯定说不出正确答案,等下我公布答案,看有没有人能答对。
   经过反复实验,有问题的指令为:bcf   GPIO,0
      如果改成bcf  GPIO,1或者2,3,4,5,又会怎么?
     


* - 本贴最后修改时间:2003-7-2 16:02:26 修改者:sunzefeng

1楼: >>参与讨论
martin
一大堆错误
1)   movlw b'11000000'
      movwf GPIO       ;设置所有口为输出
设置IO口方向是用movwf TRISIO这条指令,看过数据手册吗?
2)   movwf GPIO       ;设置所有口为输出
   clrw
      movwf ANSEL      ;设置所有口为数字口
GPIO寄存器在BANK0,ANSEL寄存器不在BANK0,你不知道怎么切换BANK吗?
3)GP0,GP1是内部模拟比较器输入脚,你还需要设置CMCON才可以关掉比较器让IO作为输出的,具体去看数据手册。
4)您难道不知道MPLAB有软件模拟的功能吗?象这样简单的错误分分钟就能查出来的,用的着惨到烧芯片吗?
5)建议不要再犯这种“睡不着觉怨床歪”的通病,多看看数据手册。

2楼: >>参与讨论
lingl2
bcf   GPIO,0前加 nop试试
 
3楼: >>参与讨论
sunzefeng
刚才写错了
斑主说的是,是应该多看看数据手册,不过我英文不好,习惯看翻译过资料刚才是我写错了,不好意思,我刚开始写的程序是:(我开始部分是从MPLAP模板上复制下来的)

        ORG     0x000             ; processor reset
        goto    main              ; go to beginning of


                ORG     0x004             ; interrupt vector location
                retfie
main:
                call    0x3ff
                bsf     STATUS,RP0
                movwf   OSCCAL     ; update register with factory c

                movlw   b'11000000'
                movwf   TRISIO    ;设置口为输出
                clrf    ANSEL    ;设置为数字口
                bcf     STATUS,RP0
loop:            
              movlw    0ff
              movwf    GPIO    ;所有灯亮

              call     delay

              bcf      GPIO,2   ;熄灭第3个灯
              call     delay
              
              goto     loop
;-------------delay--------------------
delay:
              movlw    0ff
              movwf    count1
set_delay1:
              movlw    0ff
              movwf    count2
set_delay11:
              decfsz   count2,f
              goto     set_delay11
              decfsz   count1,f
              goto     set_delay1
              return
                END                     ; directive 'end of program'
我的意图是让第3个灯一闪一闪,不过实际上,第1,2,3个灯都在闪,分析结果是:bcf  GPIO,2 把第3个息灭同时,又把1,2灯也息灭了,所以我怀凝芯片有问题而且如果把bcf  GPIO,2换成其他如bcf  GPIO,3,bcf  GPIO,4,bcf  GPIO,5,第1,2,个灯都会闪

* - 本贴最后修改时间:2003-7-2 16:42:49 修改者:sunzefeng

4楼: >>参与讨论
martin
没看到我上面说的第三条吗?
没看到我上面说的第三条吗?如果你不设置CMCON(内部模拟比较器的控制寄存器),上电时默认GP0,GP1是比较器的两个模拟输入口。由于“Read Modify Write”的特性(详见精华区中的《关于“Read Modify Write”》贴 ),bcf一个口线时,从GP0,GP1两个模拟输入脚读到的电平是零(数据手册里说明了),改写回去后就输出零了,也就是你看到的现象,只要执行bcf GPIO的任何一位,GP0,GP1都会清零。
很简单,把CMCON的低三位全部置一就好了。

5楼: >>参与讨论
sunzefeng
太感谢斑主了!
按斑主说的一试,果然没有这种现象了,原来这里涉及的地方这么多,哎,只能说自己是个进底之蛙,想想我们这里的技术保密和斑主的无私奉献真是太感动了

6楼: >>参与讨论
eling
为什么都不好好看资料,真是无奈
 

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请教,pic16c57 与CF775   ?
CS码在烧录后会变掉么?请指教。
请教各位大侠,为什么PIC单片机会出现死机?
MPLAB IDE V6.10中有C的开发环境吗?
PIC的I/O口为什么老坏?


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号