最新日志

发表于:2007-6-10 9:23:59
标签:无标签

0

canopen

我申请了恒润科技的试用光盘(VectorDemoCDV8.3),里边coe_canopen.exe因损坏无效,是不是每张光盘都这样?

点击此处查看原文 >>

系统分类: 工业控制   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(583)
发表于:2007-5-19 3:39:37
标签:无标签

0

本博公告

本博暂停更新,稍后就回。

欢迎访问:canopen.onlyblog.com

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(576)
发表于:2007-3-14 22:17:00
标签:无标签

0

ARM7TDMI-S后缀解释

T:Thumb代码支持,16bits指令结构;
D:Debug硬件调试模块支持;
M:加强的乘法操作支持(硬件乘法器),64位乘法结果;
I:EmbededICE Logic,支持片上断点和调试点;
S:synthesize,软核,可综合;
E:DSP指令支持;

点击此处查看原文 >>

系统分类: 工业控制   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(628)
发表于:2007-3-14 4:44:00
标签:无标签

0

老子-道德经

老子道德经--白话文注解:http://www.xet.cn/_game/lib/01_laozi/

点击此处查看原文 >>

系统分类: 工业控制   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(626)
发表于:2007-3-8 0:56:00
标签:无标签

0

ARM完整定义

     ARM是英国一家电子公司的名字,全名的意思是Advanced RISC Machine。ARM首创了chipless的生产模式,即该公司既不生产芯片,也不设计芯片,而是设计出高效的IP内核,授权给半导体公司使用,半导体公司在ARM技术的基础上添加自己的设计并推出芯片产品,最后由OEM客户采用这些芯片来构建基于ARM技术的系统产品。

     ARM的产品是IP Core,没有任何物理意义上的硬件或者软件实体。目前全球有103家巨型IT公司在采用ARM技术,20家最大的半导体厂商中有19家是ARM的用户,包括德州仪器, Philips, Intel等。20大巨头中唯一没有购买ARM授权的是Intel的老对头AMD,而AMD则收购了Alchemy公司与之抗衡,采用的是MIPS结构(有少数宽带路由器使用MIPS处理器,思科路由器也有使用这个牌子的)。目前面向市场的有ARM7, ARM9, ARM9E-S,StrongARM和ARM10系列。所以说ARM处理器有许多OEM厂家在生产。
……

点击此处查看原文 >>

系统分类: 工业控制   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(698)
发表于:2007-3-8 0:24:00
标签:无标签

0

CPU基本概念

1.主频 
     主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。CPU的主频=外频×倍频系数。很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差。至今,没有一条确定的公式能够实现主频和实际的运算速度两者之间的数值关系,即使是两大处理器厂家Intel和AMD,在这点上也存在着很大的争议,我们从Intel的产品的发展趋势,可以看出Intel很注重加强自身主频的发展。像其他的处理器厂家,有人曾经拿过一快1G的全美达来做比较,它的运行效率相当于2G的Intel处理器。所以,CPU的主频与CPU实际的运算能力是没有直接关系的,主频表示在CPU内数字脉冲信号震荡的速度。
……

点击此处查看原文 >>

系统分类: 工业控制   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(423)
发表于:2007-3-8 0:00:00
标签:无标签

1

ARM编程-软件工具

一、编译器介绍
1、ADS1.2

    ADS是ARM公司的集成开发环境软件,他的功能非常强大。他的前身是SDT,SDT是ARM公司几年前的开发环境软件,目前SDT早已经不再升级。ADS包括了四个模块分别是:SIMULATOR;C 编译器;实时调试器;应用函数库。
ADS的编译器调试器较SDT都有了非常大的改观, ADS1.2提供完整的WINDOWS界面开发环境。C编译器效率极高,支持c 以及c++,使工程师可以很方便的使用C语言进行开发。提供软件模拟仿真功能,使没有Emulators的学习者也能够熟悉ARM的指令系统。配合FFT-ICE使用,ADS1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握。ADS1.2需要硬件支持才能发挥强大功能。目前支持的硬件调试器有Multi-ICE以及兼容Multi-ICE的调试工具如FFT-ICE。而简易下载电缆不能支持ADS1.2。
……

点击此处查看原文 >>

系统分类: 工业控制   |    用户分类: 无分类    |    来源: 无分类

评论(1) | 阅读(750)
发表于:2007-1-28 23:48:42
标签:无标签

2

[转]C51中直接嵌入汇编的方法

看了好文章,就要顶一下:

C51中直接嵌入汇编的方法:

(C51BBS网友cuiwei)原创


//<asm.h>
#ifdef ASM
         unsigned long shiftR1(register unsigned long);
#else   
         extern unsigned long shiftR1(register unsigned long);
#endif
//end of asm.h

