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

[复制链接]
43315|177
 楼主| 程序匠人 发表于 2007-12-29 12:24 | 显示全部楼层

几天没关照,已经60多楼了啊。呵呵

匠人打算用PIC16F876做一个旋转时钟,欢迎大家继续关注…… <br /> 相关链接:<a href='https://bbs.21ic.com/club/bbs/list.asp?boardid=11&t=2808013&tp=%u770B%u6765%u8981%u7B49%u5230xwj%u7684%u65CB%u8F6C%u65F6%u949F%u505A%u51FA%u6765%u662F%u6CA1%u6709%u6307%u671B%u4E86%uFF0C%u5320%u4EBA%u8FD8%u662F%u81EA%u5DF1DIY%u5427'>https://bbs.21ic.com/club/bbs/list.asp?boardid=11&t=2808013&tp=%u770B%u6765%u8981%u7B49%u5230xwj%u7684%u65CB%u8F6C%u65F6%u949F%u505A%u51FA%u6765%u662F%u6CA1%u6709%u6307%u671B%u4E86%uFF0C%u5320%u4EBA%u8FD8%u662F%u81EA%u5DF1DIY%u5427</a>
兰天白云 发表于 2007-12-29 12:39 | 显示全部楼层

旋转时钟,XWJ不做了?

  
xwj 发表于 2007-12-29 13:40 | 显示全部楼层

谁说不做了?

只是暂时没空做罢了
龙飞天下 发表于 2007-12-29 16:16 | 显示全部楼层

我喜欢把程序下载到芯片在调试

说白了,不是仿真调试,就是产品测试了。<br />只是在些程序的时候,一个模块一个模块的做。<br />
wujieflash 发表于 2007-12-30 20:52 | 显示全部楼层

求助

韦老师能提供个16F877给我学习一下吗<br />听说初学用这个比较好
xieyuanbin 发表于 2007-12-30 22:11 | 显示全部楼层

杀毒软件搞怪吧?

我用瑞星,好像没碰到这种问题哦。试试安装时把微软的杀毒软件,或其他杀毒软件关闭。或者你看看有没有MSXML2这个XP补丁,卸载掉看看
 楼主| 程序匠人 发表于 2007-12-30 22:26 | 显示全部楼层

呵呵,多谢 xieyuanbin 指点

果然是防火墙作怪!搞定了
韦广远 发表于 2008-1-2 09:11 | 显示全部楼层

To wujieflash:可以,请MSN或者Email联系我

wujieflash&nbsp;发表于&nbsp;2007-12-30&nbsp;20:52&nbsp;PIC&nbsp;单片机&nbsp;←返回版面&nbsp;<br />66楼:&nbsp;求助&nbsp;<br />韦老师能提供个16F877给我学习一下吗<br />听说初学用这个比较好<br />&nbsp;<br />&nbsp;<br />
fzj 发表于 2008-1-2 09:43 | 显示全部楼层

给发个PROTEUS的TP上来,嘿嘿

我觉得这个软件学习新的几款MCU不错
 楼主| 程序匠人 发表于 2008-1-2 21:55 | 显示全部楼层

再次遭遇非典:位变量的定义与引用?看来要再次请教hotpower

