论坛风格切换切换到宽版
  • 3507阅读
  • 7回复

关于pic12f675 [复制链接]

上一主题 下一主题
离线XLDZZ
 
发帖
443
只看楼主 倒序阅读 0楼 发表于: 2008-07-13
最近在搞pic12f675用来产生2路pwm波
但在实际应用中遇到如下问题,测试程序如下:
list       p=12f675
#include "p12f675.inc"
__config b�'
          org     000h
          nop          
          bsf     status,rp0
          movlw   b�'
          movwf   option_reg
          movlw   b�'
          clrf   ansel
          movwf   trisio;
          bcf     status,rp0
          loop
          bsf     gp5,gp4                          
          bcf     gp4,gp5
          goto     loop
          nop
         

          end
在最后测得gp4,5为高电平,并没有脉冲输出。
好像程序在执行了bsf gp4,gp5后死机,没有往下走。
离线fghlw
发帖
163
只看该作者 1楼 发表于: 2008-07-13
bsf gp5,gp4
bcf gp4,gp5
这是什么意思?
另外没有延时啊
离线fghlw
发帖
163
只看该作者 2楼 发表于: 2008-07-13
movlw   b�'       ;
movwf   option_reg       ;
movlw   b�'       ;
movwf   wpu             ;
movlw   b�'       ;
movwf   osccal           ;这个好象用pdf里的语句不工作 我设成这个才工作不知道为什么
离线bellstudio
发帖
2820
只看该作者 3楼 发表于: 2008-07-13
loop
bsf gp5,gp4
bcf gp4,gp5
goto loop

你是想让gp4和gp5不断翻转输出矩形波?
1、你这个反转时间太短,约等于指令周期。。。
2、bcf gpio, gp5
bsf gpio, gp4
等等,这样才是正确用法。。。
离线fghlw
发帖
163
只看该作者 4楼 发表于: 2008-07-13
'
loop
bsf gp5,gp4
bcf gp4,gp5
goto loop
你是想让gp4和gp5不断翻转输出矩形波?
1、你这个反转时间太短,约等于指令周期。。。
2、bcf gpio, gp5
bsf gpio, gp4
等等,这样才是正确用法。。。
'
改成这样也出不来啊
索性 comf gpio
离线bellstudio
发帖
2820
只看该作者 5楼 发表于: 2008-07-13
如果你在极短的时间内修改同一端口,就会遇到“读-修改-写”问题。。。
bcf,bsf都是把端口值都回来,修改,写入端口
实际上由于端口外部负载的原因,端口电平不会立即达到所需电平,那么在执行下一条类似指令的时候就会把当时端口的状态取回来,而这个状态却并不是你想要的。。。
在线BG2WAH
发帖
608
只看该作者 6楼 发表于: 2008-07-13
你是否可以这么做
附件: 12f675.txt (0 K) 下载次数:162
离线XLDZZ
发帖
443
只看该作者 7楼 发表于: 2008-07-15
多谢各位的回答
发完这个主题我就发现问题了,主要为gpgio的复用问题。
因为除了a/d以外,还有一个比较器。

加一句clrf cmcon就ok了,另还有一个问题。
本来我想用定时器0产生脉宽,用定时器1产生脉间。可是看完datasheet才发现
定时器0在sfr中没有哪一位是控制启动的,后来我用option_reg中的psa来选通
定时器0没有成功。不知道如何控制起停。

还有在16f877中,可以用timer1和ccp来实现pwm,请问ccp是啥东西。
最还有程序示范。

                  以上,感谢。