EDN首页   博客首页

最新日志

发表于:2008-9-9 9:38:15
标签:无标签

0

超值开发板

LM3S102性价比最高的超值ARM开发板

好吃不贵,价廉物美的LM3S102的出现使32位的ARM入侵到8位和16位单片机的领域,8KFlash+2KSRAM的单

片机肯定不止10块钱。
看看20MHZ的主频,1.25MIPS的执行效率,带深度为16的FIFO的UART,1M速度的带FIFO的SPI,可以高达

300多K速度的IIC控制器,还有双路定时器,内部Flash可以在线编程... ...,其性能也远非8位和16位单

片机可比。
我们的LM3S102开发板几乎涵盖了这款芯片的各个片上设备,和芯片一样好吃不贵,价廉物美。熟悉单片

机的朋友可以通过我们的板子快速进入ARM开发。

开发板硬件资源:

1、单色84x48点阵液晶模块,可以显示图形和文字。通过SPI口连接到芯片。
2、蜂鸣器1只,用作GPIO输出试验。
3、LED发光管1只,用作GPIO输出试验。
4、24C02一片,用于做I2C试验。
5、MAX232芯片一片,用于232串口电平转换,做RS232通信试验用。
6、输入按键一只,用于GPIO输入试验。
7、复位按键一只。
8、电源开关一只。
9、标准20针JTAG调试接口。


软件例子源程序:

1、GPIO输出试验,点亮LED发光管。
2、定时器PWM输出试验,点亮液晶背光。
3、SSI(SPI)试验,驱动液晶屏。
4、GPIO输入试验,接受按键并驱动蜂鸣器。
5、I2C试验,读写24C02。
6、RS232串口通信试验。
7、定时器试验。
8、比较器试验。
9、位操作试验。
等等


开发板例子使用Keil的MDK做开发环境,演示用ULINK1进行Cortex-M3调试的方法。
LM3S102微控制器包含以下的产品特性:
32位RISC性能
   -采用为小型嵌入式应用方案而优化的32位ARM?CortexTM-M3 v7M结构
   -可兼容Thumb?的Thumb-2专用指令集处理器内核,可提高代码密度
   -20-MHz操作
   -硬件除法和单周期乘法
   -集成了嵌套向量中断控制器以提供明确的中断处理
   -14个中断,带8个优先级
   -非对齐式的数据访问,使数据可以有效地压缩到内存中
   -极细微的位处理操作(bit-banding)可最大限度地使用内存,并且提供创新的外设控制
内部存储器
   -8KB单周期Flash
     用户管理的Flash块保护,以2KB块大小为基础
     用户管理的Flash数据编程
     用户定义和管理的Flash保护块
   -2KB单周期SRAM
通用定时器
   -2个定时器,每个都可配置为一个32位定时器或两个16位定时器
   -32位定时器模式:
     可编程的单次触发(one-shot)定时器
     可编程的周期定时器
     使用外部32.768-KHz时钟作为输入时的实时时钟
     在周期和单次触发模式下进行调试期间,当控制器使CPU的暂停(Halt)标志有效时的暂停操作

(stalling)可由用户来控制使能
   -16位定时器模式
     带有8位预分频器的通用定时器功能
     可编程的单次触发定时器
     可编程的周期定时器
     在调试期间,当控制器使CPU的暂停(Halt)标志有效时的暂停操作(stalling)可由用户来控制使


   -16位输入捕获模式
     输入边沿计数捕获
     输入边沿时间捕获
   -16位PWM模式
     简单PWM模式,PWM信号的输出反相可由软件编程
可遵循ARM FiRM规范的看门狗定时器
   -带有可编程装载寄存器的32位向下计数器
   -带有使能的独立看门狗时钟
   -带有中断屏蔽的可编程中断产生逻辑
   -提供锁定寄存器保护,以防止软件跑飞(runaway)的情况
   -带有使能/禁能的复位产生逻辑
   -在调试期间,当控制器使CPU的暂停(Halt)标志有效时的暂停操作(stalling)可由用户来控制使


同步串行接口(SSI)
   -主机或从机操作
   -可编程的时钟位速率和预分频
   -独立的发送和接收FIFO,16位宽、8单元深
   -Freescale SPI、MICROWIRE或Texas工具同步串行接口的可编程接口操作
   -从4到16位的可编程数据帧大小
   -用于诊断/调试测试的内部回送测试模式
