第一次用16F77写了一个简单的程序,烧片后不能运行...请大侠

[复制链接]
5325|18
 楼主| yjypmypm 发表于 2007-12-21 00:06 | 显示全部楼层 |阅读模式
第一次用16F77写了一个简单的程序,烧片后不能运行...表现为led_1常亮(外接LED&nbsp;)<br />请大侠指点....谢谢<br /><br /><br /><br /><br /><br />#include&nbsp;&ltpic1677.h&gt<br />#define&nbsp;_16C77<br /><br /><br />#define&nbsp;SLEEP()&nbsp;&nbsp;asm(&quot;sleep&quot;)<br />#define&nbsp;NOP()&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;nop&quot;)<br />#define&nbsp;clrwdt()&nbsp;asm(&quot;clrwdt&quot;)<br /><br /><br />#define&nbsp;uchar&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;<br />#define&nbsp;uint&nbsp;&nbsp;&nbsp;unsigned&nbsp;int<br /><br /><br />#define&nbsp;led_1&nbsp;&nbsp;&nbsp;RC7<br />#define&nbsp;led_2&nbsp;&nbsp;&nbsp;RC6<br />#define&nbsp;out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC0<br />#define&nbsp;busy&nbsp;&nbsp;&nbsp;&nbsp;RE0<br />#define&nbsp;req&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RE1<br /><br />void&nbsp;port_init()<br />{<br />&nbsp;TRISA&nbsp;=&nbsp;0xFF;&nbsp;//ff;&nbsp;&nbsp;0&nbsp;out;&nbsp;1&nbsp;in<br />&nbsp;TRISB&nbsp;=&nbsp;0x00;<br />&nbsp;TRISC&nbsp;=&nbsp;0x3E;&nbsp;//fe&nbsp;&quot;0011&nbsp;1110&quot;<br />&nbsp;TRISD&nbsp;=&nbsp;0x00;&nbsp;<br />&nbsp;TRISE&nbsp;=&nbsp;0x00;&nbsp;//df;&nbsp;&nbsp;&nbsp;<br />&nbsp;}&nbsp;&nbsp;<br /><br /><br />void&nbsp;delay()<br />{<br />uint&nbsp;a,b;<br /><br /><br />&nbsp;&nbsp;for(a=4000;a&gt0;a--)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;for(b=200;b&gt0;b--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />main()<br />{<br />&nbsp;port_init();<br />&nbsp;<br />while(1)<br />{<br />led_1=1;<br />&nbsp;delay();<br />led_1=0;<br />&nbsp;delay();<br />}<br />}<br />
xieyuanbin 发表于 2007-12-21 08:26 | 显示全部楼层

你用软仿真看看,

你一个周期是多长时间,如果周期小于30MS,你的感觉就是常亮。
 楼主| yjypmypm 发表于 2007-12-21 22:45 | 显示全部楼层

谢谢版主支持

   经过软件实测结果延时8.048007秒.<br />   编程环境(MPLAB7.20+PICC8.05+TOP2004的编程器)<br /><br />   想做如下一个系统来测试继电器,支持中文显示,输出指定频率,并对接收到的脉冲计数,来判断继电器的好坏.<br />   <br />   目前还没闪亮一个LED.....<br />  边学边做,呵呵.<br />   <br />   以后我还会把进展陆续发上来,望大家多多批评...<br /><br />            
程序匠人 发表于 2007-12-21 22:55 | 显示全部楼层

你和匠人的进度正好同步,哈哈

匠人刚把一个led点亮,你可以去看看
hotpower 发表于 2007-12-21 23:23 | 显示全部楼层

哈哈~~~俺现在正式开始STM32菜鸟的历程...

实际当任何菜鸟的前几件事的第1件事情就是让LED闪起来~~~
 楼主| yjypmypm 发表于 2007-12-21 23:37 | 显示全部楼层

能与匠人同行,真是深感荣幸啊,还望多多指教.

能发个链接给我吗.<br />         谢谢
程序匠人 发表于 2007-12-22 00:09 | 显示全部楼层

见:天梯 之 从零开始玩转PIC

  <br /> 相关链接:<a href='https://bbs.21ic.com/club/bbs/list.asp?boardid=27&t=2800847&tp=%u5929%u68AF%20%u4E4B%20%u4ECE%u96F6%u5F00%u59CB%u73A9%u8F6CPIC'>https://bbs.21ic.com/club/bbs/list.asp?boardid=27&t=2800847&tp=%u5929%u68AF%20%u4E4B%20%u4ECE%u96F6%u5F00%u59CB%u73A9%u8F6CPIC</a>
