求助PIC小程序能仿真写片后不能运行

[复制链接]
5363|4
 楼主| 2d732 发表于 2008-1-15 09:35 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;初次游荡PIC就触礁。敬请老水手指点指点。<br />暂时还没有PIC调试设备和用户板,用了手边一片16F84a接上LED和输入按钮就准备上上手。简短程序在MPLAB&nbsp;IDE上软仿真正常,但写入后片子就是不能运行。<br />&nbsp;&nbsp;&nbsp;&nbsp;供电电压、复位脚电压、晶振脚的波形都正常。<br />我用的是superpro/z写入器,由于里面列表中仅有含16F84,我是用它代替16F84a。选用的是Intel格式。写入后再读回与源程序反汇编代码无异常。另外我试将Config的各项都更改过,仍不能运行。<br />在superpro/z写入器选择16F84片子后有配置字选项,其中有ID0~ID3输入框,默认均为3FFF,我不知道其意义。请问应该如何填写?另外,看门狗、上电定时器、晶振方式、代码保护的选项应该与程序中config一致吗?<br />&nbsp;&nbsp;&nbsp;&nbsp;敬请前辈给与帮助<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;以下是那段代码<br />&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p=16F84A<br />&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;&ltp16F84A.inc&gt<br />&nbsp;&nbsp;&nbsp;&nbsp;__CONFIG&nbsp;&nbsp;&nbsp;_CP_OFF&nbsp;&&nbsp;_WDT_OFF&nbsp;&&nbsp;_PWRTE_OFF&nbsp;&&nbsp;_XT_OSC<br /><br />INT_VAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UDATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0C&nbsp;&nbsp;&nbsp;<br />COUNT&nbsp;&nbsp;&nbsp;&nbsp;RES&nbsp;1<br />DVAR&nbsp;&nbsp;&nbsp;&nbsp;RES&nbsp;1<br />DVAR1&nbsp;&nbsp;&nbsp;&nbsp;RES&nbsp;1<br />DVAR2&nbsp;&nbsp;&nbsp;&nbsp;RES&nbsp;1<br /><br />RESET_VECTOR&nbsp;&nbsp;CODE&nbsp;&nbsp;&nbsp;&nbsp;0x000&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;start<br /><br />MAIN&nbsp;&nbsp;&nbsp;&nbsp;CODE<br />start<br />&nbsp;&nbsp;&nbsp;&nbsp;CLRF&nbsp;&nbsp;&nbsp;&nbsp;PORTB&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;&nbsp;&nbsp;&nbsp;0xF0<br />&nbsp;&nbsp;&nbsp;&nbsp;bsf&nbsp;&nbsp;&nbsp;&nbsp;STATUS,5&nbsp;&nbsp;&nbsp;&nbsp;;RP0置1,选中Bank1;以便设置寄存器TRISB<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;&nbsp;&nbsp;&nbsp;TRISB&nbsp;&nbsp;&nbsp;&nbsp;;RB口D3~D0为输入;<br />&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STATUS,5<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;PORTB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;无效clear&nbsp;PORTC<br />&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;COUNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;clr&nbsp;count<br />IncCount<br />&nbsp;&nbsp;&nbsp;&nbsp;incf&nbsp;&nbsp;&nbsp;COUNT,F&nbsp;&nbsp;&nbsp;;increment&nbsp;count<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;COUNT,W<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;PORTB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;display&nbsp;on&nbsp;port&nbsp;c<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;Delay&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;IncCount&nbsp;&nbsp;;loop<br />Delay<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0xFF;&nbsp;set&nbsp;outer&nbsp;delay&nbsp;loop<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;DVAR2<br />Delay0<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0xFF;&nbsp;set&nbsp;outer&nbsp;delay&nbsp;loop<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;DVAR1<br />Delay1<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;&nbsp;0x08<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;DVAR;&nbsp;set&nbsp;inner&nbsp;delay&nbsp;loop<br />Delay2<br />&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;&nbsp;&nbsp;DVAR<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;Delay2<br />&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;&nbsp;&nbsp;DVAR1<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;Delay1<br />&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;&nbsp;&nbsp;DVAR2<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;Delay0<br />&nbsp;&nbsp;&nbsp;&nbsp;return<br />&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
lifengtao 发表于 2008-1-15 10:38 | 显示全部楼层