UART
   -完全可编程的16C550-类型UART
   -独立的16×8发送(Tx)和16×12接收(Rx) FIFO,减少CPU中断服务负载
   -带小数分频器的可编程波特率发生器
   -可编程的FIFO长度,包含1字节深度的操作提供常用的双缓冲接口
   -FIFO触发点为1/8, 1/4, 1/2, 3/4和7/8
   -用于起始、停止和奇偶的标准异步通信位
   -错误-起始-位检测
   -line-break的产生和检测
模拟比较器
   -可配置输出来驱动输出管脚或产生中断
   -将外部管脚输入与外部管脚输入相比或与内部可编程的电压参考相比
I2C
   -在标准模式中,主机和从机接收和发送操作的传输速度高达100Kbps;在高速模式中,传输速度

高达400Kbps
   -中断产生
   -主机具有仲裁和时钟同步,多主机支持,以及7位寻址模式
GPIO
   -高达18个GPIO,取决于配置
   -中断产生可编程为边沿触发或电平检测
   -在读和写操作中通过地址线进行位屏蔽
   -GPIO端口配置的可编程控制
     弱上拉或下拉电阻
     2-mA, 4-mA和8-mA端口驱动
     8-mA驱动的斜率控制
     开漏使能
     数字输入使能
电源
   -片内线性稳压器(LDO),具有用户可调的2.25V~2.75V可编程输出
   -控制器上的低功耗选项:睡眠和深睡眠模式
   -外设的低功耗选项:软件控制单个外设的关断
   -LDO带有检测未调整电压和自动复位的功能,可由用户控制使能
   -带3.3V电源掉电检测,可通过中断报告该状况或者复位
灵活的复位源
   -上电复位(POR)
   -复位脚有效
   -掉电(BOR)检测器向系统警报电源下降
   -软件复位
   -看门狗定时器复位
   -内部线性稳压器(LDO)输出变为不稳定
其它特性
   -6个复位源
   -可编程的时钟源控制
   -时钟门控单个外设来节省功耗
   -遵循IEEE 1149.1-1990的测试访问端口(TAP)控制器
   -通过JTAG和串行线接口的调试访问
   -完整的JTAG边界扫描
封装
   -遵循RoHS的28-脚SOIC封装
   -商业级和工业级的操作温度


联系方式:
QQ:373744463 旺旺在线旺旺离线
公司电话:0415-4138575

http://shop35738797.taobao.com/

点击此处查看原文 >>

系统分类: 数字电视   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(17)
发表于:2008-7-27 18:08:13
标签:无标签

0

点亮智林测控开发板的发光二极管

      智林测控的开发板,制板精良,特别是它带有真彩屏1.8寸,格外引人注目。

今天我弄了一块。

      发现他的说明书特别短小精焊,适合初学者快速入门

     /*

                                            \\\|///
                                         \\  - -  //
                                        (  @ @  )
+---------------------oOOo-(_)-oOOo-------------------------+
|                 智林STM32开发板试验程序                                 |
|                    GPIO 输出方式试验                                            |
|                 刘笑然 by Xiaoran Liu                                             |
|                        2008.4.16                                                           |
|                                                                                                   |
|           智林测控技术研究所 ZERO research group                |
|          www.the0.net      http://shop35738797.taobao.com/          |
|                                              Oooo                                            |
+-----------------------oooO--(   )------------------------------+
                                        (   )   ) /
                                         \ (   (_/
                                          \_)    

*/
/*----------------------------------------------------------*\
 |  引入相关芯片的头文件                                    |
\*----------------------------------------------------------*/
#include <stm32f10x_lib.h>                        // STM32F10x Library Definitions
#include "STM32_Init.h"                           // STM32 Initialization
/*----------------------------------------------------------*\
 | HARDWARE DEFINE                                          |
\*----------------------------------------------------------*/
#define LED             ( 1 << 5 )                // PB5: LED D2
/*----------------------------------------------------------*\
 |  Delay                                                   |
 |  延时 Inserts a delay time.                              |
 |  nCount: 延时时间                                        |
 |  nCount: specifies the delay time length.                |
\*----------------------------------------------------------*/
void Delay(vu32 nCount) {
  for(; nCount != 0; nCount--);
  }
/*----------------------------------------------------------*\
 | MIAN ENTRY                                               |
\*----------------------------------------------------------*/
int main (void) {
  stm32_Init ();                                  // STM32 setup
  for(;;) {
    GPIOB->ODR &= ~LED;                           // switch on LED
 Delay(2000000);
    GPIOB->ODR |=  LED;                           // switch off LED
 Delay(2000000);
    }
  }
