delay,delay的被动语态怎么写?
答:delay的被动语态形式为delayed,不要错写为delaied.
元音加y结尾的动词变被动形式直接加ed,再如:destroy_destroyed(不要错写为destroied)
enjoy_enjoyed play_played
delay_delayed
只有辅音加y结尾变被动形式才变y为i再加_ed,例如:
study_studied deny_denied
如何用汇编编写定时器1替代delay延时的程序?
1、有位答主说到了,switch()的case后面没有加break;
2、整个显示程序没有延时,一直在运行,应该是运行到case2 到case0的间隔时间最长,所以最后一位(case 2)最亮,而case 0 ->case 1,case 1->case 2的时间都很短,持续显示时间较短,所以比较暗。
解决办法:
1、显示程序不要放在定时器中断中,放在主函数;
2、在每个case事件中增加大约5毫秒的延时delay_ms(5);
这里有一些程序仅供参考:
mmdanielmm/Project-update-weekly中断服务函数里加了延迟会怎么样?
1,中断处理程序中不能使用有睡眠功能的函数,如ioremap,kmalloc,msleep等,理由是中断程序并不是进程,没有进程的概念,因此就没有休眠的概念;2,中断处理程序中的延时可以用忙等待函数来代替,如ndelay,udelay,mdelay等,这些函数在实现上本质是根据CPU频率进行一定次数的循环;最好不要使用mdelay,因为毫秒延时对内核来说已经是非常大了。但是在中断处理程序中使用msleep却不行。(见linux设备驱动开发详解第二版p210页)
3,printk函数在中断处理函数中可以使用,但是会占用较多时间,降低效率。在调IIC驱动的时候,由于IIC读取写入处理时必须进行一定延时,在我没有使用udelay的时候,竟然用printk就使IIC中断正常运行,当时在调试的时候,发现有些printk加上程序就正常,去掉就不正常,当时真是匪夷所思,但现在明白了,因此printk占用时间比较大,正好充当了IIC延时的功能。最后我把printk全部去掉,在需要延时的地方加入udelay,才使程序正常运行。
4,使用for和while等的空循环在中断处理函数中进行延时操作,在实际测试中发现并不能起到延时的功能,linux内核处理这种循环速度很快,并没有延时的效果。这跟裸板程序使用循环来延时的用法不相同。
delay函数里的for循环具体数字是怎样取的?
这个时间确定起来,可以简单,可以复杂。
简单的,不太准确。
你可以给10000,然后用手机或者电脑上的计时软件计时,看看是多少秒,然后就可以大致确定,每隔一秒或者间隔200ms,的循环数字了。
复杂的,也是比较准确的。
你需要用KeilC51软件,在建立的工程里面,设置好所用的51芯片,以及51的时钟频率,输入代码、编译之后通过调试。
可以具体看到delay函数执行的时间,在左边的框里面。退出函数之后的这个值减去进去之前的这个值,就是函数的准确执行时间。注意51的型号和时钟频率要正确
8255A芯片ABC端口的地址确定方法?
一般用CPU引脚的地址管脚中的A0-A9来确定8255A的地址,由于8255A有四个端口,因此用A0。A1选择内部端口,A1-A9则通过编码电路当且仅当A1-A9为特定值时输出一个低电平连接到8255A的芯片选择管教CS,CS在收到低电平时就知道CPU在找自己,于是就接受CPU指令,此时8255A就和CPU连接上了。因为8255A的编码电路只有当CPU地址管教为特定值时才连通,因此这个特定值皆可以作为8255A的地址