xymxym 发表于 2007-12-22 21:42 | 显示全部楼层

注意PIC对端口的"读--修改--写"问题!

  
兰天白云 发表于 2007-12-23 08:13 | 显示全部楼层

拿张明锋的书做桌面?

  
xieyuanbin 发表于 2007-12-24 12:20 | 显示全部楼层

楼主桌面够乱。

软件仿真有没有设置芯片运行频率?默认设置是20M,如果你用4M的振荡,那么你的周期就是40秒,我估计你没这个耐心看到LED1灭
systemchip 发表于 2007-12-24 13:07 | 显示全部楼层

:

狗叫了。。。
 楼主| yjypmypm 发表于 2007-12-30 23:28 | 显示全部楼层

谢谢各位大侠的热心帮助,程序终于可以运行了.

看了各位大侠的热心指点后,就反复用SIM&nbsp;来调试程序,<br />关于xymxym&nbsp;说的端口的&quot;:&nbsp;注意PIC对端口的&quot;读--修改--写&quot;问题!<br />&nbsp;&nbsp;我仔细研读了张工出的书163页,发现并没有违反端口的&quot;读--修改--写&quot;的原则.(见后边的电路图)<br />关于xieyuanbin&nbsp;&nbsp;版主的晶振振荡频率的问题.<br />&nbsp;8.048007确实是在软件仿真频率在20M的情况,我用的晶振是4M的,延时就是40秒.后来又改了参数,使其在4M频率时延时2秒.烧片后仍然没有反应.<br /><br />关于systemchip&nbsp;的WDT溢出问题,<br />&nbsp;&nbsp;不怕大侠笑话,我还不大会用WDT,所以一般把WDT关掉了...&nbsp;&nbsp;=_=..<br /><br />继续查找原因<br />...........N久后.<br /><br />发现我用的TOP&nbsp;2004编程器不支持PIC16f77(据说TOP2004支持几万种MCU,EEPROM和各种逻辑器件------卖编程器的说的).没想到不能烧PIC16f77<br /><br />烧写界面如下图.
 楼主| yjypmypm 发表于 2007-12-30 23:28 | 显示全部楼层

解决办法.

用PIC16F77的芯片擦除,用PIC16C77的烧写(没想到这样居然可以)<br />烧写界面如下.
 楼主| yjypmypm 发表于 2007-12-30 23:40 | 显示全部楼层

紧接着就写了显示汉字的程序如下

