51实验v2

  • 格式:doc
  • 大小:656.00 KB
  • 文档页数:19

MCS-51单片机实验指导书编者:朱飞鹏赵勇2009.11.25目录目录.实验一IO口的输出应用 (1)一实验目的 (1)二实验内容 (1)三实验器材 (1)四实验步骤 (1)五附注 (1)六附注例程 (1).实验二IO口的输入应用 (3)一实验目的 (3)二实验内容 (3)三实验器材 (3)四实验步骤 (3)五附注 (3)六实验附注例程 (3).实验三定时器中断实验(PERIODIC INTERRUPT TIMER) (5)一实验目的 (5)二实验内容 (5)三实验器材 (5)四实验步骤 (5)五附注实验例程: (5).实验四外部中断的应用 (9)一实验目的 (9)二实验内容 (9)三实验器材 (9)三实验步骤 (9)四附注 (9)五实验附注例程 (9).实验五单片机串口的应用 (12)一实验目的 (12)二实验内容 (12)三实验器材 (12)四实验步骤 (12)五附注 (12)六附注例程 (12).实验一IO口的输出应用一实验目的通过此次实验学习普通IO口作为输出口的应用。

二实验内容我们通过普通IO口驱动一个LED灯闪烁。

(采用灌电流方式)三实验器材STC89C52RC单片机、LED灯或实验箱。

四实验步骤1在Keil开发环境下建立一个工程。

2程序的编写。

3程序下载调试(可先进行仿真)。

五附注采用灌电流的方式原因:因为单片机输出的电流比较小,当然可以驱动发光二极管,但是在很多时候,例如:我们驱动数码管的时候,会因为输出电流比较小,所以发光二极管不够亮,所以当我们采用灌电流的方式的时候可以避免这一点。

为了防止电流过大烧坏二极管,一般应接200Ω左右的限流电阻。

六附注例程#include <reg51.h>#define unint unsigned int#define unchar unsigned charsbit Led = P1^0; //位定义void delay(unint k) //延时函数{unint i;for(k;k>0;k--)for(i=0;i<121;i++);}void main(){while(1) //死循环{Led = 0; //灌电流方式,低电平点亮delay(1000);Led = 1;delay(1000);}}汇编源代码:LED EQU P1.0 ;宏定义ORG 0000H ;起始地址JMP MAINORG 0100H ;主程序起始地址MAIN: CLR LED ;点亮二极管LCALL DELAY ;延时SETB LED ;息灭二极管LCALL DELAYSJMP MAIN ;相当于C语言中的死循环DELAY: MOV R6,#200 ;延时函数DEL1: MOV R7,#221NOPDEL2: DJNZ R7,DEL2DJNZ R6,DEL1RETEND附实验仿真图:.实验二IO口的输入应用一实验目的通过此次实验学习普通IO口作为输入口的应用,并结合输入输出方式熟练掌握IO口的应用二实验内容采用按键控制一个LED灯的亮灭。

三实验器材STC89C52RC 单片机、LED灯,独立按键或实验箱。

四实验步骤1在Keil开发环境下建立一个工程。

2程序的编写,采用查询方式判断键是否按下,并确定是否点亮二极管。

3程序下载调试(可先进行仿真)。

五附注按键控制LED灯的亮灭,我们可以采用外部中断的方式(实验四会讲),独立按键的接法希望大家注意,直接接地,在没有按键的情况下IO口为高电平(注:因为本实验中按键接P1口,内部集成上拉电阻。

若使用P0口作为通用IO口使用时必须外接500Ω左右的上拉电阻。

见实验四附图2),当有按键按下时IO口为低电平。

六实验附注例程#include <reg51.h>#define unint unsigned int#define unchar unsigned charsbit Led = P1^0;sbit Key = P1^1; //位定义void main(){while(1) //死循环{if(!Key) //判断是否按下按键,按下为0Led = 0; //点亮灯elseLed = 1;}}汇编代码:LED EQU P1.0KEY EQU P1.1ORG 0000JMP MAINORG 0100MAIN: JB KEY,LIGHT ;判断键是否按下CLR LEDSJMP MAINLIGHT: SETB LEDSJMP MAINEND附实验仿真电路:注:若使用实验箱,开关接P1.1即可。

.实验三定时器中断实验(Periodic Interrupt Timer)一实验目的掌握定时器相关寄存器的配置,以及定时时间的计算等二实验内容定期器中断及查询方式控制P1.0口输出方波,用实验箱上的示波器观察波形,不同定时值对其影响。

三实验器材STC89C51RC或实验箱。

四实验步骤1在Keil开发环境下建立一个工程。

2程序的编写,a.定时常数的确定定时器/计数器的输入脉冲周期与机器周期一样,为振荡频率的1/12。

本实验中时钟频率为6.0 MHZ,现要采用中断方法来实现0.5秒延时,要在定时器1中设置一个时间常数,使其每隔0.1秒产生一次中断,CPU响应中断后将R0中计数值减一,令R0=05H,即可实现0.5秒延时。