/*----------------------------------------------------------*\
 | END OF FILE                                              |
\*----------------------------------------------------------*/

上述我想最不容易理解的地方就是ODR,还加了个->,我这个人一见结构体就晕,没有办法还得硬着头皮查,

typedef struct
{
  vu32 CRL;
  vu32 CRH;
  vu32 IDR;
  vu32 ODR;
  vu32 BSRR;
  vu32 BRR;
  vu32 LCKR;
} GPIO_TypeDef;

而用哪个端口在#include "STM32_Init.h"                           // STM32 Initialization

已经说明用的是B口,

我又在数据手册上查 ODR为

端口输出数据寄存器(GPIOx_ODR)

这下我明白了,其余设置不变只改变端口方向寄存器的值就可以了

下面的绿灯就是点亮的发光二极管

 点击图片即可查看更多文章

点击查看更多文章

点击此处查看原文 >>

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

评论(0) | 阅读(84)
发表于:2008-7-17 20:05:42
标签:无标签

0

STM32在keil中的正确设置

现在很多人都选择ULINK做为STM32的开发工具,但其要想正确使用,还得注意一下,本文就对Keil环境如何设置ULINK,做一个总结:

一首先ULINK连接好,看是否上电正常,点Options for Target

 

选ULINK Cortext Debuger

 

点击开大图

选好后还得看一下Utilities:也选择ULINK Cortext Debug

点击开大图

选择SETING:圈定的三项最好都打对号

点击开大图

 点击图片即可查看更多文章

点击查看更多文章

点击此处查看原文 >>

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

评论(0) | 阅读(86)
发表于:2008-7-15 15:42:31
标签:无标签

0

一本描述CORTEX-M3的好书

本人发现一本好书以下是序言

译序
        我接触ARM的历史约4年,早期是很欣赏这类处理器,到了后来切身使用它们的机会越来越多,慢慢地有了感觉,也更加喜欢了。在偶然听说Cortex-M3后,我就冥冥地感到它不寻常。只是因为其它工作一直没有去了解它,直到今年初才进一步学习,很快就觉得相知恨晚。当时只能看ARM官方的重量级资料,在看到这本书的英文原稿后,更感觉被电到了一样,于是突然有了把它翻译成中文的冲动。经过累计约150个小时的奋战,终于有了此译稿。在翻译过程中,我始终采用下列指导思想:
1.        尽量使用短句,并且把句子口语化。我认为高深的道理不一定要用高级的语法句型才能表达。想想看,即使是几位博士互相聊天讨论一个课题,也还是使用口语吧,而且火花往往就是在这种讨论中产生呢!
2.        多用修辞方法,并且常常引用表现力强的词汇——甚至包括网络用语和脍炙人口的歌词。另外,有时会加工句子,使得风格像是对话。这样做的目的是整个文风更鲜活——有点像为写出高分作文而努力的样子。这点可能与很多学术著作的“严肃、平实”文风不同,也是一次大胆的尝试。还希望读者不吝给予反馈。
3.        在“宏观”上直译,在“微观”上意译。英语不仅单一句子的语法和汉语不同,并且句子的连贯方式也与汉语不同。因此在十几个到几十个单词的范围内,我先把它们翻译成脑子里的“中间语言”,再把中间语言翻译成汉语。这样,就最大地避免了贻笑大方的“英式汉语”。
4.        有些术语名词不方便翻译成汉语,或者目前的翻译方式不统一,或者与其它术语翻译的结果很接近,如error和fault,就只能用英语意会。此时我就保留英文单词,相信这样比硬生生地翻译成汉语还好。这些词汇主要是:retarget, fault, region等。另外,英文中有一个很能精练表达“两者都”意思的单词及其用法:”both”,我也常常保留之。
5.        图表对颜色的使用比较丰满,尤其是比较大型的插图,相信这样能帮助读者分析和理解。插图是从原图直接复制的,因此矢量图变成了位图,无法再适应任何比例的缩放。不过,我在复制原图时,把原图以200%的比例放大,从而提高了图片的质量。
6.        我在很多地方加了译注。比较短的译注就直接以“()”加在文字后面。比较长的译注则为它开出一个“文字池”,放到相应的“.text”后面并与之相临。早期的译注多用于解释一些不是很广为人知的术语,后期的译注则更多是我认为有必要补充的内容,包括读者在阅读过程中可能会产生的问题,容易混淆的概念,深入理解等。
7.        我对少量自然段作了改编。也有个别部分译自ARM提供的权威文档。
本书的翻译工作在40%进度的时候是最困难的时期,有一种好像长跑中遇到了所谓“极限”的感觉。望着距离掉下去还有那么高的滚动条,甚至都有停住的自我暗示了。那天刚好是哀悼日的第一天,我本来情绪很低沉,但在我看到默哀完毕,天安门广场上排山倒海般地呐喊“中国加油”时,我突然有了强烈的共振感觉,那是一种热泪盈眶的激动和感叹,甚至觉得他们就是在鼓励我!让我一下子振作起来,找回了比刚开始还要强烈的干劲,并且更加信心满满。这种精神力量一直推动我翻译完最后一个字,并且还有“余勇可贾”的快感^_^
整个翻译的时间跨度是在2008.05.10-2008.06.07,共计28天。不知这是否算得上很“仓促”。想必有很多句式还能改得更好,甚至还有错别字等低级错误。我使用了五笔输入法,可能错别字会错得很离奇,不过肯定逃不过读者雪亮的双眼的。希望读者在发现错误后批评指正。反馈地址是:rock.song@hotmail.com,也可以通过QQ:9471202/9312500。
本译稿草稿完成后,我交给几位好友去试读和审校,得以揪出了很多大大小小的bugs。他们是:浮云,土豆波,美眉Y和小胖,在这里以点名表示感谢!
宋 岩    2008.07.02