再次遭遇非典:位变量的定义与引用?看来要再次请教hotpower。<br /><br />先看看匠人的程序:<br /><br />//--------------------------------------------------------<br />//重新命名数据类型<br />//--------------------------------------------------------<br />typedef&nbsp;unsigned&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;tU08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//unsigned&nbsp;8&nbsp;<br /><br />//=================<br />//位结构类型定义<br />//定义一个位结构,结构名=BIT_F<br />//=================<br />typedef&nbsp;struct&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;b0&nbsp;:&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结构元素表<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;b1&nbsp;:&nbsp;1;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;b2&nbsp;:&nbsp;1;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;b3&nbsp;:&nbsp;1;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;b4&nbsp;:&nbsp;1;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;b5&nbsp;:&nbsp;1;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;b6&nbsp;:&nbsp;1;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;b7&nbsp;:&nbsp;1;&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;<br />}&nbsp;BIT_F;&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;//结构类型<br /><br />//=================<br />//联合定义<br />//定义一个联合,联合名=FLAG_union<br />//=================<br />typedef&nbsp;union&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;BIT_F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oneBit;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;tU08&nbsp;&nbsp;&nbsp;&nbsp;allBits;&nbsp;&nbsp;&nbsp;&nbsp;<br />}FLAG_union;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />//--------------------------------------------------------<br /><br />//<br />FLAG_union&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTC_TEMP;&nbsp;&nbsp;&nbsp;&nbsp;//PORTC&nbsp;口输出临时缓冲区<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTC_TMP&nbsp;&nbsp;&nbsp;&nbsp;PORTC_TEMP.allBits<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED00_TMP&nbsp;&nbsp;&nbsp;&nbsp;PORTC_TEMP.oneBit.b3;<br /><br />//--------------------------------------------------------<br />//接下来两条是程序中的指令<br />//--------------------------------------------------------<br /><br />PORTC_TMP&nbsp;=&nbsp;0&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//不报错<br /><font color=#00FF00>PORTC_TEMP.oneBit.b3&nbsp;=&nbsp;1&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//不报错</font><br /><font color=#FF0000>LED00_TMP&nbsp;=&nbsp;1&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//报错(Error[195]&nbsp;H:picclolk_01clock.c&nbsp;224&nbsp;:&nbsp;expression&nbsp;syntax)&nbsp;</font><br /><br />//--------------------------------------------------------<br />请注意红色字体部分,该语句应该是等效于绿色字体的吧?但是编译就是通不过?<br /><br />上网查了一下,居然发现hotpower早在2004年已经修炼过此非典**了。看来要再次请教hotpower。把你的脑髓贡献一下吧……<br /><br />
平常人 发表于 2008-1-2 22:19 | 显示全部楼层

试试加个括号,突然发现多了个分号,倒塌了~~~

#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED00_TMP&nbsp;&nbsp;&nbsp;&nbsp;(PORTC_TEMP.oneBit.b3)<br /><br />
 楼主| 程序匠人 发表于 2008-1-2 22:30 | 显示全部楼层

谢平常人提醒,果然是分号惹祸

用ASM用惯了,偶然用C,最大的问题,就是出在这个不起眼的分号上。经常被忽视。呵呵
 楼主| 程序匠人 发表于 2008-1-3 21:09 | 显示全部楼层

“*3”算法的实现。嘿嘿,看看谁更傻?

