实战攻坚!
上一讲我们了解了EASY-M0806R的IO口分配情况以及各种LED的引脚情况,那么下面我们就要开始一步一步的编写我们的驱动代码了~
首先是INIT_CONFIG用户驱动子程序,该程序里面,要添加的内容在前文中已有说明。那我们该如何配置这些IO口方式呢?
INIT_CONFIG 首先我们的第一句话便是: MOV SFRPAGE,#0FH 那么SFRPAGE是什么意思呢?呵呵,这就要看你对以前看的F040说明书熟悉程度了,什么?你完全不知道??-_-!那就现翻吧~笔者当年也好不到哪去,嘿嘿。 从说明书中可得知,这是一个选择SFR页数的功能寄存器,我们要调配IO端口的参数寄存器PnMDOUT,就首先得把SFR页数置为15,这个是F040规划的,就不再剥根问底了。值得提出的是,初学者常犯的一个错误就是在配置功能寄存器的时候,没有及时更改它所属的SFR页数,导致程序运行错误。比如,配置了P0MDOUT功能寄存器,这个时候你是把SFRPAGE置成15了。但是在调配TMR4CN功能寄存器的时候,却忘了把SFRPAGE改为2。这个时候错误便不可避免的出现了。 其次,我们开始配置上面所涉及到的EASY-M0806R的IO口的配置寄存器了,也许有的朋友会问到了,怎么初始化没有延迟啊,选择系统时钟频率啊,调配交叉开关啊?这些步骤确实是一个操作系统运行初始化所必须要配置的部分,但是在我们的驱动里面就不用重新配置了,因为内核里面已经定义过了一次。当然,也许你做的PLC有特殊的用途需要重新配置这些,那么也可以,不过还是那句话,时刻记住以内核为主,所以在重新配置这些之前你要考虑清楚怎么配置才不会和内核的配置起冲突。 科威PLC一般来说,输入端口要配置成漏极方式,输入端口要配置成推挽方式,LED也都是推挽方式。当然具体的要视其原理图决定。根据这个原则,我们配置了下面4条语句: ORL P0MDOUT,#0F0H ;1 ORL P1MDOUT,#3FH ;2 ORL P2MDOUT,#0FFH ;3 ANL P3MDOUT,#00H ;4 ORL P4MDOUT,#03H ;5 也许细心的你会问:为什么都要用ORL和ANL指令而不是用MOV呢?这个就是笔者的习惯了,ORL和ANL指令的好处是只用改变你所需要的位,而其他的可以保持不变,以免引起不必要的错误。 我们来分析这4句话的含义: 1. 这句是配置P0端口的输出方式的,由上一讲我们得知,整个驱动用到P0口的有: OLED0→P0.4 OLED1→P0.5 OLED2→P0.6 OLED3→P0.7,由于LED需要配置成推挽输出方式,那么我们就将P0MDOUT的高4位都配置成1即可。 2. 这句是配置P1端口的输出方式的,整个驱动用到P1口的有: OUT0→P1.0 OUT1→P1.1 OUT2→P1.2 OUT3→P1.3 OUT4→P1.4 OUT5→P1.5,由于输出端口需要配置成推挽输出方式,那么我们把P1MDOUT的低6位都配置成1即可。 3. 这句是配置P2端口的输出方式的,整个驱动用到P2口的有: ILED0→P2.0 ILED1→P2.1 ILED2→P2.2 ILED3→P2.3 ILED4→P2.4 ILED5→P2.5 ILED6→P2.6 ILED7→P2.7,由于LED需要配置成推挽输出方式,那么我们就将P2MDOUT的所有8位都配置成1即可。 4. 这句是配置P3端口的输出方式的,整个驱动用到P3口的有: I0→P3.7 I1→P3.6 I2→P3.5 I3→P3.4 I4→P3.3 I5→P3.2 I6→P3.1 I7→P3.0,由于输入端口需要配置成漏极输出方式,故我们把整个P3口输出都配置成0。 5. 这句是配置P4端口的输出方式的,整个驱动用到P4口的有: OLED4→P4.1 OLED5→P4.0,同理,我们把P4MDOUT的低2位配置成1。
这样,整个INIT_CONFIG便配置完成了。下一讲笔者将讲述其他用户驱动子程序在EASY-M0806R上的实现。
本帖首发中国工控网科威PLC论坛,转载请声明!
|