[PIC®/AVR®/dsPIC®产品] 天梯 之 从零开始玩转PIC

[复制链接]
43329|177
hotpower 发表于 2008-1-19 17:54 | 显示全部楼层

这个没试过,应该没问题,GPS就是个例子.设置完后,发送就残废~

  
lczsx2000 发表于 2008-1-19 18:35 | 显示全部楼层

灌水的太多,看争100楼的动作就知道了,呵呵

  
hotpower 发表于 2008-1-19 18:37 | 显示全部楼层

经楼上鉴定--水贴~~~

  
cly1005 发表于 2008-1-19 19:08 | 显示全部楼层

呵呵,俺也灌点水

  
 楼主| 程序匠人 发表于 2008-1-19 20:11 | 显示全部楼层

继续拷问~~~~~~

&nbsp;程序匠人&nbsp;发表于&nbsp;2008-1-19&nbsp;17:40&nbsp;PIC&nbsp;单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />124楼:&nbsp;请教一个问题:如果串口只用到接收,没有到发送&nbsp;<br /><br />那么,是否可以把串行发送口当作普通IO口(输出口)来用?&nbsp;<br />&nbsp;<br />
systemchip 发表于 2008-1-19 21:47 | 显示全部楼层

曾经试过,不行

  
 楼主| 程序匠人 发表于 2008-1-20 00:15 | 显示全部楼层

那就是说白白浪费一个io口了?

&nbsp;systemchip&nbsp;发表于&nbsp;2008-1-19&nbsp;21:47&nbsp;PIC&nbsp;单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />130楼:&nbsp;曾经试过,不行&nbsp;<br />
xieyuanbin 发表于 2008-1-20 09:47 | 显示全部楼层

用IO口模拟发送就可以用了。

IO口模拟串口是最简单的,发送更简单。
 楼主| 程序匠人 发表于 2008-1-20 11:28 | 显示全部楼层

不是阿,我是要做的是串口接收,不是发送

匠人是要做的是串口接收,不是发送。如果用软件模拟的话,要占用定时器和外部中断资源不说,而且实时性方面堪忧。<br /><br />现在的问题就是,用了串口接收,连带着把串口发送口也浪费了。
xieyuanbin 发表于 2008-1-20 16:54 | 显示全部楼层

还有办法:用串口来模拟IO。

既然是发送端浪费,有一个比较折中的办法用它来做O口。持续发送1来模拟输出1,持续发送0来模拟输出0,不过因为有起始位和停止位,IO口需要用阻容来滤波。
 楼主| 程序匠人 发表于 2008-1-20 17:35 | 显示全部楼层

串口调试成功了,心得体会——

