《单片机实验指导书(自制设备)》由会员分享,可在线阅读,更多相关《单片机实验指导书(自制设备)(32页珍藏版)》请在金锄头文库上搜索。
1、单片机原理与应用技术单片机原理与应用技术实验指导书实验指导书吉林化工学院信控分院测控教研室吉林化工学院信控分院测控教研室目目 录录实验一 流水灯程序设计.4 实验二 LED 数码管动态描显示实验.7 实验三 外部中断实验.9 实验四 定时/计数器实验.12 实验五 行列式键盘实验.15 实验六 D/A 转换实验.17 实验七 A/D 转换实验.19 实验八 AT24C02 存储器与 I2C 总线实验.21 实验九 串行口通信实验.25 实验十 DS1302 时钟与 SPI 总线实验.28 实验十一 步进电机驱动实验.31 实验十 直流电机驱动实验 .33实验一 流水灯程序设计一实验目的 1了解
2、 keil 软件程序设计与调试方法; 2掌握 I/O 接口电平输出控制方法; 3掌握延时函数程序的设计原理和调试方法。 二实验要求 编写一个延时函数程序,控制接在 P1 口的八个发光二极管逐次点亮(即每次中断点亮一个) ,形成“流水灯”效果。 三实验电路连线 AT89C51 单片机的 P1.0P1.7 口接 LED 显示模块的 D0D7。 四实验说明 方法 1:采用延时函数的流水灯程序。 在单片机中每条语句的执行都是要消耗系统时间的,所以简单的延时程序只需要执行一些 语句就可以实现,但这些语句不应该影响到单片机工作状态(例如 IO 口状态) 。 因此延时程序通常都是由一些空循环语句来实现,例如
3、空操作的 for 语句或者 while 语句实 现,为了能够方便的改变延时时间,通常我们可以为延时函数设置一个传递参数,以便在不同 情况下调用产生不同的延时时间。实验参考程序如下: #include #define BYTE unsigned char BYTE IntTimes = 0; BYTE t = 0x01; void Led_Loop() P1 = t;t=t #define BYTE unsigned char BYTE IntTimes = 0; BYTE t = 0x01; void T0_INT() interrupt 1 IntTimes+; if(IntTimes =
4、10) IntTimes = 0; P1 = t; t=t #define Segment_IO P0 #define Bit_IO P2 unsigned char seg_code11= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f; /段码表/* 0 1 2 3 4 5 6 7 8 9 . */ unsigned char bit_code6= 0xdf,0xef,0xf7,0xfb,0xfd,0xfe; /位选码,从右到左 unsigned char buffer6; /显示数据段码缓存 unsigned char bit
5、_sel;/位选变量 void delay(void) /延时 unsigned char t0;for(t0=30000;t00;t0-); void LedDisplay(float NUM) buffer0=NUM%10;buffer1=NUM%100/10;buffer2=NUM%1000/100;buffer3=NUM%10000/1000;buffer4=NUM%100000/10000;buffer5=NUM/100000;Bit_IO=0xdf;Segment_IO=seg_codebufferbit_sel;Bit_IO=bit_codebit_sel;bit_sel+;if
6、(bit_sel5)bit_sel=0;delay(); void main(void) bit_sel=0; while(1) LedDisplay(123456); 实验三 外部中断实验一实验目的 1了解 MCS-51 系列单片机中断系统结构; 2掌握 MCS-51 系列单片机中断地址与中断向量号; 3掌握 MCS-51 系列单片机外部中断 INT0、INT1 程序设计方法。 二实验要求 用单次脉冲申请外部中断 INT0 或者 INT1,在中断处理程序中使 P1.0 的输出状态发生反转, 并通过发光二极管观察 P1.0 的电平。 三实验电路连线 单片机 P1.0 口接 LED 显示模块的
7、D0,INT0(P3.2)或者 INT1(P3.3)口接按键模块的 K0。 四实验原理 AT89C51 单片机有 5 个中断源,有两个中断优先级,高优先级的中断源可以中断低优先级 的服务程序,反之不行。当两个同样级别的中断申请同时到来时,则按一个固定的查寻次序来 处理中断响应。AT89C51 单片机的 5 个中断源及其优先级次序如表 1 所示。表 1 AT89C51 单片机的中断源中断源入口地 址优先级顺序说 明外部中断 00003H最高来自 P3.2 引脚(INT0)的外部中断请 求 定时/计数器 0000BH定时/计数器 T0 溢出中断请求外部中断 10013H来自 P3.3 引脚(INT
8、1)的外部中断请 求 定时/计数器 T1001BH定时/计数器 T1 溢出中断请求串行口0023H最低串行口完成一帧数据的发送或接收中 断AT89C51 单片机没有专门的开中断和关中断指令,中断的开放和关闭是由特殊功能寄存器 IE 来实现两级控制的。所谓两级控制是指在寄存器 IE 中有一个总允许位 EA,当 EA=0 时,就 关闭了所有的中断申请,CPU 不响应任何中断申请。而当 EA=1 时,对各中断源的申请是否开 放,还要看各中断源的中断允许位的状态。 中断允许寄存器 IE 的地址为 A8H,其中各位都可以位寻址,位地址为 A8HAFH。总允许 位 EA 和各中断源允许位在 IE 寄存器中
9、的分布如下:D7 D6 D5 D4 D3 D2 D1 D0 EA-ESET1EX1ET0EX0其中各控制位的含义如下: EA:中断总允许位。EA=0 时,CPU 关闭所有的中断申请,只有 EA=1 时,才能允许各个中 断源的中断申请,但还要取决于各中断源中断允许控制位的状态。 ES:串行口中断允许位。ES=1,串行口开中断,ES=0,串行口关中断。 ET1:定时/计数器 T1 的溢出中断允许位。ET1=1 允许 T1 溢出中断,ET1=0 则不允许 T1 溢出中断。 EX1:外部中断 1(INT1)的中断允许位。ET1=1 允许外部中断 1 申请中断,EX1=0 则不 允许中断。ET0:定时/
10、计数器 T0 的溢出中断允许位。ET0=1 允许中断,ET0=0 不允许中断。 EX0:外部中断 0(INT0)的中断允许位。EX0=1 允许中断,EX0=0 不允许中断。 AT89C51 单片机在复位时,IE 各位的状态都为“0” ,所以 CPU 是处于关中断的状态 。对 于串行口来说,其中断请求在被响应之后,CPU 不能自动清除中断标志,在这些情况下要注意 用指令来实现中断的开放或关闭,以便进行各种中断处理。 AT89C51 单片机的中断优先级控制比较简单,每个中断源的优先级别由特殊功能寄存器 IP 来管理。 IP 寄存器的地址为 B8H,格式如下: D7 D6 D5 D4 D3 D2 D
11、1 D0 -PSPT1PX1PT0PX0其中各位的含义如下: PS:串行口中断优先级控制位。 PT1:定时器/计数器 T1 中断优级控制位。 PX1:外部中断 INT1 中断优先级控制位。 PT0:定时器/计数器 T0 中断优先级控制位。 PX0:外部中断 INT0 中断优先级控制位。 IP 寄存器中若某一个控制位置“1” ,则相应的中断源就规定为高优先级中断,反之,若某 一个控制位置“0” ,则相应的中断源就规定为低优先级中断。IP 寄存器的地址为 B8H,其中各 控制位也是可以位寻址的,位地址为 B8H-BCH。 外部中断触发方式通过特殊功能寄存器 TCON(地址为 88H)控制,TCON 中各控制位分 布如下: D7 D6 D5 D4 D3 D2 D1 D0 TF1-TF0-IE1IT1IE0IT0其中各控制位的含义如下: IT0:选择外中断 INT0 的中断触发方式。IT0=0 为电平触发方式,低电平有效。IT0=1 为负 边沿触发方式,INT0 脚上的负跳变有效。IT0 的状态可以用指令来置“1