单片机原理及应用课程实验报告专业:班级::学号:实验一、keilC51及proteus软件的使用一、实验目的:1、掌握keil和proteus软件的基本操作2、通过具体实例掌握keil和proteus软件的使用。
二、实验原理: keil使用步骤,proteus使用步骤三、程序:四、实验结果分析:五、总结:学会了使用keil和proteus软件,掌握了利用keil和proteus软件进行仿真的步骤。
实验二、并行输入/输出接口实验一、实验目的:1、进一步熟悉keil仿真软件、proteus仿真软件的使用。
2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。
3、掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。
二、实验原理:MCS 51单片机的串行口在实际使用中通常用于三种情况:利用方式 0 扩展并行 i/0 接口:利用方式 1 实现点对点的双机通信;利用方式 2 或方式 3 实现多机通信。
利用方式 0 扩展并行 i/0 接口 MCS 5 1 单片机的串行口在方式 0 时,若外接一个串入并出的移位寄存器,就可以扩展并行输出口;若外接一个并入串出的移位寄存器,就可以扩展并行输入口。
三、程序:#include<reg51.h>sbit P1_0=P1^0;void main(){unsigned char i;unsigned int j;SCON=0x00;i=0x01;for(;;){P1_0=0;SBUF=I;while(!TI) {i}P1_0=1;TI=0;for(j=0;j<=254;j++){;}i=i*2;if(i==0x00) i=0x01;}}四、实验结果分析:五、总结:进一步熟悉了keil仿真软件、proteus仿真软件的使用。
了解并熟悉单片机I/O口和LED灯的电路结构,学会了构建简单的流水灯电路。
掌握了C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。
实验三、定时器/计数器实验(1)—查询方式产生500us的方波一、实验目的:1、熟悉keil仿真软件、proteus的使用和C51定时程序的编写;2、了解51单片机中定时、计数的概念,熟悉51单片机部定时/计数器的结构与工作原理;3、掌握查询方式处理定时/计数的工作过程,4、掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。
二、实验原理:通常利用定时 / 计数器来产生周期性的波形。
利用定时 / 计数器产生周期性波形的基本思想是:利用定时 / 计数器产生周期性的定时,定时时间到则对输出端进行相应的处理。
例如产生周期性的方波只需定时时间到对输出端取反一次即可。
不同的方式定时的最大值不同,如定时的时间很短,则选择方式 2 。
方式 2 形成周期性的定时不需重置初值;如定时比较长,则选择方式 0 或方式 1 ;如时间很长,则一个定时 / 计数器不够用,这时可用两个定时 / 计数器或一个定时 / 计数器加软件计数的方法。
三、程序:#include <reg51.h>sbit P1_0=P1^0;void main(){TMOD=0x02;TH0=0x06;TL0=0x06;TR0=1;for(;;){if(TF0){TF0=0;P1_0=!P1_0;}}}四、实验结果分析:五、总结:熟悉了keil仿真软件、proteus的使用和C51定时程序的编写;了解51单片机中定时、计数的概念,熟悉了51单片机部定时/计数器的结构与工作原理;掌握了查询方式处理定时/计数的工作过程,掌握了定时/计数器在C51中的设置与程序的书写格式以及使用方法。
实验四、定时器/计数器实验(2)—中断方式产生500us的方波一、实验目的:1、熟悉keil仿真软件、proteus的使用和C51定时程序的编写;2、进一步熟悉51单片机部定时/计数器的结构与工作原理;3、掌握中断方式处理定时/计数的工作过程。
二、实验原理从 P 1.0 输出周期为 500 us 的方波,只需 P 1.0 每 250 us 取反后一次即可。
当系统时钟为 12MHz 时,定时 / 计数器 TO 工作于方式 2 时,最大的定时时间为 256 us ,满足 250us 的定时要求,方式控制字应没定为 000000 1 0B ( 02H )。
系统时钟为12Mhz ,定时 250us,计数值N 为 250 ,初值 X = 256 -250 =6 ,则 THO = TLO =06 H 。
:三、程序:#include <reg51.h>sbit P1_0=P1^0;void main(){TMOD=0x02;TH0=0x06;TL0=0x06;EA=1;ET0=1;TR0=1;while(1);}void time0_int(void) interrupt 1{P1_0=!P1_0;}四、实验结果分析:五、总结:熟悉了keil仿真软件、proteus的使用和C51定时程序的编写;进一步熟悉了51单片机部定时/计数器的结构与工作原理;掌握了中断方式处理定时/计数的工作过程。
实验五:串行接口实验(1)—工作方式0扩展并行IO口一、实验目的:1, 掌握串行口工作方式0的程序设计;2、熟悉51单片机串口的结构和工作原理3、掌握串口工作方式0的工作特点。
二、实验原理:MCS 51单片机的串行口在实际使用中通常用于三种情况:利用方式 0 扩展并行 i/0 接口:利用方式 1 实现点对点的双机通信;利用方式 2 或方式 3 实现多机通信。
利用方式 0 扩展并行 i/0 接口 MCS 5 1 单片机的串行口在方式 0 时,若外接一个串入并出的移位寄存器,就可以扩展并行输出口;若外接一个并入串出的移位寄存器,就可以扩展并行输入口。
三、程序:#include<reg51.h>sbit P1_0=P1^0;void main(){unsigned char i;unsigned int j;SCON=0x00;i=0x01;for(;;){P1_0=0;SBUF=I;while(!TI) {i}P1_0=1;TI=0;for(j=0;j<=254;j++){;}i=i*2;if(i==0x00) i=0x01;}}四、实验结果分析:五、总结:掌握了串行口工作方式0的程序设计;熟悉了51单片机串口的结构和工作原理。
掌握了串口工作方式0的工作特点。
实验六:串行接口实验(2)—双机通信一、实验目的:1、掌握串行口工作方式1的程序设计;2、进一步掌握51单片机串口的结构和工作原理3、掌握串口工作方式1的工作特点。
二、实验原理:甲、乙两机处理过程一样,程序相同。
方式选择方式1 :即 8 位异步通信方式,波特率为 1200bps ,既要发送,也要接收,所以串口控制字为 50H 。
由于选择的是方式 1, 波特率由定时 / 计数器 TI 的溢出率和电源控制寄存器 PCON 中的 SMOD 位决定,则需对定时 / 计数器 Tl 初始化。
设振荡频率为 12MHz ,取 SMOD=0,波特率为1200bps ,定时 / 计数器 T1选择为方式 2 ,则初值如下初值 = 256 一 foscx2SMOD /(12 × 波特率× 32 ) = E6H 根据要求,定时 / 计数器 T1的方式控制字为 20H 。
发送过程采用查询方式,在主程序中读取 PI 口的开关状态,通过串口发送;接收过程采用中断方式,接收的容送 P2 口,通过 P2 口的发光二极管显示。
三、程序:#include <reg51.h>void main(){unsigned char i;SP=0x60;SCON=0X50;TMOD=0x20;TL1=0xe6;TH1=0xe6;TR1=1;EA=1;ES=1;while(1){P1=0XFF;i=P1;SBUF=i;while(TI==0);TI=0;}}void funins(void) interrupt 4{EA=0;RI=0;P2=SBUF;EA=1;}四、实验结果分析:五、总结:掌握了串行口工作方式1的程序设计;进一步掌握了51单片机串口的结构和工作原理,掌握了串口工作方式1的工作特点。
实验七:中断系统实验(1)—交通灯模拟控制一、实验目的1、掌握单片机外部中断的原理及过程。
2、掌握单片机外部中断程序的设计方法。
3、掌握单片机外部中断时中断方式的选择方法。
二、实验原理:交通灯正常运行时,可分为 4 个状态:状态 1 ,东西方向绿灯,南北方向红灯20 秒,状态编码“ 00100001 ” ;状态 2 ,东西方向黄灯,南北方向红灯3 秒,状态编码“ 01000001 ” ;状态 3 ,南北方向绿灯,东西方向红灯 20 秒,状态编码“ 00010010 ” 状态 4 ,南北方向黄灯,东西方向红灯 3 秒,状态编码“ 0001m00 ” 。
东西发生异常时,东西通行,南北禁止,东西方向绿灯闪,南北方向红灯闪 60 秒;南北发生异常时,南北通行,东西禁止,南北方向绿灯闪,东西方向红灯闪 60 秒。
主程序中实现交通灯正常运行过程,两种异常用外中断 0 和外中断 1 管理,外接开关模拟异常发生,在中断服务程序中实现异常处理,在主程序中开放外中断 0 和外中断 1 ,设置为边沿触发方式。
时间单位采用 500ms 信号,由定时计数器 0 定时 50ms ,循环 10 次产生,定时计数器 0 采用查询方式,主程序中设定定时计数器 0 的工作方式:方式 1 。
三、程序:#include <reg51.h>void delay500ms(unsigned char k); void main(void){SP=0x60;TMOD=0x01;IE=0x85;TCON=0x05;while(1){P1=0x21;delay500ms(40);P1=0x41;delay500ms(6);P1=0x12;delay500ms(40);P1=0x14;delay500ms(6);}}void int_0(void) interrupt 0{unsigned char i1,i2;i1=P1;for(i2=0;i2<60;i2++){P1=0x21;delay500ms(1);P1=0x00;delay500ms(1);}P1=i1;}void int_1(void) interrupt 2{unsigned char j1,j2;j1=P1;for(j2=0;j2<60;j2++){P1=0x12;delay500ms(1);P1=0x00;delay500ms(1);}P1=j1;}void delay500ms(unsigned char m){unsigned char k1,k2;TH0=0x3C;TL0=0xB0;TR0=1;for(k1=0;k1<m;k1++){for(k2=0;k2<10;k2++){while(!TF0);TF0=0;TH0=0x3C;TL0=0xB0;}}}四、实验结果分析:五、总结:掌握了单片机外部中断的原理及过程。