PIC经验交流贴子收集.docx

上传人:b****5 文档编号:11890468 上传时间:2023-04-08 格式:DOCX 页数:16 大小:27.36KB
下载 相关 举报
PIC经验交流贴子收集.docx_第1页
第1页 / 共16页
PIC经验交流贴子收集.docx_第2页
第2页 / 共16页
PIC经验交流贴子收集.docx_第3页
第3页 / 共16页
PIC经验交流贴子收集.docx_第4页
第4页 / 共16页
PIC经验交流贴子收集.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

PIC经验交流贴子收集.docx

《PIC经验交流贴子收集.docx》由会员分享,可在线阅读,更多相关《PIC经验交流贴子收集.docx(16页珍藏版)》请在冰豆网上搜索。

PIC经验交流贴子收集.docx

PIC经验交流贴子收集

PIC经验交流贴子收集

afanti经验交流

我先说一下我得小经验:

经过一阵的忙碌终于写了一个片子,接上电源发现不停的在复位,经过将近一天的探讨,才发现是电源的功率太小,单片机复位时耗电过大,有较大的电压降,于是单片机就不停地复位,原来试小毛病:

)。

但是一开始我曾经怀疑好多地方,当我把显示部分(LED)去掉,发现工作正常,才考虑到是电源功率问题,呵呵

发表于:

2003-02-2422:

00:

16

hh_up我也来谈谈

首先,出现问题,第一步要查硬件,确保硬件连接无误后,才来查软件。

我记得我开始做LCD显示时,因为将数据线接反(我开始以为那个不重要,没在意),无论我怎样努力,程序写了又写,改了又改,到处找人家写好的程序,可就是不行。

后来折磨了一个多星期,偶然才发现了这个接线错误,当时ft的要死!

后来做IIC也是,因为原来用51写过模拟的iic,所以我以为很简单。

但是后来焊接过程中改掉了一根线,而我毫不在意,于是又导致我3天没有进展,气愤的要死。

所以说硬件没做好,软件就别做了,做了也是瞎忙活。

还有一些小经验。

有点仿真器可以使用仿真器自带的晶振,也可以使用目标板上的晶振,这点要注意。

我当时因为没注意这点,做串口通信时,死活调不好波特率,也是ft!

其他的想到了再补充!

欢迎大家踊跃发言!

帮助别人也是帮助自己!

发表于:

2003-02-2422:

46:

46

greatddq我的一点教训

我在用16c72的时候。

没有仔细的看资料。

就直接用以前直到的模拟I2c通讯协议,经过同学提示,可以用硬件的。

因为他有I2C口。

当时也觉得好笨,这个都没有注意,这才开始看书,通过大概3天看书,直到了可以用它的寄存器控制硬件的协议,简单很多。

于是就开始画流程,选方式。

后来怎么也找不到主控怎么设定。

多亏各位大虾的指教,我才注意到ssp和mssp的区别。

于是重新详细的看了芯片的资料。

最后搞定!

呵呵

发表于:

2003-02-2500:

28:

30

qiuyongyang看门狗

让我也来谈一下自己伤心的往事吧,我刚开始学PIC的时候,由于经济困难,买不起仿真器,就买了一个下载器,后来我写程序的时候看门狗位没有移除,发现LED老是不停地闪烁,折腾了差不多一个月,因为又没有人教,有无资料,只在自己慢慢地苦想,那段日子真是不堪回,甚至到了失望的田地了,后来偶尔把看门狗位清0,一切大功靠成了.,,,,,

发表于:

2003-02-2518:

56:

55

QIBAOENA/D结果转换成BCD码

前些日子编了个LCD显示A/D转换结果的程序,其中要求将10位数据转换成电压值,进行读取字符显示表,动了一番脑筋后,找到了好办法,不仅很快,而且不用调用复杂的乘除法及BCD码转换,结果已经是BCD码,还有一个优点,只要需要,可以很方便的多算几位小数。

先拿出来,让大家看一下。

转换结果右移,ADRESH中是高2位,思路是,10位结果,对应5V电压,求电压值应x5/1024,程序如下:

MOVFADRESH,0

MOVWFADDBH

MOVFADRESL,0

MOVWFADDBL

CALLSUM2K

MOVFTEMP,0

MOVWF30H;整数送回30H

CALLSUM2K

SWAPFTEMP,0;交换4位

MOVWF31H;小数第一位送回31H,在高4位

CALLSUM2K

