yangloong的笔记 https://bbs.21ic.com/?485858 [收藏] [复制] [RSS]

日志

Keil u Vision 3中单片机硬件资源仿真入门

已有 1491 次阅读2009-4-23 13:53 |系统分类:单片机

Keil  u Vision 3中单片机硬件资源仿真入门   

日期:2009年4月20日

参考书籍:51单片机开发与应用技术详解 赵建领 薛园园等著 电子工业出版社 二十一章

  在Keil u Vision3集成开发环境中,对标准的8051单片机及各个公司推出的新型单片机均提供了仿真模拟程序的支持。

  下面进行几个方面片上资源仿真实例。       

1)并行I/O接口

2)定时器/计数器

3)串行接口

4)寄存器

5)看门狗定时器

6)A/D转换器

7)D/A转换器

8)低功耗模式

9)I2C总线

10)CAN总线


一、并行I/O端口仿真

 在Keil 中建立一个以AT89S51的工程文件。 后面的仿真实例都是相同的方式建立相似的工程文件,后不再提示。

仿真程序如下:

#include<reg51.h>

 void main()

  {

   int ReadPort;     //声明变量

   while(1)                         //大循环

     {  

           ReadPort=P1;         //        读端口P1

           P2=ReadPort;          //写端口P2

         }

  } 

进入程序仿真环境,点击Peripherals  I/O port 选择Port1、Port2。进行仿真,在P1口点击仿真,P2口中会相应的动作出现。


二、定时器/计数器的仿真

 以定时器/计数器的工作模式0为例。介绍定时器/计数器的仿真操作,假设外接晶振为6MHz,采用定时器T0产生1ms的定时,并在P1.1端口输出周期为2ms的方波。

下面是该实例的源程序

菜单中的View/Logic Analyzer 选项,在仿真时运行时启用。 

/*************************************************************************

   程序名称:仿真实例

   程序注释:使用Logic Analyzer Windows 中的Logic Analyzer 窗口观察P1^1口波形变化

   编译时间:2009年4月20日

     编译者:yangloong

           版本:

*************************************************************************/

#include<reg51.h>

#include< intrins.h>

 sbit b=P1^1;         //位定义 

    void T0ISR(void) interrupt 1

   { //定时器T0中断响应

    TL0=0x0c;  //重置计数初值

        TH0=0xF0;

        b=~b;           //反向

   }

  void main()

  {

   b=0;            //初始化P1^1

   TMOD=0X00;           //设置定时器模式T0为模式0

   TL0=0X0C;           //初始化

   TH0=0X0FC;

   TR0=1;                   //启动TR0

   ET0=1;                  

   EA=1;                   //开中断

   while(1)

    {

         _nop_();      //空动作

        }

  }

三、 串行接口仿真

串行接口仿真界面

利用串行接口仿真界面进行简单的仿真操作

字符串输入输出的仿真操作

/************************************************************************

   程序名称:仿真实例

   程序注释:串行接口寄存器实现数据发送和接受的仿真操作

   编译时间:2009年4月20日

     编译者:yangloong

           版本:

*************************************************************************/

#include<reg51.h>

#include<stdio.h>

  void main()

  {

   char ch;

   SCON=0x50;       // 串口模式1,允许接受

   TMOD=0x20;       // 初始化TI,模式2

   PCON=0x80;        //

   TL1=0xf4;                //波特率4800bit/s ,初值

   TH1=0xf4;                //

   IE=0x90;                     //中断

   TR1=1;                        // 启动定时器

   printf("Please  input a char!\n");

   while( ( ch=_getkey())!=0x0d)  //获取字符 输出字符

     { printf(" The input char= %c, the hex number=%bx\n",ch, ch);}

  }

三、 中断仿真

  下面是仿真源程序

/*****************************************************************************

   程序名称:仿真实例

   程序注释:外部中断源的仿真操作

   编译时间:2009年4月20日

     编译者:yangloong

           版本:

*****************************************************************************/

#include<reg51.h>

#include<intrins.h>

   void  T0ISR(void)  interrupt 0          //外部中断0服务例程

   {   P1=P1+1 ;}                        //P1端口递增

    void  T1ISR(void)  interrupt 2     //外部中断1服务例程 

    { P2= ~P2 ; }                           //P2端口反相

  void main()

  {

     IP=0x05 ;           //外部中断0和外部中断1设置为高优先级

     IT0=1;                                //外部中断0为下降沿触发

     IT1=1;                                //外部中断1为下降沿触发

     EX0=1;                              //开EX0中断

     EX1=1;                       //

     EA=1;                                        //开全中断

     P1=0;                   //

     while(1) 

      {   _nop_(); }

   }







路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)