hehe

貌似带A和不带A区别还是比较大的,最好找个专用烧写器。烧写时,晶振选HS。<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;&nbsp;&nbsp;&nbsp;0xF0<br />&nbsp;&nbsp;&nbsp;&nbsp;bsf&nbsp;&nbsp;&nbsp;&nbsp;STATUS,5&nbsp;&nbsp;&nbsp;&nbsp;;RP0置1,选中Bank1;以便设置寄存器TRISB<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;&nbsp;&nbsp;&nbsp;TRISB&nbsp;&nbsp;&nbsp;&nbsp;;RB口D3~D0为输入;<br />&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STATUS,5<br />错了&nbsp;这样RB口D3~D0为输出D4~D7为输入&nbsp;你把控制字写反了<br />IncCount<br />&nbsp;&nbsp;&nbsp;&nbsp;incf&nbsp;&nbsp;&nbsp;COUNT,F&nbsp;&nbsp;&nbsp;;increment&nbsp;count<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;COUNT,W<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;PORTB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;display&nbsp;on&nbsp;port&nbsp;c<br />&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;Delay&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;IncCount&nbsp;&nbsp;;loop<br />死循环,还不喂狗<br />你写的汇编真不怎么地~~大小写混用,格式混乱。谁教你的。
 楼主| 2d732 发表于 2008-1-16 16:04 | 显示全部楼层

恢复lifengtao先生

&nbsp;&nbsp;&nbsp;&nbsp;谢谢lifengtao先生的指点。2MHz晶振选XT是一些资料上看到的,但我还是采纳你建议用HS试试,还是不行。看来目前我没有专用设备是难以起步的。我现在想改用有ICSP(TM)&nbsp;协议的片子入门,因我购了一支ICD2。原想买块Demo&nbsp;2&nbsp;plus演示板以节省时间。可问贝能科技要392个大洋,只好准备买只18F452片子搭个实验板。<br />&nbsp;&nbsp;&nbsp;&nbsp;谢谢你指出我在程序中大小写混用的错误,其实是我随手考来的。初始化B口用了0xF0,原意是将B口低4位输出、高4位输出,结果还没有看到循环灯就卡壳了。<br />&nbsp;&nbsp;&nbsp;&nbsp;在设置中在暂时关闭了狗,所以没在程序中喂狗。<br />&nbsp;&nbsp;&nbsp;&nbsp;谢谢lifengtao先生的指教,您还能告诉我config中的CP含义吗?写片是填ID的意义何在?要如何填写?也在此求教热心人,小生有礼了。<br />
lifengtao 发表于 2008-1-17 10:12 | 显示全部楼层

呵呵~

你的实验板CUP搭有晶振(如&nbsp;4M,12M,16M,20M),你烧写芯片就选择HS(高速),它是一种芯片震荡器选择方式.其它的还有RC(阻容),就是OSC1管脚接电阻电容.你说的XT(标准),和HS的芯片外部接法一样,不过我一般都是用HS.晶振不要选2MHz,选4MHz或它的倍数.<br />ICSP(TM)&nbsp;协议的片子16F7X或16F8XX都是有的啊,你没必要买18F的片子啊,它的指令是16位的.<br />狗的问题就不说了,呵呵.<br />config中的CP1,CP0是程序代码保护方案,你这么关心这个干吗?怕你的程序被人读走啊?!ID是用户识别码,这个对你更没有意义.<br />动手是很重要,但你要先有一本PIC的书.<br />不要说我是先生,我还是很年轻的.
 楼主| 2d732 发表于 2008-1-17 16:44 | 显示全部楼层

To lifengtao

To&nbsp;lifengtao<br />&nbsp;&nbsp;&nbsp;&nbsp;谢谢你的回复。我才知道16F7X或16F8XX也有ICSP(TM)&nbsp;协议。<br />&nbsp;&nbsp;&nbsp;&nbsp;书是要买的,不过我大都是先动手,以后才知道该买什么样的书。<br />&nbsp;&nbsp;&nbsp;&nbsp;从51转过来,PIC啥都别扭,啥都新鲜,慢慢来吧。<br />&nbsp;&nbsp;&nbsp;&nbsp;年轻就不能称先生吗?我常从年轻人那里学新知。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

34

帖子

1

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