今天的故事源于一个“*3”算法的实现,匠人想了解一下编译器是如何处理“*&nbsp;3”的动作的,于是写了几种不同的c语言写法。交给编译器去编译,看看谁更傻?结果很有趣,如下:<br /><br /><br />371:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写法1(这种方法,需要调用乘法,没效率!)<br />372:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_LINE&nbsp;=&nbsp;3&nbsp;*&nbsp;TIME_S&nbsp;;<br />&nbsp;&nbsp;079C&nbsp;&nbsp;&nbsp;&nbsp;3003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;0x3<br />&nbsp;&nbsp;079D&nbsp;&nbsp;&nbsp;&nbsp;00F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x71<br />&nbsp;&nbsp;079E&nbsp;&nbsp;&nbsp;&nbsp;0833&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x33,&nbsp;W<br />&nbsp;&nbsp;079F&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;07A0&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3<br />&nbsp;&nbsp;07A1&nbsp;&nbsp;&nbsp;&nbsp;2777&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;0x777&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(注意看这里,居然调用了乘法函数!)<br />&nbsp;&nbsp;07A2&nbsp;&nbsp;&nbsp;&nbsp;00AC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x2c<br />373:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />374:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写法2(与方法1等效,也需要调用乘法,没效率!)<br />375:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_LINE&nbsp;=&nbsp;TIME_S&nbsp;+&nbsp;TIME_S&nbsp;+&nbsp;TIME_S&nbsp;;<br />&nbsp;&nbsp;07A3&nbsp;&nbsp;&nbsp;&nbsp;3003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;0x3<br />&nbsp;&nbsp;07A4&nbsp;&nbsp;&nbsp;&nbsp;00F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x71<br />&nbsp;&nbsp;07A5&nbsp;&nbsp;&nbsp;&nbsp;0833&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x33,&nbsp;W<br />&nbsp;&nbsp;07A6&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;07A7&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3<br />&nbsp;&nbsp;07A8&nbsp;&nbsp;&nbsp;&nbsp;2777&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;0x777&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(注意看这里,居然调用了乘法函数!)<br />&nbsp;&nbsp;07A9&nbsp;&nbsp;&nbsp;&nbsp;00AC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x2c<br />376:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />377:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写法3(也需要调用乘法,没效率!)<br />378:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_LINE&nbsp;=&nbsp;(TIME_S&nbsp;&lt&lt&nbsp;1)&nbsp;+&nbsp;TIME_S&nbsp;;<br />&nbsp;&nbsp;07AA&nbsp;&nbsp;&nbsp;&nbsp;3003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;0x3<br />&nbsp;&nbsp;07AB&nbsp;&nbsp;&nbsp;&nbsp;00F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x71<br />&nbsp;&nbsp;07AC&nbsp;&nbsp;&nbsp;&nbsp;0833&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x33,&nbsp;W<br />&nbsp;&nbsp;07AD&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;07AE&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3<br />&nbsp;&nbsp;07AF&nbsp;&nbsp;&nbsp;&nbsp;2777&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;0x777&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(注意看这里,居然调用了乘法函数!)<br />&nbsp;&nbsp;07B0&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;07B1&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3<br />&nbsp;&nbsp;07B2&nbsp;&nbsp;&nbsp;&nbsp;00AC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x2c<br />379:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />380:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写法4(这种写法,编译结果居然比前两种方法更精简?)<br />381:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_LINE&nbsp;=&nbsp;TIME_S&nbsp;;<br />&nbsp;&nbsp;07B3&nbsp;&nbsp;&nbsp;&nbsp;0833&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x33,&nbsp;W<br />&nbsp;&nbsp;07B4&nbsp;&nbsp;&nbsp;&nbsp;00AC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x2c<br />382:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_LINE&nbsp;=&nbsp;S_LINE&nbsp;+&nbsp;TIME_S&nbsp;;<br />&nbsp;&nbsp;07B5&nbsp;&nbsp;&nbsp;&nbsp;0833&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x33,&nbsp;W<br />&nbsp;&nbsp;07B6&nbsp;&nbsp;&nbsp;&nbsp;07AC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADDWF&nbsp;0x2c,&nbsp;F<br />383:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_LINE&nbsp;=&nbsp;S_LINE&nbsp;+&nbsp;TIME_S&nbsp;;<br />&nbsp;&nbsp;07B7&nbsp;&nbsp;&nbsp;&nbsp;07AC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADDWF&nbsp;0x2c,&nbsp;F<br />384:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />385:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写法5(没想到吧?这样写居然最精简!)<br />386:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_LINE&nbsp;=&nbsp;2&nbsp;*&nbsp;TIME_S&nbsp;&nbsp;;<br />&nbsp;&nbsp;07B8&nbsp;&nbsp;&nbsp;&nbsp;0733&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADDWF&nbsp;0x33,&nbsp;W<br />&nbsp;&nbsp;07B9&nbsp;&nbsp;&nbsp;&nbsp;00AC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x2c<br />387:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_LINE&nbsp;=&nbsp;S_LINE&nbsp;+&nbsp;TIME_S&nbsp;;<br />&nbsp;&nbsp;07BA&nbsp;&nbsp;&nbsp;&nbsp;0833&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x33,&nbsp;W<br />&nbsp;&nbsp;07BB&nbsp;&nbsp;&nbsp;&nbsp;07AC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADDWF&nbsp;0x2c,&nbsp;F<br />
 楼主| 程序匠人 发表于 2008-1-3 22:15 | 显示全部楼层

