单片机实验报告三

院(系)   计算机学院   专业    计算机科学与技术    班级             

姓名                    学号                        同组人           

实验室     S4306        组号                        日期            

课程      单片机技术    指导教师                    成绩            

实验项目编号  8103201203      实验项目名称     LED指示灯循环控制设计

一、实验目的

    熟悉μVision3编译软件,掌握C51编程与调试方法

二、实验环境(仪器设备、软件)

Win XP、Keil uVision4、Proteus ISIS 7 Professional

三、实验原理(或要求)

LED小灯接P0口,程序启动后小灯依次点亮,从下而上,从上而下,无限循环。小灯闪烁的时间间隔为0.5秒。

四、实验步骤

1、按照教材图A.32,绘制实验三电路原理图;

2、编写实验三的C51程序

3、练习μVision3程序动态调试方法,实现8个LED灯依次点亮功能: P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→P0.5→┅→P0.0无限循环,间隔约50ms;

4、观察仿真结果,完成实验报告。

(1)在Proteus中绘制电路原理图,将元件添加到编辑环境中;

(2)在Keil下调试程序,并进行编译;

(3)连接Proteus 软件和Keil软件,并观察仿真结果。

五、记录与处理(实验数据、误差分析、结果分析)

1.电路原理图如下:

2.使用μVision4软件创建project项目,选择目标CPU(Intel系列的AT89C51)。

3. 添加源程序(右击“Source Group1” →点击“Add file to Group”Source Group1” →添加生成的.c件)

源程序如下:

文本框: void main(){
		unsigned char i;
		unsigned char a = 1;
		delay(50);
		while(1){
			for(i=1; i<=7; i++){
				P2=~a;
				a <<= 1;
				delay(50*2);}
			for(i=1; i<=7; i++){
				P2=~a;
				a >>= 1;
				delay(50*2);
}
}
}

4. 生成可执行文件,添加.hex文件

5. 仿真运行,观察结果

LED小灯接P0口,程序启动后小灯依次点亮,从下而上,从上而下,无限循环。小灯闪烁的时间间隔为0.5秒。8个LED灯依次点亮功能: P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→P0.5→┅→P0.0无限循环。

六、思考题

 总结控制LED小灯循环移位的几种方式

1.移位法

文本框: 	while(1){
		   for(i=1; i<=7; i++){               //8个流水灯下行
	          P2=~a;
			   a <<= 1;
			   delay(50*2);
		   }
		   for(i=1; i<=7; i++){                //8个流水灯上行          
		      P2=~a;
			  a >>= 1;
			  delay(50*2);
		  }
}

2.查表法

文本框: unsigned char led[]= {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};                   //显示字模
while(1){
		for(i=0; i<8; i++){
			P2 = led[i];
			delay(50*2);
		}
		for(i=8; i>0; i--){
			P2 = led[i];
			delay(50*2);
		}
}

3.循环函数法

文本框: #include"intrins.h"  //调用库函数,循环移动功能函数
	while(1){
		for(i=1; i<=8; i++){
			P2=~a;
a=_crol_(a,1);             //temp后面的1,表示左移的位数。如果写2, 表示一次移动两位。
			delay(50*2);
		}
   for(i=1; i<=8; i++){
			P2=~a;
			a=_cror_(a,1);
			delay(50*2);}
}

七、实验小结

通过本次实验,对uVision4编译软件有所了解,学会在uVision4中进行C51程序录入、编译、和调试。理解Proteus与Keil联合的仿真原理,编写Hex文件,并且来控制小灯循环点亮,用3种不同的方法实现这个操作。

 

第二篇:bell单片机实验报告3

大连理工大学实验报告(三)

实验时间:  2014 年  7  1 日   星期  时间 :    13  00   ~     15   00  

实验室(房间号):           420              实验台号码:    18                         

指导教师签字:                               成绩:                                    

实验 三  外部中断/INT0实验     

(1)  实验目的

学习掌握单片机的中断原理。正确理解中断矢量入口,中断调用和中断返回的概念及物理过程。学习编写“软件防抖”程序,了解“软件防抖”原理。

(2)实验要求

要求:对/int0、/int1两个外部中断进行编程,其中:

l  主程序的功能:LDE灯“全亮”、“全灭”交替进行 --------(状态2);

l  Int0中断服务程序功能:2个相邻的LED灯被点亮且循环左移(状态0);

l  Int1中断服务程序功能:1个LED灯被点亮且循环右移 ---(状态1);

【注意】:实验仪上的LED灯物理位置最左侧为d0;最右侧为d7。

(3)算法流程:

(4)实验电路:

 


(5)程序清单:

    ORG 8000H

       LJMP START

       ORG 8003H

       LJMP INT_0

       ORG 8013H

       LJMP INT_1

       ORG 8100H

START: MOV SP,#60H

       SETB EX0

       SETB EX1

       SETB EA

     

       ;SETB PX1    ;将 INT1设定为高优先级

       MOV TCON,#00H

       MOV R3,#00H

       MOV A,R3

LOOP3:    MOV P1,A 

          CPL A

          CPL P3.4

          LCALL DELAY

          AJMP LOOP3

INT_0:       PUSH ACC  ;INT_0中断服务程序

             PUSH PSW

             SETB P3.4

             MOV A,#0FCH;两相邻灯亮

  STATE0:      MOV P1,A  

             LCALL DELAY

             RL A

             JNB P3.2,STATE0 ;INT_0有中断时则循环左移

             LCALL DELAY   

             POP PSW

             POP ACC

             RETI

INT_1:       PUSH ACC

             PUSH PSW

   

            SETB P3.4

            MOV A,#0FEH ;一个灯亮

   

STATE1:       MOV P1,A

            LCALL DELAY

            RR A

            JNB P3.3,STATE1   ;INT_1有中断时则循环右移

            LCALL DELAY

            POP PSW

            POP ACC

            RETI

DELAY:    PUSH 01H

          PUSH 02H

          MOV R1,#00H

DELAY1:   MOV R2,#00H

          DJNZ R2,$

          DJNZ R1,DELAY1

          POP 02H

          POP 01H

          RET

          END

(6)实验结果与分析:

1.INT0、INT1同一优先级运行实验:

保持上电复位时INT0、INT1默认为 “低优先级”的状态,且将SW1、SW2全部事先置于“0”电平(同时申请中断)后,再启动运行程序,按照表1要求填写结果。

表1 :INT0、INT1同一优先级时 运行记录

当两个同级同时响应时,响应int0中断;同级中断来时不会打断

  2.将 INT1设定为高优先级(INT0保持为低优先级)的运行实验:

在程序中使用指令将INT1设定为“高优先级”状态,按照表2内容填写结果。

表2:INT1为高优先级(int0保持为低优先级)时运行状态记录

(7)实验体会:本次实验让我理解了有关中断程序的编写,在编写程序时,首先要思路清晰,写好主程序和从程序。在写主程序的时候,主要是注意中断有效与触发方式,中断服务程序要注意对累加器A的入站保护。

相关推荐