12.13总结

2019-04-15 16:29发布

我现在在做单片机的编程,其实单片机的编程也就是三个方面,因为现在你编程不可能使用汇编语言进行编程了,一般都使用C语言进行编程。所以就必须对c语言很了解,其实用c对单片机进行编程就是把单片机里面的各种寄存器当成是可以访问的地址,然后再访问地址的值,根据值不同再做判断。C里面的一些用法你就必须了解。还有就是单片机自身的知识,比如定时器,中断,串口等等。这些就属于是一些单片机结构方面的知识。当这些你都懂了以后,下面就是进行上层的业务逻辑关系的判断了,比如来个中断代表什么,比如不同的速度采取什么样的判断。这都是属于业务逻辑关系了。 我做的项目总工说不可以使用中断嵌套,我使用了外部中断和定时器中断,而定时器的计数寄存器是不断溢出然后重新计数的。现在假设我在外部中断的时候,然后我读取定时器计数寄存器的值,而这个值现在很小,因为在这次外部中断的过程中,计数器溢出了,发生定时器中断,但中断不能嵌套所以我无法进行定时器中断的处理,这样我读取到的定时器的值就小了一个计数器溢出值。怎么办呢?我想到了一个方法,那就是在读完定时器的值之后,再看看是否发生了定时器中断,如果发生了,就重新读取定时器的值(此时,定时器中断函数中的那个值我要认为的加1,就当是处理了中断),而且此时不用担心我在这次读取定时器值得时候,又发生定时器中断,因为不可能两次定时器中断时间靠的这么近。这是一个很不错的方法。 我在做12864液晶的时候,要赋值,是要给stm32单片机指定的几个端口赋值,而且还不能影响其它位的值,这怎么办呢?很简单,先进行值整理,再赋值,值整理可以都用位或,到赋值的时候就用位与,也可以值整理用位与,到赋值的时候用位或。这样就能实现给指定位赋值。如果正好是低位,甚至不用进行位整理可以直接用了。所以位整理不是一定需要的步骤。举个例子比如0xef24,要给高八位赋值0x56,先让0xef240xff00,这样就整成0xff24,再让0x56左移8位再与0x00ff相或就成了0x56ff,最后这两个数相与,就完成了。

热门文章