下面进行几个方面片上资源仿真实例。
&brl(t+jQW ck01)并行I/O接口
0rHT ~3MQhd02)定时器/计数器
电子园51单片机学习网bn"f G.P nk5Y3)串行接口
+OE h:{ C04)寄存器
GACi-A;{&yu)r"V05)看门狗定时器
XRTN o6bk1Pa06)A/D转换器
itF3zD+{x O7r @07)D/A转换器
电子园51单片机学习网} [ L&hO)n,^j8)低功耗模式
uz,GC1r8[{ j09)I2C总线
电子园51单片机学习网0\+~[hV0aU,td(T10)CAN总线
电子园51单片机学习网 NZJ"o7eJ r电子园51单片机学习网o^|:C8S3x4Gu
一、并行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&DLXvoid main()
电子园51单片机学习网7Sfx!~-nc%Ba{
u;Q3r3|#@v0int ReadPort; //声明变量
;J @Xk&B|Vi&r x0while(1) //大循环
电子园51单片机学习网8k"L!Ng)n,ez y Gy{
3AH%`:c0_0ReadPort=P1; //读端口P1
dLa8s$u%G$F$c0P2=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
二、定时器/计数器的仿真
电子园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+P0sbit b=P1^1; //位定义
w#F'|k6E5M0void T0ISR(void) interrupt 1
Ie|V7w1K6c t0{ //定时器T0中断响应
电子园51单片机学习网4l)C&A4Kgw jqETL0=0x0c; //重置计数初值
tV9wjx.d8m0TH0=0xF0;
G/^X[S@Qj0b=~b; //反向
/d1A%_w R,v$m!q0}
&h'|`"{ zF0void main()
's S3M%n;fy8d)u0{
iM1x;c)Dp QpT)o0b=0; //初始化P1^1
电子园51单片机学习网 a}3bI*~DE{TMOD=0X00; //设置定时器模式T0为模式0
电子园51单片机学习网c3j2R-Z)\+pjTL0=0X0C; //初始化
*M D.z[C t3D0TH0=0X0FC;
?.{%oVs$|_0TR0=1; //启动TR0
Lm#_tG;B0ET0=1;
!xB9@(s4x J ~0EA=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 {2E0g0void main()
9F!s2~ ?-~0{
,H#t _b,V0Y6?0char ch;
电子园51单片机学习网Gch!]$T&zh SF \SCON=0x50; // 串口模式1,允许接受
电子园51单片机学习网 l(`%aeB!u$ETMOD=0x20; // 初始化TI,模式2
5~1q,vE-p-PhW0PCON=0x80; //
电子园51单片机学习网 b2n^w m yB(~*DTL1=0xf4;//波特率4800bit/s ,初值
N'T8? N m:t0TH1=0xf4;//
R M dp_ a.[0IE=0x90; //中断
)Fmja7\M'F}0q0TR1=1;// 启动定时器
电子园51单片机学习网D2R F)q4?4t(YzPi%u |mV6? u0
printf("Please input a char!\n");
:p}$JD W-vm0while( ( 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-jW5W0void T0ISR(void) interrupt 0 //外部中断0服务例程
f/r?IjvB3U0{ P1=P1+1 ;} //P1端口递增
电子园51单片机学习网 n9U Q]A4~GJvoid T1ISR(void) interrupt 2 //外部中断1服务例程
\ az2aB;w9Z0{ P2= ~P2 ; } //P2端口反相
电子园51单片机学习网~q{f,Mvoid main()
z/@FtU]!OykLc+k6P0{
0WZR$Rm0IP=0x05 ; //外部中断0和外部中断1设置为高优先级
电子园51单片机学习网*};o,jY3dD&^IT0=1;//外部中断0为下降沿触发
电子园51单片机学习网z h(r1p uJ`2T*DIT1=1;//外部中断1为下降沿触发
电子园51单片机学习网F pHlkvuEX0=1; //开EX0中断
EE l6^3jsd5]o0EX1=1; //
6h*U#BVc0EA=1;//开全中断
电子园51单片机学习网(~$A:] wv}~G.uP1=0; //
VJ@0Q w9m0while(1)
电子园51单片机学习网%m-h8P,E.U(?"h{ _nop_(); }
Py[ p0[H\\0}
电子园51单片机学习网!cNr|x}%SF
文章评论(0条评论)
登录后参与讨论