http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1319637&bbs_page_no=1&bbs_id=1032

请大家去下载,有PDF格式的

 点击图片即可查看更多文章

点击查看更多文章

点击此处查看原文 >>

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

评论(0) | 阅读(113)
发表于:2008-7-6 12:05:51
标签:无标签

0

STM32充满想象力的芯片

 

STM32F103——充满想象力的芯片

 

STM32F103——充满想象力的芯片

1、ARM最新的Cortex-M3内核。优先级抢占的中断控制器,支持中断自动嵌套,硬件完成现场保护与恢复,中断嵌套时,只需保护和恢复一次现场,即使在恢复现场的时候再次中断也不需要再次保护现场,只需6个clk的调整时间。
2、居然只需7个滤波电容就能构成最小系统
3、外设的引脚居然可以重影射
4、RAM居然可以通过位绑定技术按位来访问
5、居然装备了可编程的掉电监测器
6、居然有带电池供电的数据备份寄存器
7、芯片进入低功耗模式后可以通过“事件”唤醒,而无须执行中断子程序
8、定时器居然有前置的倍频器
9、2个12位的AD却拥有高达1M的采样速率,AD模式更是天花乱坠,传说中的注入模式……
10、GPIO刷新速率可设定,支持位的原子操作,还能锁定方向,居然还有个脚叫“入侵检测引脚”,发生“入侵”时硬件自动记录时间,只要有后备电池。为西门子保留了单脉冲的输出功能(据说用于PLC的)……
11、原来还有一种狗叫模拟看门狗……
12、可检测PWM脉宽和频率(硬件直接支持)
13、集成电机控制和霍尔接口
14、原来还有一种狗叫窗口看门狗……过早或过晚喂狗,狗都会让系统复位
15、还集成了第三只狗,独立看门狗,这种狗比较常见
16、SPI还带硬件的CRC校验高达18Mb/s的通讯速度
17、支持两个设备地址的I2C总线,据说任天堂的游戏机常用到这种功能,I2C同时支持SMBUS2.0和PMBUS模式
18、USART速度高达4.5Mbps,不仅支持IrDA还与接触式的IC卡协议兼容
19、还有CAN,USB……
20、只要十几块钱
21、……
至今还没搞清到底有多少功能

STM32:Releasing your creativity!

超值开发板:

http://shop35738797.taobao.com/

 点击图片即可查看更多文章

点击查看更多文章

点击此处查看原文 >>

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

评论(0) | 阅读(91)
发表于:2008-7-6 11:55:09
标签:无标签

0

LPC同STM32的比较

我终于狂查资料,写下了以下信息:

Cortex-M3是新兴起来的一种ARM7的核,而ARM7TDMI是一种传统的经典的ARM内核。我们就抛开这一切,来比较一下两则的异同。

我们就在以下平台上比较吧:

STMicoelectronicsSTM32F101 36M极限频率,616K SRAM32128K flash , 1*12ADC 80个快速IO口。

NXPLPC21303 ,、,70MHz, 8K SRAM, 2 UART , 2 I2C , 8*10ADC 32k FLASH

