单片机实验教案_第1页
单片机实验教案_第2页
单片机实验教案_第3页
单片机实验教案_第4页
单片机实验教案_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一 Keil C51的使用一、 实验目的1、使用C51创建工程项目文件,为工程项目选择目标器件,为工程项目设置软硬件环境。2、创建源程序文件并输入源程序代码,保存创建源程序项目文件,并对所编写的程序进行调试、运行。二、 实验内容 ORG 0000HAJMP MAINORG 0030HMAIN: MOV R4,#08MOV A,#0FEHMOV DPTR,#1000HROUNDLED:MOVX DPTR,ARL AINC DPTRMOV R5,#50LCALL DELAYDJNZ R4,ROUNDLEDLJMP MAINDELAY:MOV R6,#50TT2:MOV R7,#100DJNZ

2、R7,$DJNZ R6,TT2DJNZ R5,DELAYRETEND三、 实验步骤及图像截屏结果 1、在“我的文档”里面新建一个文件夹,命名为:LEI。2、进入Keil C51系统的操作环境。3、建立一个新的工程。单击菜单命令:ProjectNew Project,如图1-1:图1-1 选中新工程然后选择要保存的路径,输入工程文件的名字:lei,如图1-2图1-2 给新工程取名点击“保存”按钮,会弹出一对话框,选择单片机型号为Atmel的89C51,如图1-3 :图1-3 选择单片机型号此时工程文件已经建立。4、单击菜单命令:FileNew,将实验程序编入后保存,单击菜单命令:FileSave

3、 as,注意一定要加扩展名.asm,然后单击“保存”,如图1-4:图1-4编辑程序并保存5、回到编辑界面后,单击工程窗口中“Target1”,点击“+”号展开,右键单击“Source group1”选择Add File to Group source Group1 如图1-5:图1-5选中添加文件界面此时弹出窗口,注意选择文件类型Sam 源文件,如图所示,点击Add,如图1-6:图1-6选中要添加的文件名5、对文件进行编译、链接。依次点击按钮、,在编译时如发现程序有错误则会有错误报告出现,双击该行,可以定位出错位置,反复修改无错后出现0error(s),0warring(s) 如图1-7:图1

4、-7编译链接时错误显示窗口6、使用按钮进行程序调试,在工程窗口可以看到运行程序后各寄存器或内存单元的结果,点击按钮可对各个单元情况进行观察,还可在窗口中双击某行对其进行设置断点操作,再次双击则取消断点。如图1-8: 图1-8查看各寄存器或内存单元情况若要观察I/O口的变化则可用命令PeripheralsI/O-Ports,如图1-9: 图1-9查看I/O口变化情况实验中还可采用全速进行按钮代替三个单步运行按钮,这样可以节省很多时间。四、实验结果五、思考题:修改程序如何把每次循环中A的值分别放到片外RAM的地址1000H实验二 Proteus的使用一、 实验目的掌握Proteus仿真软件的使用方

5、法和技巧。二、 实验仪器与设备1. 微机一台2. Proteus仿真软件三、 实验内容1.用数码管设计一数码管显示电路。利用P1和P2口分别控制两个共阳极数码管,可循环显示099,每个数字显示时间自行设计。2编写程序在其中一个数码管上画“8”字形,即按照a-f-g-c-d-e-g-b依次点亮各线段然后全部熄灭,重复以上操作。另外一个数码管做单管流水,即按a-f-g-c-d-e-g-b-a依次单管循环点亮。四、 实验原理LED数码显示器内部有7个条形放光二极管和一个小圆点发光二极管组成,每个发光二极管称为一个字段,其控制原理和发光二极管的控制原理相同。五、 实验步骤1. 参考教材设计一双数码管控