MOVFTEMPH2,0

IORWF31H;31H低4位中是小数第二位

;=====================================

D_ADD;双字节加法ADDA+ADDB->ADDB

MOVFADDAL,0;ADDB和ADDA低半字节相加

ADDWFADDBL

BTFSCSTATUS,C;有进位否?

INCFADDBH;有,ADDB高字节加1,再加ADDAHI

MOVFADDAH,0;ACCA、ACCB高半字节相加

ADDWFADDBH

RETURN;子程序返回

;=====================================

SUM2K

CALLSUM10;ADDB*10

DIV2K;ADDB/2048

CLRFTEMP

CALLSUB8;ADDBH/8

RETLW0

;======================================

SUB8;ADDBH/8,结果整数在TEMPH2,余数在ADDB

MOVLW08H

SUBWFADDBH

BTFSSSTATUS,C

GOTOSUB81

INCFTEMP

GOTOSUB8

SUB81

ADDWFADDBH

RETLW0

;=====================================

SUM10;ADDB*10=>ADDB

CALLSUM2

MOVFADDBH,0

MOVWFADDAH;ADDBX2->ADDA

MOVFADDBL,0

MOVWFADDAL

CALLSUM2

CALLSUM2;ADDBX8=>ADDB

CALLD_ADD;ADDA+ADDB=>ADDB

RETLW0

;======================================

SUM2;ADDB*2=>ADDB

BCFSTATUS,C

RLFADDBH

BCFSTATUS,C

RLFADDBL

BTFSCSTATUS,C

BSFADDBH,0

RETLW0

DIV2;ADDB/4

BCFSTATUS,C

RRFADDBL

BCFSTATUS,C

RRFADDBH

BTFSCSTATUS,C

BSFADDBL,7

RETLW0

发表于:

2003-02-2801:

52:

38

picuser我也谈谈

我在用串口通讯试验时,因mcu未接滤波电容,所以在仿真时总是复位,去掉RS232芯片,一切正常。

反复修改硬件电路,结果依旧。

最后想到可能是电源不稳。

加了一个滤波电容。

终于搞定。

感叹芯片如此禁不起干扰。

发表于:

2003-02-2808:

41:

05

lhj6132002老调重弹

书中自有黄金屋,书中自有颜如玉。

多看书,多看资料,其实书上什么都有。

不管你学什么,第一步就是尽可能地把它的所有资料找到,认真仔细地看透它,先从理论上把自己武装起来,再在实践中对照理论来验证,把书上的东西化为自己所有。

发表于:

2003-03-0122:

50:

53

afantiRE

我用164(串入并出移位寄存器)做静态显示时,在送数据时发现数码管闪烁,由于在CLK当有电平变化时,164就把数据移一位,造成数码管闪烁。

于是,用一个I/O口控制数码管的显示,当向164传送数据时,就把显示关掉,当数据传送完毕,点亮数码管;由于和164通讯的时间非常短,所以看不到闪烁

发表于:

2003-03-0316:

30:

21

王大林RE

曾经用一个164控制11个数码管 没有用专门的I/O口线控制数码管的只是在重新输出数据的时候 先给一个全灭的段码 也可以不闪

发表于:

2003-03-0318:

16:

39

 

agency也说A/D结果转换成BCD码

对于X5/1024,我的方法是算出5/1024,即0.0048828(BCD码),取5个寄存器,分别赋值为8,2,8,8,4!

再对48828进行BCD码自加X次,最后结果取一位整数,小数为6位!

我做的是直流电压表,显示很精确的

我感觉我说的很清楚了啊!

对于X5/1024,我的方法是算出5/1024,即0.0048828(BCD码),取5个寄存器,分别赋值为8,2,8,8,4!

再对48828进行BCD码自加X次,最后结果取一位整数,小数为6位!

我做的是直流电压表,显示很精确的

发表于:

2003-03-0512:

27:

18

zhaoke999

偶然发现的,PIC的片子复位脚直接接5V电源抗干扰能力最强,可以用2000V高压打在距芯片1CM处,而工作正常。

发表于:

2003-03-1419:

45:

46

小丁

这个主题很好,我也谈谈个人经验

软件上也有很多容易疏忽的地方,比如:

堆栈溢出,真是的,最近本人连续犯此错误:

