第一个arm程序就失败了,请指点一下

[复制链接]
2863|9
 楼主| huangqi412 发表于 2007-10-13 17:38 | 显示全部楼层 |阅读模式
ARM, TE, IO, ios, LED
一个流水灯,<br />void&nbsp;led_show()<br />{<br />&nbsp;&nbsp;ulint&nbsp;temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用来移位<br />&nbsp;&nbsp;IODIR0&nbsp;=&nbsp;0x00000000;&nbsp;//设置输入<br />&nbsp;&nbsp;temp&nbsp;=&nbsp;IOPIN0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//把当前值读回来,避免用全局变量<br />&nbsp;&nbsp;temp&nbsp;=&nbsp;temp&nbsp;&lt&lt&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//移位<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;if&nbsp;(&nbsp;temp&nbsp;==&nbsp;0x00000100&nbsp;)//如果移动到一定长度<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;0x00000001;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;IODIR0&nbsp;=&nbsp;0xffffffff;&nbsp;//再设置成输出<br />&nbsp;&nbsp;IOSET0&nbsp;=&nbsp;temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置1位<br />&nbsp;&nbsp;IOCLR0&nbsp;=&nbsp;~temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置0位<br />}<br />这个函数前有一个<br />IODIR0&nbsp;=&nbsp;0xffffffff;&nbsp;//初始化中设置成输出<br />&nbsp;&nbsp;IOSET0&nbsp;=0x00000001;//设置1位<br />灯只闪了一下,<br />我第一次进led_show()&nbsp;temp读端口状态为全0,应该为0x00000001,为什么呢?请指点,谢谢.<br />
 楼主| huangqi412 发表于 2007-10-13 18:00 | 显示全部楼层

请指点,,

IODIR0&nbsp;=&nbsp;0x00000000;&nbsp;//设置输入<br />&nbsp;&nbsp;temp&nbsp;=&nbsp;IOPIN0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//把当前值读回来,避免用全局变量<br />这里读回来的是全0,此时led是亮的,应该最低位1,为什么呢,请指点,谢谢
wangkj 发表于 2007-10-13 19:27 | 显示全部楼层

voliatle 变量,可能的原因。

  
computer00 发表于 2007-10-13 19:43 | 显示全部楼层

IODIR0 = 0x00000000; //设置输入 这条删掉试试 ~~~~~~~~~~

  
hotpower 发表于 2007-10-13 20:17 | 显示全部楼层

在IO操作时不想全局就应该静态,不要随意改变IO的状态

在IO操作时不想全局就应该静态,不要随意改变IO的状态<br /><br />不要养成这个坏习惯~~~<br />void&nbsp;led_show_init()<br />{<br />&nbsp;&nbsp;IODIR0&nbsp;=&nbsp;0xffffffff;&nbsp;//输出<br />&nbsp;&nbsp;IOCLR0&nbsp;=&nbsp;0xffffffff;&nbsp;//清零<br />&nbsp;&nbsp;IOSET0&nbsp;=&nbsp;1;&nbsp;//置1(开始显示位0)<br />}<br /><br />void&nbsp;led_show()<br />{<br />&nbsp;&nbsp;static&nbsp;ulint&nbsp;temp&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用来移位<br />&nbsp;&nbsp;IOCLR0&nbsp;=&nbsp;temp;&nbsp;//清除当前位(关显示,实际只有1位)<br />&nbsp;&nbsp;temp&nbsp;=&nbsp;temp&nbsp;&lt&lt&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//移位(俺喜欢temp&nbsp;&lt&lt=&nbsp;1)<br />&nbsp;&nbsp;if&nbsp;(&nbsp;temp&nbsp;==&nbsp;0x00000100&nbsp;)//如果移动到一定长度<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;0x00000001;//重新循环<br />&nbsp;&nbsp;IOSET0&nbsp;=&nbsp;temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置1位(开显示,实际只有1位)<br />}<br /><br />或<br />void&nbsp;led_show()<br />{<br />&nbsp;&nbsp;static&nbsp;ulint&nbsp;temp&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用位来计数<br />&nbsp;&nbsp;IOCLR0&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;temp);&nbsp;//清除当前位(关显示,实际只有1位)<br />&nbsp;&nbsp;temp&nbsp;=&nbsp;temp&nbsp;+&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//移位(俺喜欢temp&nbsp;++;和temp&nbsp;+=&nbsp;1)<br />&nbsp;&nbsp;if&nbsp;(&nbsp;temp&nbsp;&gt=&nbsp;2&nbsp;)//如果移动到一定位数<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;0;//重新循环<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;IOSET0&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;temp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置1位(开显示,实际只有1位)<br />}<br />
 楼主| huangqi412 发表于 2007-10-13 20:41 | 显示全部楼层

hotpower大叔都来了,谢谢,

用静态我还是知道,也试了,只用输出没问题,我主要是测试io的基本输入输出,特意用的,输入没搞定.<br />我发现好象lpc21xx怎么好难读io的,一不小心就成了0<br />如上面程序,我先置输出状态,输出一个1,但是切换成输入状态再读,发现会是0<br />还有&nbsp;将一个io置输入,1个10k上拉到vcc,居然会读成0,如果减小到2k的话,读出来是1,<br />不知道io口内部结构什么样.
hotpower 发表于 2007-10-13 20:50 | 显示全部楼层

切换不要立即读,加NOP()

总之读PIN前面不要见到<br />&nbsp;&nbsp;IODIR0&nbsp;=&nbsp;0xffffffff;&nbsp;//输出<br />&nbsp;&nbsp;IOCLR0&nbsp;=&nbsp;0xffffffff;&nbsp;//清零<br />&nbsp;&nbsp;IOSET0&nbsp;=&nbsp;1;&nbsp;//置1(开始显示位0)<br />等涉及操作硬件的指令.<br /><br />否则应该加1~3个NOP().<br />在DSP中读IO很重要~~~
hotpower 发表于 2007-10-13 20:55 | 显示全部楼层

关于上拉电阻的选取问题

一般不涉及低功耗时,为了系统的稳定,阻值小了更好.<br />选4.7K居多.<br /><br />&quot;经典&quot;一般取10K.<br /><br />
 楼主| huangqi412 发表于 2007-10-13 21:01 | 显示全部楼层

哦,倒是和51,avr有些不同啊,感觉麻烦一些,谢谢hotpower

  
hotpower 发表于 2007-10-13 21:05 | 显示全部楼层

哈哈~~~到底ARM要快多了,肯定有区别~~~

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

本版积分规则

622

主题

24960

帖子

18

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