#include&nbsp;&ltpic.h&gt<br /><br /><br /><br />#define&nbsp;SLEEP()&nbsp;&nbsp;asm(&quot;sleep&quot;)<br />#define&nbsp;NOP()&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;nop&quot;)<br />#define&nbsp;clrwdt()&nbsp;asm(&quot;clrwdt&quot;)<br /><br /><br />#define&nbsp;uchar&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;<br />#define&nbsp;uint&nbsp;&nbsp;&nbsp;unsigned&nbsp;int<br /><br /><br />#define&nbsp;led_1&nbsp;&nbsp;&nbsp;RC7<br />#define&nbsp;led_2&nbsp;&nbsp;&nbsp;RC6<br />#define&nbsp;out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RC0<br />#define&nbsp;busy&nbsp;&nbsp;&nbsp;&nbsp;RE0<br />#define&nbsp;req&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RE1<br />#define&nbsp;bus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTD<br /><br />void&nbsp;port_init()<br />{<br />&nbsp;&nbsp;ADCON1=0X07;&nbsp;&nbsp;&nbsp;//&nbsp;初始化AD&nbsp;I/O,使其工作在数字I/O状态<br /><br /><br />&nbsp;&nbsp;<br />&nbsp;TRISA&nbsp;=&nbsp;0xFF;&nbsp;//ff;&nbsp;&nbsp;0&nbsp;out;&nbsp;1&nbsp;in<br />&nbsp;TRISB&nbsp;=&nbsp;0x00;<br />&nbsp;TRISC&nbsp;=&nbsp;0x3E;&nbsp;//fe&nbsp;&quot;0011&nbsp;1110&quot;<br />&nbsp;TRISD&nbsp;=&nbsp;0x00;&nbsp;<br />&nbsp;TRISE&nbsp;=&nbsp;0x01;&nbsp;//df;&nbsp;&nbsp;&nbsp;&quot;0000&nbsp;0001&quot;&nbsp;&nbsp;busy(输入)&nbsp;req(输出)<br />&nbsp;}&nbsp;&nbsp;<br /><br /><br /><br />void&nbsp;send&nbsp;(uchar&nbsp;dat)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写命令或数据<br />{<br />&nbsp;&nbsp;while(busy==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;bus=dat;<br />&nbsp;&nbsp;&nbsp;NOP();<br />&nbsp;&nbsp;&nbsp;NOP();<br />&nbsp;&nbsp;req=1;<br />&nbsp;&nbsp;while(busy==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;req=0;<br />&nbsp;&nbsp;return;<br />}<br /><br />void&nbsp;wr_zb&nbsp;(uchar&nbsp;comm,uchar&nbsp;addr_x,uchar&nbsp;addr_y,uchar&nbsp;qq,uchar&nbsp;ww)<br />{<br />&nbsp;&nbsp;send(comm);<br />&nbsp;&nbsp;send(addr_x);<br />&nbsp;&nbsp;send(addr_y);<br />&nbsp;&nbsp;send(qq);<br />&nbsp;&nbsp;send(ww);<br />}<br /><br />void&nbsp;delay()&nbsp;&nbsp;&nbsp;//延时是间大约是2秒;<br />{<br />uint&nbsp;a,b;<br /><br /><br />&nbsp;&nbsp;for(a=1000;a&gt0;a--)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;for(b=200;b&gt0;b--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><br /><br />main()<br />{<br />&nbsp;&nbsp;<br />&nbsp;port_init();<br />&nbsp;delay();<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;led_2=1;<br />&nbsp;&nbsp;&nbsp;delay();<br /><br />&nbsp;<br />wr_zb&nbsp;(0xf0,0x00,0x02,0x10,0x01);&nbsp;&nbsp;//显示一个&quot;啊&quot;<br />delay();<br />wr_zb&nbsp;(0xf0,0x03,0x02,0x22,0x42);&nbsp;&nbsp;//&nbsp;显示一个&quot;骡&quot;<br /><br /><br />&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;led_2=0;<br />&nbsp;&nbsp;&nbsp;delay();<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />}<br />
 楼主| yjypmypm 发表于 2007-12-31 00:05 | 显示全部楼层

上图的红圈内的微调电位器

上图的红圈内的微调电位器,让我走了不少弯路,烧入上面的程序后虽然LED_1能正常闪亮,但是就是屏没有显示,(找问题N久,N久....后)无意中调了几圈微调电位器,发现屏慢慢变亮,后来字就显出来了,此电阻是用来调节屏幕对比度的.阻值越大屏幕越暗,电阻值在2.5K时对比度较好.我用的电阻是调在中间位置(5K&nbsp;)所以虽然有显示,但是看不清.....<br /><br />显示屏用的是OCMJ4*12B中文字库的..<br /><br />电路图如下.
 楼主| yjypmypm 发表于 2007-12-31 00:17 | 显示全部楼层

写了

写了这么多希望和我一样的新人,少走一点弯路,嘎嘎..<br />下一步开始写带中断的按键检测..<br />还希望各位大侠继续指点批评.<br />
ccxlslr 发表于 2007-12-31 13:43 | 显示全部楼层

关于PICC 8.05

请问楼主的PICC&nbsp;8.05是在哪儿下载的,能否告知,我找的都是试用的
 楼主| yjypmypm 发表于 2008-1-1 18:05 | 显示全部楼层

www.pic16.com<br />&nbsp;里边有.
zhaoyu2005 发表于 2008-1-7 15:48 | 显示全部楼层

楼主,一看你的帖子就猜是晶振没有配置对,果然是

不是TOP2004不支持PIC16F77,是你的晶振配置位没有选对,这也怪编程器厂家的人员太弱智,没有象PIC16C77那样设计配置页面,你接下来可以试试将FOSC0和FOSC1的其中一个打勾,一个不打勾,按PIC16F77的资料,4M晶振用XT(Crystal/Resonator,FOSC1=0;FOSC0=1)和HS(High&nbsp;Speed&nbsp;Crystal/Resonator,FOSC1=1;FOSC0=0)均可,而你设置的是LP(Low&nbsp;Power&nbsp;Crystal,FOSC1=0;FOSC0=0)当然不行了<br />下次记的好好看资料
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

0

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