<br />相关连接:<br />参与社区讨论&nbsp;<br />&nbsp;<br />匠人DIY旋转时钟全程实播(连载1:电机的选择与安装)<br />&nbsp;<br />匠人DIY旋转时钟全程实播(连载2:指针板的供电方式)<br />&nbsp;匠人DIY旋转时钟全程实播(连载3:指针板原理图V01)&nbsp;匠人DIY旋转时钟全程实播(连载4:一些细节考虑)&nbsp;匠人DIY旋转时钟全程实播(连载5:DEMO板示意图)&nbsp;匠人DIY旋转时钟全程实播(连载6:指针板状态表v01)&nbsp;匠人DIY旋转时钟全程实播(连载7:旋转时钟之裸奔照)&nbsp;匠人DIY旋转时钟全程实播(连载8:转速自适应算法)&nbsp;匠人DIY旋转时钟全程实播(连载9:排除LED不亮故障)&nbsp;匠人DIY旋转时钟全程实播(连载10:自适应算法讨论)&nbsp;匠人DIY旋转时钟全程实播(连载11:表盘效果初现)&nbsp;匠人DIY旋转时钟全程实播(连载12:数字表盘效果)&nbsp;匠人DIY旋转时钟全程实播(连载13:动态钟摆效果)&nbsp;----------------------------------------------------------------------------<br />&nbsp;<br />匠人DIY旋转时钟全程实播(连载14:串口调试心得)&nbsp;&nbsp;----------------------------------------------------------------------------<br />这两天写了串口接收程序,终于调试成功了!中间遇到一些小坎坷,简单讲几句心得体会。<br />1、由于串口与电源正端是复用一根传导线,所以,硬件方面需要合理设计电路。要确保通讯时,单片机能够正常工作。电路如下:&nbsp;<img src="http://blog.21ic.com/uploadfile-/2008-1/62576.73311909.gif"><br />2、另外,因为三极管的导通/截止有时延,线上可能有干扰,导致通讯时序畸变,所以串行通讯的波特率不能设置得太高,匠人开始时用9600,无法正常实现接收,后来改用2400,才得以通过。<br />3、波特率的计算,有公式可循,为了一劳永逸。匠人用Excel做了个计算模版,以后只要填入参数,就可得到波特率赋值了。<img src="http://blog.21ic.com/uploadfile-/2008-1/61866.77150973.gif"><br /><br />4、串口的调试,是用电脑串口协助进行的,用了一个现成的调试软件。界面如下:<img src="http://blog.21ic.com/uploadfile-/2008-1/62005733811.gif"><br /><br />5、另外发现PIC单片机的串口模块有个令人不爽的地方。比如,匠人只用到串口接收,不用串口发送。但是串口发送口缺不能配置为普通IO口来用,实在有点浪费啊!以下是社区讨论摘选:<table class=ubb cellspacing=0><TR><td class=ubb><B><img src="https://bbs.21ic.com/club/bbs/images/emote/mood25.gif">&nbsp;程序匠人&nbsp;</B>发表于&nbsp;2008-1-19&nbsp;17:40&nbsp;<b>PIC&nbsp;单片机</b>&nbsp;←返回版面&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/profile.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/fav.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/edit.gif"></td></TR><TR><td class=ubb><br />124楼:&nbsp;请教一个问题:如果串口只用到接收,没有到发送</td></TR><TR><td class=ubb><br />&nbsp;<table class=ubb cellspacing=0><TR><td class=ubb>那么,是否可以把串行发送口当作普通IO口(输出口)来用?</td></TR></table></td></TR></table><table class=ubb cellspacing=0><TR><td class=ubb><B><img src="https://bbs.21ic.com/club/bbs/images/emote/mood25.gif">&nbsp;systemchip&nbsp;</B>发表于&nbsp;2008-1-19&nbsp;21:47&nbsp;<b>PIC&nbsp;单片机</b>&nbsp;←返回版面&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/profile.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/fav.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/edit.gif"></td></TR><TR><td class=ubb><br />130楼:&nbsp;曾经试过,不行</td></TR><TR><td class=ubb><br /><table class=ubb cellspacing=0><TR><td class=ubb>&nbsp;&nbsp;<br />*&nbsp;-&nbsp;本贴最后修改时间:2008-1-19&nbsp;21:48:59&nbsp;修改者:systemchip<br /><br /><br /></td></TR></table></td></TR></table><img src="https://bbs.21ic.com/club/bbs/Images/blank.gif"><br /><table class=ubb cellspacing=0><TR><td class=ubb><B><img src="https://bbs.21ic.com/club/bbs/images/emote/mood25.gif">&nbsp;程序匠人&nbsp;</B>发表于&nbsp;2008-1-20&nbsp;00:15&nbsp;<b>PIC&nbsp;单片机</b>&nbsp;←返回版面&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/profile.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/fav.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/edit.gif"></td></TR><TR><td class=ubb><br />131楼:&nbsp;那就是说白白浪费一个io口了?</td></TR><TR><td class=ubb><br />&nbsp;<table class=ubb cellspacing=0><TR><td class=ubb>&nbsp;systemchip&nbsp;发表于&nbsp;2008-1-19&nbsp;21:47&nbsp;PIC&nbsp;单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />130楼:&nbsp;曾经试过,不行&nbsp;</td></TR></table></td></TR></table><table class=ubb cellspacing=0><TR><td class=ubb><B><img src="https://bbs.21ic.com/club/bbs/images/emote/mood20.gif">&nbsp;xieyuanbin&nbsp;</B>发表于&nbsp;2008-1-20&nbsp;09:47&nbsp;<b>PIC&nbsp;单片机</b>&nbsp;←返回版面&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/profile.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/fav.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/edit.gif"></td></TR><TR><td class=ubb><br />132楼:&nbsp;用IO口模拟发送就可以用了。</td></TR><TR><td class=ubb><br /><table class=ubb cellspacing=0><TR><td class=ubb>IO口模拟串口是最简单的,发送更简单。<br /><br /><br /><br /></td></TR></table></td></TR></table><img src="https://bbs.21ic.com/club/bbs/Images/blank.gif"><br /><table class=ubb cellspacing=0><TR><td class=ubb><B><img src="https://bbs.21ic.com/club/bbs/images/emote/mood25.gif">&nbsp;程序匠人&nbsp;</B>发表于&nbsp;2008-1-20&nbsp;11:28&nbsp;<b>PIC&nbsp;单片机</b>&nbsp;←返回版面&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/profile.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/fav.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/edit.gif"></td></TR><TR><td class=ubb><br />133楼:&nbsp;不是阿,我是要做的是串口接收,不是发送</td></TR><TR><td class=ubb><br />&nbsp;<table class=ubb cellspacing=0><TR><td class=ubb>匠人是要做的是串口接收,不是发送。如果用软件模拟的话,要占用定时器和外部中断资源不说,而且实时性方面堪忧。<br /><br />现在的问题就是,用了串口接收,连带着把串口发送口也浪费了。</td></TR></table></td></TR></table><table class=ubb cellspacing=0><TR><td class=ubb><B><img src="https://bbs.21ic.com/club/bbs/images/emote/mood20.gif">&nbsp;xieyuanbin&nbsp;</B>发表于&nbsp;2008-1-20&nbsp;16:54&nbsp;<b>PIC&nbsp;单片机</b>&nbsp;←返回版面&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/profile.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/fav.gif">&nbsp;<img src="https://bbs.21ic.com/club/bbs/images/edit.gif"></td></TR><TR><td class=ubb><br />136楼:&nbsp;还有办法:用串口来模拟IO。</td></TR><TR><td class=ubb><br />&nbsp;<table class=ubb cellspacing=0><TR><td class=ubb>既然是发送端浪费,有一个比较折中的办法用它来做O口。持续发送1来模拟输出1,持续发送0来模拟输出0,不过因为有起始位和停止位,IO口需要用阻容来滤波。</td></TR></table></td></TR></table><br /><br />
huanan_ 发表于 2008-1-21 15:16 | 显示全部楼层