6、制显示电路,熟悉Proteus的使用方法。2. 编程循环显示0f.3. 编程在数码管画“8”。六、 实验结果程序见附表1、实验电路图七、思考作答用12MHz晶振,如何P1口做画“8”字依次点亮数码管?数码管每隔大约500ms画一笔,重复此过程。#include <REG51.H>void Delay_ms(int);char code tab8=0xfe,0xdf,0xbf,0xfb,0xf7,0xef,0xfd,0xff;void main()int m=0,n=0;while(1)P1=tabm;Delay_ms(500); /500msm+;n+;if(m=8)m=0;voi

7、d Delay_ms(t)int i;for(;t>0;t-)for(i=0;i<124;i+);2、附:实验程序#include <REGX52.H>Unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x01;unsigned char dispcount=0;void delay02s(void)unsigned char i,j,k;for(i=20;i>0;i-)for(j=20;j>0;j-

8、)for(k=248;k>0;k-);void main(void)while(1)if(tabledispcount!=0x01)P0=tabledispcount;delay02s();dispcount+;else dispcount=0;实验三数据存储实验一、实验目的:掌握C语言和汇编语言的调试方法,熟悉键盘操作和数据存储器的扩展。重点:常用汇编符号指令格式或C语言的基本语句和编译方法,数据存储器的扩展。二、实验要求: 参看上述电路图对单片机进行数据存储器扩展,并在PROTEUS中画出原理图,分别对片内外的一段地址(1000H10FFH)的内容写数据,并在 KEIL中调试,编译生

9、成HEX文件,在PROTEUS中仿真。(原理参看教材8.1存储器的扩展,并在实验前预习)三、实验步骤: 1、 在PROTEUS中画出原理图。 2、 根据原理图确定片外数据存储器的地址。 3、 根据要求画出程序流程图。 4、 用C语言编写程序并在并在 KEIL中调试,编译生成HEX文件。 5、 在PROTEUS中仿真查看实验结果。 6、修改完成思考 7、完成实验报告四、画出实验程序流程图:开始R0=0000送2000HDPTR+1 R0+1R0=FF?结束五、写出程序清单和注释: 36文件名:SW01.ASMORG 0000HLJMP SE01ORG 0640HSE01:MOV R0,

10、#00HMOV DPTR,#2000HMOV R1,#30H LOO1:CLR AMOVX DPTR,AINC DPTRMOV A,#66HINC R0MOVX DPTR,AMOV A,#55HMOVX R1,AINC DPTRINC R1CJNE R0,#00H,LOO1LOOP:SJMP LOOPENDC程序#include <absacc.h>unsigned int xdata *p;unsigned char idata *p1;void main(void) unsigned int i; p=0x12000; for(i=0;i<=0XFF;i+) /XBYTE

11、i=0x55; *p=0x66;p=p+1; p1=0x30; for(i=0;i<=0XFF;i+) / DBYTEi=0x11; *p1=0x55;p1=p1+1; while(1) ;六、思考:假使把地址中的内容改成FFH,如何修改程序?*p=0xFF;七、实验结果及说明:实验四拆字程序和拼字程序一、实验目的:掌握C语言的调试方法,熟悉键盘操作和数据存储器的扩展。重点:常用汇编符号指令格式或C语言的基本语句和编译方法,数据存储器的扩展。二、实验内容:拆字:把8000H的内容拆开,高位送8001H低位,低位送8002H低位,8001H、8002H高位清零,一般本程序用于把数据送显示缓

12、冲区时用。拼字:把8000H.8001H的低位分别送入8002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成一字节。三、画出实验程序流程图: 四、实验步骤:拆字:用连续或单步方式运行程序,检查8000H8002H中内容变化情况。拼字:单步或用断点方式运行程序,检查2002H内容变化情况。五、写出程序清单和注释: 拆字文件名:SW02.ASM ORG 0000HLJMP SE02ORG 0660HSE02:MOV DPTR,#8000HMOVX A,DPTRMOV B,ASWAP AANL A,#0FHINC DPTRMOVX DPTR,AINC DPTRMOV A,BANL A

