《单片机实验指导.doc》由会员分享,可在线阅读,更多相关《单片机实验指导.doc(27页珍藏版)》请在三一办公上搜索。
1、目 录Keil软件介绍与仿真器设置1实验一、80C51汇编指令练习6实验二、80C51汇编语言程序设计9实验三、中断应用实验13实验四、定时器/计数器应用实验16实验五、A/D转换器应用实验19实验六、D/A转换器应用实验22实验七、综合技能训练(键盘、LED显示、D/A、A/D及电机等)(6课时)22实验电路图24Keil软件介绍与仿真器设置8051单片机采用CISC指令集,111条汇编指令,因单片机硬件资源远小于8086微机,所以单片机的汇编指令是汇编语言的子集,另外,结合8051单片机硬件特点扩展了一部分汇编指令,有些指令执行的功能也有区别;同样,单片机的C语言仅是ANSIC的较小子集,
2、使用时须针对单片机硬件结构,随着单片机技术几十年的发展,形成了符合单片机结构特点的C语言风格。要想高效开发实用的单片机系统,就要熟练掌握C语言编程,并至少能读懂汇编指令。单片机应用系统开发的一般过程有项目组织、编制程序、程序编译、仿真调试、编程下载等过程。项目管理针对目标器件设置开发环境参数、配备初始文件等;编译过程将C或汇编程序翻译成机器码,并连接生成可执行文件,在编译过程查找并修改程序的语法性错误;仿真是模拟程序的运行,查找程序功能性错误,验证程序执行效果,其中软件仿真是用PC机模拟程序的运行,硬件仿真是使用仿真器代替单片机接入实际电路中运行。国内常用的单片机开发软件工具有IAR、Keil
3、、WAVE等。使用Keil可以完成程序编辑、编译、连接、软硬件仿真过程。Keil自带Simulator软件仿真器,也可以安装使用Proteus仿真模拟演示系统的动画效果。Keil已安装支持四种种硬件仿真器,使用其它型号仿真器需要安装驱动文件。一. Keil界面1. 编辑界面:打开计算机,运行Keil C51 集成开发环境,观察菜单和工具栏。图1 Keil C项目和文件编辑界面File、Edit同一般软件,对单独程序文件的新建、打开、保存、各种编辑.View对各种工具栏、窗口的管理。Project项目的建立、设置、编译等工具。Windows管理各窗口的排列布局。快捷工具栏里也准备了最常用的工具,
4、鼠标停留时提示操作任务,在图中依次有文件打开、编辑、对齐、标记、查找.调试等,下一行有编译、项目设置工具。左侧是项目窗口,列举出当前项目的各种文件,也可以切换成Regs或Books区。右侧灰色区域是工作区,对程序文件的编辑。底部是OUTPUT窗口,显示编译、连接等信息。2. 调试界面:编译完成进入调试界面如图。图2 调试界面DEBUG各种调试操作,主要是运行、断点设置。Peripherals对外围模块中断、IO口、串口、定时器的观察设置。常用快捷工具如图注释:图3 调试状态快捷工具二. Keil操作过程操作方法、步骤不是唯一,可根据实际需求与个人爱好自行确定,基本过程如下:1. 建立工程:Pr
5、oject New Project. ,输入项目名、选定保存目录。2. 自动跳出Select Device for Target.指定目标器件的窗口,选择Atmel公司的AT89C51单片机。随后跳出的Copy Standard 8051 Startup.是将文件STARTUP.A51文件添加到项目中,这个文件用于在软件仿真前对RAM区清零等,建议选择“是”。3. 建立程序文件:File New.,键入程序代码,保存文件时按类型加后缀,如.ASM或.C或.H。4. 为工程添加文件:快捷的添加方法是在工程文件目录区单击选中Source Group 1 ,右键出现下拉菜单,选Add Files t
6、o Group .,找到文件所在文件夹,指定文件类型,选中文件,单击一次Add即可。添加结束后,可以用鼠标点击工程项目窗口中的“+”,展开工程项目内部的文件,从中可以看到添加进来的文件名称。5. 设置工程项目环境: Project Options for Target Target1,对,选取其中的“Debug”标签,出现如下的项目设置对话框: 图4 Keil项目设置在Device Target 标签下修改Xtal(晶振频率)值,在Debug标签下设置仿真器:Use Simulator是软件仿真,图中选择了伟福V系列仿真器,是硬件仿真。其余可选择默认。6. 编译项目:编译是综合环境设置,将程序
7、文件翻译、连接、生成目标文件或可执行文件的过程,要逐条修正出现的错误直至编译成功。Translater current file仅编译当前文件,Build target连接并生成目标文件,Rebuild all target files编译连接所有需要的文件,如果修改了程序和环境设置,在调试前一定要Rebuild all target files一次才有效。7. 调试过程:点击Start / Stop Debug Session进入和退出调试状态。调试过程中可观察到寄存器、内存、变量.随指令执行的变化情况,可单步、全速执行,可设置断点,需根据要求自行选择。在Keil运行期间,RAM区可能出现非
8、0随机数,可将如下的程序片段添加到汇编文件开始位置,编译并运行一次软件仿真即可,一旦清零后再次启动Keil仍然保持是0,片段如下:MOV R0,#200CLR AIDATALOOP: MOV R0,A DJNZ R0,IDATALOOP三. 实验注意事项1. 实验前应预习,看懂程序和电路,准备好记录数据的表格。2. 项目安排有一定连贯性,实验结束后及时完成实验报告,解决遗留问题。3. 建议在个人计算机上安装软件。4. 实验期间需要认真思考,禁止手机上网。5 建议将已经掌握的子程序写进自己的包含文件,自带U盘保存。四. 实验报告要求1符合实验报告格式要求。2明确实验目的、实验步骤清晰、实验报告内
9、容充实。3程序关键语句、结构要有注释,注释应清楚、简练。4. 实验现象描述准确,现象要结合实验原理。5. 功能性实验应画出流程图。6字迹清楚,图表数据规范。7实验报告独立完成。8完成思考题。实验一、80C51汇编指令练习一、实验目的1.熟悉Keil C51 集成开发环境的使用方法。2掌握数据传送指令的用法。3掌握算术运算指令的用法4. 掌握逻辑运算指令的用法。5掌握位操作指令的用法。6掌握控制转移指令的用法。二、实验步骤1按照Keil C51 集成开发环境的要求,建立程序,然后进行编译、调试并记录结果。2完成数据传送指令、算术运算指令、逻辑运算指令的实验。三、实验内容1.将下列汇编指令组合为汇
10、编程序,观察内部RAM数据传输指令的功能,记录各指令执行后目标RAM的数值,描述寻址方法。ORG 0000HMOV R0,#40H MOV R1,#41HMOV A, R0 MOV 30H,A MOV 20H,30H MOV A,#30H MOV R0,A MOV A,30H MOV R1,A MOV A,R0 MOV R7,A MOV DPTR,#1700H MOV 30H,R7 MOV 20H,R0 MOV 21H,#10HMOV R0,21H MOV R1,#01H SJMP $END提示:观察内存数据操作打开Memory Winds,在Address栏输入D:0030H即可观看数据存储
11、区从0030H开始的各单元数据,外部数据区用X,程序ROM区用C。 在Disassembly Windows窗可观察汇编指令的机器码和单元地址。2.外部RAM数据传输指令ORG 0000HMOV DPTR,#0A330HMOV A,#80H MOVX DPTR,A MOV A,#00H MOVX A,DPTR MOV P2,#80HMOV R0,#31H MOV R1,#32H MOVX R0,A MOV A,#30H MOVX R1,A MOVX A,R0 MOVX A,R1END3. 加法指令练习,观察记录目标寄存器及PSW内容、运算对标志位的影响。ORG 0000HMOV 40H,#0F
12、0HMOV R0,#3EHMOV A,R0ADD A,R0ADD A,40HADD A,#0A0HADDC A,R0ADDC A,40HINC A INC R0 INC R0 ADDC A,R0INC 40H INC R0ADDC A,#0B2HADD A,R0MOV DPTR,#0A30FH INC DPTR MOVX DPTR,A END4.减法指令练习,观察记录目标寄存器及PSW内容ORG 0000HMOV 30H,#37HMOV R0,#32H MOV A,30H SUBB A,R0SUBB A,30HDEC R0DEC 30H SUBB A,#0CBHDEC R0DEC A SUBB
13、 A,R0DEC R0NOPEND5.逻辑操作指令练习,解释指令并验证执行结果ORG 0000HMOV A,#35HMOV R0,#50H MOV 50H,#55HMOV 30H,#78HANL A,R0ORL A,R0CPL AANL A,#9AHORL A,30HXRL 30H,A RL A ANL 30H,#0F0H XRL A,R0 ORL A,R0XRL 30H,#0D5HANL A,R0END6.位操作指令练习,解释指令并验证执行结果ORG 0000HMOV P1,#74HMOV 20H,#31HMOV 30H,#00HCPL 05H MOV C,00H ANL C,01H SET
14、B P1.0MOV A,#33HANL C,ACC.3 ORL C,ACC.7END7控制转移指令练习,加注释并说明该程序所完成的功能。本实验用硬件仿真,在Project Options for Target.设置使用WAVE仿真器;用排线连接仿真头P1口与LED指示灯(J7)。ORG 0000HSTART: MOV A,#01HLOOP: MOV P1,AMOV R1,#10HDEL1: MOV R2,#200DEL2: MOV R3,#126DEL3: DJNZ R3,DEL3DJNZ R2,DEL2DJNZ R1,DEL1RL AAJMP LOOPEND观察实验现象,分析程序并画出流程图
15、。四、思考题1.数据传送指令中直接寻址、间接寻址、立即数寻址有什么区别,请各举两例说明。2.内部RAM和外部RAM的地址范围各是多少?在2中各MOVX指令是对哪个单元的操作?3.总结影响C、CY、Z标志位的操作指令有哪些。4. 逻辑操作有哪些指令?可以不需要A参与的有哪些?5.怎样区别一条指令是位操作还是单元操作?实验二、80C51汇编语言程序设计一、实验目的1. 熟练Keil开发环境的使用方法。2掌握子程序的用法。3掌握控制转移指令的用法。4. 练习为硬件电路编写程序。二、实验内容用排线把 P1 口连接至J1,P0.03连接至J2,电路如图所示。本实验利用数码管驱动程序练习汇编语言程序编写、
16、子程序调用等。电路使用三态锁存器74LS573驱动共阳极数码管,在固定=0时,如果LE=1则,LE=0则锁存。由电路可知,要使数码管显示数字8,需要ag这7个笔画的引脚是低电平,即10000000,方法是单片机输出数据0xC0到J1,再将J2的LE电平拉高即可。a为数据低位时,09的十六进制段码分别为0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,小数点0x7F。若想熄灭数码管,将LE=0,74LS573输出高阻态。图中位选由74LS138完成,译码器输入000时Y0=0,Q8导通个位数码管得电得以点亮。如果P03连接至J2,则从高到低(从左
17、)各位位码分别是0xFF,0xFD,0xFB,0xF9,0xF7,0xF5,0xF3, 0xF1。1. 输入下列程序,单步执行观察实验现象。 ORG 00HSTART: MOV P1,# 82H ; 显示6 MOV P0,# 01001B ; 在十位 MOV P0,#0 ; 熄灭MOV P1,#0A4H ; 显示2 MOV P0,# 01000B ; 在个位 MOV P0,#0 ; 熄灭 AJMP START ; 重新开始 END以上程序在数码管上某些位混叠加延时解决2. 在两条MOV P0,#0 指令前各添加下面延时程序段,全速执行,观察现象并与之前对比。DELAY: MOV R6,#13H
18、DL0: MOV R5,#82H DJNZ R5,$ DJNZ R6,DL03. 用子程序调用方式改写上述代码。4. 改写上述代码在数码管上显示自己学号后八位。5. 设待显示数字存放在21H28H单元(程序开始用MOV 21H,#x方式预先写入或在调试过程中人工修改其中内容),在代码区保存段码,用查表方法显示数字。 ORG 0100HMOV 21H , #x;预置8位待显示数字START:MOV R0 , #21H ; 指向最高位数字MOV R1 , #0FH ;最高位位码MOV DPTR, #0200H ;段码首地址LOOP: MOV A ,R0 ;待显示数字保存单元地址MOVC A , A
19、+DPTR ; (A)+(DPTR)AMOV P0,#0 ; 先把之前熄灭MOV P1 ,A ; 输出显示MOV P0 , R1 ; 显示在指定位INC R0 ;数字地址加1DEC R1DEC R1 ; 调整显示目标到低一位AJMP LOOP ORG 0200HSEG: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090 END单步运行上述程序,观察现象并分析。6. 上述程序全速执行执行时会出现问题:没有延时数码显示不清晰;循环8次后,段码和位码都不再是预期的正确码值。解决办法:在端口输出后加延时;在循环的首或尾加限制指令。例如以R2作为循环
20、次数计数器,每输出一位数R2减1,当R2=0时重新回到最高位。ORG 0100HSTART: MOV R2 , #8 ;循环次数计数器MOV R0 , #21H ; MOV R1 , #0FH ;最高位位码MOV DPTR,#SEG ;LOOP: MOV A ,R0 ;MOVC A , A+DPTR ; (A)+(DPTR)AMOV P0,#0 ; 先把之前熄灭MOV P1 ,A ; 输出显示MOV P0 , R1 ; 显示在指定位CALL DELAY ;加延时DJNZ R2 ,CONTI ;判断,不够8次继续AJMP START ;已经8次则回到程序开始CONTI: INC R0 ; 8位未
21、显示完,指向下一数字DEC R1DEC R1 ; 调整显示目标到低一位AJMP LOOPDELAY: ;一般将所有需要调用的子程序定义在主程序体后 MOV R6,#13HDL0: MOV R5,#82H DJNZ R5,$ DJNZ R6,DL0 RETORG 0200HSEG: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090 END7. 在8位数码管上显示12345678数字。分析下面的C语言参考程序,观察汇编输出代码。#include #define uint unsigned int#define uchar unsigned ch
22、aruchar code DIS_SEG710=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar code DIS_BIT8= 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff;/* kMS延时子程序 */void delay(uint k) uint data i,j;for(i=0;ik;i+)for(j=0;j121;j+); /* 主程序, */void main(void)uchar cnt;while(1) for(cnt=0;cnt8;cnt+) /cnt从0增加到7(表中第一个是0的段码
23、) P1=DIS_SEG7cnt+1; /段码 P0=DIS_BITcnt; /位码 delay(1); P0=0xfe; / P0.0=0,74LS573输出高阻态,熄灭之前的显示 参考上面程序,可以编写数码管一位显示的子程序disp_seg,便于其它程序调用(有相同电路接法)。键入下列程序段命名为my.h并保存在KeilC51inc文件夹下,使用时在程序头位置添加#include unsigned char code DIS_SEG710=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned char code DIS_BIT
24、9= 0xfe, 0xf1,0xf3,0xf5,0xf7,0xf9,0xfb ,0xfd,0xff, ; /*为对准加oxfe熄灭,1个,2十,3百 */void delay(unsigned int k) unsigned int data i,j;for(i=0;ik;i+)for(j=0;j121;j+); void disp_seg (unsigned char seg , unsigned char dsbit ) P1=DIS_SEG7seg; /段码 P0=DIS_BITdsbit; /位码 delay(1); P0=0xfe;在需要逐位显示时直接调用即可,例如:disp_seg
25、(3,4);是把3显示在第4位(千位)三、思考题1.找出C程序中延时子程序段编译后输出的汇编代码,画出其流程图并与直接汇编程序对比。2.C程序汇编后,对端口的输出操作怎样实现的?3.C程序汇编后,对子程序调用的格式?4.数码管动态扫描时,应根据那些数据确定各位的持续时间?实验三、中断应用实验一、实验目的1. 验证中断响应过程,掌握中断概念。2学习中断处理一般方法。3掌握管理、中断服务子程序编写。二、实验内容为使用实验二子程序,按原图连接实验电路,并连接外部中断P3.2到按键,按下按键低电平。我们已经掌握了延时与数码管显示的程序,可以直接调用。1. 编写并测试C程序实现三位数码管显示#inclu
26、de #include /保证KeilC51inc已经存在正确的my.h#define uint unsigned int#define uchar unsigned charunsigned int m=567;/*/void main(void) while(1)disp_seg(m/100,3); disp_seg(m%100/10,2); disp_seg(m%10,1); 上述程序将十进数m的各个位显示到数码管。2. 给上述程序添加定时中断,实现每50mS间隔,m值加1(这是为了简化程序,因为12M晶振下,定时器最大延时65.535mS),这样个位每秒变化20次,十位每秒变化2次,从
27、十位可以观察中断的作用。#include #include /保证KeilC51inc已经存在正确的my.h#define uint unsigned int#define uchar unsigned charunsigned int m=000; /m从0开始,这是个全局变量,任何子程序可直接读写/*/void InitTimer0(void) /定时器T0初始化 TMOD = 0x01; /方式1,16位定时 TH0 = 0x3C; /初值0x3CB0 TL0 = 0xB0; /FFFF-3CB0=C34F=49999,50mS定时 EA = 1; /开中断 ET0 = 1; /T0中断
28、允许 TR0 = 1; /启动T0void Timer0Interrupt(void) interrupt 1 /以下是T0中断服务子程序 TH0=0x3c; TL0=0xb0; /每次定时中断后赋初值 m+; /每次中断m加1void main(void) InitTimer0();/在主程序中初始化(含启动定时器)while(1)disp_seg(m/100,3); disp_seg(m%100/10,2); disp_seg(m%10,1); 在主程序中没有对中断服务子程序的显式调用,是每产生中断时就调用。2. 给上述程序添加外部中断,每当按键按下时,显示数值的十位减1 。这是为了能够明
29、显观察到外部中断的作用。#include #include /保证KeilC51inc已经存在正确的my.h#define uint unsigned int#define uchar unsigned charunsigned int m=000; /m从0开始,这是个全局变量,任何子程序可直接读写/*/void InitTimer0(void) /定时器T0初始化 TMOD = 0x01; TH0 = 0x3C; TL0 = 0xB0; EA = 1; ET0 = 1; TR0 = 1; void InitINT0(void) EX0 = 1; / 打开外部中断INT0 IT0=11; /
30、 下降沿触发 IP = 1; / 将INT0中断设为高优先级 void Timer0Interrupt(void) interrupt 1 TH0=0x3c; TL0=0xb0; m+; /每次定时中断计数值加1void INT0Interrupt(void) interrupt 0 /INT0的向量地址03H是第一个 m-; /每次按键中断计数值减1void main(void) InitINT0(); /INT0初始化InitTimer0(); while(1)disp_seg(m/100,3); disp_seg(m%100/10,2); disp_seg(m%10,1); 程序中有注释
31、的部分是新加的,为理解上思路清晰,又单独定义了INT0的初始化子程序,在对INT0初始化时还没有打开总中断允许EA,这对本题目没有影响。实际上应该把各个中断的初始化指令放在同一个子程序中,便于统一安排优先级、启动顺序。3. 将INT0的初始化子程序中IT0=0改为IT0=1(下降沿触发),体会两种方式的区别。三、思考题1. 观察反汇编代码,找出各中断入口地址,服务子程序实际地址段,返回语句。2. 编译后,中断服务子程序中哪些寄存器得以入栈保护?3. 在输出到数码管期间,m的数值是否会发生改变?4. 定时中断和外部中断有无同时发生的可能?是否会出现同时响应两种中断而发生程序冲突?5. 外部中断低
32、电平触发和下降沿触发有什么区别?实验四、定时器/计数器应用实验一、实验目的1. 加深对定时/计数器的理解。2学习定时/计数器控制编程。二、实验内容TMOD寄存器是定时/计数器模式控制寄存器,根据模式要求确定TMOD值。TCON各位在头文件中已定义。TMODGATEC/TM1M0GATEC/TM1M0TCONTF1TR1TF0TR0IE1IT0IE0IT01. 利用T0的方式0产生1KHz方波。使用定时/计数器多采用中断处理方式,较少占用CPU时序。方式0最大计数13位,方式1最大计数16位,溢出后都需要人工重置初值,否则计数从0开始。12M晶振的机器周期1uS,1KHz方波的半周期500 uS
33、,213-500=8192-500=7692。因高八位TH0,低五位TL0,7692/32=240+12 7692=32240+12 ,TH0=240=0F0H, TL0=0CH 。由此可见,方式0的初值计算较为复杂。#includesbit P1_0=P10;void initTimer(void) TMOD=0x0; TH0=0xf0; TL0=0xc; void timer0(void) interrupt 1 TH0=0xf0; /每次中断后都要重新赋初值 TL0=0xc;P1_0=P1_0; /在P1.0输出方波 void main(void)initTimer();TR0=1;ET
34、0=1;EA=1; while(1) /加入while死循环,避免反复执行上述的初始化语句全速运行上述程序,用示波器观察P1.0波形。修改初值实现2KHz方波输出。2. 用单片机实现2S定时器,用LED灯亮灭翻转指示。2S=2000000uS,单一计数器最大仅能65536(10000H),可以用两个计数器级联完成。如果用CT0工作在模式1定时,每次溢出中断经P3.6引脚输出一个脉冲给CT1的时钟输入(T1),2000000=1E8480H,1E8480H10000H=1EH是10000H的整数倍,且FFH,故可以用CT1工作在外部计数模式2(自动重载),初值设为FFH-1EH=E1H。将P3.
35、0作为输出指示连接到LED,连接P3.6和T1(P3.5),参考程序如下:#include /含有P10格式的定义,无须再定义sbit P3_6=P36void initTimer(void) TMOD=0x61; /CT1方式2计数;CT0方式1定时 TH0=0x0; TL0=0x0; TH1=0xe2; TL1=0xe2; /CT1进行30次计数void delay10us(void) /10us unsigned char a,b; for(b=1;b0;b-) for(a=2;a0;a-);void timer0(void) interrupt 1 TH0=0x0; TL0=0x0;
36、/65536计时 P3_6=1; delay10us() ; /高电平程序10 us P3_6=0; void timer1(void) interrupt 3 P3_0=!P3_0; void main(void) initTimer();TR0=1; ET0=1; TR1=1; ET1=1;EA=1;while(1) 3. 单片机简易频率计,测量1S内脉冲的个数。用单片机测频率可以有很多方法,本实验利用一个定时器(T0)产生闸门时间,另一个(T1)对外部脉冲计数。12M晶振下单一计数器最大只能产生65.536mS,为了编程计算简单,T0产生50 mS,每次中断时读出T1的计数值送显示,然后
37、清零重新计数。读出数值乘以20即可得到频率近似值。仅关注定时计数器的使用,调用数码管子程序将数值输出显示。#include#include /保证KeilC51inc已经存在正确的my.hunsigned int m ; /定义一个全局变量频率值void initTimer(void) / C/T的初始化设置 TMOD=0x51; /C/T1计数,C/T0定时,都工作在模式116位 TH0=0x3c; /65536-50000=15536 3CB0H TL0=0xb0; TH1=0xff; /C1初值 TL1=0xff EA = 1; /时能T0中断和总中断 ET0 = 1; TR0 = 1;
38、 TR1 = 1; /启动T0 、T1void timer0(void) interrupt 1 / T0中断号1 , 50mS中断服务子程序 TH0 = 0x3C; /模式1需重新赋值 TL0 = 0x0B0; TR0 = 1; /重启动 m=TH1; m=m8;m=m+TL1;m=m*20; / 读出并计算频率值TH1=0; TL1=0 ; /C1初值void main(void)initTimer();while(1) disp_seg(m%10,1); /取出个位显示disp_seg(m/10%10,2); /取出十位disp_seg(m/100%10,3); /百位disp_seg(
39、m/1000%10,4); /千 disp_seg(m/10000%10,5); /十千disp_seg(m/100000%10,6); /百千 disp_seg(m%100000/10,7); /千千,最大值1000000 当信号频率很低时有较大的测量误差,按照单片机机器周期计,最大只能测量1MHz的信号。用导线将单片机脚(P3.5T1)分别连接A6区J1的413脚,观察并记录显示值,分析异常现象的原因。J112345678910111213F(KHz)4096204810245122561286432168421添加程序段,(1)输入4KHz的频率信号,用LED指示灯观察一个计数区间的T/
40、C1低位值,对比LED值与数码管显示值的对应关系;(2)输入8KHz的频率信号,用LED指示灯观察一个计数区间的T/C1高位值,对比LED值与数码管显示值的对应关系。四、思考题1. 在频率计实验中为什么把m定义为全局变量?2. 频率计实验,图示分析当输入信号频率为1KHz时,可能的最大误差是多大?3. 频率计实验,用m=(TH18+TL1)*20读取计数值是否可行,为什么?实验五、A/D转换器应用实验一、实验目的1. 熟悉并行AD转换器工作时序,掌握AD转换器编程控制。2练习AD转换器实际应用。二、实验内容AD0809的工作时序如图(地址固定,模拟输入固定):1. 当地址线ABC电平固定时,时
41、序可简化为:给START、ALE下跳沿启动0809;等待0809的EOC有低变高电平;拉高OE使能端电平,并从数据线读出数据。对AD0809这类单片机之外的并行外围器件,典型接法是把它当成外部RAM,使用外部数据读写操作控制。推荐电路如图:单片机对外部写操作时=0且P2.x=0,START=ALE=1,写操作完成后START=ALE=0启动了AD0809;读操作时=0且P2.x=0,使OE=1,读出数据。图中用异或门组合出2个信号,并用异或门把EOC信号反相送给单片机。WRP2.xSTARTRDP2.xEOC001001010010100100110110连接地址线P2.x是为了能与其它器件相区别,P2