您的位置:控制工程论坛网论坛 » PLC与PAC » 黄石科威PLC开发(四)

llyq_4652

llyq_4652   |   当前状态:离线

总积分:333  2025年可用积分:0

注册时间: 2008-07-23

最后登录时间: 2008-10-10

空间 发短消息加为好友

黄石科威PLC开发(四)

llyq_4652  发表于 2008/8/14 9:58:53      719 查看 0 回复  [上一主题]  [下一主题]

手机阅读

到底我该怎么编写一个用户驱动呢?


 


上一讲我们配置了用户驱动在KEIL3中的工程环境,下面我们来谈谈PLCDR项目在KEIL中应该设置哪些参数。


 


首先,你得找到一个名为“Options For Target”的图标,就是那个“LAOD”图标旁边那个象个魔法棒的图案,点击弹出“Options For Target Target1”对话框。当然你也可以选择菜单的ProjectOptions For Target Target1来把此对话框调出。


 


找到OutPut选项,勾上下面的“Create HEX File ”的单选框,前面我们曾经说过,驱动加载到科威PLC芯片组中是要以HEX形式的文件通过DOWNHEX软件下载来实现的。所以得让KEIL给你生成一个HEX才行。


 


然后找到A51选项,将“Define 8051 SFR Names”前面的勾去掉。如果启用这个功能,KEIL就会在编译你的项目的时候,自动调用51默认的寄存器定义,那么就会和前面我们所提到的c8051F040.inc这个头文件所定义的寄存器相冲突。结果会在你编译项目的过程中,会出现一大堆的“redefined”错误。


 


除此之外,都默认就好,点击确认完成参数配置。


 


接下来,将你找到的c8051F040.inceasycore.inc以及easycore.lib3个文件都复制到D:\PLC_DRIVE路径下,并在此路径下新建一个“USER_DATA.inc”的文件。


 


下面我们说说,这几个文件的含义:


1.       c8051F040.inc,这个笔者前面讲过,不再重复;


2.       easycore.inc,你可以打开它来看看,会发现这里面定义了用户所可以用到的寄存器组还有相关的变量地址。F040中共定义了4R0~R7寄存器组,用户只能使用0区,其他的对不起,内核(我们习惯把芯片组内的实时操作系统称之为内核,很形象,不是吗?)都给占用了~然后是BRAM_USER,这个是用户可用的位变量寻址,采用的是直接位寻址方式,一共可以定义32个位,也就是4个字节。少了点,可是没办法,内核占了大头…DRAM_USER,这个是用户可用的字节变量寻址,采用的是直接寻址方式,可以定义16个,还是少了点,但是还是没办法…-_-!最后是XRAM_USER,这个用户能用的倒是多啊,有几千个,但是可惜的是它是间接字节寻址。系统读取这个区域的数据,那效率是刷刷往下降啊!但是还是得用,要不然变量不够啊,呵呵。F040要是直接寻址的存储空间再大些就好了,可是这是笔者的一相情愿,残念……最后面就是有关梯形图的变量地址空间了,你可以看到DMS等梯形图内所用的这些寄存器在内核里面所占的地址。中间的那一块暂时跳过不讲,以后找机会给大家说明,不过可能有的读者已经了解那些定义大概是什么意思了,不管了解不了解,让我们继续GO ON


3.       easycore.lib,这个库直接从KEIL里面是看不了的,你想要看它,就从记事本里面看吧。里面是为了方便用户所定义的一些系统函数,比如双字节乘除,浮点数运算等等,如果你要调用这些函数,注意出口入口要设置对哦。


4.       USER_DATA.inc,这个文件暂时是空白的,留给你自己发挥创造的,你可以在里面定义自己的位变量啦,字节变量啦,还有变量重定义等。比如你在里面写一句“MODE_DATA  EQU  DRAM_USER  ;模式选择”,意思就是你将直接字节寻址的第一个单元赋予了MODE_ONOFF这个名字,那么你在驱动中就可以直接调用MODE_DATA这个变量啦。


后面那个分号以及分号以后的文字,是这条语句的注释。在KEIL51汇编加注释有2中方法,一个是“;”,相当于C里面的“//”,另外一个和C相同,是“/* */”。


 


 


下一讲,笔者将讲述科威PLC芯片组开发用户驱动的具体格式。

1楼 0 0 回复