13、,#0FHMOVX DPTR,ALOOP:SJMP LOOPEND1、拆字(c)unsigned char xdata *p;unsigned char i,j,k;void main(void)p=0x8000; j=*p&0x0f;k=*p&0xf0;for(i=0;i<=3;i+) k=k>>1; p+;*p=j;p+;*p=k;while(1);拼字文件名:SW03.ASMORG 0000HLJMP START ORG 0680HSTART:MOV DPTR,#8000HMOVX A,DPTRANL A,#0FHSWAP AMOV B,AINC DPT

14、RMOVX A,DPTRANL A,#0FHORL A,BINC DPTRMOVX DPTR,AEND拼字 (c)unsigned char xdata *p;unsigned char i,j,k;void main(void) p=0x8000; j=*p&0x0f;for(i=0;i<=3;i+) j=j<<1; p+;k=*p&0x0f;p+;*p=k+j;while(1);六、思考:如何用断点方式调试拆字程序?用菜单中的小手设置,采用断点运行就可以了七、实验结果及说明:执行拆字程序以后的结果执行拼字程序以后的结果实验五数据排序实验一、实验目的:熟悉5

15、1指令系统,掌握程序设计方法。重点:汇编符号指令格式或C语言和编译方法,程序设计流程二、实验内容:编写并调试一个排序子程序,其功能为用冒泡法将内存RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。三、画出实验程序流程图:四、实验步骤 :将RAM 片内某一段地址中放入不等的数据,用断点方法运行本实验程序后检查50H5AH中的内容是否按从小到大的次序排列。五、写出程序清单和注释: 文件名:SW05.ASM ORG 0000HLJMP QUEORG 09B0HQUE:MOV R3,#50HQUE1:MOV A,R3MOV R0,AMOV R7,#0AHCLR 00HMOV A,R

16、0QL2:INC R0MOV R2,ACLR CMOV 22H,R0CJNE A,22H,QL3SETB CQL3:MOV A,R2JC QL1SETB 00HXCH A,R0DEC R0XCH A,R0INC R0QL1:MOV A,R0DJNZ R7,QL2JB 00H,QUE1LOOP:SJMP LOOPEND排序(c)unsigned char idata *p; unsigned char i,j,k,;void main(void) for(k=0;k<=0x0f;k+) p=0x50; for(i=k+1;i<=0x0f;i+) p+; if(*(p-1)<*p

17、) j=*p;*p=*(p-1);*(p-1)=j; while(1);六、思考:修改程序把50H5AH中内容从大到小排列。只需把JC QL1改成JNC QL1就可以完成大到小排列七、实验结果及说明:实验六数据查找实验一、实验目的:熟悉51指令系统或者C语句,掌握程序设计方法。重点:汇编符号指令格式或C语言和编译方法,程序设计流程二、实验内容:编写并调试一个排序子程序,其功能对某一段地址中的数查找出某一常数,并记录常数的个数。三、画出实验程序流程图:四、实验步骤 : 1、新建工程;2、新建*.c文件;3、加载*.c文件到工程,4、编辑、编译及连接;5、调试查看结果。五、实验程序 :#inclu

18、de <reg51.h>unsigned char i,j;unsigned char *p;void main (void) p=0x50; for (i=0;i<=0x0f;i+) if (*p=0x35)j+;p+; while (1);六、思考:修改程序把从片内外各找一段地址找出某一常数,并记录为该常数的地址。#include <reg51.h>unsigned char i,j,k,m,n;unsigned char shuzud,shuzux;unsigned char data *p;unsigned char xdata *q;void main

