C51单片机实验指导书_第1页
C51单片机实验指导书_第2页
C51单片机实验指导书_第3页
C51单片机实验指导书_第4页
C51单片机实验指导书_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理与应用单片机原理与应用 实验指导书实验指导书 实验一实验一 实验板使用,实验板使用,keilkeil c51c51软件使用软件使用 一、实验目的一、实验目的 1. 熟悉单片机实验版、keil c51软件使用 二、实验说明二、实验说明 本实验指定某块存储器的起始地址和长度,要求能将其内容置 1。通过该实验学 生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。 三、实验内容及步骤三、实验内容及步骤 1.启动 pc 机,安装好 isp 驱动,用 isp 数据通信线连接计算机与实验板(usb 线) 。 2.打开 keil uvision2 仿真软件,首先建立本实验的项目文

2、件,接着建立源程序,编译 无误后,全速运行程序。 3.可把源程序编译成可执行文件,用 isp 烧录器烧录到 89s52 芯片中。 四、四、keil c51 软件使用步骤软件使用步骤 1. 使用 keil 前必须先安装。安装过程简单,这里不在叙述。 2. 安装好了 keil 软件以后,我们打开它。打开以后界面如下: 3. 我们先新建一个工程文件,点击“project-new project”菜单,如下图: 3. 选择工程文件要存放的路径,输入工程文件名 led,最后单击保存。 4. 在弹出的对话框中选择 cpu 厂商及型号 5. 选择好 atmel 公司的 at89s52 后 , 单击确定 在接

3、着出现的对话框中选择“是”。 5. 新建一个 c51 文件 , 单击左上角的 new file 如下图所示 : 6. 保存新建的文件,单击 save 如下图: 在出现的对话框中输入保存文件名 main.c(注意后缀名必须为.c) ,再单击“保存”, 如下图; 7. 保存好后把此文件加入到工程中方法如下 : 用鼠标在 source group1 上单击右键 , 然 后再单击 add files to group source group 1 如下图: 8. 选择要加入的文件 , 找到 main.c 后 , 单击 add, 然后单击 close 9. 在编辑框里输入如下代码 : 10. 到此我们完

4、成了工程项目的建立以及文件加入工程 , 现在我们开始编译工程如下图所 示 : 我们先单击编译, 如果在错误与警告处看到 0 error(s) 表示编译通过 ; 11. 生成 .hex 烧写文件,先单击 options for target,如图; 12. 在下图中,我们单击 output, 选中 create hex f。再单击“确定”。 13. 打开文件夹实验 1,查看是否生成了 hex 文件。如果没有生成,在执行一遍步骤 10 到步骤 12,直到生成。 实验二实验二 简单简单i/oi/o控制实验控制实验 一、实验目的一、实验目的 1、 学习 i/o 口的使用方法。 2、学习延时子程序的编写

5、和使用。 二、实验内容二、实验内容 1、 p1 口做输出输出口,接八只发光二极管(其输入端为低电平时发光二极管点亮) ,编 写程序,使发光二极管循环点亮。 2、 p30、p31、p32、p33 作输入输入口接四个开关 s0、s1 、s2、s3;p10,p11, p12,p13 作输出口,接四个发光二极管,编写 程序读取开关状态,将此状态在发光二极管上显示出来。编程时应注意 p3 口作 为输入口时应先置 1,才能正确读入值。 三、实验说明三、实验说明 1、p3 口是准双向口。它作为输出口时与一般的双向口使用方法相同。由准双向口 结构可知当 p3 口用作输入口时必须先对它置“1” 。若不先对它置“

6、1” ,读入的数 据是不正确的。 2、延时子程序 void delay(unsigned int cnt) /简单的延时 while(-cnt); 四、电路原理图四、电路原理图 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 dd cc bb aa title numberrevisionsize a2 date:2010-9-19sheet of file:e:不不不.不不不.schdocdrawn by: ld2 ld3 ld4 ld5 ld6 ld7 ld8 ld1 vcc 1k lr1 1k lr2 1k lr3 1k lr4 1k lr5 1k lr6 1k lr7

7、1k lr8 流流水水灯灯 104 lc1 vcc 12 34 56 78 910 11 12 13 14 15 16 header 8x2 lsd_p1 led 连接图 1 1 2 2 3 3 4 4 dd cc bb aa title numberrevisionsize a4 date:2010-9-13sheet of file:e:不不不不不不不不不不.schdocdrawn by: ea/vpp 31 xtal1 19 xtal2 18 rst 9 p3.7(rd) 17 p3.6(wr) 16 p3.2(int0) 12 p3.3(int1) 13 p3.4(t0) 14 p3.

