好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

单片机软件仿真实验.doc

12页
  • 卖家[上传人]:自***
  • 文档编号:126898756
  • 上传时间:2020-03-28
  • 文档格式:DOC
  • 文档大小:326KB
  • / 12 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 单片机软件仿真实验一、使用Keil C51软件仿真的意义调试、运行汇编或C语言程序后,我们会觉得单片机并不很复杂,学起来也并不枯燥特别是Keil C51提供了 I/O端口、定时/计数器、中断结构和串行通信部件窗口,可观察到程序运行或单步调试时各端线、寄存器、标志位等电平的变化情况,对清晰把握流程及理解工作原理起到良好的促进作用当输出端电平按自己的要求变化时,愉悦随之而来!软件仿真不仅在学习探究阶段是好方法,实际应用中也是重要的环节二、由浅入深安排的实验项目[实验1 ] Keil C51软件仿真步骤输入、编译一个短小程序,调试运行观察P1.0端的电平变化规律,并对程序作适当修改,让P1端口各位依次出高电平点亮LED发光管(左移)[实验2] 十进制数转BCD码(汇编程序、C语言) 了解数据在累加器、存储单元内的存储形式及如何控制端口Port各位电平的高低、SWAP命令的功能 开始尝试调试或了解C语言程序[实验3] 定时器/计数器(汇编程序、C语言) 要点:定时器延时方法、程序查询溢出、定时器程序调试技巧 [实验4] 中断(汇编程序、C语言)1.定时器硬件中断 2.外部中断 要求:把握汇编程序的转跳流程、C51程序的中断服务函数定义格式,学会软件仿真调试时怎样实现外部中断。

      [实验5] 航标灯(汇编程序) 白天灯灭,天黑闪亮,快慢可调,电路简单,流程清晰,调试、运行成功多有趣![实验6] 步进电机(C语言) 步进电机也称为脉冲电机,它可以接收单片机I/O端口的数字脉冲(高低电平的变化),使电机旋转过相应的角度,在要求快速启停、精确定位的场合广泛应用[实验7] 串行通信奇偶校验(汇编程序) 调试一个程序了解奇偶校验技术、方式2一帧数据组成、振荡周期、波特率周期,观察TB8(“第九位数据”)、P(PSW.0)、CY(位累加器C)、TI(中断申请)位[实验8] 转速自动稳定程序(C语言)三、实验内容实验1 Keil C51软件仿真步骤1.进入Keil uVision2集成开发环境2.建立项目 选“Project”—“New Project…”,在对话框中输入项目名:led注意:路径是E:\CJY\实验1\led,需先建个人文件夹及子文件夹“实验1”3.选芯片 项目建立完毕自动弹出器件选择对话框,选择“Inter”中的8051AH4.输入程序 选“File”—“New…”,在文本框中编辑源文件,保存汇编程序路径及文件名为: E:\CJY\实验1\ led.asm5.添加 将汇编程序添加到项目中,方法是在左边文件栏中用鼠标右键点击 弹出快捷菜单,选“Add Files to Group ‘Source Group 1’” ,在对话框中选led.asm,点击“Add” 、“Close”按钮。

      6.编译 点击图标“ ”(Build Target),进行编译,根据错误提示修改7.调试 点击图标“ ”(Start/Stop Debug…)进行调试,“ ”单步执行,“”跳出循环Peripherals”—“I/O Ports”—“Port 1”显示端口窗口 点击“ ”可运行程序,“Port 1”端口的P1.0应怎样变化?“”停止 如何用左移指令使得P1端口各位依次出高电平点亮LED管?提示:增加、修改的语句有:MOV A,#01H、MOV P1,A 、RL A MOV P1,A8.关闭项目“Project”—“Clouse Project” 程序调试界面 实验2 十进制数转BCD码 借助本程序的调试,可清楚地观察到执行每条语句后各累加器内容的变化情况,了解到十进制数是以何种形式存入累加器的,I/O端口的电平的高低是怎样控制的 汇编语言程序调试界面C51程序:#includevoid main(){ unsigned char a=23,t,b; t=a/10; b=a%10; t<<=4; b+=t; P1=b;}调试、运行C语言程序的方法与汇编语言相同,不妨试一试,自己喜欢哪一种? 实验3 定时器/计数器 延时方法有三种,一是子程序延时(实验1),二由定时器完成(实验3),三是两种方法的结合(试验4)。

      当程序调试到下面位置时,应怎样做才能继续? 实验3汇编程序调试界面 C语言: #includesbit P1_0=P1^0; /* 定义P1_0为Port1端口的0位 */void main(){ TMOD=0x01; /* “0x01”的第一个符号是零 */ TR0=1; for(;;){ TH0=0x3D; TL0=0xB0; do{}while(TF0==0); P1_0=!P1_0; TF0=0; }}实验4 中断1.定时器硬件中断 定时器0、6M晶振,定时6秒,中断到来P1.0输出低电平,电亮发光二极管汇编程序:ORG 0000H AJMP MAIN ORG 000BH ; 定时器0溢出中断矢量地址 AJMP ET0P ; 转跳中端服务子程序 ORG 0100HMAIN: SETB P1.0 MOV TMOD,#01H MOV TH0,#0CH ;设置125ms定时 MOV TL0,#0DCH MOV R3,#30 ;延时方法3:定时器与寄存器计数结合增大延时量 SETB EA ;中断总允许 SETB ET0 ;允许定时器0溢出中断 SETB TR0 ;启动定时器WAIT: CJNE R3,#00H,WAIT ;一旦溢出中断即刻执行000BH处的命令:AJMP ET0P CLR P1.0 ;定时结束(R3为0),P1.0变为低电平HERE: SJMP HEREET0P: MOV TH0,#0CH ;定时器中断服务子程序 MOV TL0,#0DCH DEC R3 ;需要48次中断(0.12546=6) RETI ;返回 WAIT 处 END要求:调试时清晰把握转跳流程,并在上面程序中画线示明。

      注意:点击定时器窗口中的TF0使其置1,可强迫溢出中断,并将#30改为#02H快捷C语言: #includechar data flag;sbit P1_0=P1^0;void time0() interrupt 1 using 1 /*“interrupt 1”中的1是中断源自然优先编号:*/{ /* 0:外部中断0 1:定时器0 2:外部中断1 3:定时器1 4:串行口*/ TH0=0x0C;TL0=0xDC;flag++;}void main(){ P1_0=1;TMOD=1;EA=1;ET0=1;TH0=0x0C;TL0=0xDC;TR0=1;flag=0; do{}while(flag<48); P1_0=0; do{}while(1);}2.外部中断 用外部中断INT0 (P3.2)触发P1.0输出低电平,点亮发光二极管汇编程序调试界面:问题:(1)如何继续?(2)IT0置1与清0有和差别?(通过修改、调试、观察来鉴别)C语言: +5v 8051P1.0 P3.2 I NT0#includesbit P1_0=P1^0;void service_int0() interrupt 0 using 2{ P1_0=0;}void main(){ EA=1;EX0=1;IT0=1; P1_0=1; do{}while(P1_0==1); do{}while(P1_0==0);} 实验5 航标灯 下面是航标灯电路示意图和汇编程序,请对其进行调试(打开定时器0、Port1、Port3窗口),观察能否实现天黑灯闪亮的控制。

      程序按延时2秒让P1.7电平变化,达到闪亮效果ORG 0000H ;安排程序起点软件仿真时必须有 +Vcc AJMP MAIN ;跳到主程序 ORG 0003H ;外部中断时自动转到此(矢量地址) AJMP WBINT ;跳到中断服务子程序 灯 ORG 000BH ;定时器矢量地址(溢出中断自动转到此) AJMP T0INT ;跳到溢出中断子程序 P1.78051 P3.2 INT0 ORG 0100H ;主程序入口地址MAIN: MOV SP,#30H CLR P1.7 CLR IT0 ;低电平触发方式 CLR PX0 ;优先等级0 SETB EX0 ;外部中断0开 去感光电路 SETB EA (白天高电平,天黑为低电平0) HERE: AJMP HERE ;等待外部中断(天黑) ;WBINT:MOV TMOD,#01H ;设置T0为定时功能 MOV TL0,#0B0H MOV TH0,#3CH SETB PT0 ;定时器优先等级为1 SETB TR0 ;启动定时器计数 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.