19、(void) p=0x50; q=0x1000; for (i=0;i<=0x0f;i+) if (*p=0x35)j+;shuzudm=p;m+;p+; if (*q=0x35) k+; shuzudn=q;n+; q+; while (1);七、 实验结果及说明: 实验七P1口亮灯实验一、实验目的:(l)学习P1口的使用方法;(2)学习延时子程序的编写;(3)定时器定时程序的编写 。二、实验顶备知识: (l)Pl口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。(2)本实验中延时子程序采用指令循环来实现,机器周期(12/

20、6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。(3)通过定时器中断怎么实现延时1秒钟。三、实验内容:P1口输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。(比如交通灯或者广告灯)。四、画出实验程序流程图:五、实验原理图六、实验步骤:1、根据原理图在PROTEUS中画出仿真原理图。2、根据要求画出程序流程图。3、在KEIL51环境中编写程序并调试生成HEX文件。4、把HEX文件装载在单片机中并仿真。七、写出程序清单和注释: 1、软件延时实现#include <REG52.H>unsigned char code table=0xf

21、e,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xff,0x00,0xff,0x01;/定义广告灯的变化样式unsigned char i;/*定义延时子程序*/void delay(void)unsigned char m,n,s;for(m=20;m>0;m-)for(n=20;n>0;n-)for(s=

22、248;s>0;s-);void main(void)while(1)if(tablei!=0x01)P1=tablei;i+;delay();else i=0;2、定时器定时 #include <REG52.H>unsigned char code table=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe

23、,0x00,0xff,0x00,0xff,0x01;/定义广告灯的变化样式unsigned char i;void timer0isr(void) interrupt 1 using 1TH0 = 0x3C;TL0 = 0xB0; /重置计数初值icount+; /溢出次数加1if(icount = 20)icount = 0; if(tablei!=0x01)P1=tablei;i+;else i=0; /累计够1秒时溢出次数加清0并控制灯闪烁 P1=tablei; void main(void)icount = 0; /记录溢出次数TMOD = 0x01; /设定T/C0工作在定时器方式1

24、LIGHT_ON = 1;TH0 = 0x3C;TL0 = 0xB0; /装载计数初值EA = 1; /开总中断ET0 = 1; /开T/C0中断TR0 = 1; /启动T/C0while(1);八、思考:1、改变延时常数,使发光二极管闪亮时间改变。修改程序,使8个发光二极管以一种新方式闪亮。2、通过定时器中断怎么控制发光二极管闪亮的时间?实验八数码管显示实验一、实验目的1. 学习数码管的工作原理和共阴、共阳的链接方法。2. 学习静态和动态数码管的工作原理及应用程序的设计。二、实验设备:STC89C52单片机实验板、串口下载线、USB连接线、电脑三、实验要求数码管是最常用的显示设备。本例要求用

25、定时器实现定时1秒钟,并能够实现时钟功能,在6段数码管上动态显示时、分、秒。通过外部中断控制时间的调整。主要用中断实现。具体的原理图如下图所示:实现的原理:用定时器定时1秒钟,根据时钟的规律,实现时分秒的计算,通过外部中断控制时间的调整,并在动态数码管上显示时分秒。 四、实验步骤1. 根据实验原理和要求画出实验原理图。2. 画出流程图。3.根据流程图编写实验程序,并完成调试。五、实验流程图六、实验程序#include <reg52.h>unsigned char xianshi=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;un

26、signed char duanxuan=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;sbit k1=P15;sbit k2=P16;sbit k3=P17;void delay (void) int i,j; for (i=0;i<10;i+) for (j=0;j<50;j+);void main (void) int k,e,d; int s=0,m=0,t=0; int sg,ss,mg,ms,tg,ts; while (1) for (s=0;s<60;s+)if (k1=0) s+;if (k2=0) m+;if (k3=0) t+;sg=s%10

27、; ss=s/10; mg=m%10; ms=m/10; tg=t%10; ts=t/10;for (d=0;d<35;d+)for (k=0;k<6;k+) P2=0xff; P2=duanxuank;switch (k) case 0: e=ts; break; case 1:e=tg; break; case 2: e=ms; break; case 3: e=mg; break; case 4: e=ss; break; case 5: e=sg; break; default: break; P0=xianshie; delay (); m+; if (m>=60)

28、 m=0;t+; if (t>=24) t=0; 八、 实验结果实验九外部中断实验一、 实验目的(1) 掌握中断程序的编程方法。 (2) 了解蜂鸣器的控制方法。 二、 实验原理本实验主要为了使读者理解中断原理和掌握中断的编程方法。 关于中断原理可参考第3章的有关内容。 本实验通过外部中断1所接的轻触开关打开或关断蜂鸣器, 循环点亮跑马灯。三、 实验内容(1) 接通J18(控制蜂鸣器跳线)和J17(控制8位跑马灯跳线)。 (2)在Keil编译环境下, 根据流程图(图7-6)编写程序, 生成*.HEX文件。 (3) 在ISP环境下将生成的*.HEX文件下载到AT89S52中。 (4)离线运行

29、, 观察运行结果。 四、 实验流程图五、 参考程序#include<reg52.h> sbit Beep=P34; /蜂鸣器 unsigned char time; main() P3=0xff; EX1=1; /外部中断1允许位 IT1=1; /下降沿触发 EA=1; /开总中断 Beep = 0x00; while(1) ; void inttrer() interrupt 2 unsigned int i, j; Beep=Beep; /蜂鸣器取反 time=0x01; for(i=0; i<8; i+) /digitled 控制跑马灯轮流亮 P0 = time; ti

30、me = time<<1; for(j=5000; j>0; j-); 六、 实验仪器和设备Keil软件、 AT89S52实验平台、 Atmel ISP在线编程软件。七、 思考与分析(1) 描述中断处理过程。 (2) 将程序改写成查询方式, 要求能达到同样的程序效果, 并说明中断和查询的区别。实验十定时器实验实 验 目 的: 熟悉keil仿真软件、伟福仿真器的使用和C51定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。实 验 原

31、 理:定时分类及原理1. 软件定时:即让机器执行一个程序段,这段程序本身没有具体的执行目的,只是为了磨时间。执行这段程序所需要的时间就是延时时间。这种程序前面已设计过。这种方法定时占用CPU执行时间,降低了CPU利用率。此次实验使用的是MCS-51系列单片机。2. 数字电路硬件定时:采用小规模集成电路器件如555,外接定时部件(电阻和电容)构成。这样的定时电路简单,但要改变定时范围,必须改变电阻和电容,这种定时电路在硬件连接好以后,修改不方便。3. 可编程定时/计数器:是为方便微型计算机系统的设计和应用而研制的,它是硬件定时,又很容易地通过软件来确定和改变它的定时值,通过初始化编程,能够满足各

32、种不同的定时和计数要求,因而在嵌入式系统的设计和应用中得到广泛的应用。8051型单片机有两个十六位定时/计数器T0、T1,有四种工作方式,跟定时/计数器相关的特殊功能寄存器有这样几个:方式控制寄存器TMODD7D6D5D4D3D2D1D0GATEC/T M1 M0GATEC/TM1M0M1、M0的状态决定定时器的工作方式,定时和外部事件计数方式选择位C/T,GATE与TR0、TR1配合决定定时/计数器的启停。加法计数寄存器TH0、TH1 (高八位)TL0、TL1(低八位);定时/计数到标志TF0、TF1(中断控制寄存器TCON);定时/计数器启停控制位TR0、TR1(TCON);定时/计数器中

33、断允许位ET0、ET1(中断允许寄存IE);定时/计数器中断优先级控制位PT0、PT1(中断优IP)。定时/计数器的工作方式MCS51的定时器有方式0、方式1、方式2和方式2这3种工作方式。1.方式0当M1M0=00时,定时器工作于方式0。 方式 0为13位的计数器,由TL0的低5位和TH0的8位组成,TL0低5位计数溢出时向TH0进位,TH0计数溢出时置位溢出标志TF0。若T0工作于定时方式,设计数初值为a,晶振频率为12MHz,则T0从初值开始计数到溢出的定时时间为 t(213a)×1S。2. 方式1当M1M0=01时,定时器工作于方式1。T1工作于方式1时,由TH1作为高8位,

34、TL1作为低8位,构成一个十六位的计数器。若T1工作于定时方式1,计数初值为 a,晶振频率为12MHz,则T1从计数初值计数到溢出的定时时间为t =(216a)S。3. 方式2M1M0=10时,定时器计数器工作于方式2,方式2为自动恢复初值的 8位计数器。TL1作为8位计数器,TH1作为计数初值寄存器。 t =(28a)S。 单片机内部的定时计数模块,在定时时,对工作频率的12分频进行计数,先记入TL后记入TH,直到溢出为止,根据TL、TH内的初值不同可以定出不同的时间;在计数工作方式时,对T0(T1)引脚的输入脉冲进行计数,将计数值记入TL、TH。当定时/计数溢出时,会引起中断。设置合适的计

35、数初值,以产生期望的定时间隔。由于定时/计数器在方式0、方式1和方式2时的最大计数间隔取决于使用的晶振频率fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。 计数初值与定时时间的关系为:T = 12×(T_all a)/fosc定时间隔为T,计数初值为a。所以有计数初值a =T×fosc/12,THx = a / 256,TLx = a % 256。定时器均有一个最大定时时间,对于长时间的定时需要,可以将定时间隔为固定的较小时间,通过另设一全局变量ah1用于计数,累加固定的较小定时时间来进行。确定定时/计数器工作于查询方式还是中断方式,若

36、工作于中断方式,则在初始化时开放定时/计数器的中断及总中断: ET0 = 1; EA = 1;还需要编写中断服务函数: void T0_srv(void) interrupt 1 using 1 TL0 = a % 256; TH0 = a / 256; 中断服务程序段 4启动定时器:TR0(TR1)= 1。实 验 设 备 与 器 件硬件:微机、WAVE单片机仿真器、单片机实验板、跳帽若干软件:KEIL C51单片机仿真调试软件,伟福V系列仿真调试软件实 验 内 容: 利用实验板上的一位LED数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1S。刚开始LED数码管显示

37、0,每过1S数码管的显示值增加1,当显示到59时返回0,依此反复。实验的程序代码如下:#include<reg51.h>void mDelay (unsigned int Delay)unsigned int b;for(;Delay>0;Delay-)for(b=0;b<124;b+);int i,j,k,a;i=-1;j=0;k=0;unsigned char code tab10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void main()TMOD=0x01;a=-0.1*6*1000000/12;TH

38、0=a/256;TL0=a%256;EA=1;ET0=1;TR0=1;while(1);void t0( )interrupt 1 TH0=a/256;TL0=a%256;k+;if(k=10)k=0;i+;if(i=10)i=0;j+;if(j=6)i=0;j=0;P2=0xfe;P0=tabi;mDelay(6000);P2=(P2<<1)|0x01;P0=tabj;mDelay(14000);实 验 结 果 及 分 析:本题实验的记数结果如下:实验分析如下:本实验是通过定时器来达成在LED数码管从00秒到59秒的显示过程的。首先,利用定时器先实现定时100ms,在累计记数到1

39、0次后就得到了1秒的效果,接着在LED数码管上相应的显示01,当到09时把十位记上1,以此类推得到在LED数码管上从00显示到59,最后,再置00。这样就达到了实验效果。 实 验 心 得:通过本次LED数码管进行51定时器实验,让我知道了对教材应该熟悉,因为教材是基础的,只有把基础的搞好了才能够进行其它层次的学习。其次此次试验我还懂得了有时候可以通过软件的仿真来验证书上的一些理论行的东西。通过C语言的编程,对LED灯的控制及51定时器的应用让我对单片机理解更加明了。附 录: 延时函数:void mDelay(unsigned int Delay) unsigned int i;for(;Del

40、ay>0;Delay-) for(i=0;i<124;i+);实验十一串口通讯实验一、 实验目的(1) 掌握RS232串行通信的基本原理。(2) 掌握RS232串口的程序设计方法。(3) 了解PC端的串口调试工具。 二、 实验原理关于单片机串口工作原理请读者参考第2章的有关内容。 实验箱上的串口资源原理图请参考附录B或第6章的有关内容。 三、 实验内容在单片机上实现与PC机的通信。 (1) 通过PC机的串口调试工具发送数据, 发送的数据在LED上显示, 同时应答PC机的“OK”信息。 根据程序要求在Keil编译环境下编写程序, 生成*.HEX文件。 (2) 通过ISP软件将程序下载

41、到单片机中, 运行程序。 (3)通过串口调试工具发送“55”, 观察实验箱上的显示结果和串口调试工具的应答信息。程序流程图如图下图所示。 四、 参考程序/功能: 通过串口工具发送2位数据, 将其转换成十进制数后, 在LED上显示, 并发回应答信号/#include<reg52.h>#define uchar unsigned char#define unit unsigned intuchar dispbuf=0, 0, 0, 0; uchar sendbuf=0, 0; uchar rec_data=0, 0; unit j, h;uchar cgf210=0xc0, 0xf9,

42、 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90;/共阳极LED对应的段码为09 void delay(unsigned int i) while(i-); void Dispbuf(unsigned int temper) /转换程序 dispbuf3=temper/1000; dispbuf2=(temper%1000)/100; dispbuf1=(temper%100)/10; dispbuf0=temper%10; void scomre(unsigned char B0, unsigned char B1)/应答回信号 unsigned

43、 char k; k=0; sendbuf0=B0; sendbuf1=B1; while(k<2) SBUF=sendbufk; while(TI=0); TI=0; k+; delay(200); main() uchar i, rec_data, npos=0x01, flag=0; TMOD=0x20; /定时器1初始化, 方式2 TL1=0xf4; TH1=0xf4; /波特率为2400 b/s, 晶振为11.0592 MHz SCON=0x50; /串口初始化, 方式1 TR1=1; RI=0; while(1) if(RI) /是否有收到信号 rec_data=SBUF;

44、RI=0; /清接收标志 flag=1; /置接收标志 for(i=0; i<4; i+)/4位动态显示 Dispbuf(rec_data); P1=npos; npos=1; P0=cgf2dispbufi; delay(500); npos=0x01; if(flag=1) /接收标志置位, 发应答信号 scomre(O, K); /应答信号 flag=0; 五、 实验仪器和设备Keil软件、 AT89S52实验平台、 Atmel ISP在线编程软件。六、 思考与分析(1) 说明RS232通信的特点。 (2) 修改串口数据接收方式为中断方式。 (3) 修改程序, 使波特率为9600

45、b/s, 并分析波特率与单片机时钟之间的关系。实验十二A/D转换实验一、实验目的:掌握A/D转换的原理及使用。重点:A/D转换的原理及使用二、实验内容: 实现由输入电压04.99V到数字量0255的模数转换,并在数码管上显示。以下是A/D0808的管脚图和说明三、画出实验程序流程图:中断服务程序流程图 主程序流程图四、实验步骤 1、根据要求画出原理图 2、画出程序流程图 3、在KEIL51中写程序并提调试 4、在PROTEUS中仿真四、写出程序清单和注释: #include <reg52.h>#include <absacc.h>#define unit unsigne

46、d int#define uchar unsigned char#define AD XBYTE 0x7FF8sbit led1=P20;/定义数码管位控制线sbit led2=P21;sbit led3=P22;sbit led4=P23;sbit ad_busy=P32;/P3.2用于检测EOC信号,判断是否转换结束bit bk=1;unsigned char ad_data, LED1, LED2, LED3;uchar code led_segment12=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x00; /段码void delay(unsigned int i)while( i )i-;void display(void) /显示设置LED1=ad_data%10;/求个位上的数字LED2=(ad_data/10)%10;/求十位上的数字 LED3=ad_data/100;/求百位上的数字P2=0xff;delay(2);P1=led_segmentLED1; /向数码管个位上段码led1=0;delay(100);led1=1;if(LED3=0)&&(LED2=0) /如果十位和百位上的数字都为0,则

温馨提示

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

评论

0/150

提交评论