4478|7

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教一个PIC单片机的问题, [复制链接]

  1. char ii; uchar jj;

  2. void send(uchar data)
  3. {
  4. for (ii=7;ii>=0;ii--)
  5. {
  6. //scl=0;
  7. //aa();
  8. jj=(data>>ii);
  9. //sda=(j&0x01);
  10. //aa();
  11. //scl=1;
  12. //aa();
  13. //aa();
  14. }
复制代码

一个子程序 ,注释掉的内容是为了调试方便画掉的 。
data传来的数据位A0,通过单步运行看到,没有错误,但是在第一次循环时,jj=(data>>ii);后 ,jj成了1A ,后面再循环也是1A。

ii跟jj本来是send内定义了,后来会怕这出问题,换成了全局变量定义,结果也不对 。开始ii jj在 send函数内定义时 ,循环时jj为18,而且每次循环都是这个值。

编译器为MPLAB IDE v8.46和 PICC8.05,仿真器ICD2,单片机为PIC16F877A。
而且上面的程序我在VC了试过了,没有问题 。谢谢各位了

最新回复

void send(uchar data) { uchar i; for (i = 0; i < 8; i++) { scl = 0; if (data & 0x80) { sda = 1; } else { sda = 0; } scl = 1; data   详情 回复 发表于 2010-3-1 20:15
点赞 关注
 

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
uchar 是下面这个定义
typedef unsigned char uchar;
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
for (ii=7;ii>=0;ii--)
{
//scl=0;
//aa();
jj=(data>>ii);
//sda=(j&0x01);
//aa();
//scl=1;
//aa();
//aa();
}
被编译器优化这个理由是说得过去的,因为JJ的值最将会是最后的值,编译器可能帮你直接算出来了

加volatile声明JJ看看
 
 
 

回复

107

帖子

0

TA的资源

一粒金砂(初级)

4
 
这段程序肯定没有问题,如果出现你说的情况,也肯定不是编译器优化弄的(循环结束jj=data).

可能原因:

1、DEBUG的时候watch显示错误;
2、其他地方程序非法操作内存(越界),改变了变量的值。检查你的aa(),sda()函数,检查你的中断服务函数。肯定有某个地方非法操作内存。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
是不是没有刷新watch,microchip的ide有时就是那样,不显示当前更新的。
你改下这个uchar,改为有符号类型的,有时候编译器处理是相反的。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
明显被优化了.
按照下面写吧..
还jj=(data>>ii); 这么也要考虑下效率 ^_^ ^_^ o(∩_∩)o.

char ii; uchar jj;

void send(uchar data)
{
for (ii=7;ii>=0;ii--)
{
scl=0;
aa();
sda=(data&0x01);
data >>= 1;
aa();
scl=1;
aa();
aa();
}
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偞鐗犻、鏇㈠Χ閸℃ぞ绮℃俊鐐€栭崝褏绮婚幋鐘差棜闁秆勵殕閻撴洟鏌熼柇锕€鐏遍柛銈咁儔閺屻倝寮堕幐搴′淮闂佸搫鏈粙鎴﹀煡婢跺ň鏋庨柟閭﹀枤閳诲繘姊虹拠鎻掝劉闁煎綊绠栬棟濞村吋娼欐闂佸憡娲﹂崹鎵不閹惰姤鐓曢柍鈺佸暔娴狅箑顭跨憴鍕缂佽鲸鎹囧畷鎺戔枎閹存繂顬夋俊鐐€戦崝灞轿涘┑瀣瀬闁告劦鍠栭~鍛存煟濡櫣浠涙繛鍫熷劤閳规垶骞婇柛濠冩礋楠炲﹥鎯旈姀鐘插闂傚倸鍊风粈渚€鎮块崶褜娴栭柕濞у懐鐒兼繛杈剧秬椤宕h箛娑欑厪闁割偅绻嶅Σ褰掓煟閹捐泛鏋涢柡宀嬬到椤粓鍩€椤掍胶顩查悹杞拌閻庡爼鏌i幋锝呅撻柣鎾存礋閺岋繝宕掑┑鍥┿€婄紓浣哄Х缁垶濡甸崟顖氼潊闁挎稑瀚崳鏉课旈悩闈涗粶妞ゆ垵顦靛顐﹀磼閻愭潙娈熼梺闈涱檧婵″洩銇愰妸鈺傗拺閻犲洦鐓¢妤呮煕濡崵鐭掔€规洘鍨块獮妯肩磼濡厧骞堥梻浣哥秺閸嬪﹪宕㈡總绋跨闁靛牆妫涚粻楣冩煕椤愵偄澧悗姘炬嫹闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掍礁鍓銈嗗姧缁犳垿鐛姀銈嗙厓閺夌偞澹嗛崝宥嗐亜閺傚灝顏紒杈ㄦ崌瀹曟帒顫濋钘変壕闁告縿鍎抽惌娆撴煕閺囥劌鐏犵紒鐙€鍨堕弻銊╂偆閸屾稑顏�闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柛顐f礀缁犵娀鏌熼崜褏甯涢柛瀣ㄥ€濋弻鏇熺箾閻愵剚鐝曢梺绋款儏椤戝寮婚敐澶婄疀妞ゆ帊鐒﹂崕鎾绘⒑缂佹ê绗掗柣蹇斿哺婵$敻宕熼姘鳖唺闂佽鎯岄崹閬嶅极妤e啯鐓熼幖娣灮閸熸煡鏌熼崙銈嗗婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柟闂寸绾剧粯绻涢幋鏃€鍤嶉柛銉墻閺佸洭鏌曡箛鏇炐ユい锔诲櫍閹宕楁径濠佸闂備礁鎲″ú锕傚磻婢舵劕鏄ラ柣鎰劋閳锋垿鎮归幁鎺戝婵炲懏鍔欓弻鐔煎礄閵堝棗顏�
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偞鐗犻、鏇㈠Χ閸℃ぞ绮℃俊鐐€栭崝褏绮婚幋鐘差棜闁秆勵殕閻撴洟鏌熼柇锕€鐏遍柛銈咁儔閺屻倝寮堕幐搴′淮闂佸搫鏈粙鎴﹀煡婢跺ň鏋庨柟閭﹀枤閳诲繘姊虹拠鎻掝劉闁煎綊绠栬棟濞村吋娼欐闂佸憡娲﹂崹鎵不閹惰姤鐓曢柍鈺佸暔娴狅箑顭跨憴鍕缂佽鲸鎹囧畷鎺戔枎閹存繂顬夋俊鐐€戦崝灞轿涘┑瀣瀬闁告劦鍠栭~鍛存煟濡櫣浠涙繛鍫熷劤閳规垶骞婇柛濠冩礋楠炲﹥鎯旈姀鐘插闂傚倸鍊风粈渚€鎮块崶褜娴栭柕濞у懐鐒兼繛杈剧秬椤宕h箛娑欑厪闁割偅绻嶅Σ褰掓煟閹捐泛鏋涢柡宀嬬到椤粓鍩€椤掍胶顩查悹杞拌閻庡爼鏌i幋锝呅撻柣鎾存礋閺岋繝宕掑┑鍥┿€婄紓浣哄Х缁垶濡甸崟顖氼潊闁挎稑瀚崳鏉课旈悩闈涗粶妞ゆ垵顦靛顐﹀磼閻愭潙娈熼梺闈涱檧婵″洩銇愰妸鈺傗拺閻犲洦鐓¢妤呮煕濡崵鐭掔€规洘鍨块獮妯肩磼濡厧骞堥梻浣哥秺閸嬪﹪宕㈡總绋跨闁靛牆妫涚粻楣冩煕椤愵偄澧悗姘炬嫹闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掍礁鍓銈嗗姧缁犳垿鐛姀銈嗙厓閺夌偞澹嗛崝宥嗐亜閺傚灝顏紒杈ㄦ崌瀹曟帒顫濋钘変壕闁告縿鍎抽惌娆撴煕閺囥劌鐏犵紒鐙€鍨堕弻銊╂偆閸屾稑顏�闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柛顐f礀缁犵娀鏌熼崜褏甯涢柛瀣ㄥ€濋弻鏇熺箾閻愵剚鐝曢梺绋款儏椤戝寮婚敐澶婄疀妞ゆ帊鐒﹂崕鎾绘⒑缂佹ê绗掗柣蹇斿哺婵$敻宕熼姘鳖唺闂佽鎯岄崹閬嶅极妤e啯鐓熼幖娣灮閸熸煡鏌熼崙銈嗗婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柟闂寸绾剧粯绻涢幋鏃€鍤嶉柛銉墻閺佸洭鏌曡箛鏇炐ユい锔诲櫍閹宕楁径濠佸闂備礁鎲″ú锕傚磻婢舵劕鏄ラ柣鎰劋閳锋垿鎮归幁鎺戝婵炲懏鍔欓弻鐔煎礄閵堝棗顏�
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表