而且价格上STM32要比NXP系列要贵。

这样看来是不是NXP2103占据一定的优势呢?它便宜,更快,有更多的AD转换,但是我们下面将从另外的方面来比较一下,看看NXP的优势真的是不是那么明显?

我们再比较一下ARM7TDMIARM Cortem-M3,我们将发现以下有趣的现象:

Cortex-M3主要针对价格第三的应用场合,主要是代替性能强大的8位或者十六位微控制器的市场。

最值得注意的地方是整数运算,Cortex是运行在 1.25 DMIPS/MHz,而ARM7TDMI则是在0.95(在thumb指令下是0.74DMIPS/MHz,如果我们再交以  DMIPS/MHz写入,则会从ATM7TDMI得到66.5 DMIPS,而从Cortex得到62.5 DMIPS,如果ARM7需要运行在thumb模式(如果代码空间有限的话)ARM7TDMI仅仅才51.8 DMIPS,使Cortex运行显得更快了(如果代码空间足够的话就显现不出来)这就算两则打平了。

第二是看两则的电源管理和功耗。ARM7TDMI内核有0.28mW/MHz,而Cortex0.19 mW/MHz,在片内,LCP21031.8V的时候是转换到了50mA,(如果我的排除一切外围电路,只留PLL工作),在Cortex内核中我们得到的是更小的电流。

第三,在内核结构方面,NXP是冯诺依曼结构,而Cortex则是哈佛结构,它将代码区和数据区分开了,多了分枝预测,在运行for等语句的时候有优势,故有一定的优势。而且,Cortex支持一些比如位翻转的DSP指令,这在运行比如DFT的时候显得无比的有用。Cortex还包含了分枝结构,较大地减少了中断等等时间(比ARM7TDMI改进了2.5倍),这无疑Cortex占据了优势。

还有一些其它的方面值得注意,比如:Cortex有一些片内集成的模块,但这些在LPC芯片上要在外围另外接。比如:LDO,片内温度传感器等,这些功能看起来不怎么样,但是如果我们的PCB板面积有限的话,为节省外部的空间,这些功能就很重要了。第二,频率也显得比较重要,Cortex提供了50M频率输出,但是LPCPCC只能够提供内部时钟倍频。

结论:两则还是各有千秋,所以,我们在选择型号的时候还得慎重。

 

(大部分根据英文翻译而来,如果有什么不妥,还请指出来)

 

 点击图片即可查看更多文章

点击查看更多文章

点击此处查看原文 >>

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

评论(0) | 阅读(106)
发表于:2008-6-29 23:51:57
标签:无标签

0

关于用KEIL for ARM 3.03a 以上版本编译LPC214X 的例程问题

关于用KEIL for ARM 3.03a 以上版本编译LPC214X 的例程问题

点击下载点击下载

注意啦:本资料的路径是你keil的路径,

那个命行可以这样写:我的是keil在d:

d:\keil\arm\bin30\fromelf.exe Uart0Demo.axf -z

即不要obj\我这样做好用

 

点击此处查看原文 >>

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

评论(0) | 阅读(77)
发表于:2008-6-14 18:01:49
标签:无标签

0

外围设备或器件仿真的方法及建议

外围设备或器件软件仿真的方法及建议

                              来源:单片机及嵌入式系统应用

1 外围设备或器件软件仿真的必要性
   
有一点必须先肯定,软件仿真不能替代硬件仿真。软件仿真只是对硬件的仿真模拟,但是软件仿真仍有必要。目标系统是千变万化的,需要开发者去实现。实现可能需要相当长一段时间,甚至完成后不能随意调试,因此有必要对目标系统进行模拟或仿真,以便开发、检测嵌入式软件。
    外围设备软件仿真可以快速建立开发目标的模拟系统。由于各仿真部件是软件,因此只要部件存在,就没有采购、制作电路板的过程。将各部件按规则布置、用软件连接,就构成了目标模拟系统。
    外围设备软件仿真可以使嵌入式的软件设计与硬件设计相对独立。软件设计者可以先在模拟软件上进行功能和逻辑测试,从而减少了对硬件的依赖。
    外围设备仿真软件在一定条件下可以制作为检测硬件功能的工具。如果仿真部件的连接口可以转化为硬件接口,那么就可以在硬件上用软件仿真部件代替被仿真部件运行。
    外围设备软件仿真可以降低开发成本。过去有时为了配合软件开发,需要在硬件开发初期制作一些测试硬件。而现在,硬件开发可以按自己的需要按部就班地进行,只要在必要时与软件设计者沟通就可以了。
    外围设备软件仿真可以方便单片机程序的调试,在程序涉及外围设备时不必做任何处理直接运行,仿真软件会自动处理对它的访问。

2 单片机外围设备或器件的相似性
   
经过几个项目的开发,会发现各项目所采用的外围设备或者器件大多相同。只是在功能不同时,才使用不同的外围设备或器件。对于不同的器件或设备,可以发现部件与单片机接口常使用如下几种:I2C、SPI、并口8(16)位、UART。
    因此,对外围设备或器件的仿真部件,在今后的各项目中被采用的可能性很大,制作仿真部件的功夫不会白费。如果将部件特有的接口与部件功能部分分开,两部分再用通用的接口连接(例如将I2C接口单独仿真,然后单独仿真器件的功能部分,再将这两部分用通用接口连接),那么经过这样的设计,由于I2C接口的通用性,I2C接口的仿真使用率会很高,同时各部件由于接口全都一样也便于各部件集成。


3 外围设备或器件仿真方法及建议
   
建议单片机软件调试器预留软件接口。这样其他程序就可以监视单片机的I/O引脚或寄存器,从而使仿真外围设备有了可能。
    将I2C、SPI、并口8(16)位、UART接口封装以Socket形式输出。由于各种单片机的调试器接口不大可能一样,所以单独封装部件接口对应付不同的单片机调试器有好处。以Socket形式输出,可使各部件功能仿真部分高度独立,仿真部件甚至可与其接口和调试器不在同一个计算机内。
    仿真部件的全部接口改为Socket形式。由于关于Socket编程的例程很多,所以不用担心其中的复杂性。经过这样设计后,仿真部件间、仿真部件和调试器间存在复杂的Socket多点连接问题。为了减少复杂的连接须做些修改,可将仿真部件与调试器连接的Socket程序单独制作程序模块,各部件功能仿真部分制作成控件,在需要时放入仿真程序中。仿真软件结构如图1所示。

4 外围软件仿真方法实例
(1)电路原理
   
图2为电路原理框图。

    AT89S52的编译调试器选择Keil C5l。Keil C5l的调试器有AGSI(Advanced Generic Simulator Interface)的软件接口。
(2)定义通信协议
    I2C仿真接口和ZLG7290仿真器件问相互动作必须有一个通信协议。通信数据格式定义如表1所列,指令值含义如表2所列。

(3)I2C接口封装
    根据Keil C5l调试器关于AGSI的说明,将I2C接口封装。从Keil网站下载AGSI例程SPeriDLL,从网上搜索一个Visual C++的点对点的聊天程序。
    将SPeriDLL中不用的控件及相关代码删去(保留也可以),“按键”、“文本框”等控件的使用方法都以例程为准。修改DefineAllWatclhes函数,将监视的51芯片的引脚或存储器的参数修改为:
    Agsi.SetWatchOnSFR(Zlg7290.SDAPort.ZLG7290Write,AGSIWRITE);
    其中:Zlg7290.SDAPort为控制ZLG7290的51芯片的端口;ZLG7290Write为Zlg7290.SDAPort有动作时调用的函数。
    将DefineAllWatches中不必要的代码删除。复制Socket例程,并设置好类及变量。在ZLG7290Write函数体中添加处理I2C和调用Socket发送数据的代码。ZLG7290Write的流程如图3所示。

    在对话框消息函数中处理Socket接收信息的地方添加代码(Socket例程中是在此处处理接收数据的)。按自定义协议将接收到的仿真设备的数据存入相应的缓存,或对I2C器件的输出引脚进行操作。SPeriiDLL修改后的对话框如图4所示。

(4)用VB编制仿真软件
    从www.zlgmcu.com下载ZLG7290的例程和数据手册。选择一个VB(Visual Basic)的点到点的Socket聊天程序进行修改。增加一个“Form”,并在上面添加ZLG7290要用到的8个数码管控件(自制)、64个按钮控件和1个定时器,如图5所示。建立ZLG7290程序模块,自定义一个ZLG7290的数据类型,并用此类型定义数据变量Reg7290用于保存数据。
    修改Socket控件的DataArrival事件的代码。当接收的数据为ZLG7290的地址时,数据交由ZLG7290程序模块处理。数据处理部分根据ZLG7290数据手册和通信协议编写,如果是向某地址写数据,则写到Reg7290的相应位置;如果写到命令地址,则直即执行相应动作程序。

    对按键事件进行处理,根据接键保存相应值到Reg7290的按键寄存器,并通过Socket发出按键数据和按键中断输出引脚动作。
    在定时器事件中调用刷新数码管数据的程序。仿真软件的Socket部分显示窗如图6所示。

(5)仿真
    按照AGSI的说明文件apnt_154.pdf设置Keil C51调试器,调试器打开ZLG7290例程和I2C接口;运行VB下编制的仿真软件;用Socket连接;全速运行ZLG7290例程。数码管显示如图5所示。
    运行时,ZLG7290的例程中不停地向I2C总线查询按键和发送显示数据。在这样的情况下,仿真软件各项仿真功能工作正常,表明这种仿真方法是可行的。

(6)说明

    在实例中只有一种接口,如果接口种类增加,则只需在VB仿真软件端增加Socket控件。如果不想用VB开发仿真软件,那么也可以选择其他语言。


5 结论
   
实践证明,本文的仿真方法是可行的,但需要单片机调试器提供软件接口。如果各种单片机调试器都有接口,那么仿真部件就可以得到充分利用。


点击此处查看原文 >>

系统分类: 接口电路   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(61)
发表于:2008-6-10 16:15:16
标签:无标签

0

stc12C2052开发超声波测距

  超声波测距主要应用于倒车雷达、建筑施工工地以及一些工业现场,例如:液位、井深、管道长度等场合。目前国内一般使用专用集成电路设计超声波测距仪,但是专用集成电路的成本很高,并且没有显示,操作使用很不方便。本文介绍一种以AT89C2051或GSM97C2051单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。实际使用证明该仪器工作稳定,性能良好。

1 超声波测距原理

    超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距离S=Ct/2,式中的C为超声波波速。

    由于超声波也是一种声波,其声速C与温度有关,表1列出了几种不同温度下的声速。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返的时间,即可求得距离。这就是超声波测距仪的机理。其系统框图如图1所示。

2 AT89C2051的功能特点

    AT89C2051是一个2k字节可编程EPROM的高性能微控制器。它与工业标准MCS-51的指令和引脚兼容,因而是一种功能强大的微控制器,它对很多嵌入式控制应用提供了一个高度灵活有效的解决方案。AT89C2051有以下特点:2k字节EPROM、128字节RAM、15根I/O线、2 个16位定时/计数器、5个向量二级中断结构、1个全双向的串行口、并且内含精密模拟比较器和片内振荡器,具有4.25V至5.5V的电压工作范围和 12MHz/24MHz工作频率,同时还具有加密阵列的二级程序存储器加锁、掉电和时钟电路等。此外,AT89C2051还支持二种软件可选的电源节电方式。空闲时,CPU停止,而让RAM、定时/计数器、串行口和中断系统继续工作。可掉电保存RAM的内容,但可使振荡器停振以禁止芯片所有的其它功能直到下一次硬件复位。

    AT89C2051有2个16位计时/计数器寄存器Timer0t Timer1。作为一个定时器,每个机器周期寄存器增加1,这样寄存器即可计数机器周期。因为一个机器周期有12个振荡器周期,所以计数率是振荡器频率的 1/12。作为一个计数器,该寄存器在相应的外部输入脚P3.4/T0和P3.5/T1上出现从1至0的变化时增1。由于需要二个机器周期来辨认一次1到 0的变化,所以最大的计数率是振荡器频率的1/24,可以对外部的输入端P3.2/INT0和P3.3/INT1编程,便于测量脉冲宽度的门。

表1 声速与温度关系表

温度(℃) -30 -20 -10 0 10 20 30 100
声速(米/称) 313 319 325 323 338 344 349 386

    充分利用AT89C2051的片内资源,即可在很少外围电路的情况下构成功能完善的超声波测距系统。

3 系统硬件电路设计

    超声波测距仪的硬件电路如图2所示。

    AT89C2051通过外部引脚P1.6输出脉冲宽度为250μs,载波为40kHz的10个脉冲的脉冲群,以推挽形式加到变压器的初级,经升压变换推动超声波换能器发射出去。在发射的同时,P1.7输出一个高电平启动,给电容C4充电。发射结束时高电平翻转为低电平,C4开始对R2、R3组成的分压器放电并输出到比较器的负端。超声波接收换能器将接收到的障碍物反射的超声波送到放大器进行放大,这是一个高增益、低噪声放大器,在对放大后的信号进行检波后将检测回波送到比较器的正输入端。发射时P1.7输出的电平可以抑制比较器的翻转,这样就可以抑制发射器发射的超声波直接辐射到接收器而导致错误检测。

    图3是超声波测距原理的波形图,从图中可以看到,测出回波和发射脉冲之间的时间间隔,利用S=Ct/2就可以算出距离,再在LCD上显示出来。当然还可以设置若干个键,以用来控制电路的工作状态。限制系统的最大可测距离存在四个因素:超声波的幅度,反射而的质地,反射而和入射声波之间的夹角以及接收换能器的灵敏度。接收换能器对声波脉冲的直接接收能力将决定最小的可测距离。

4 系统软件设计

    AT89C2051单片机和其开发应用系统具有语言简洁、可移植性好、表达能力强、表达方式灵活、可进行结构化设计、可以直接控制计算机硬件、生成代码质量高、使用方便等诸多优点。超声波测距仪就是用AT89C51单片机开发设计的。它采用模块化设计,由主程序、发射子程序、查蟓接收子程序、定时子程序、显示子程序等模块组成。

    图4和图5分别为主程序和测量子程序的框图。该系统的主程序处于键控循环工作方式,当按下测量键时,主程序开始调用发射子程序、查询接收子程序、定时子程序,并把测量结果用显示子程序在液晶屏上显示出来。

    必须指出的是,由于液晶要使用同一P3口,所以必须全部使用位操作,否则将导致LCD不能正常显示。另外,在系统还可以加入温度传感器来监测环境温度,把表1所列的数据做到程序中可进行温度被偿。为了增强系统的可靠性,应在软硬件上采用一些特殊措施。限于篇幅,下面仅给出部分程序,感兴趣者可与作者联系。

    # pragma DB OE CD OT(5,SPEED) ROM(LARGE)IV

    /*连接所需要的库*/

    #i nclude<reg52.h>

    #i nclude<absacc.h>

    #i nclude<stdio.h>

    /*定义数据类型*/

    typedef unsingned char byte;

    typedef unsigned int word

    #define uchar unsigned char

    #define unint unsigned int

    #define ulong unsigned long

    /*定义系统常数*/

    #define TRUE 1

    #define FALSE 0

    #define C="340" /*声速*/

    /*定义功能位*/

    sbit bflag="ACC7";

    sbit VOLCK="P1"^5;

    sbit MING="P3"^5;

    sbit QUIET="P1"^3;

    sbit BACK="P1"^2;

    /*定义显示缓冲区*/

    uchar idata ON[16]={’,’L’,’E’,’N’,’G’,’T’,’H’,’=’,’8’,’.’,’8’8’,’m’,’’,’’,’’};

    /*主程序用延时子程序*/

    woid main-delay(void)

    {

    register i;

    TRO="1";

    for(i=0;i<15;i++)

    {

    TH0=0;

    TL0=0;

    Do{}while(!TF0);

    TF0=0;

    }

    TR0=0;

    }

    */通用延时子程序*/

    void delay(void)

    {

    unint i;

    for(i=0;i<200;i++){;}

    }

    /*键盘延时子程序*/

    void key-delay(void)

    {

    unint i;

    for(i=0;i<200;i++){;}

    }

    /*初始化程序*/

    void start_main()

    {

    tegister i;

    uchar a[16]={’’,’L’,’E’,’N’,’G’,’T’,’H’,’=,’8’,’.’,’8’,’8’,’m’,’’,’’,’’};

    for(i=0;<16;i++)

    {ON[i]=a[i];}

    nitlcd();/*初始化液晶*/

    display(ON);/*更新显示*/

    }

    /*主程序*/

    void main()

    {

    register s,keycode;

    long idata t;

    start-main();/*初始化*/

    main-delay();/*延时*/;

    if(keycoed= =true)

    {

    keycode="key-scan-wait"();

    /*判断是否有测量键按下*/

    t="measure"();*/测量*/

    S="0".5*t*C;*/换算*/

    Decode-bcd(s.0x09);

    /*把测量结果置换入显示缓冲区*/

    init-lcd();/*初始化液晶*/

    display(ON);/*更新显示*/

    }

    }

5 结束语

    虽然用一个单独计时器电路也可以测量超声波的传输时间,但利用AT89C2051单片机可以简化设计,便于操作和直观读数。该系统经实际测试证明,可以满足大多数场合的测距要求。

点击此处查看原文 >>

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

评论(0) | 阅读(70)
发表于:2008-6-6 15:00:56
标签:无标签

0