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

2009-8-12 18:48 2512 8 8 分类: MCU/ 嵌入式
在Keil u Vision3集成开发环境中,对标准的8051单片机及各个公司推出的新型单片机均提供了仿真模拟程序的支持。<?XML:NAMESPACE PREFIX = O />


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

&brl(t+jQW ck0

1)并行I/O接口

0rHT ~3MQhd0

2)定时器/计数器

电子园51单片机学习网bn"f G.P nk5Y

3)串行接口

+OE h:{ C0

4)寄存器

GACi-A;{&yu)r"V0

5)看门狗定时器

XRTN o6bk1Pa0

6)A/D转换器

itF3zD+{x O7r @0

7)D/A转换器

电子园51单片机学习网} [ L&hO)n,^j

8)低功耗模式

uz,GC1r8[{ j0

9)I2C总线

电子园51单片机学习网0\+~[hV0aU,td(T

10)CAN总线

电子园51单片机学习网 NZJ"o7eJ r

电子园51单片机学习网o^|:C8S3x4Gu

aI!LS}(v7@P:hB0

一、并行I/O端口仿真

:M0r+o VjTT x{0

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

电子园51单片机学习网 B9Y3a f"B'`I4D3m

仿真程序如下:

电子园51单片机学习网!X%lRS[f

#i nclude<reg51.h>

电子园51单片机学习网;x9h#\U"fF)cw&DLX

 void main()

电子园51单片机学习网7Sfx!~-nc%Ba

  {

u;Q3r3|#@v0

   int ReadPort;     //声明变量

;J @Xk&B|Vi&r x0

   while(1) //大循环

电子园51单片机学习网8k"L!Ng)n,ez y Gy

     {  

3AH%`:c0_0

   ReadPort=P1; //读端口P1

dLa8s$u%G$F$c0

   P2=ReadPort;  //写端口P2

电子园51单片机学习网o;`pG3i|

 }

/W4J;J R/}y+E-I0

  } 

电子园51单片机学习网H9JnJ$O#m \

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

OF B4`Pk&`4{ k0


:j!W5| V6O*_0

4v'F/l_,\Pw5Xc)l0

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

电子园51单片机学习网.Z"NW$b"{ k

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

!F%W]@s Pdg0Q D!E9K0

下面是该实例的源程序

电子园51单片机学习网 X _go8D9XE.ig

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

u$\|6Ub%O0

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

|;J@ fL4l0

   程序名称:仿真实例

电子园51单片机学习网!A Of I8ZG3e#{

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

os;e9O%q'~XR t#H U0

   编译时间:2009年4月20日

&BJY{Wv1n!MD4Y0

     编译者:yangloong

电子园51单片机学习网#ju;BZ5G _Q

   版本:

c)p.zj\ Ib0

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

jU2nR | r h8Tx0

#i nclude<reg51.h>

电子园51单片机学习网]iNj P1{2q

#i nclude< intrins.h>

vqK [b+t+P0

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

w#F'|k6E5M0

    void T0ISR(void) interrupt 1

Ie|V7w1K6c t0

   { //定时器T0中断响应

电子园51单片机学习网4l)C&A4Kgw jqE

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

tV9wjx.d8m0

TH0=0xF0;

G/^X[S@Qj0

b=~b;   //反向

/d1A%_w R,v$m!q0

   }

&h'|`"{ zF0

  void main()

's S3M%n;fy8d)u0

  {

iM1x;c)Dp QpT)o0

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

电子园51单片机学习网 a}3bI*~DE{

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

电子园51单片机学习网c3j2R-Z)\+pj

   TL0=0X0C;   //初始化

*M D.z[C t3D0

   TH0=0X0FC;

?.{%oVs$|_0

   TR0=1;   //启动TR0

Lm#_tG;B0

   ET0=1;  

!xB9@(s4x J ~0

   EA=1;   //开中断

电子园51单片机学习网#v8lvp_

   while(1)

pJ"LEgW4N0

    {

电子园51单片机学习网.C&e jT t Y\[

 _nop_();      //空动作

e)F:e;rlU0

}

电子园51单片机学习网Q&ZM6bib9{*EQ,t

  }

电子园51单片机学习网|`9I3NAH

三、 串行接口仿真

;|,_-A2w3RU)Y p0

串行接口仿真界面

;VkMa)y{^,x Y0

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

电子园51单片机学习网 y"fRe|H/P*sCo

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

电子园51单片机学习网 zf+C V%_3X-m ]\Y%Aq

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

9z#{Cf7n+gmPW"y0

   程序名称:仿真实例

电子园51单片机学习网"X0vNr(J@|v7E;t,A

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

pJ:O([+zD9y0

   编译时间:2009年4月20日

电子园51单片机学习网7s%X]#N&A ]`x+v

     编译者:yangloong

4i;t#[V"F0g p0

   版本:

电子园51单片机学习网PP P a.C%kf

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

电子园51单片机学习网B O$z+Z$M#k)V

#i nclude<reg51.h>

,`z1CI/I o0

#i nclude<stdio.h>

J} oMPRr {2E0g0

  void main()

9F!s2~ ?-~0

  {

,H#t _b,V0Y6?0

   char ch;

电子园51单片机学习网Gch!]$T&zh SF \

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

电子园51单片机学习网 l(`%aeB!u$E

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

5~1q,vE-p-PhW0

   PCON=0x80;        //

电子园51单片机学习网 b2n^w m yB(~*D

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

N'T8? N m:t0

   TH1=0xf4;//

R M dp_ a.[0

   IE=0x90;     //中断

)Fmja7\M'F}0q0

   TR1=1;// 启动定时器

电子园51单片机学习网D2R F)q4?4t(YzPi

%u |mV6? u0

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

:p}$JD W-vm0

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

E N m/Y({xh0

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

1r5nuuC:M!Y;}0

  }

2LzN!]/@'k0

三、 中断仿真

P-EHcyP)_2\ D0

  下面是仿真源程序

5z"yDDO9M0

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

电子园51单片机学习网)M#c:OB!QB

   程序名称:仿真实例

电子园51单片机学习网1LF5M(t^x-Y

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

)`8A k${(H5ff0

   编译时间:2009年4月20日

电子园51单片机学习网%S#[PL,\)\

     编译者:yangloong

+y"`7xA#`-K]0

   版本:

"]$~.m:Y:\-@,Cyv1B0

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

7T0vo,}P"X+q a7a k.UC0

#i nclude<reg51.h>

电子园51单片机学习网?d'u}oMD

#i nclude<intrins.h>

#F(F7mV(v7r;_/f-jW5W0

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

f/r?IjvB3U0

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

电子园51单片机学习网 n9U Q]A4~GJ

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

\ az2aB;w9Z0

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

电子园51单片机学习网~q{f,M

  void main()

z/@FtU]!OykLc+k6P0

  {

0WZR$Rm0

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

电子园51单片机学习网*};o,jY3dD&^

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

电子园51单片机学习网z h(r1p uJ`2T*D

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

电子园51单片机学习网F pHlkvu

     EX0=1;      //开EX0中断

EE l6^3jsd5]o0

     EX1=1;               //

6h*U#BVc0

     EA=1;//开全中断

电子园51单片机学习网(~$A:] wv}~G.u

     P1=0;                   //

VJ@0Q w9m0

     while(1) 

电子园51单片机学习网%m-h8P,E.U(?"h

      {   _nop_(); }

Py[ p0[H\\0

   }

电子园51单片机学习网!cNr|x}%SF
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条