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

2009-8-12 18:48 2062 10 10 分类: MCU/ 嵌入式
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain

三、 看门狗定时器的仿真<?XML:NAMESPACE PREFIX = O />

电子园51单片机学习网 \0w/HY] k"\7l/`9e

    

电子园51单片机学习网E4o!KD'v V&t

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

电子园51单片机学习网_!hKyTb

   程序名称:仿真实例

电子园51单片机学习网f4KE9JL%FKa-oJ

   程序注释:看门狗定时器仿真

0F'Qnab1eRa0

   编译时间:2009年4月20日

ni$q4m^0yu"|0

     编译者:yangloong

电子园51单片机学习网z^d4Zx]4[7j F;Vm!M^

   版本:

AqN+{1L:hZ%BX0

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

电子园51单片机学习网hF9E"F-R&i)Op

#i nclude<reg51.h>

vl&l_?jw7\T#^F0

#i nclude< intrins.h>

电子园51单片机学习网QW N4z$E5n V

 sfr  WDTRST  =0x0a6;            //声明看门狗定时器

电子园51单片机学习网 K2D0y@j7c.s

 void  main ()

电子园51单片机学习网OCEv#Y0Xj

  {

$E/jq;|U5?0

    int  i;

电子园51单片机学习网K3vGBo(b(M'H!B

    WDTRST=0x1e;                   //初始化看门狗

D6hC0qq5n0

    WDTRST=0xE1;

电子园51单片机学习网u\,^WYB)m

    while(1)                            //主循环

电子园51单片机学习网[yd&r x'?J

     {

电子园51单片机学习网 N}:Vm S

       if ( P1==0x01)

电子园51单片机学习网v ~b(v\.sM

        { for( i=0; i<100; i++ )       //短延时

(t@-X#A F(D0

     {  _nop_(); }

电子园51单片机学习网f&c b%j'_]1z

         }

电子园51单片机学习网3V4?:R c7G

         else if ( P1==0x02)

电子园51单片机学习网A,boX&GJAR:X

    {for ( i=0; i<10000; i++ )          //长延时,模拟系统故障

电子园51单片机学习网^/m8a"g1n^

         { _nop_(); }

电子园51单片机学习网:g9p2[.f P

    }

H/S-H'bH o{m0

     else 

\aO,D1~*P+w"@h:B0

       { _nop_(); }

电子园51单片机学习网D7At ~L7sd| `&fNn

        WDTRST=0x1e;                 //喂看门狗定时器

(P |zf\4o0

WDTRST=0xe1;

电子园51单片机学习网!rGzg5J

     }

电子园51单片机学习网hP+L lcR R:J)sJ w

  }

电子园51单片机学习网n km7Z6~ {;s@+G/I`d

电子园51单片机学习网zc!Z&\m
电子园51单片机学习网|$kb*[8A[i5Z


三、 A/D转换器的仿真

%qL~-`:v P7n0

   选择Analog Devices的公司的ADuC812单片机创建一个新工程文件。

/Ny7O.h$n-jev0

 下面是仿真源程序

电子园51单片机学习网6d5@ ^x8w??

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

电子园51单片机学习网xv0mM ~/d

   程序名称:仿真实例

6j:|:m$@mIX0

   程序注释:A/D转换电路实验   Analog Devices单片机

电子园51单片机学习网"e4X#G,@9a*u@

   编译时间:2009年4月20日

*@w'W$j'K8V4o'W`?0

     编译者:yangloong

8p~}0i^ ^'x0

   版本:

电子园51单片机学习网uE,W0I{7Y#yW

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

电子园51单片机学习网[%scA1`#U

#i nclude<ADUC812.H>

:e~a"f Q"Z%fIP8sZ G0

#i nclude <stdio.h>

V_.Q6| T0

 void  main ()

电子园51单片机学习网pb3\y6W3v}1ps

  {

j H8J{a$c5I0

    unsigned  char  chc;         //声明变量,模拟通道数

电子园51单片机学习网VIBq4N^x9Gy6y_

    SCON=0x50;

电子园51单片机学习网 s~4w1A~yYwo4n#~

    TMOD|=0x20;

%|{0We c3s+M,O8Kz0

    TL1=0xf4;//波特率4800kb/s

+G3K2q S M,r0

    TH1=0xf4;

电子园51单片机学习网v.~,SIt

    TR1=1;

电子园51单片机学习网E#u0C q b'Zd

    TI=1;

电子园51单片机学习网*x](\x2C h;?M3T

/qAOa3F#|"kq0

    ADCCON1=0x7c;              //设置控制寄存器

3R&swg8@Au[0

电子园51单片机学习网s-l1}Aj'x$] l

    while(1)

电子园51单片机学习网8S+?9UE!G6C@

      {

2xxs+U(@%J Y0

    unsigned int  con_data;         //声明变量,A/D转换的结果

电子园51单片机学习网o*` h(v%XOKv[

unsigned char  channel ;//声明变量 ,模拟通道数

?hUb O6g s6z Q0

chc++;

O,m5~!q6uV/N0

chc%=8;                       //通道数0~7

!d`,I4zGXm%_-FB0

ADCCON2=( ADCCON2&0xf0)|chc;    

l7HEU;^zqF$\0

SCONV=1;                                        

1t A7s6P-Ld0

 while (ADCCON3&0x80)     //单次转换

]]s s7F+aW5_0

    {

-jMt/EN)aA3LC?x0

      channel=ADCDATAH>>4;     //读A/D值并打印输出结果

电子园51单片机学习网/m,uF0O%Xw`G(@

     con_data=ADCDATAL+(( ADCDATAH&0xf)<<8);  //A/D转换的值

$V H|1mH)I Gw0

     printf("ADC channel %bu=0x%4.4x\n",channel,con_data);

.\0GX-M+j8L J.w5Z0

    }

电子园51单片机学习网GW_Eu^X_

      }

a%~:z1\Ug0

电子园51单片机学习网@{@?{7p*zx

  }

.U1N!R2lx#?N}0

   进入模拟仿真系统,在Peripherals中选择“A/D Converter”、在View中选择“Serial Window 1”。

电子园51单片机学习网A.A8Wqb+wfZ(s` ]

  由于设置VREF=2.500V,AIN3的设置和VREF相等,因此,channel  3=0x0fff; AIN2的设置为VREF/2;因此 channel 2=0x0800;  AIN1=VREF/4, channel 1=0x0400;

电子园51单片机学习网!A}4v*mM3N

电子园51单片机学习网)zR-B*Y"R/ze`:s6v^

ZOQ T7f$c+V0

三、 D/A转换器的仿真

Zd4^6yh1_5Q(g0

电子园51单片机学习网$jOr*J8KM

此例与上例创建同样的芯片工程文件。

电子园51单片机学习网L/d5c7~v,H pb

下面是源程序:

R&p)B NCw#S6G"Y*S0

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

电子园51单片机学习网Z2Q/kW`H r

   程序名称:仿真实例

电子园51单片机学习网t@k1O_

   程序注释:D/A转换电路实验   Analog Devices ADuC812单片机

9DWy*^)u*|#z`ls.s0

   编译时间:2009年4月20日

电子园51单片机学习网9f0Bb M;y

     编译者:yangloong

电子园51单片机学习网a+F J,{ yv6B E

   版本:

电子园51单片机学习网.E4Q2H7a B

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

P s2ICgf4N;o"k;V0

#i nclude<ADUC812.H>

电子园51单片机学习网,r W_xs(hO

#i nclude <stdio.h>

电子园51单片机学习网JM-{!{ ^nwy7F

 

N3n z\!Q1TU?]0

 float DAC0V,DAC1V;  //声明变量

电子园51单片机学习网zT S1Z m2\.g

4A5V)P#n7s]0

 void  main ()

电子园51单片机学习网9XX.Qpp"pDc8O3J%X4H

  {

'pD$@h[9B~'d0

 // float DAC0V,DAC1V;  //声明变量 在此声明变量,在Analog Logic窗口中没有此变量

电子园51单片机学习网}5s^u T5V

2l,k3p{)c7od(N n0

    SCON=0X50;

/c7J;UhA?@0

    TMOD|=0X20;

S0P X Sw'sKPmYh2R4N0

    TL1=0XF4;

W*|@%\u#^5\0

    TH1=0XF4;

电子园51单片机学习网m$j}{"H$\,_

    TR1=1;

电子园51单片机学习网kg/|;R!l/k.\8^

    TI=1;

i Wk,s1}+Zib-]'B0

d[/N8\ lO$p&?7|6u0

    DACCON=0X7B;

电子园51单片机学习网X D h6[4Z;Mv.Ph

      while(1)

电子园51单片机学习网#Iku6eC*O+Te)Y-@L

        {

Y#L,^(vk&\A0

   unsigned  int  i;

电子园51单片机学习网vr1K*nMha3iz"O5A6yW

    for ( i=0; i<4096; i++)                //循环2^12=4096

8F|p:n m{0

      {

电子园51单片机学习网x.P2br`AP#}

    DACCON &=~0X04;                //清零SYNC位

-jM+h)v ^cy]0

DAC0H=i>>8;                      //dac0

电子园51单片机学习网+a'Gb'b9`fv-n

DAC0L=i&0xff;

7kU-vHrM8N p|0

DAC0V=(float)i*5.0/4095.0;   //DAC0电压值

.R9S-EviB0

电子园51单片机学习网!F\:ZC4C`/a5m

DAC1H=(4095-i)>>8;

电子园51单片机学习网[w,|kGv

DAC1L=(4095-i)&0xff;

电子园51单片机学习网*Q/ZBYx)sl

DAC1V=(float)(4095-i) *5.0/4095.0;    //DAC1电压值

N0A:u{^A])p0

电子园51单片机学习网*hIz+s(Giq

DACCON|=0X04;

z?x V~ Gv0

printf("Output %4.4x to DAC0(%1.4fv)\n",(unsigned )i , DAC0V);

电子园51单片机学习网RPu2P4[DG@-{

        printf("Output %4.4x to DAC1(%1.4fv)\n",(unsigned )(4095-i), DAC1V);

M"}|O E0

ve#t%rO0

      }

电子园51单片机学习网4WK6s9{*^Md

}

电子园51单片机学习网t!b _at iB&E

电子园51单片机学习网C p[xJ3x

  }

lL!Qx#vM v*T1dL0


H/YH2Tp VS_ is}O0

}q+E,y o(`B0

x!D,w1BU0

三、 低功耗仿真

电子园51单片机学习网3p\H7\f |/o#\

    51系列单片机提供了两种低功耗模式,省电保持模式和休眠运行模式。在程序设计中,可以通过特殊功能寄存器PCON来设置,说明如下:

电子园51单片机学习网]6Z+Q;r"NX.]6hN

   当CPU设置PCON.1位为1后,PD=1;系统进入省电模式

#}0]X ZQ0

   当CPU设置PCON.0位为1后,即IDL=1;系统进入休眠运行模式。

电子园51单片机学习网 ?i8\ N2gy~

   当同时写入1时,PD优先,系统进入省电模式。

电子园51单片机学习网Q:L*{Z"E+i!q(t#l

 下面是仿真的源程序:

电子园51单片机学习网r4G`1S's

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

电子园51单片机学习网"n ?{T"JM)v#I$w5B

   程序名称:仿真实例

2I6l/f]^"l,P0

   程序注释:低功耗仿真

电子园51单片机学习网5~pv;HmN

   编译时间:2009年4月20日

电子园51单片机学习网2L)m2X_/{[ Y*q4bt

     编译者:yangloong

电子园51单片机学习网,Pk:@ CVtY

   版本:

电子园51单片机学习网3a Lm:N~ Hp r

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

电子园51单片机学习网bv2^\'B4c+}+Y

 #i nclude<reg51.h>

电子园51单片机学习网Ck n v9ZEFW3a

 #i nclude<stdio.h>

电子园51单片机学习网H9x[+mbvJL

 #i nclude<intrins.h>

njnuUms~0

  void main (void)

电子园51单片机学习网 n JiaE

   {

电子园51单片机学习网F|:r8LITH

    while (1)

电子园51单片机学习网{T o] w

     {

电子园51单片机学习网6b L(I,a1J Mu`

      if (P1==0x01)

电子园51单片机学习网k(e+C8nL

         {  PCON= 0x01; }   //省电模式

电子园51单片机学习网,{Di C7q M/V @T

 else  if( P1==0x02)

7]5k @4D KD7}YD0

      {  PCON=0x02 ; }     //休眠模式

\fY`Lkd$A5N0

      else 

5D4p+B-r\5M6Y1M,MW0

          { _nop_(); }

电子园51单片机学习网`4ZM2}5D.y"K\\N

     }

电子园51单片机学习网 Tt.o5e6e;t

   }

电子园51单片机学习网M eU`rx

电子园51单片机学习网:p e WK7z%h Ur!S2e

 仿真之后,P1口设置仿真参数,在COMMAND窗口没出现相应的提示信息。电子园51单片机学习网 U~ Y F A%my5zy5e



%B7G2q)y-oVV0电子园51单片机学习网I h%d,FB o,Bh


  在编写程序时熟练掌握些软件仿真,可以防止一些低级错误。也可以高效地编译程序。

KY R zN*w0
PARTNER CONTENT

文章评论0条评论)

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