对弹道弹道弹ddddd

大胆地地地弹ddddd<br />
niu9911 发表于 2008-1-22 16:10 | 显示全部楼层

我的ICD2

我的ICD2是贝能的,使用时搞不清楚的问题一直出来,不明白就是不爽。<br />调试时怎么不能单步进行,读写EEPROM也查不出来结果,真是急人。只有再等!
 楼主| 程序匠人 发表于 2008-1-23 23:59 | 显示全部楼层

我问天问地问高手:匠人和PICC,到底谁是弱智?

<br />一个16进制转bcd码的程序段,居然调用了两次除法。到底是匠人弱智,还是PICC弱智呢?<br />哪位高手,可以优化一下这两条C语句的写法,好让PICC在编译时,不调用两次除法程序?<br />--------------------------------------------------------------------------------------------<br />973:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#FD0101>DISP_QUEUE[0]&nbsp;=&nbsp;TIMER_H&nbsp;/&nbsp;10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//闹钟&quot;时&quot;(0~23)&nbsp;&nbsp;&nbsp;&nbsp;<br /></font>&nbsp;&nbsp;06E7&nbsp;&nbsp;&nbsp;&nbsp;300A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;0xa<br />&nbsp;&nbsp;06E8&nbsp;&nbsp;&nbsp;&nbsp;00F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x71<br />&nbsp;&nbsp;06E9&nbsp;&nbsp;&nbsp;&nbsp;0831&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x31,&nbsp;W<br />&nbsp;&nbsp;06EA&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;06EB&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3&nbsp;<br />&nbsp;&nbsp;06EC&nbsp;&nbsp;&nbsp;&nbsp;27CA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;0x7ca&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#FD0101>&nbsp;//(第一次调用除法)</font><br />&nbsp;&nbsp;06ED&nbsp;&nbsp;&nbsp;&nbsp;00C4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x44<br /><font color=#FD0101><font color=#000000>974:&nbsp;&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DISP_QUEUE[1]&nbsp;=&nbsp;TIMER_H&nbsp;%&nbsp;10;&nbsp;</font><br />&nbsp;&nbsp;06EE&nbsp;&nbsp;&nbsp;&nbsp;300A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;0xa<br />&nbsp;&nbsp;06EF&nbsp;&nbsp;&nbsp;&nbsp;00F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x71<br />&nbsp;&nbsp;06F0&nbsp;&nbsp;&nbsp;&nbsp;0831&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x31,&nbsp;W<br />&nbsp;&nbsp;06F1&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;06F2&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3<br />&nbsp;&nbsp;06F3&nbsp;&nbsp;&nbsp;&nbsp;27CA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;0x7ca&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#FD0101>&nbsp;&nbsp;//(第二次调用除法)</font><br />&nbsp;&nbsp;06F4&nbsp;&nbsp;&nbsp;&nbsp;0870&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x70,&nbsp;W<br />&nbsp;&nbsp;06F5&nbsp;&nbsp;&nbsp;&nbsp;00C5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x45
liqiu_21ic 发表于 2008-1-24 15:31 | 显示全部楼层