//<asm.c>
#define ASM
#include <asm.h>
#include <reg52.h>
#pragma OT(4,speed)
unsigned long    shiftR1(register unsigned long    x)
{
    #pragma asm
    clr c
    mov a,r4
    rrc a
    mov r4,a

    mov a,r5
    rrc a
    mov r5,a

    mov a,r6
    rrc a
    mov r6,a

    mov a,r7
    rrc a
    mov r7,a
   
    #pragma endasm
    return(x);
}
//end of asm.c
将此源文件加入要编译的工程文件,
将光标指向此文件,选择右键菜单“option for file 'asm.c'”,
将属性单“properties”中的“Generate Assembler SRC File”“Assemble SRC File”
两项设置成黑体的“√”将“Link Public Only”的“√”去掉,再编译即可。
用此方法可以在c源代码的任意位置用#pragma asm和#pragma endasm嵌入汇编语句。
但要注意的是在直接使用形参时要小心,在不同的优化级别下产生的汇编代码有所不同,
可以察看对应的.lst文件看一看,得到正确的优化级别后,#pragma OT(x,speed)锁定
优化级别(这里的值是0-9)。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(668)
发表于:2007-1-27 6:04:47
标签:Proteus  

3

51单片机软模PWM误差率之深入再研究--基于Keil、Proteus仿真调试

本人不揣冒昧,两天前写了个“51单片机软模PWM误差率之研究--基于Keil、Proteus仿真调试”,事后三思,犹不尽之处夥颐;这次趁机添柴,又烧了把火,陈述如下:

 

在PWM调速中,占空比α是一个非常重要的参数(故,在“之研究”中,本人针对α开刀,进行了详细的误差分析),一般改变α的方法有三:

         1、定宽调频法:这种方法保持PWM_HIGH不变,只改变PWM_LOW,这样使周期或频率而随之改变;

         2、调宽调频法:这种方法是保持PWM_LOW不变,而改变PWM_HIGH,这样使周期或频率也随之改变;

         3、定频调宽法:这种方式是保持周期或频率不变,而同时改变PWM_HIGH、PWM_LOW值,从而达到改变占空比α的目的。

头两种方法由于调速时也改变了控制脉冲的周期或频率,当控制脉冲的频率与系统固有频率接近时,将导致振荡,因此用的较少。故工程控制中,尤其是直流电机的控制中,最主要使用的还是定频调宽法。

 

本文的定位为:怎样在C51中实现定频调宽(改变α)的同时也保证较低的PWM波形误差率 ?单片机中使用软件模拟的方法输出PWM波其波形频率是否和预期的完全吻合 ?若不吻合,其误差率是多大 ?

 

上文中,本人特定义了三个重要的参数宏:

                  #define PWM_CYCLE  XXXX     //PWM波的一个周期,单位:us;
                  #define PWM_HIGH     XXX        //高电平持续时间,单位:us;
                  #define PWM_LOW      XXX        //低电平持续时间,单位:us;

接着,不断改变PWM_CYCLE的取值(实际上也是改变PWM的波形频率),在实验和仿真分析的基础上,最后得出这样的结论:在51单片机上采用软件模拟的方式输出PWM波,其频率越大,占空比误差越不可收拾;在PWM波形频率不是很高的情况下(比如小于1kHz),采用软模方式输出PWM是完全可行的;其占空比计算式可写为:(PWM_HIGH+12)/(PWM_HIGH+PWM_LOW+24)。

 

将PWM波形参数参数写成宏定义的方式有利于程序的编译暨研究的方便性;但这样一来,程序调试正确刷入MCU后运行,则PWM波的频率一定,占空比也一定,达不到调速或调控的目的;为此,本人修改源程序中PWM子模块(PWM.C),追加四个8位的模块级变量:

                  int8u data gPWM_HIGH_L;  //PWM_HIGH的低八位;
                  int8u data gPWM_HIGH_H;  //PWM_HIGH的高八位;

                  int8u data gPWM_LOW_L;  //PWM_LOW的低八位;
                  int8u data gPWM_LOW_H;  //PWM_LOW的高八位;

而保留PWM_CYCLE 宏定义不变,最终确定的中断服务函数为:

                 extern void Timer1_ISR(void) interrupt 3
                {
                  if(PWM_PIN){PWM_PIN = 0;
                     TH1 = gPWM_LOW_H;
                     TL1 = gPWM_LOW_L;}
                  else                  {PWM_PIN = 1;
                     TH1 = gPWM_HIGH_H;
                     TL1 = gPWM_HIGH_L;}  
                  }

(注:尽量避免在中断服务函数中执行16位计算,这样只会使PWM波形误差雪上加霜 !)

在Keil中编译后的汇编代码(默认8级优化)如下:

             ; FUNCTION Timer1_ISR (BEGIN)
                                           ; SOURCE LINE # 63
                                           ; SOURCE LINE # 65