8、5(t1) 15 p1.0 1 p1.1 2 p1.2 3 p1.3 4 p1.4 5 p1.5 6 p1.6 7 p1.7 8 (ad0)p0.0 39 (ad1)p0.1 38 (ad2)p0.2 37 (ad3)p0.3 36 (ad4)p0.4 35 (ad5)p0.5 34 (ad6)p0.6 33 (ad7)p0.7 32 (a8)p2.0 21 (a9)p2.1 22 (a10)p2.2 23 (a11)p2.3 24 (a12)p2.4 25 (a13)p2.5 26 (a14)p2.6 27 (a15)p2.7 28 psen 29 ale/prog 30 (txd)p3.1

9、 11 (rxd)p3.0 10 gnd 20 vcc 40 at89c51 u3 vcc 12 xtal y1 30pf cap c8 30pf cap c9 10k res semi r3 22uf cap pol1 c3 sw-pb rst 1k res semi r2 p0_0 p0_1 p0_2 p0_3 p0_4 p0_5 p0_6 p0_7 p1_0 p1_1 p1_2 p1_3 p1_4 p1_5 p1_6 p1_7 p2_0 p2_1 p2_2 p2_3 p2_4 p2_5 p2_6 p2_7 vcc3 txd rxd gnd int0 int1 t0 t1 led3 ds1

10、 vcc3 gnd p3_6 p3_7 rst1 单片机最小系统 五、实验仪器和设备五、实验仪器和设备 pc 机、keil 软件、实验板等。 六、实验步骤六、实验步骤 七、参考程序框图七、参考程序框图 p1 口循环点灯框图 p3 口输入 p1 口输出框 开始 读入 p3 口值低 4 位值 p3 口置 1 将读入的值输出到 p1 低 4 位 开始 延时 设置循环次数 数据输出 左移一位 设置循环初始值 次数- 1=0? y n 图 1、 流水灯控制: #include void delay(unsigned int cnt) /简单的延时 while(-cnt); main() p1=0 xfe

11、;/给初始化值 while(1) delay(30000); p1=1; /左移一位 p1|=0 x01; /最后一位补 1 if(p1=0 x7f) /检测是否移到最左端? delay(30000); /delay p1=0 xfe; 2、 p30、p31、p32、p33 作输入输入口接四个开关 s0、s1 、s2、s3;p10,p11, p12,p13 作输出口,接四个发光二极管,编写程序 读取开关状态,将此状态在发光二极管上显示出来。 /按下 p3 口的按键,p1 显示相应的位置,io 读写操作程序 #include void main (void) unsigned char pval

12、; /* temp variable for port values */ p1 = 0 xff; /* setup p1 for input */ while (1) pval = p3; /* read p1 into pval */ p1 = pval; /* write pval to p3 */ 实验三实验三 定时定时/ /计数器实验计数器实验 一、一、 实验目的实验目的 1、通过本实验学习8051内部定时器的使用和编程方法。 2、掌握中断处理程序的编程方法。 二、实验内容二、实验内容 8051内部定时器t0用中断方式计时,实现每一秒钟使p1.0的输出状态发生一次反转, 从而形成方波

13、输出。 8051内部定时计数器t0,按计数器模式和方式1工作,对p3.4(t0)引脚进行计数, 并将计数值按二进制数通过p1口驱动led灯显示出来。 三、实验仪器和设备三、实验仪器和设备 pc 机、keil 软件、实验板等。 四、实验步骤四、实验步骤 8051 单片机的定时/计数器在进行定时或计数之前要进行初始化编程,通常包括如下 几个步骤: (1) 确定工作方式,即给方式控制寄存器 tmod 写入控制字。 (2) 计算定时器/计数器初值,并将初值写入寄存器 tl 和 th。 (3) 根据需要对中断控制寄存器 ie 置初值,决定是否开放定时器中断。 (4) 使 tcon 中的 tr0 或 tr