时间常数可按下述方法确定:机器周期=12÷晶振频率=12/(6×106)=2us设计数初值为X,则(2e+16-X)×2×106=0.1,可求得X=15535化为十六进制则X=3CAFH,故初始值为TH1=3CH,TL1=AFHb.初始化程序包括定时器初始化和中断系统初始化,主要是对IE、TCON、TMOD的相应位进行正确的设置,并将时间常数送入定时器中。

由于只有定时器中断,IP便不必设置。

c.设计中断服务程序和主程序中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。

3 程序下载调试4 附注:定时器常用方式1和方式2(在实验五单片机串口的应用中用到),方式2 为自动重装计数初值的8位定时器,主要用于串行通信中波特率的产生和短时精确定时(因为不必软件重装初值所以更精确)。

五附注实验例程:#include <reg52.h>#define unchar unsigned char#define unint unsigned intsbit fangbo = P1^0;void main(){TMOD = 0x01; //定时器0工作方式1TH0 = 0x3c;TL0 = 0xb0; //装入定时器初值定时50msET0 = 1; //定时器0中断允许EA = 1; //总中断允许TR0 = 1; //定时器0开始计时while(1); //等待}void time0() interrupt 1 //定时器0中断服务函数{TH0 = 0x3c;TL0 = 0xb0; //重装计数器值fangbo=~fangbo; //P1.0取反,产生方波}对应汇编代码:FANGBO EQU P1.0ORG 0000HLJMP MAINORG 000BHLJMP TIMEORG 0010HMAIN: MOV TMOD,#01HMOV TH0,#03CHMOV TL0,#0B0HSETB ET0SETB EASETB TR0SJMP $ ;等待TIME: MOV TH0,#03CHMOV TL0,#0B0HCPL FANGBORETIEND查询方式C代码:#include <reg52.h>#define unchar unsigned char#define unint unsigned intsbit fangbo = P1^0;void main(){TMOD = 0x01; //定时器0工作方式1TH0 = 0x3c;TL0 = 0xb0; //装入定时器初值定时50msET0 = 1; //定时器0中断允许EA =0; //总中断允许TR0 = 1; //定时器0开始计时while(1) //死循环{while(!TF0); //查询中断标志并等待TF0 = 0; //清除标志TH0 = 0x3c;TL0 = 0xb0; //重装初值fangbo=~fangbo; //P1.0取反,产生方波}}对应汇编代码:FANGBO EQU P1.0ORG 0000HLJMP MAINORG 0010HMAIN: MOV TMOD,#01HMOV TH0,#03CHMOV TL0,#0B0HSETB ET0SETB TR0TIME: JNB TF0,$MOV TH0,#03CHMOV TL0,#0B0HCLR TF0CPL FANGBOSJMP TIMEEND附实验仿真电路:注:实验箱中有模拟示波器,可通过电脑观察波形。

.实验四外部中断的应用一实验目的通过此次实验学习51单片机外部中断的使用,并结合输入输出方式熟练掌握外部中断的应用二实验内容采用按键以中断方式控制一个LED灯的亮灭。

三实验器材STC89C52RC 单片机、LED灯,独立按键或实验箱。

三实验步骤1在Keil开发环境下建立一个工程。

2程序的编写,采用中断方式判断键是否按下,并确定是否点亮二极管。

3程序下载调试(可先进行仿真)。

四附注中断方式可以提高CPU的效率,当发生中断事件时处理器可快速响应中断,没有中断事件时处理器正常工作,不必时刻查询中断事件的发生与否,提高代码效率。

本例中,若采用电平触发方式,则Key为低电平时Led亮,否则Led息灭;若采用边沿触发方式,则Key的每个下降沿,即Key由高变为低时,Led的状态改变一次。

五实验附注例程#include <reg52.h>#define unchar unsigned char#define unint unsigned intsbit Led = P1^0;sbit Key = P3^2; //外部中断0引角void main(){IT0 = 0; //外部中断0采用电平触发方式;边沿触发为1下降沿有效EA = 1; //中断允许EX0 = 1; //开外部中断0while(1);}void int0() interrupt 0{Led = 0; //Led 亮while(Key == 0); //等待键释放Led = 1; // Led 灭}/*void int0() interrupt 0 //边沿触发方式中断函数。

每次Key下降沿改变Led状态{Led = ~Led; //改变Led状态}*/对应汇编代码:KEY EQU P3.2LED EQU P1.0ORG 0000HLJMP MAINORG 0003HLJMP INITORG 0010MAIN: CLR IT0 ;电平触发方式,边沿触发为SETB IT0 SETB EASETB EX0SJMP $INIT: CLR LEDJNB KEY,$SETB LEDRETI;INIT: CPL LED ;边沿触发方式中断程序END附实验仿真电路:附图1附图2 P0口上拉电阻.实验五单片机串口的应用一实验目的通过此次实验学习单片机串口的应用,掌握串口相关寄存器的配置,并学会用串口做简单的双机通信。