另一个优化的例子

<br />---------------------------------------------------------------------------------------------------<br />看来,在写c语言过程中,优化工作还得人工干预一下才好.<br />下面是另一个优化的例子:&nbsp;<br />---------------------------------------------------------------------------------------------------<br />----------------------------------------写法1:&nbsp;<br />382:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H_LINE&nbsp;=&nbsp;TIME_H&nbsp;/&nbsp;2&nbsp;*&nbsp;15&nbsp;+&nbsp;TIME_M&nbsp;/&nbsp;4&nbsp;;&nbsp;&nbsp;//时针定位=&quot;时&quot;/2*15+&quot;分&quot;/4<br />&nbsp;&nbsp;078D&nbsp;&nbsp;&nbsp;&nbsp;300F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;0xf<br />&nbsp;&nbsp;078E&nbsp;&nbsp;&nbsp;&nbsp;00F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x71<br />&nbsp;&nbsp;078F&nbsp;&nbsp;&nbsp;&nbsp;1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0x3,&nbsp;0<br />&nbsp;&nbsp;0790&nbsp;&nbsp;&nbsp;&nbsp;0C30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RRF&nbsp;0x30,&nbsp;W<br />&nbsp;&nbsp;0791&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;0792&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3<br />&nbsp;&nbsp;0793&nbsp;&nbsp;&nbsp;&nbsp;2768&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;0x768&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(注意看这里,居然调用了乘法函数!)<br />&nbsp;&nbsp;0794&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;0795&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3<br />&nbsp;&nbsp;0796&nbsp;&nbsp;&nbsp;&nbsp;00F0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x70<br />&nbsp;&nbsp;0797&nbsp;&nbsp;&nbsp;&nbsp;0831&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x31,&nbsp;W<br />&nbsp;&nbsp;0798&nbsp;&nbsp;&nbsp;&nbsp;00F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x71<br />&nbsp;&nbsp;0799&nbsp;&nbsp;&nbsp;&nbsp;1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0x3,&nbsp;0<br />&nbsp;&nbsp;079A&nbsp;&nbsp;&nbsp;&nbsp;0CF1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RRF&nbsp;0x71,&nbsp;F<br />&nbsp;&nbsp;079B&nbsp;&nbsp;&nbsp;&nbsp;1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0x3,&nbsp;0<br />&nbsp;&nbsp;079C&nbsp;&nbsp;&nbsp;&nbsp;0C71&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RRF&nbsp;0x71,&nbsp;W<br />&nbsp;&nbsp;079D&nbsp;&nbsp;&nbsp;&nbsp;0770&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADDWF&nbsp;0x70,&nbsp;W<br />&nbsp;&nbsp;079E&nbsp;&nbsp;&nbsp;&nbsp;00A4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x24<br /><br />----------------------------------------写法2:&nbsp;<br />383:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />384:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;TIME_H&nbsp;/&nbsp;2&nbsp;;<br />&nbsp;&nbsp;079F&nbsp;&nbsp;&nbsp;&nbsp;1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0x3,&nbsp;0<br />&nbsp;&nbsp;07A0&nbsp;&nbsp;&nbsp;&nbsp;0C30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RRF&nbsp;0x30,&nbsp;W<br />&nbsp;&nbsp;07A1&nbsp;&nbsp;&nbsp;&nbsp;00C1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x41<br />385:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;i&nbsp;*&nbsp;4&nbsp;-&nbsp;i&nbsp;;<br />&nbsp;&nbsp;07A2&nbsp;&nbsp;&nbsp;&nbsp;00F0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x70<br />&nbsp;&nbsp;07A3&nbsp;&nbsp;&nbsp;&nbsp;1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0x3,&nbsp;0<br />&nbsp;&nbsp;07A4&nbsp;&nbsp;&nbsp;&nbsp;0DF0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RLF&nbsp;0x70,&nbsp;F<br />&nbsp;&nbsp;07A5&nbsp;&nbsp;&nbsp;&nbsp;1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0x3,&nbsp;0<br />&nbsp;&nbsp;07A6&nbsp;&nbsp;&nbsp;&nbsp;0D70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RLF&nbsp;0x70,&nbsp;W<br />&nbsp;&nbsp;07A7&nbsp;&nbsp;&nbsp;&nbsp;00F0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x70<br />&nbsp;&nbsp;07A8&nbsp;&nbsp;&nbsp;&nbsp;0841&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x41,&nbsp;W<br />&nbsp;&nbsp;07A9&nbsp;&nbsp;&nbsp;&nbsp;0270&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBWF&nbsp;0x70,&nbsp;W<br />&nbsp;&nbsp;07AA&nbsp;&nbsp;&nbsp;&nbsp;00C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x40<br />386:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;TIME_M&nbsp;/&nbsp;4&nbsp;;<br />&nbsp;&nbsp;07AB&nbsp;&nbsp;&nbsp;&nbsp;0831&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x31,&nbsp;W<br />&nbsp;&nbsp;07AC&nbsp;&nbsp;&nbsp;&nbsp;00F0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x70<br />&nbsp;&nbsp;07AD&nbsp;&nbsp;&nbsp;&nbsp;1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0x3,&nbsp;0<br />&nbsp;&nbsp;07AE&nbsp;&nbsp;&nbsp;&nbsp;0CF0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RRF&nbsp;0x70,&nbsp;F<br />&nbsp;&nbsp;07AF&nbsp;&nbsp;&nbsp;&nbsp;1003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0x3,&nbsp;0<br />&nbsp;&nbsp;07B0&nbsp;&nbsp;&nbsp;&nbsp;0C70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RRF&nbsp;0x70,&nbsp;W<br />&nbsp;&nbsp;07B1&nbsp;&nbsp;&nbsp;&nbsp;00C1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x41<br />387:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H_LINE&nbsp;=&nbsp;j&nbsp;-&nbsp;i&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;//时针定位=&quot;时&quot;/2*15+&quot;分&quot;/4<br />&nbsp;&nbsp;07B2&nbsp;&nbsp;&nbsp;&nbsp;0240&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBWF&nbsp;0x40,&nbsp;W<br />&nbsp;&nbsp;07B3&nbsp;&nbsp;&nbsp;&nbsp;00A4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x24<br /><br />&nbsp;
machunshui 发表于 2008-1-4 13:36 | 显示全部楼层