0000 309709            JNB     PWM_PIN,?C0002
                                           ; SOURCE LINE # 66
                                           ; SOURCE LINE # 67
0003 C297              CLR     PWM_PIN
                                           ; SOURCE LINE # 68
0005 85008D      R     MOV     TH1,gPWM_LOW_H
                                           ; SOURCE LINE # 69
0008 85008B      R     MOV     TL1,gPWM_LOW_L
                                           ; SOURCE LINE # 70
000B 32                RETI   
000C         ?C0002:
                                           ; SOURCE LINE # 72
                                           ; SOURCE LINE # 73
000C D297              SETB    PWM_PIN
                                           ; SOURCE LINE # 74
000E 85008D      R     MOV     TH1,gPWM_HIGH_H
                                           ; SOURCE LINE # 75
0011 85008B      R     MOV     TL1,gPWM_HIGH_L
                                           ; SOURCE LINE # 76
                                           ; SOURCE LINE # 77
0014         ?C0004:
0014 32                RETI   
             ; FUNCTION Timer1_ISR (END)

 

这代码与先前的几乎相同,只不过将立即数寻址改变成了直接地址寻址,而这两条指令的指令周期是一样的,均为2us(12.0M晶振);因此,其执行效果也完全一样。gPWM_HIGH_L、gPWM_HIGH_H、 gPWM_LOW_L、 gPWM_LOW_L 的取值可以在例程初始化或调速调控函数中随时修改;由于采用的是定频调宽法,例程修改中只要注意gPWM_HIGH+gPWM_LOW的值为PWM_CYCLE即可。这样,实现了占空比可变的同时,也有效的控制了输出PWM波的误差率。

最后的这一条结论再明显不过了:其输出PWM波形频率的误差率计算式为:24/(PWM_CYCLE+24)。

 

全文到此结束,欢迎大家指正,砖头拍下来我也接着 !

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(1) | 阅读(1055)
发表于:2007-1-26 8:01:40
标签:Proteus  

2

多状态/时间驱动机制的嵌入式操作系统DemoRoutine

最近充电,看了一本好书,推荐给大家,很适合51的初学者:《C语言嵌入式系统开发》,Michael J. Pont著,陈继辉等译;中国电力出版社,2003,12.

 

书中介绍了作者编写的一个微型嵌入式系统,取名为sEOS,意即Simple Embeded OS。俺平时小编小模习惯了前后台超级循环的框架,将本书粗粗的过了一遍之后,顿时醍醐灌顶,觉得这eEOS简单已矣,却非常的适用。现总结如下:

 

0、系统的设计的理念是把一个比较复杂(不能太复杂)的任务分割成若干个不同的任务处理子状态,这样,在一个系统时钟Tick内仅完成某个任务子状态的处理,同时切换任务状态,紧接着的下一个Tick内处理新切换的任务子状态,完了再次切换任务状态………这样,系统就在不同的任务状态之间无休止的轮回 !

 

1、占用极低的CPU资源,但却非常的灵活;

 

2、把需要处理的任务分成多个子任务(也称状态),每个子任务相对独立,并且在系统Tick的驱动下轮回推移;

 

3、状态之间转换时,采用switch-case语句实现,简单明了,易于控制;

 

4、象其它许多嵌入式系统一样,可以有效的完成周期性执行单任务的功能,同时也可以建立任务状态系统(注:这一个字不是修饰“任务”,也不是修饰“系统”,只能修饰“状态”),却无须关心任务状态切换时的堆栈修改、函数重入等等,sEOS本身就不在乎这些;

 

5、使用这套sEOS的关键是:每个子任务的处理时间最大不能超过一个系统TICK,否则会导致系统TICK丢失

 

6、完了本人特意将这套“内核”修理了阵子,做一个交通灯控制的仿真程序张贴如下:

点击看大图

 

7、rar里边是该Demo的程序文件,也包括了sEOS的“核心部件”,或许做一些东戳西顶的小项目也有用得上的时候。将压缩包的文件介绍下:

 

Simple_EOS.C ——系统内核,包括系统节拍初始化及Tick内任务调度;

Simple_EOS.H——系统内核头文件,一些红定义之类的;

这两个程序为方便应用,本人对原文件做了修改,文件名不变。

BootLoader.c——模块集成文件,包括main函数;

Defines.h, Includes.h, AT89X52.H——俺编辑、拷贝的一些头文件;

X.C, X.H ——具体需要完成的任务处理例程,此处为演示交通灯控制;

TrafficDemo.hex——本人在Keil下编译好的hex文件;

TrafficDemo.dsn——本人制作的Proteus仿真文件,用6.9sp4方能打开;

 

8、不正之处,欢迎大方提点,先谢了 !

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(0) | 阅读(648)
总共 , 当前 /,23下一页