14、1 置“1” ,启动定时器/计数器。 在初始化过程中,要设置定时或计数的初始值,则计算初值 x 的公式如下: 计数方式: x = m-要求的计数值 式中 m 取决于不同工作方式,可以是 213、216或 28)。 定时方式: x = (m-(要求的定时值/t) 式中t=12/fosc,称为定时周期。 五、实验程序流程图及参考程序五、实验程序流程图及参考程序 1 1、 用用t1t1中断方式定时中断方式定时, ,每秒钟使每秒钟使p1.0p1.0输出状态发生一次反转输出状态发生一次反转 将t1作定时器定时1秒,由于实验系统fosc=12mhz,定时周期t=1us。为了实现定时1秒, 通过中断服务程序

15、进行定时扩展,即设置t1定时50ms产生一次中断,同时设置一个软件计 数器来计数中断次数,当达到中断20次时即完成了定时1秒钟。 t1选用工作方式1,定时50ms的初值为x=65536-50000=15536 th1=15536/256; tl1=15536%256; 实验程序清单如下。 (中断方式) org 0000h ljmp main org 001bh ;t1的中断入口地址 ajmp server org 0060h main:mov sp,#60h mov r2,#20 ; 中断20次 mov tmod,#10h ;t1模式1 mov tl1,#0b0h ;50ms初值 mov th

16、1,#3ch setb tr1 ;启动t1 setb et1 ;开t1中断 setb ea ;开总中断 sjmp $ server: mov tl1,#0b0h ;50ms初值 mov th1,#3ch djnz r2,loop mov r2,#20 cpl p0.0 loop:reti end ( (查询方式查询方式) ) loop:jbc tf1,next sjmp loop next: mov tl1,#0b0h ;50ms初值 mov th1,#3ch djnz r2,loop mov r2,#20 cpl p0.0 sjmp loop #include sbit p1_0=p10;

17、char i; main() tmod=0 x01;/t0工作方式1 th0=(65536-50000)/256; tl0=(65536-50000)%256; ea=1;et0=1;/总中断允许,t0中断允许 i=0; tr0=1;/启动t0 while(1); void time0_int(void) interrupt 1 th0=(65536-50000)/256; tl0=(65536-50000)%256; i+; if(i= =20) p1_0=! p1_0; i=0; 2 2、 用用t0t0计数外部脉冲计数外部脉冲, ,通过通过p1p1口显示计数值口显示计数值 采用t0作计数器

18、,外部计数脉冲由p3.4引入,8051单片机在每个机器周期采样一次输 入信号,因此至少需要两个机器周期才能检测到一次脉冲跳变。这就要求被采样的外部脉 冲高低电平保持时间均要大于一个机器周期,以保证电平在变化之前即被采样,并且外部 计数脉冲的最高计数频率为fosc/24。 计数器实验参考程序框图 实验程序清单如下。 org 0000h mov tmod, #00000110b ;设置t0为工作方式2,计数器 mov th0, #0 mov tl0, #0 setb tr0 loop: mov p1, tl0 ;将记数结果送p1口 ljmp loop end #include sbit p3_4=

19、p34; unsigned char a; main() tmod=0 x06;/t0计数,工作方式2; th0=0; tl0=0; tr0=1;/启动t0 while(1) a=tl0; p1=a; 开始 设置 t0 工作方式 (方式 2、计数模式) 开始计数 计数,输出计数值 实验四实验四 中断实验中断实验 一、实验目的一、实验目的 1. 学习外部中断技术的基本使用方法。 2. 学习中断处理程序的编程方法。 二、实验内容二、实验内容 用单次脉冲申请中断,在中断处理程序中对信号进行反转输出。 三、实验电路连线三、实验电路连线 p1.0 -led0 -int0 四、实验说明四、实验说明 编写中

20、断处理程序需要注意的问题是: 1保护进入中断时的状态,并在退出中断之前恢复进入时的状态。 2必须在中断处理程序中设定是否允许中断重入,即设置 ex0 位。 本例中使用了 int0 中断,一般进入中断处理程序时应保护 psw,acc 以及 中断处理程序使用但非其专用的寄存器(保护现场) 。本例的 int0 中断处理程序 保护了 psw,acc 等三个寄存器并且在退出前恢复了这三个寄存器(恢复现场) 。 另外中断处理程序中涉及到关键数据的设置时应关中断,即设置时不允许中断重 入。本例中没有涉及这种情况。 3int0 端接单次脉冲发生器。p10 接 led 灯,以查看信号反转 五、实验仪器和设备五、

21、实验仪器和设备 pc 机、keil 软件、实验板等。 六、参考程序框图六、参考程序框图 主程序框图 int0 中断处理程序框图 单次脉冲 开始 设置有关中断控制 寄存器开外中断 int0 设置 p1.0 初始状态 死循环等待中 断 int0 中断 入口 p1.0 状态取反 保护现场 恢复现场 中断返回 /中断试验程序 #include sbit led=p10; void main() it0=1; /脉冲方式触发中断,cpu 响应后自动清零 ie0 ea=1; ex0=1; while(1); void ext0_int(void) interrupt 0 /ie0=0;/如果采用电平触发方

22、式,需要手动清零 ie0 ex0=0; /关中断 led=!led; ex0=1; 硬件实验五硬件实验五(i) 交通灯控制交通灯控制(软件延时法)(软件延时法) 一、实验目的一、实验目的 1. 学习数据输出程序的设计方法。 2.学习模拟交通灯控制的方法。 3. 进一步了解软件延时方法。 二、实验内容二、实验内容 用 cpu 的 p1 口输出控制信号,控制六个 led 灯(红,绿,黄),模拟交通灯管理。 三、实验电路连接三、实验电路连接 p10 - led0 p11 - led1 p12 - led2 p13 - led3 p14 - led4 p15 - led5 四、实验说明四、实验说明 l

23、. 因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一 个十字路口为东西南北走向。初始为状态 0。 状态状态 0:东西红灯,红灯,南北红灯红灯;然后转 状态状态 1:南北绿灯绿灯通车,东西红灯红灯;过一段时间转 状态状态 2:南北绿灯闪绿灯闪几次转黄灯亮黄灯亮,延时几秒,东西仍然红灯;红灯;再转 状态状态 3:东西绿灯绿灯通车,南北红灯红灯;过一段时间转 状态状态 4:东西绿灯闪绿灯闪几次转亮黄灯亮黄灯,延时几秒,南北仍然红灯红灯;最后循环至状态状态 1。 2. 各用一组红、黄、绿色 led 分别表示南北方向和东西方向红绿灯。 3. 延时程序参考硬件实验一中的例子,具体时间长

24、短由同学自己确定。 五、实验仪器和设备五、实验仪器和设备 pc 机、keil 软件、实验板等。 六、参考程序框图六、参考程序框图 led3、led4、led5 分分 别表示东西方向红、黄、别表示东西方向红、黄、 绿灯绿灯 开始开始 状态状态 1:南北绿灯,东西红灯,:南北绿灯,东西红灯, 延时一会儿延时一会儿 状态状态 4:南北红灯,东西绿灯闪转亮黄:南北红灯,东西绿灯闪转亮黄 灯,延时一会儿灯,延时一会儿 初始状态东西南北都是红灯,初始状态东西南北都是红灯, 延时一会儿延时一会儿 状态状态 2:南北绿灯闪转黄灯亮,东西红:南北绿灯闪转黄灯亮,东西红 灯,延时一会儿灯,延时一会儿 状态状态 3

25、:南北红灯,东西绿灯,:南北红灯,东西绿灯, 延时一会儿延时一会儿 led0、led1、led2 分分 别表示南北方向红、黄、别表示南北方向红、黄、 绿灯绿灯 交通灯控制参考程序框图 /交通灯,软件延时 #include #define uint unsigned int #define uchar unsigned char sbit led0=p10; sbit led1=p11; sbit led2=p12; sbit led3=p13; sbit led4=p14; sbit led5=p15; uchar state0=0 xf6; uchar state1=0 xf3; uchar

26、 state2=0 xf5; uchar state3=0 xde; uchar state4=0 xee; void delayms(uint ms) uint i,j; for(i=0;ims;i+) for(j=0;j123;j+); void main() uint i; p1=state0; delayms(2000); while(1) p1=state1; delayms(2000); for(i=0;i3;i+) led2=!led2; delayms(2000); p1=state2; delayms(500); p1=state3; delayms(500); for(i=

27、0;i3;i+) led5=!led5; delayms(2000); p1=state4; delayms(500); *硬件实验五硬件实验五 (ii) 交通灯控制交通灯控制(定时器延时法)(定时器延时法) 一、实验目的一、实验目的 1. 进一步理解单片机内部定时器/计数器的工作原理和使用方法。 2. 学习模拟交通灯控制的方法。 3. 学习数据输出程序的设计方法。 4. 学习中断处理程序的编程方法。 二、实验内容二、实验内容 用 cpu 的 p1 口输出控制信号,控制六个 led 灯(红,绿,黄),模拟交通灯管理。 三、实验电路连接三、实验电路连接 p10 - led0 p11 - led1

28、 p12 - led2 p13 - led3 p14 - led4 p15 - led5 四、实验说明四、实验说明 l. 因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个 十字路口为东西南北走向。初始为状态 0。 状态状态 0:东西红灯,红灯,南北红灯红灯;然后转入 状态状态 1:南北绿灯绿灯通车,东西红灯红灯;过一段时间转入 状态状态 2:南北绿灯闪绿灯闪几次转黄灯亮黄灯亮,延时几秒,东西仍然红;红;再转入 状态状态 3:东西绿灯绿灯通车,南北红灯红灯;过一段时间转入 状态状态 4:东西绿灯闪绿灯闪几次转黄灯亮,黄灯亮,延时几秒,南北仍然红灯红灯;最后循环至状态状态 1

29、。 2. 各用一组红、黄、绿色 led 分别表示南北方向和东西方向。 3. 由定时器来产生通车延时定时器来产生通车延时时间,时间长短 1 秒以上(由同学自己确定) 。 提示:内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是 12 个振荡器周期。因为实验系统的晶振是 12mhz,本程序定时器工作于方式 1(16 位方式)时,最大定时时间为: 216*1s=65536s=65.536ms 所以需要配合软件记数。如要延时 2 秒,则需要 t0 中断 32 次,所 用时间为 65536*32=2097120s2s 因此在 t0 中断处理程序中,要判断中断次数是否到 32 次,若不到 32

30、 次,则只 使中断次数加 1,然后返回,若到了 32 次,定时 2 秒时间到。 3.用软件延时方法产生软件延时方法产生“闪闪”延时延时时间(参考硬件实验一) 。 led3、led4、led5 分分 别表示东西方向红、黄、别表示东西方向红、黄、 绿灯绿灯 led0、led1、led2 分分 别表示南北方向红、黄、别表示南北方向红、黄、 绿灯绿灯 五、实验仪器和设备五、实验仪器和设备 pc 机、keil 软件、实验板等。 六、参考程序框图六、参考程序框图 否 是 否 是 是 否 主程序框图 是 否 开始 设置 t0 时间常数 0000h 设置状态记数初 值 b=0 置 t0 工作方式 1,定时器

31、通过 p1 口送初始状态 (东西南北都是红灯) 设置秒计数值 r6=32(2 秒) 中断允许,定时 开始 动态停机等待 中断 保护现场并重新设置保护现场并重新设置 t0 时间常数时间常数 是否到是否到 2 秒?秒? t0 中断入口中断入口 秒计数值秒计数值 r6 减减 1 状态值状态值 b 加加 1 重新设置秒计数值重新设置秒计数值 r6=32 恢复现场恢复现场 中断返回中断返回 重设状态记数初值重设状态记数初值 r2=0 南北绿灯,东西红灯南北绿灯,东西红灯 南北绿灯闪转黄南北绿灯闪转黄 灯亮,东西红灯灯亮,东西红灯 南北红灯,东西绿灯南北红灯,东西绿灯 是否状态是否状态 1? 是否状态是否

32、状态 2? 是否状态是否状态 3? 进入状态进入状态 4,南北红灯,南北红灯, 东西绿灯闪转黄灯亮东西绿灯闪转黄灯亮 中断处理程序框图 实验六实验六 串并转换实验串并转换实验 一、一、 实验目的实验目的 1、掌握8051串行口方式0工作方式及编程方法。 2、掌握利用串行口扩展i/o通道的方法。 二、实验内容二、实验内容 利用8051单片机串行口和串行输入并行输出移位寄存器74ls164,扩展一个8位输出通 道,用8个led发光二极管显示转换的8位数据,采样中断方式设计每隔1秒钟显示1种花样, 能循环显示8种不同的led花样。 三、实验电路原理图三、实验电路原理图 rxd 接 datain,tx

33、d 接 dclk。 四、实验说明四、实验说明 串行口工作在方式 0 时,可通过外接移位寄存器实现串并行转换。在这种方式下,数 据为 8 位,只能从 rxd 端输入输出,txd 端总是输出移位同步时钟信号,其波特率固定为 晶振频率 1/12。由软件置位串行控制寄存器(scon)的 ren 后才能启动串行接收,在 cpu 将数据写入 sbuf 寄存器后,立即启动发送。待 8 位数据输完后,硬件将 scon 寄存器的 ti 位置 1,ti 必须由软件清零。 五、实验程序框图五、实验程序框图 主程序方框图 int-t0 方框图 实验七实验七 数码管显示实验数码管显示实验 一、实验目的一、实验目的 1、

34、掌握 led 数码管的工作原理及驱动方法。 2、掌握多位 led 数码管动态显示方法。 二、实验内容二、实验内容 在 6 位数码管上显示“012345” 。 三、实验说明三、实验说明 数码管有共阴和共阳两种结构,工作电流一般在 10-20ma 左右,对于动态扫描方式驱 动的 led 数码管,其亮度与稳定度与扫描频率有关,一般扫描频率在 60hz 以上,也就是 在 16ms 之内完整扫描一周,才能稳定显示,不会闪烁。实验原理图如下图所示: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 dd cc bb aa title numberrevisionsize a2 date:20

35、10-9-19sheet of file:e:不不不.不不不.schdocdrawn by: 330330330330330330 value: 1k vcc 单单片片机机动动态态数数码码管管 2n3906 q1 2n3906 q2 2n3906 q3 q5 k 3 f 2 g 1 e 4 d 5 k 8 c 7 dp 6 b 9 a 10 h1 k 3 f 2 g 1 e 4 d 5 k 8 c 7 dp 6 b 9 a 10 h4 k 3 f 2 g 1 e 4 d 5 k 8 c 7 dp 6 b 9 a 10 h2 k 3 f 2 g 1 e 4 d 5 k 8 c 7 dp 6 b

36、9 a 10 h5 k 3 f 2 g 1 e 4 d 5 k 8 c 7 dp 6 b 9 a 10 h3 k 3 f 2 g 1 e 4 d 5 k 8 c 7 dp 6 b 9 a 10 h6 seg0 seg1 seg5 seg4 seg3 seg2 seg6 seg7 seg0 seg1 seg5 seg4 seg3 seg2 seg6 seg7 seg0 seg1 seg5 seg4 seg3 seg2 seg6 seg7 seg0 seg1 seg5 seg4 seg3 seg2 seg6 seg7 seg0 seg1 seg5 seg4 seg3 seg2 seg6 seg7

37、seg0 seg1 seg5 seg4 seg3 seg2 seg6 seg7 bit1bit2bit3 bit4bit5bit6 bit1 bit2 bit3 bit4 bit5 bit6 sig1 sig2 sig3 sig4 sig5 sig6 12 34 56 78 910 11 12 13 14 15 16 header 8x2 p5 seg0 seg1 seg5 seg4 seg3 seg2 seg6 seg7 12 34 56 78 910 11 12 header 6x2 p7 sig6 sig5 sig4 sig3 sig2 sig1 1k smg_r13 smg_r14 s

38、mg_r15 smg_r16 smg_r17 smg_r18 smg_r19 1k smg_r20 value: 1kvalue: 1kvalue: 1k value: 1kvalue: 1k q6 2n3906 q4 八位数码管连接图 四、实验仪器和设备四、实验仪器和设备 pc 机、keil 软件、实验板等。 五、实验步骤五、实验步骤 六、参考程序框图六、参考程序框图 #include #define uint unsigned int #define uchar unsigned char uchar num1; uchar num2; uchar code table= 0 x90,0

39、xf6,0 x58,0 x52, 0 x36,0 x13; uchar code wei= 0 x7f,0 xbf,0 xdf,0 xef, 0 xf7,0 xfb; void delay(); void main() while(1) for(num1=0;num10;x-) for(y=4;y0;y-); 初始化 输入位码 输入段码 延时 输入位码 输入段码 延时 实验八实验八 da 转换实验转换实验 一、实验目的一、实验目的 1. 了解 d/a 转换的基本原理。 2. 了解 d/a 转换芯片 0832 的性能及编程方法。 3. 了解单片机系统中扩展 d/a 转换的基本方法。 二、实验内容

40、二、实验内容 1. 利用 dac0832 将任意 1 字节数字量转换成电压模拟量,用电压表测量输出 电压。 2. 编制程序产生锯齿波、三角波,用示波器观看。 三、实验电路连线三、实验电路连线 用电压表测量输出电压或用示波器探头接触 out,观察显示波形。 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 dd cc bb aa title numberrevisionsize a2 date:2010-9-19sheet of file:e:不不不.不不不.schdocdrawn by: d da a0 08 83 32 2 vref 8 rfb 9 gnd 10 iout1 1

41、1 iout2 12 di7 13 di6 14 di5 15 di4 16 di0 7 cs 1 wr1 2 gnd 3 di3 4 di2 5 di1 6 xfer 17 wr2 18 ile 19 vdd 20 dac0832lcj da_u1 vcc da不不不不bfffh 84 7 5 6 2 lm358ad da_u2b 8 1 4 3 2 1 lm358ad da_u2a 1k rpot da_w1 1k da_r1 1 2 header 2 da_p1 da_j1 da_j2 p00 p01 p02 p03 p04 p05 p06 p07 +12 -12 dac0832 原理图

42、 四、实验说明四、实验说明 1. 正向阶梯波实验程序。 在图中,让8051单片机的累加器a从0开始循环增量,每增量一次向dac0832送 出一个数,得到一个输出电压,这样就可以获得一个正向阶梯波,波形的周期可以 通过调整延时时间来改变。 2、要产生锯齿波、三角波,比较简单的方法是表格法表格法:先产生这二个波形的数据 表格,然后依次查表得到波形中一点的数字量,送 d/a 转换,得到模拟量的电压信号, 再送示波器显示。这种表格法对输出较复杂的波形(如正弦波或其他任意波形)是非 常有用的。产生锯齿波和三角波的表格只需由数字量的增减来控制,同时要注意三角 波要分段来产生。 3、da 转换取值范围为一个

43、周期,在一个周期数据点越多,精度越高些。本例采 用的数据点为 256 点周期,即最小数字量为 0,最大为 255(ffh) 。 8 位 da 转换器的输入数据 n 与输出电压 vo1的关系为 vo1= -vref*n256 (vref为参考电压,vref= -5v) 五、实验仪器和设备五、实验仪器和设备 pc 机、keil 软件、实验板等。 六、参考程序框图(表格法)六、参考程序框图(表格法) 否 是 表格法产生锯齿波、三角波参考程序框图 正向阶梯波实验程序。 mov dptr,#0bfffh ;dac0832 地址 mov a,#00h loop:movx dptr,a ;启动 d/a 转换

44、 acall delay ;延时 inc a ajmp loop ;连续输出波形 delay:mov r4,#0ffh ;延时子程序 loop1:mov r5,#10h loop2:nop nop nop djnz r5,loop2 djnz r4,loop1 ret 三角波实验程序。 若要获得负向的锯齿波,只需将以上程序中的指令 inc a 换成指令 dec a 即可,如 果将正向锯齿波与负向锯齿波组合起来就可以获得三角波,程序如下: mov dptr,#0bfffh ;dac0832 地址 开始 表格首地址送 dptr 置循环计数初值 查表得到波形数据 修改表指针、修改计数值 一周期数据转

45、 换完毕? 送 d/a 转换 mov a,#00h up: movx dptr,a ;启动 d/a 转换 inc a ;上升沿 cjne a,#0ffh,up down:movx dptr,a ;启动 d/a 转换 dec a ;下降沿 cjne a,#00h,down ajmp up ;连续输出波形 方波实验程序。 方波信号是波形发生器中最常用的一种信号,下面的程序可以从 dac 的输出端得到 方波,改变两次调用延时子程序的延时值,可得到不同占空比的矩形波。改变 hi 和 lo 对 应的数字量可以改变方波信号高、低电平值。程序如下: hi equ 0ffh lo equ 00h mov dp

46、tr,#0bfffh ;dac0832 口地址 sq: mov a,#low ;取低电平数字量 movx dptr,a ;dac 输出低电平 acall delay ;延时 mov a,#high ;取高电平数字量 movx dptr,a ;dac 输出高电平 acall delay ;延时 delay:mov r4,#0ffh ;延时子程序 loop1:mov r5,#10h loop2:djnz r5,loop2 djnz r4,loop1 ret 复习思考题复习思考题 1 若希望输出一个梯形波,应如何修改实验程序? 2 设计一个用查表方式实现的正弦波实验程序。 实验九实验九 ad 转换实

47、验转换实验 一、实验目的一、实验目的 1. 掌握 ad 转换与单片机的接口方法。 2. 了解 ad 芯片 adc0809 转换性能及编程。 3. 通过实验了解单片机如何进行数据采集。 二、实验内容二、实验内容 利用实验板上的 adc0809 做 ad 转换器,实验板上的电位器提供模拟量 输入,编制程序,将模拟量转换成二进制数字量,并用发光二极管显示。 三、实验电路原理图三、实验电路原理图 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 dd cc bb aa title numberrevisionsize a2 date:2010-9-19sheet of file:e:不不

48、不.不不不.schdocdrawn by: in3 1 in4 2 in5 3 in6 4 in7 5 start 6 eoc 7 d3 8 oe 9 clk 10 vcc 11 ref+ 12 gnd 13 d1 14 d2 15 ref- 16 d0 17 d4 18 d5 19 d6 20 d7 21 ale 22 add c 23 add b 24 add a 25 in0 26 in1 27 in2 28 adc0809n ad_u1 vcc top 1 bot 2 tap 3 bot 2 top 1 tap 3 10krpot ad_w1 1k rpot ad_w2 1 2 3 4

49、 5 6 7 8 header 8 ad_p1 adda addb addc clr 2 clk 1 qa 3 qb 4 qc 5 qd 6 gnd 7 gnd vdd 14 vdd sn74ls393n ad_u3a ale ad_clk ad_clk 5 6 4 sn74ls02n ad_u2b 8 9 10 sn74ls02n ad_u2c 2 3 1 sn74ls02n ad_u2a p27 p36 p37 st_ad st_ad rd_ad st_ad rd_ad ad_eoc ad_eocp33 ad不不不不不1 ad不不不不7ff8h7fffh a ad d0 08 80 09

50、9 104 cap ad_c1 12 34 56 header 3x2 add_p1 adda addb addc vcc p00 p01 p02 p03 p04 p05 p06 p07 104 cap ad_c2 104 cap ad_c3 vcc 四、实验说明四、实验说明 1.ad 转换器大致有三类:一是双积分 ad 转换器,优点是精度高,抗干 扰性好,价格便宜,但速度慢;二是逐次逼近 ad 转换器,精度、速度、 价格适中;三是并行 a/d 转换器,速度快,价格也昂贵。 2. 每采集一次一般需 100s, ad 转换结束后会自动产生 eoc 信号。本程 序是用查询方式读入 ad 转换结果。

51、实验系统具有 8 路 a/ d 通道(模拟量输入 端为 in0、in1in7) ,地址分别为 7ff8h 7fffh,eoc=0 表示未转换完, eoc=1 表示转换完毕,可以读入转换好的数据了。实现转换的过程是: 先向某一路通道写入任意数从而启动转换,然后读入 eoc 状态进行判断,若 转换完成,则读入数据即可。a/d 转换部分的参考程序如下: mov dptr,#07ff8h ;选中通道 0(d2d1d0=000) movx dptr,a ;启动转换 mov r3,#20h delay:djnz r3,delay ;等待 eoc 信号变低 setb p3.3 ;读入状态 test: jb

52、p3.3,test ; eoc=0 继续查询,eoc=1,转换完毕 movx a,dptr ;读入数据 3转换得到的二进制数字量通过 p1 口送到发光二极管显示。 五、实验仪器和设备五、实验仪器和设备 pc 机、keil 软件、实验板等。 六、参考程序框图六、参考程序框图 否 是 a/d 转换参考程序框图 复习思考题复习思考题 1 认真复习实验,希望采用查询方式读取a/d结果,应如何修改实验程序? 2 设计一个用中断方式实现读取a/d转换结果并显示的实验程序。 参考程序: #include/包含相应的头文件 #include #include sbit cs=p16;/定义数模转换器硬件对应引

53、脚 sbit clk=p13; sbit do=p14; sbit di=p15; bit adflag; 开始 读入状态信息 启动 a/d 转换 数据输出显示 a/d 转换 完毕? unsigned char code dis=0 xf7,0 xfb,0 xfd; /定义数码管位码 unsigned char code datatab=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/7 段数 码管段码表 data unsigned char display3;/定义临时存放数码管数值 void init_timer1(void) tmod |= 0 x10; th1=0 xff; /* init value */ tl1=0 x00; /pt1=1; /* 优先级 */ ea=1; /* interupt enable */ et1=1; /* enable timer1 interrupt */ tr1=1; unsigned char readadc(unsigned char channel) unsigned char i,j; unsigned char temp=0; channel =3; channel |=3; cs =0; /按

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论