关键是能化简成2的倍数

H_LINE&nbsp;=&nbsp;TIME_H&nbsp;/&nbsp;2&nbsp;*&nbsp;15&nbsp;+&nbsp;TIME_M&nbsp;/&nbsp;4&nbsp;;<br /><br />H_LINE&nbsp;=&nbsp;TIME_H&nbsp;/&nbsp;2&nbsp;*&nbsp;(16-1)+&nbsp;TIME_M&nbsp;/&nbsp;4&nbsp;;<br /><br />H_LINE&nbsp;=&nbsp;TIME_H&nbsp;*8&nbsp;-TIME_H&nbsp;/&nbsp;2+&nbsp;TIME_M&nbsp;/&nbsp;4&nbsp;;<br /><br />H_LINE&nbsp;=&nbsp;(TIME_H&nbsp;&lt&lt&nbsp;3)&nbsp;-(TIME_H&nbsp;&gt&gt&nbsp;1)+&nbsp;(TIME_M&nbsp;&gt&gt2)&nbsp;;<br /><br />全是2的倍数,用C作左右移相加.<br />不写成移位,编译器应该会自动把乘除2的倍数的操作变成移位操作
兰天白云 发表于 2008-1-4 21:52 | 显示全部楼层

PIC的东西就这么怪

*2,*4等不调用乘法<br /><br />&lt&lt2,&lt&lt4却调用乘法
machunshui 发表于 2008-1-5 09:03 | 显示全部楼层