(由于程序正常运行时,不会出现溢出情况,需满足特定条件(举例:

开通TIMR1,定时到后进入相应的处理程序,此时发生串行通讯中断,处理中断程序,此时往往容易导致溢出),而这种情况在仿真时很难遇到,我是在客户反映死机的情况下才找到的,希望大家看了此贴后,不会犯这种错误。

查表时页面溢出(非跨页)导致指针跑飞等情况。

发表于:

2003-03-2114:

51:

46

procat打高压不能证明抗干扰能力强

打高压不能证明抗干扰能力强,高压只是静电,只能说明线路的绝缘性能是否合格。

发表于:

2003-03-2408:

13:

51

 

zhaoke999

关于中断时的堆栈溢出

pic16f876堆栈只有8级,每发生一次子程序调用(或中断),将当前13位地址压到堆栈,PC=子程序起始地址低8位+PCLATH(或04H),子程序返回时将13位地址从堆栈中弹出=PC。

堆栈的操作由CPU控制不可监控,溢出不报警,子程序调用(或中断)超过8次嵌套时,最先压到堆栈的13位地址被冲掉,子程序返回时将回不到调用前的PC,程序。

一般使用不会达到8次嵌套,但如果有5、6次子程序嵌套,而中断服务程序中有1、2次子程序调用便相当危险。

调试时很难完全模拟所有实际情况,

一般的避免方法:

1、一般的子程序调用不要超过6次子程序嵌套,在开始编程前最好画一下流程。

2、尽量避免在不可确定发生时刻的中断(如串口接收、定时器)程序中加子程序调用。

中断服务程序中尽量用GOTO语句。

3、在6次子程序嵌套发生前屏蔽总中断。

4、厂家提供的器件读写驱动例子一般喜欢用很多子程序,用之前最好改一下。

5、可以将CALL改用GOTO,比如:

AAA.......

REYURN

.......

BBBCALLAAA

可以改为:

AAA......

MOVFWPCLATH_TEMP

MOVWFPCLATH

MOVFWPC_RETURN

MOVWFPCL

......

BBB

MOVFWHIGHCCC

MOVWFPCLATH_TEMP

MOVFWHIGHAAA

MOVWFPCLATH

MOVLWCCC

MOVWFPC_RETURN

GOTOAAA

CCCNOP

................

6、如果嫌麻烦,可以用C编程,C编译出来之所以大,与为避免堆栈溢出而作的绕弯处理不无关系

发表于:

2003-04-0500:

33:

30

shalky

PIC的一些问题

我使用PIC单片机的次数不算多,这种单片机有它的优点,也有缺点。

这里只说主要的几个缺点。

1,低档PIC无中断功能,在许多情况下,这是一个比较严重的问题,需要使用一定的系统设计技巧;

2,堆栈的深度有限。

低档的深度为2,高档的也就是31吧?

这也需要使用技巧;

3,RAM分区访问,造成一定的麻烦;

其中前面2个问题,只要在系统分析阶段,有针对性地下点功夫,是完全可以绕过去的。

主要是把那些比较杂、用时不多、偶尔发生的事件处理好就行。

这些事件很多人喜欢在主程序中处理,我不这样做。

我的做法是做一个或多个高效率的子程序,它就负责所有的杂事,如LED刷新,键盘输入,A/D采集,信号检测等。

对于主程序,为了访问某些资源,只要访问与具体资源相对应的RAM区即可。

如显示用的VRAM,键盘的KRAM等。

对于堆栈的溢出,记住一点就行,主程序中用的子程序不允许再访问子程序,即只允许出现一级子程序。

或许有人会说这做不到,其实不然。

如果PIC的堆栈比较多,可以多出现几层。

发表于:

2003-04-0508:

13:

43

FANZENGTING

关于LED显示

display()

{//显示

displaycount++//用于调整刷新率

if(displaycount!

=5){return;}

else

{

displaycount=0;

if(displaybit>=6)

{

displaybit=0;

}

displaybit++;//用于显示位转换

count1=0;//假设为控制段的口线

count2=0;//假设为控制位的口线

switch(displaybit)

{

case1:

display1();//一位的段码

one=1;//选通位

return;

case2:

display2();

two=1;

return;

case3:

display3();

three=1;

return;

case4:

display4();

four=1;

return;

case5:

display5();

five=1;

return;

case6:

display6();

six=1;

return;

default:

return;

}

}

我的LED显示是这样做的;把display()放到主函数中去通过displaycount++(软延时)调整刷新率;若是程序量比较大时,可在主函数中多放一些display();

发表于:

2003-04-1016:

06:

31

John

eeprom读写问题

完成一个项目,程序中用到eeprom的读写,编了相应的读写eeprom子程序,用着一直很正常。

最后要交工了却发现,有一处的读eeprom出错。

反复检查程序正确,又用PIC的sim仿真也没有错误,可是实际运行就出错,后来费了很大的周折才发现,读eeprom的上面就是一个写eeprom的程序,因写过程没完成,读eeprom就出错了。

发表于:

2003-05-0211:

53:

49

 

刘骁奖

关于用RB口做按键输入时体会

我用873做了一个板子,用RB口做按键输入,按键按下时,通过1.2K的电阻与地导通,外部接程序中因为打开了RB口的上拉,而使RB口的状态在仿真器上没有变化。

PIC的RB口内部上拉是非常可靠的,如果因为其它原因要使用外部上拉时,一定要关闭内部上拉位(OPTION_REG,7),否则输入不能被拉到0。

把这个放在这里,大家不要犯我这样菜的问题!

发表于:

2003-06-2717:

40:

17

zhaoke999

关于在单片机程序设计中利用梯形图设计控制逻辑的经验

梯形图在自动控制和PLC编程中几乎是必用的,大家应该都比较熟。

大家在单片机编程时,可能比较习惯用流程图做辅助设计。

其实在设计比较复杂的逻辑控制时,利用梯形图辅助设计会更直观、快速,主要是与、或、非的逻辑算法,程序是顺序下来的,可读性、可评估性强,有利于发现逻辑中的缺陷,添加功能也很方便。

复杂的逻辑控制用流程图做辅助设计时,会有好多的分支、跳转,调试和修改程序时多有不便。

如果是用C编程,与某些PLC和PAL、GAL的输入方式是一样的。

51系列汇编可利用布尔运算,PIC汇编需要一些技巧。

发表于:

2003-07-2611:

45:

37

supertask

今天才发现RB6、RB7的独特之处

以前用RB4~7的电平变化中断时,好像都很简单,今天才发现RB6和RB7不仅仅做I/O口,做电平变化中断,还在单片机烧写编程时,作为串行时钟输入线PGC和串行数据输入线PGD,所以如果在调试模式下,这两个端口的电平变化中断是不会响应的,必须烧写进去,然后才行。

发表于:

2003-08-0523:

33:

09

张政波

出现问题,硬件优先考虑的原则

我在用CCP模块实现脉冲捕捉功能时,因为在中断程序中有一定的处理程序,每次来脉冲时,系统都不能按照设计的思路执行,调试发现只要进入CCP中断系统就复位。

开始怀疑软件中断入口有问题,反复查找!

后来才怀疑到硬件问题,用示波器慢频率扫描才发现,脉冲的边沿很粗,在细看,原来有许多小的矩形脉冲!

导致CCP多次中断出错。

我是用的LM311输出脉冲信号,在输出端加一个滤波电容,问题解决了,波形很漂亮。

发表于:

2003-08-0623:

28:

10

blue2001

PIC的片子复位脚直接接5V电源抗干扰能力最强,是否是偶然发现?

拿PIC16C54C来说把:

在16c54的datasheet中提到:

5.1Power-OnReset(POR)

ThePIC16C5Xfamilyincorporateson-chipPower-OnReset(POR)circuitrywhichprovidesaninternalchipRESETformostpower-upsituations.Tousethisfeature,

theusermerelytiestheMCLR/VPPpintoVDD.Asimplifiedblockdiagramoftheon-chipPower-OnResetcircuitisshowninFigure5-1.

而PIC16C54C/55A/56A/57C/58B(Rev.ASilicon)ErrataSheet(

有更详细的描述。

对不同的MCU,又会有些微的差别,比如18Fxx8的datasheet中提到:

3.1Power-onReset(POR)APower-onResetpulseisgeneratedon-chipwhenaVDDriseisdetected.TotakeadvantageofthePORcircuitry,connecttheMCLRpindirectly(orthrougha

resistor)toVDD.

其实仔细研究和比较一下关于POR部分的文档,我们就能了解到PIC系列单片机在复位电路部分的设计思路。

为了保证复位的可靠性,某些型号的MCU都提供了PowerOnReset,了解了这些,对于实际的设计应该会有很大的帮助把。

其实,我的想法是技术上的问题都是能够找到原因的,我们不但要做到知其然,还应该要知其所以然。

henanboy我的经验

我曾经采用pic16c74b写过一个程序,当时我将RB口作为输入口,我曾经在编写程序的时候将该口的弱上拉功能取消了,但是在调试得过程当中,我不小心将该口的弱上拉取消指令屏蔽掉了。

这是我的程序运行出现了混乱,我当时不知道到是什么原因造成的。

经过我的反复调试,最后才知道是他在捣鬼。

发表于:

2003-09-2821:

31:

58

afantisubject

最近在用16F877做温度控制时,用其内部A/D时,选用内部电源作为REF+,然而在使用时,总是使采样结果不稳定(多次采样平均),后来纠其原因是采用LED显示,有时电流变化较大,、使REF+变化,造成采样的变化波动较大。

后来采用一个模拟口作为REF+,马上见效,结果很稳定。

所以,要尽量采用一个模拟口作为REF+(如果允许)。

另外,在测量温度时,有一段温度不能分辨出来,于是我采样32次,结果除以16,这样不改动硬件配置,很轻松做出来。

哈哈,相当于11位AD了这种办法使用的范围有限,以上是我的做法,数据仅供参考``````

发表于:

2003-10-0420:

13:

00

afanti

保护PCLATH

程序超过1page,若使用中断,也应当保护PCLATH,本来以为堆栈的宽度=PC的长度,发生中断时会保护PCLATH。

开始时不注意,后来调试时发现错误,查了好长时间才发现PCLATH没被保护,不能自动恢复,TNND!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

发表于:

2003-10-0420:

23:

46

tanjunbi

中断应保护W,STATUS

PIC单片机的不足之处就是中断时不保护数据,为稳重起见,我的程序中断保护W和STATUS,由于PCLATH的值对我的中断无影响,且中断程序也未改变它,故未保护。

发表于:

2003-10-0815:

23:

23

 

wanglixin

LCD的电平匹配问题

由于我是第一次使用液晶,切我们的产品用的CPU是3v的工作电压,而液晶是定做的,说工作电压在3---5v,因为我们自己焊接的一个产品的实验板有点问题,所以我就把液晶接在拉PICLF877的模拟板上,结果怎么都调试不成功,经过一翻努力终于调试的显示拉,但是乱码,总是在软件上找原因,就这么折腾拉3,4天,后来决定把产品的实验板修好,接在它上面.虽然在几天的努力中也曾怀疑过是硬件的问题,但由于用的是PIC的模拟板,总觉得硬件没有问题.接在实验板上后,运行一切正常.这才发现是由于电平不匹配的原因.虽然LCD的工作电压是接在3V的电源上的,但由于单片机是5v的,导致单片机I/O输出的低电平相对于LCD要求的低电平过高,使其在误认为为高电平而工作不正常.

发表于:

2003-10-2811:

25:

19

afanti

烧写片子时要注意PB,3

当我把调试好的程序烧写到片子(877A)时,发现PB,3作为输出时不起作用,起初以为片子有问题,再上仿真器,没问题,烧个片子,又这样,经过多次试验,才发现是烧写片子的问题,后来查了一下datasheet,才发现在一个不起眼的地方有这样一句话:

Inthismode(LowVoltageICSPProgramming),theRB3/PGMpinisdedicatedtotheprogrammingfunctionandceasestobeageneralpurposeI/Opin.原来如此!

所以在烧写片子时,要把选项:

lowvoltageprogram选择disable,这样就OK了

发表于:

2003-11-1019:

56:

26

alexshao1978

简单的问题:

KEY1/KEY2输入,LED1/LED2输出,KEY1按下,100ms去抖,LED1输出,KEY1松开,200ms去抖,LED1输出。

KEY2和LED2关系同KEY1/LED1关系。

两路互相独立。

此题看起来很简单,但是做好好像不易。

特别提醒,比如KEY1输入50ms后KEY2输入,那么怎么处理?

所以不能用简单的延时方式.

问:

使用何种编程的整体思路?

大家有没有兴趣探讨一下。

偶使用有限状态机方式,各两个态(输出0态和输出1态)。

通过判定输入条件在两个状态下互转。

发表于:

2004-02-1215:

00:

51

senst

钱的教训,编程心得

当程序出现怪现象时,查不出某程序段有问题,一般毛病出在如下几方面。

1.看门狗问题。

2.堆栈问题,堆栈空间不够,被其他数据破坏。

3.变量或寄存器没保护,主要在中断服务程序中。

4.压栈出栈不对等。

即PU

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1