maplab 8.00好象还是不怎么支持中文啊

我建立的文件是中文,结果软件读报错<br />&nbsp;&nbsp;出现很多问题,如追加加文件时报错,重新打开项目,结果项目管理器自动关闭。<br />&nbsp;&nbsp;&nbsp;把文件名改为英文名,这些问题全都没了。
ldy216 发表于 2008-1-30 10:03 | 显示全部楼层

哪个要PIC包含文件库,汇编的

&nbsp;&nbsp;&nbsp;由于很多PIC没有乘除法指令,指令系统也不完全一样,甚至特殊功能寄存也不完全一样,所以每个IC必须有一个包含文件,系统原来的包含文件定义不全,我的文件定义是全的,另外我有PIC的算法库,汇编的,升级软件(安装型的,安全升级,支持断线)等,用PIC做过近100百个项目
riverxian 发表于 2008-2-1 11:47 | 显示全部楼层

我和你的情况差不多

怎么能学了不忘呢?
hotpower 发表于 2008-2-12 17:11 | 显示全部楼层

哈哈~~~用PIC24F跑UCOS2文件系统就不用愁了~~~

  
 楼主| 程序匠人 发表于 2008-2-14 09:26 | 显示全部楼层

关于PIC的IAP功能,如何实现?

看资料上说,可以通过串口方式,修改内部FLASH程序区域,实现在线升级。问题是,如何实现程序定位?望此中高手出来亮招
yewuyi 发表于 2008-2-14 11:11 | 显示全部楼层

怎么弄上那个了?

<br /><br />稍微看了一点,感觉和别的MCU的IAP基本一样,都需要一个引导程序,引导程序接受例如你的UART过来的数据并根据协议判断是数据还是地址,你的‘程序定位’是否就是说的代码地址?那是需要你的BOOTLOAD来确定的。<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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