绝对是移位,不可能调用乘法

#include&nbsp;&ltpic.h&gt<br /><br />int&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;a;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;b;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;(a&lt&lt2);<br />}<br /><br />看看picc的编译结果,绝对是移位,不可能调用乘法.<br /><br />_main<br />;&nbsp;&nbsp;&nbsp;&nbsp;_a&nbsp;assigned&nbsp;to&nbsp;?a_main+0<br />_main$a&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;?a_main<br />;&nbsp;&nbsp;&nbsp;&nbsp;_b&nbsp;assigned&nbsp;to&nbsp;?a_main+1<br />_main$b&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;?a_main+1<br />&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;&nbsp;&nbsp;&nbsp;9<br />;main.c:&nbsp;5:&nbsp;unsigned&nbsp;char&nbsp;a;<br />&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;3,5<br />&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;3,6&nbsp;&nbsp;&nbsp;&nbsp;;carry&nbsp;unused<br />&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;?a_main,w<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;btemp<br />&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;3,0<br />&nbsp;&nbsp;&nbsp;&nbsp;rlf&nbsp;&nbsp;&nbsp;&nbsp;btemp<br />&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;3,0<br />&nbsp;&nbsp;&nbsp;&nbsp;rlf&nbsp;&nbsp;&nbsp;&nbsp;btemp,w<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;?a_main+1<br />&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;&nbsp;&nbsp;&nbsp;10<br />;main.c:&nbsp;10:&nbsp;}
 楼主| 程序匠人 发表于 2008-1-5 20:38 | 显示全部楼层

回machunshui:也不尽然,picc太智能了,有时会自作聪明的。

比如:&nbsp;S_LINE&nbsp;=&nbsp;(TIME_S&nbsp;&lt&lt&nbsp;1)&nbsp;+&nbsp;TIME_S<br />匠人是希望编译器先做左移,再做加法。<br />结果,picc太“智能”了,自作聪明地把公式转化为:S_LINE&nbsp;=&nbsp;TIME_S&nbsp;*&nbsp;3,了,结果聪明反被聪明误。<br />请看:<br /><br />377:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写法3(也需要调用乘法,没效率!)<br />378:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_LINE&nbsp;=&nbsp;(TIME_S&nbsp;&lt&lt&nbsp;1)&nbsp;+&nbsp;TIME_S&nbsp;;<br />&nbsp;&nbsp;07AA&nbsp;&nbsp;&nbsp;&nbsp;3003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;0x3<br />&nbsp;&nbsp;07AB&nbsp;&nbsp;&nbsp;&nbsp;00F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x71<br />&nbsp;&nbsp;07AC&nbsp;&nbsp;&nbsp;&nbsp;0833&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x33,&nbsp;W<br />&nbsp;&nbsp;07AD&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;07AE&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3<br />&nbsp;&nbsp;07AF&nbsp;&nbsp;&nbsp;&nbsp;2777&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;0x777&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(注意看这里,居然调用了乘法函数!)<br />&nbsp;&nbsp;07B0&nbsp;&nbsp;&nbsp;&nbsp;120A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x4<br />&nbsp;&nbsp;07B1&nbsp;&nbsp;&nbsp;&nbsp;118A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;0xa,&nbsp;0x3<br />&nbsp;&nbsp;07B2&nbsp;&nbsp;&nbsp;&nbsp;00AC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;0x2c<br />
hotpower 发表于 2008-1-5 20:41 | 显示全部楼层

搞个间距试试

S_LINE&nbsp;=&nbsp;(TIME_S&nbsp;&lt&lt&nbsp;1);<br />//...................<br />//...................<br />//...................<br />//...................<br />//...................<br />S_LINE&nbsp;+=&nbsp;TIME_S;<br />
鼎兴科技 发表于 2008-1-5 21:14 | 显示全部楼层

我觉得PIC挺好的,原来一直用AVR现在转了,感觉不错

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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