2024单片机实验教案

2024-06-27

2024单片机实验教案(精选6篇)

篇1:2024单片机实验教案

实验一

数据传送

一、实验目的

1、熟悉单片机指令系统,掌握单片机循环程序设计方法

2、掌握单片机数据排序方法.二.实验内容:

预先向单片机内部RAM 50H 开始填入一批数据,以00H结尾.编这批数据按从小到大的顺序进行排序.三、实验步骤:

a.先向单片机内部RAM50H开始填入一批数据,以00H结尾

b.编程求出这批数据的长度,存入R7中,编程将这批数据按从小到大顺序

四、参考程序:

ORG 0030H

MOV R0,#50H

MOV R7,#00H

CLR 00H

LOOP2:CJNE @R0,#00H ,TB

LJMP MAIN

TB: INC R7

INC R0

LJMP LOOP2

MAIN:MOV R0,#50H

DJNZ R7,LOOP3

LJMP A0

LOOP3: MOV B, R7

MOV A,@R0 LOOP:INC R0

MOV R2,A

SUBB A,@R0

MOV A,R2

JC NEXT

SETB 00H

XCH A,@R0

DEC R0

XCH A,@R0

INC R0 NEXT:MOV A,@R0

DJNZ B,LOOP

JB 00H,MAIN

A0 :SJMP $

END 实验二 循环结构程序设计

一、实验目的

1、熟悉单片机指令系统,掌握单片机循环程序设计方法

2、掌握单片机数据排序方法.二.实验内容:

预先向单片机内部RAM 50H 开始填入一批数据,以00H结尾.编这批数据按从小到大的顺序进行排序.三、实验步骤:

a.先向单片机内部RAM50H开始填入一批数据,以00H结尾

b.编程求出这批数据的长度,存入R7中,编程将这批数据按从小到大顺序

四、参考程序: ORG 1000H MOV R0,#50H MOV R7,#00H LOOP: MOV A,@R0

INC R0 CJNE A, #00H,LOOP1 SJMP LOOP2 LOOP1:INC R7 SJMP LOOP LOOP2:MOV R0, #50H CLR 00H;(00H)=00H为标志位

MOV A,R7 MOV R6,A LOOP3:MOV A,@R0 INC R0 MOV 30H,@R0 CJNE A,30H,LOOP4 LOOP4:JC LOOP5

XCH A,@R0 DEC R0 XCH A,@R0 INC R0 SETB 00H INC R0 LOOP5:DJNZ R6,LOOP3 JB 00H,LOOP2 SJMP $ END

实验三 信号灯控制

一、实验目的

(1)学习P1口的使用方法;

(2)学习延时子程序的编写。

(3)掌握proteus仿真软件的基本使用。

二、实验内容

做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。

三、程序流程图:

四、参考程序 ORG 0 START: MOV R2,#8 MOV A,#0FEH SETB C LOOP: MOV P1,A LCALL DELAY RLC A DJNZ R2,LOOP MOV R2,#8 LOOP1: MOV P1,A LCALL DELAY RRC A DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#20;D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END

实验四 脉冲计数实验

一、实验目的:

1)掌握定时计数器的使用。2)学习延迟程序的编写和使用。

3)熟悉proteus仿真软件的使用方法。

二、实验内容:

1)开始时,显示“00”,第一次按下SP1后就开始计时。2)第二次按下SP1后,计时停止。3)

第三次按下SP1时,计时归零。

三、主程序流程图

四、中断服务程序流程图如下:

五、参考程序如下: TCNTA EQU 30H TCNTB EQU 31H SEC EQU 32H KEYCNT EQU 33H SP1 BIT P3.5 ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV KEYCNT,#00H MOV SEC,#00H MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A MOV TMOD,#02H SETB ET0 SETB EA WT: JB SP1,WT LCALL DELY10MS JB SP1,WT INC KEYCNT MOV A,KEYCNT CJNE A,#01H,KN1 SETB TR0 MOV TH0,#06H MOV TL0,#06H MOV TCNTA,#00H MOV TCNTB,#00H LJMP DKN KN1: CJNE A,#02H,KN2 CLR TR0 LJMP DKN KN2: CJNE A,#03H,DKN MOV SEC,#00H MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A MOV KEYCNT,#00H DKN: JNB SP1,$ LJMP WT DELY10MS: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET INT_T0: INC TCNTA MOV A,TCNTA CJNE A,#100,NEXT MOV TCNTA,#00H INC TCNTB MOV A,TCNTB CJNE A,#4,NEXT MOV TCNTB,#00H INC SEC MOV A,SEC CJNE A,#100,DONE MOV SEC,#00H DONE: MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A NEXT: RETI TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END

实验五 8255控制交通灯

一、实验目的

进一步了解8255芯片的结构及编程方法,学习模拟交通控制的实现方法。

二、实验内容

用8255做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。

四、参考程序如下: ;交通灯

ORG 0030H

JOD0:MOV SP,#60H

MOV DPTR,#0FFDBH

MOV A,#88H

;8255初始化

MOVX @DPTR,A

MOV DPTR,#0FFD8H

MOV A,#0B6H

MOVX @DPTR,A

INC DPTR

MOV A,#0DH

MOVX @DPTR,A;点亮4个红灯

MOV R2,#25H;延时

LCALL DELY

JOD3:MOV DPTR,#0FFD8H

MOV A,#75H

MOVX @DPTR,A

INC DPTR

MOV A,#0DH

MOVX @DPTR,A

;东西绿灯亮,南北红灯亮

MOV R2,#55H

LCALL DELY

;延时

MOV R7,#05H

;闪烁次数

JOD1:MOV DPTR,#0FFD8H

MOV A,#0F3H

MOVX @DPTR,A

INC DPTR

MOV A,#0CH

MOVX @DPTR,A

;东西黄灯亮,南北红灯亮

MOV R2,#20H

LCALL DELY

;延时

MOV DPTR,#0FFD8H

MOV A,#0F7H

MOVX @DPTR,A

INC DPTR

MOV A,#0DH

MOVX @DPTR,A

;南北红灯亮

MOV R2,#20H

LCALL DELY

;延时

DJNZ R7,JOD1

;闪烁次数未到继续

MOV DPTR,#0FFD8H

MOV A,#0AEH

MOVX @DPTR,A

INC DPTR

MOV A,#0BH

MOVX @DPTR,A;东西红灯亮,南北绿灯亮

MOV R2,#55H

LCALL DELY

;延时

MOV R7,#05H

;闪烁次数

JOD2:MOV DPTR,#0FFD8H

MOV A,#9EH

MOVX @DPTR,A

INC DPTR

MOV A,#07H

MOVX @DPTR,A

;东西红灯亮,南北黄灯亮

MOV R2,#20H

LCALL DELY

;延时

MOV DPTR,#0FFD8H

MOV A,#0BEH

MOVX @DPTR,A

INC DPTR

MOV A,#0FH

MOVX @DPTR,A

;东西红灯亮

MOV R2,#20H

LCALL DELY

;延时

DJNZ R7,JOD2

;闪烁次数未到继续

LJMP JOD3

ORG 0213H

DELY:PUSH 02H

DEL2:PUSH 02H

DEL3:PUSH 02H

DEL4:DJNZ R2,DEL4

POP 02H

DJNZ R2,DEL3

POP 02H

DJNZ R2,DEL2

POP 02H

DJNZ R2,DELY

RET

END

实验六 A/D转换

一、实验目的

1.掌握A/D转换与单片机的接口方法 2.了解A/D芯片0809性能及编程方法 3.通过实验了解单片机如何进行数据采集

二、实验内容

1.利用proteus软件仿真,实现A/D转换实验。

2.实验要求通过电位器提供模拟量的输入,编写程序,将模拟量转换成数字量,通过数码管显示出来。

三、参考程序如下: LED_0 EQU 30H

;存放三个数码管的段码 LED_1 EQU 31H LED_2 EQU 32H

ADC EQU 35H;存放转换后的数据 ST BIT P3.2 OE BIT P3.0 EOC BIT P3.1 ORG 00H

START: MOV LED_0,#00H MOV LED_1,#00H MOV LED_2,#00H MOV DPTR,#TABLE;送段码表首地址

SETB P3.4 SETB P3.5 CLR P3.6

;选择ADC0808的通道3

WAIT: CLR ST SETB ST CLR ST

;启动转换

JNB EOC,$

;等待转换结束

SETB OE

;允许输出

MOV ADC,P1

;暂存转换结果

CLR OE

;关闭输出

;MOV A,ADC

;将AD转换结果转换成BCD码

;MOV B,#100;DIV AB;MOV LED_2,A;MOV A,B;MOV B,#10;DIV AB;MOV LED_1,A;MOV LED_0,B lcall

intov LCALL DISP

;显示AD转换结果

SJMP WAIT

intov:;mov a,led_1;m;ov b,#10;mul ab

;add a,led_0;mov r1,a;mov a,led_2;mov b,#100;mul ab;add a,r1 mov dptr,#tab mov a,adc

movc a,@a+dptr mov b,#2 div ab mov r1,b mov b,#10 div ab mov led_2,a mov led_1,b cjne r1,#01,kk1

mov led_0,#05 back:

ret kk1:

mov led_0,#00

ajmp back

DISP: mov

dptr,#table

MOV A,LED_0

MOVC A,@A+DPTR

CLR P2.3 MOV P0,A LCALL DELAY SETB P2.3

mov

dptr,#table MOV A,LED_1 MOVC A,@A+DPTR CLR P2.2 MOV P0,A LCALL DELAY SETB P2.2

mov

dptr,#table MOV A,LED_2 MOVC A,@A+DPTR setb

acc.7 CLR P2.1

;数码显示子程序 MOV P0,A LCALL DELAY SETB P2.1 RET DELAY: MOV R6,#10

;延时5毫秒 D1: MOV R7,#250 DJNZ R7,$ DJNZ R6,D1

RET

TABLE: DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH

tab:db 0, 0 ,0 , 1, 0, 2, 0, db 4, 0, 0, 5, 0, 6, 0, 0, 7, 0 db 8, 0, 0, 9, 0, 0, 10, 0, 11, 0 db 0, 12, 0, 13, 0, 0, 14, 0, 15, 0 db 0, 16, 0, 17, 0, 0, 18, 0, 19, 0 db 0, 20, 0, 0, 21, 0, 22, 0, 0, 23 db 0, 24, 0, 0, 25, 0, 26, 0, 0, 27 db 0, 28, 0, 0, 29, 0, 0, 30, 0, 31 db 0, 0, 32, 0, 33, 0, 0, 34, 0, 35 db 0, 0, 36, 0, 37, 0, 0, 38, 0, 39 db 0, 0, 40, 0, 0, 41, 0, 42, 0, 0 db 43, 0, 44, 0, 0, 45, 0, 46, 0, 0 db 47, 0, 48, 0, 0, 49, 0, 50, 0, 0 db 51, 0, 0, 52, 0, 53, 0, 0, 54, 0 db 55, 0, 0, 56, 0, 57, 0, 0, 58, 0 db 59, 0, 0, 60, 0, 0, 61, 0, 62, 0 db 0, 63, 0, 64, 0, 0, 65, 0, 66, 0 db 0, 67, 0, 68, 0, 0, 69, 0, 70, 0 db 0, 71, 0, 0, 72, 0, 73, 0, 0, 74 db 0, 75, 0, 0, 76, 0, 77, 0, 0, 78 db 0, 79, 0, 0, 80, 0, 0, 81, 0, 82 db 0, 0, 83, 0, 84, 0, 0, 85, 0, 86 db 0, 0, 87, 0, 88, 0, 0, 89, 0, 90 db 0, 0, 91, 0, 0, 92, 0, 93, 0, 0 db 94, 0, 95, 0, 0, 96, 0, 97, 0, 0 db 98, 0, 99, 0, 0, 100, 0, 0, 0

END

0, 3, 0

篇2:2024单片机实验教案

Keil C51 u Vision2 是德国Keil公司开发的基于Windows环境的8051软件开发平台,它集项目管理、源程序编辑、程序调试于一体,是一个强大的集成开发环境。

u Vision2 支持Keil的各种8051工具,包括:C编译器,宏汇编译器、连接/定位器及Object-hex转换程序,可以帮助用户快速有效的实现嵌入式系统的设计与调试。

1.1 硬件安装

1、连接51CPU板,在实验箱右下角有三个插座:J1、J2、J3,用来连接51CPU板,在51CPU板上有一个小拨码开关:J18,是单片机的EA脚,是用来选择读片内还是片外ROM的,拨向左边为读片内ROM;拨向右边为读片外ROM。

2、KEIL仿真器与实验箱的连接:将KEIL仿真器40芯的排线连到51CPU板的40芯插座上,仿真器的USB连接线连到微机的USB口。

3、八段数码管右上角的两个拨码小开关是用来设置工作模式的,将两个拨码小开关同时拨向右边是选择51单片机工作模式,此时应拨向右边。

1.2 新建一个项目文件

首先点击 Keil uVision2,进入uVision2界面。点击工具栏Project选项中的New Project,准备开始建立自己的项目。

输入工程文件名称,并选择保存工程文件的目录。

为项目文件选择一个目标器件(如ATMEL89C51),如图所示。

用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择“为目标‘目标1’设置选项”如下图所示。

在“为目标‘目标1’设置选项”中,点击“调试”菜单,在此菜单中可选择是使用硬件仿真,还是软件仿真,连接实验箱做实验时选择硬件仿真,点击硬件仿真选项后面的[设置]选项,在此对对话框中选择串口和波特率,串口根据所连电脑来决定。波特率为38400。

软件仿真 硬件仿真 选择串口 选择波特率

点击“文件/新建”创建源程序文件并输入程序代码。

在文本框中输入原程序,如下图所示

点击“文件/保存“对程序进行保存

用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择添加文件到原代码组,如下图所示

在弹出的添加文件框中,选择需要添加到项目中的文件

点击编译连接的图标,对项目文件进行编译

点击“调试/启动/停止调试”进入调试界面

在调试界面中可以对程序进行单步或者全速运行的调试

连机/停止 全速运行

单步

若要查看内存中的数据,点击“视图/存储器窗口”

在此地址框中,输入不同的指令查看内部数据

如果需要查看一些内部数据,在菜单栏点击[视图/存储窗口]。

C:0X地址 显示程序存储区数据 X:0X地址 显示数据存储区中数据 D:0X地址 显示CPU内部存储区中数据

注意:仿真器使用者使用时应注意:

Keil C仿真器用户程序在全速运行时,如果需暂停运行,请按实验仪键盘“RST”,此时仿真器存储器数据清零。如果您要再次运行您所编写的程序,就必须重新装载运行。

1.3 实验指导使用说明

点击“帮助/使用手册”打开“HK系列实验指导”

选择“软件实验”右边的下三角可选择实验类别或者芯片查询

点击实验目的、实验电路、实验连线、实验程序可查看关于实验的具体介绍

在芯片查询中,可查看常用芯片的管脚定义

实验二 程序设计实验

C51中进行绝对地址访问:

(1)在头文件中加入

#include (2)可以使用 CBYTE XBYTE PWORD DBYTE CWORE

XWORD PBYTE DWORD 指向内存空间的绝对地址。(具体看课本Page 71~72)

(3)使用指针进行绝对地址访问(具体看课本Page68~71,课后用指针对下面实验程序进行修改)

例如:

#define ADDR

XBYTE[0x8000]

定义ADDR为 片外RAM地址0x8000的内容

Segment = CBYTE[0x0002]

将程序存储器的0002H地址的内容赋值给Segment

Segment = XBYTE[0x0002]

将向片外RAM的0002H地址的内容赋值给Segment

XBYTE[0x0002]=57

将57赋值给片外RAM0002H绝对地址

实验1:将片外8000H中的内容拆开,高位送8001H地址低位,低位送8002H的地址低位,8001H和8002H地址单元的高位清零。#include #include

#define a0 XBYTE[0x8000] #define a1 XBYTE[0x8001] #define a2 XBYTE[0x8002]

void main(){ a0 = 0xab;a1 = a0 & 0x0f;a2 = a0 >> 4;}

实验2:使用绝对地址进行char型数组赋值,数组的首地址为片外8000H #include #include #define uint unsigned int uint i;#define uchar unsigned char void main(){

for(i=0;i<10;i++){

XBYTE[0x8000+i]=i;} }

请对上述实验进行修改:使用绝对地址进行int型数组赋值,数组的首地址为片外8000H

实验3:将内部RAM中的50H-5AH中的无符号数,按照从小到大的次序重新排列

#include #include

#define uint unsigned int #define uchar unsigned char uint i,j;uchar temp;void main(){ for(i=0;i<=10;i++)//赋初值

{

DBYTE[0x50+i]=10-i;} for(i=0;i<=10;i++){

for(j=i+1;j<10;j++)

{

if(DBYTE[0x50+i]>DBYTE[0x50+j])

{

temp=DBYTE[0x50+i];

DBYTE[0x50+i]=DBYTE[0x50+j];

DBYTE[0x50+j]=temp;

}

} } } 实验三

单片机I/O接口实验

1.看懂电路图

2.用开关分别控制,左边4盏灯同时亮,右边的4盏熄灭,开关导向另一边,左边4盏熄灭,右边4盏点亮。#include sbit P3_0 = P3^0;

//查阅sbit和bit 的区别 #define uint unsigned int #define uchar unsigned char void main(){ While(1){ if(P3_0 == 0)

{

P0 = 0x0f;} else P0=0xf0;} }

3.下面按照实验书本的要求做实验,并调试程序延时时间。

实验四

八段数码管滚动显示程序设计

1.了解扩展电路的基本结构。

2. 清楚8155各个寄存器的物理地址是怎么得到的。

3.弄清楚8155、74LS164、UA2003三块芯片的各个引脚的基本功能。

4.74LS164的串行输入的程序代码的编写

/* “验证式"?实验十一

八段数码管显示

*/ #include #define LEDLen 6 #define mode 0x03;#define CAddr XBYTE[0xe100]/* 控制字地址 */ #define OUTBIT XBYTE[0xe101]/* 位控制口 */ #define CLK164 XBYTE[0xe102]/* 段控制口(接164时钟位)*/ #define DAT164 XBYTE[0xe102] /* 段控制口(接164数据位)*/ #define IN

XBYTE[0xe103] /* 键盘读入口 */

unsigned char LEDBuf[LEDLen];/* 显示缓冲 */ code unsigned char LEDMAP[] = { /* 八段管显示码 */

0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 };

void Delay(unsigned char CNT){

unsigned char i;

while(CNT--!=0)

for(i=100;i!=0;i--);}

void DisplayLED(){

unsigned char i, j;

unsigned char Pos;

unsigned char LED;

Pos = 0x20;/* 从左边开始显示 */

for(i = 0;i < LEDLen;i++)

{

OUTBIT = 0;

/* 关所有八段管 */

LED = LEDBuf[i];

for(j = 0;j < 8;j++)

{

/*送164*/

if(LED & 0x80)DAT164 = 1;

else DAT164 = 0;

CLK164 = CLK164|0x02;

CLK164 = CLK164&0xfd;

LED <<= 1;

}

OUTBIT = Pos;/* 显示一位八段管 */

Delay(1);

Pos >>= 1;

/* 显示下一位 */

}

OUTBIT = 0;

/* 关所有八段管 */ }

void main(){

unsigned char i = 0;

unsigned char j;

CAddr = mode;

while(1){

LEDBuf[0] = LEDMAP[ i

& 0x0f];

LEDBuf[1] = LEDMAP[(i+1)& 0x0f];

LEDBuf[2] = LEDMAP[(i+2)& 0x0f];

LEDBuf[3] = LEDMAP[(i+3)& 0x0f];

LEDBuf[4] = LEDMAP[(i+4)& 0x0f];

LEDBuf[5] = LEDMAP[(i+5)& 0x0f];

i++;

for(j=0;j<30;j++)

DisplayLED();

/* 延时 */

} }

集成开发环境详细设置解说

在第二章中,我们已经简介了单片机软件Keil C51的开发过程。即: 1.建立一个工程项目,选择芯片,确定选项。2.建立汇编源文件或C源文件。3.用项目管理器生成各种应用文件。4.检查并修改源文件中的错误。5.编译连接通过后进行软件模拟仿真。6.编译连接通过后进行硬件模拟仿真。7.编程操作。8.应用。

这里我们介绍工程的较详细设置及常用调试方法。20.1

工程项目的建立、源程序文件的建立及加载

Keil C51软件UVision打开后,程序窗口的左边有一个项目工作区管理窗口,该窗口有3个标签,分别是Files、Regs和Books,这3个标签页分别显示当前项目的文件结构、CPU的寄存器及部分特殊功能寄存器的值(调试时才出现)和所选CPU的附加说明文件,如果是第一次启动Keil C51,那么这3个标签页全是空的(图20-1)。

图20-1

Keil C51打开后界面

20.1.1

建立工程文件

在单片机项目开发中,有时有多个的源程序文件,并且还要为项目选择CPU以确定编译、汇编、连接的参数,指定调试的方式等。为便于管理,Keil C51使用工程项目(Project)的方法,将这些参数设置和所需的所有文件都放在一个工程项目中,只能对工程项目而不能对单一的源程序进行编译(汇编)和连接等操作。

先在硬盘上建立一个需保存工程文件的目录(例如在“我的文档” 中建立一个test的文件夹),为便于管理及使用,目录名称可与工程名称一致。选择“工程>新工程”菜单(图20-2)。弹出对话框,要求给将要建立的工程起一个名字,可以在编辑框中输入一个名字(例如test),扩展名不必输入(默认的扩展名为.uv2)。点击“保存”按钮(图20-3)。随后弹出一个“为目标target选择设备”(Select Device for Target “Target1”)对话框,这个对话框要求选择目标CPU(即你所用单片机芯片的型号),Keil C51支持的CPU很多,我们选择Atmel公司的AT89C51(或AT89S51)芯片,用鼠标单击Atmel前的“+”号,选择“AT89C51(或AT89S51)”单片机后按确定(图20-4)。随即系统弹出是否拷贝8051启动代码到工程项目并添加到当前项目组的提示(Copy Standard 8051 Startup Code to Project Folder and Add File to Project ?),我们选否。此时,在工程窗口的文件页中,出现了“Target 1”,前面有“+”号,点击“+”号展开,可以看到下一层的“Source Group1”。

图20-2

选择“工程>新工程”菜单界面

图20-3

建立新工程界面

图20-4

选择单片机型号界面

20.1.2

源程序文件的建立

使用菜单“文件>新建”或者点击工具栏的新建文件按钮(图20-5),即在右侧打开一个新的文本编辑窗口,在该窗口中可以输入汇编语言源程序或C语言源程序(图20-6)。程序输入完成后,选择“文件”,在下拉菜单中选中“另存为”,将该文件以扩展名为.asm格式(汇编语言源程序)或.c格式(C语言源程序)保存在刚才所建立的一个文件夹中(test),这里假设源程序文件名为test.asm(图20-7)。

图20-5

新建源程序文件界面

图20-6

打开新的文本编辑窗口

图20-7

“另存为” 对话框

源程序文件也可以使用任意的文本编辑器编写。20.1.3

添加文件到当前项目组中

这时的工程项目还是一个空的工程,里面什么文件也没有,把刚才编写好的源程序test.asm加载进工程。单击工程管理器中“Target 1”前的“+”号,出现“Source Group1”后再单击,加亮后右击。在出现的下拉窗口中选择“Add Files to Group‘Source Group1’”(图20-8)。注意,该对话框下面的“文件类型”默认为C source file(*.c),也就是以C为扩展名的文件,如我们的文件是以asm为扩展名的,那么在列表框中找不到test.asm,要将文件类型改掉。点击对话框中“文件类型”后的下拉列表,找到并选中“Asm Source File(*.a51,*.asm)”,这样在列表框中就可以找到test.asm文件了(图20-9)。我们可以在增加文件窗口中选择刚才以asm格式(或c格式)编辑的文件,鼠标单击“ADD”按钮,这时源程序文件便加入到Source Group1这个组里了,随后关闭此对话窗口。点击 “ Source Group1”前的“+”号,可以看到test.asm文件已在其中(图20-10)。双击后,即可打开该源程序。

图20-8

Add Files to Group‘Source Group1’界面

图20-9

Add Files to Group‘Source Group1’对话框

图20-10

test.asm文件

20.2

工程项目的详细设置 工程建立好以后,还要对工程进行进一步的设置,以满足要求。

首先点击左边窗口的Target1,然后使用菜单“项目>目标‘target1’选项 ”即出现对工程设置的对话框,共有8个页面,默认为对象页面(图20-11)。绝大部分设置项通常可以采用默认值。

图20-11

对象页面

20.2.1

对象页面

时钟(MHz)后面的数值是晶振频率值,默认值是所选目标CPU的最高可用频率值,对于AT89C51而言是24MHz,而AT89S51是33MHz。该数值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间。正确设置该数值可使显示时间与实际所用时间一致,一般将其设置成与你实际所用的晶振频率相同。

储存器模式用于设置RAM使用情况,有3个选择项,Small:是所有变量都在单片机的内部RAM中。Compact:变量存储在外部RAM里,使用8位间接寻址。Large:变量存储在外部RAM里,使用16位间接寻址,可以使用全部外部的扩展RAM。

1.Small:一般使用Small来存储变量,此时单片机优先将变量存储在内部RAM里,如果内部RAM空间不够,才会存到外部RAM中。

2.Compact:Compact的方式要通过程序来指定页的高位地址,编程较复杂,如果外部RAM很少,只有256字节,那么对该256字节的读取就比较快。如果超过256字节,而且需要不断地进行切换,就较麻烦,Compact模式适用于比较少的外部RAM的情况。

3.Large:Large模式是指变量会优先分配到外部RAM里。需要注意的是,3种存储方式都支持内部256字节和外部64KB的RAM。因为变量存储在内部RAM里,运算速度比存储在外部RAM要快得多,大部分的应用都是选择Small模式。

代码ROM大小用于设置ROM空间的使用,也有3个选择项,Small、Compact及Large。1.Small:只用低于2K的程序空间,适用于AT89C2051这些芯片,2051只有2K的代码空间,所以跳转地址只有2KB,编译的时候会使用ACALL AJMP这些短跳转指令,而不会使用LCALL LJMP指令。如果代码地址跳转超过2K,那么会出错。

2.Compact:单个函数的代码量不能超过2K,整个程序可以使用64K程序空间。3.Large:可用全部64K空间,表示程序或子函数代码都可以大到64KB,使用code bank还可以更大。通常都选用该方式。选择Large方式速度不会比Small慢很多,所以一般没有必要选择Compact和Small方式。

操作系统选项中,Keil C51提供了两种操作系统:Rtx tiny和Rtx full,通常我们不使用任何操作系统,用该项的默认值:None(不使用任何操作系统)。Use on-chip ROM(0x0-0xFFF)选择项,表示使用片上的ROM(选中该项并不会影响最终生成的目标代码量),该选项取决于单片机应用系统,如果单片机的EA接高电平,则选中这个选项,表示使用内部ROM,如果单片机的EA接低电平,表示使用外部ROM,则不选中该选项。

片外代码(CODE)储存器:表示片外ROM的开始地址和大小,如果没有外接程序存储器,那么不需要填任何数据。这里假设使用一个片外ROM,地址从0x7000开始,一般填16进制的数,Size(尺寸)为片外ROM的大小。假设外接ROM的大小为0x2000字节,则最多可以外接3块片外ROM。

片外数据(XDATA)储存器:用于确定系统扩展RAM的地址范围,可以填上外接Xdata外部数据存储器的起始地址和大小,这些选择项必须根据所用硬件来决定。如果仅仅是89C51单片应用,未进行任何扩展,那么无需设置。

代码分段:是使用Code Banking技术。Keil C51可以支持程序代码超过64KB的情况,最大可以有2MB的程序代码。如果代码超过64KB,那么就要使用Code Banking技术,以支持更多的程序空间。

20.2.2

输出页面

输出页面中(图20-12),按钮“选择目标(OBJ)目录”是用来选择最终的目标文件所在的文件夹,默认是与工程文件在同一个文件夹中。

图20-12

Output页面

“可执行文件名”:设置生成的目标文件的名字,缺省情况下和项目的名字一样。Create Executable:如果要生成OMF以及HEX文件,一般选中“调试信息”和“浏览信息”。选中“调试信息”将会产生调试信息,这些信息用于调试,如果需要对程序进行调试,应当选中该项。“浏览信息”是产生各种信息,该信息可以用菜单“查看” 进行浏览,一般取默认值。“生成hex文件”用于生成可执行代码文件,默认情况下该项未被选中,如果要烧录芯片做硬件实验,就必须选中该项。

Create Library:选中该项时将生成lib库文件,一般的应用是不生成库文件的。构造后操作栏中有以下几个设置。

完成时“嘀”一声提示:编译完成之后发出“咚”的声音。

开始调试:马上启动调试(软件仿真或硬件仿真),根据需要来设置,一般是不选中。运行用户程序#

1、运行用户程序#2:这个选项可以设置编译完之后所要运行的其他应用程序(比如有些用户自己编写了烧写芯片的程序,编译完便执行该程序,将Hex文件写入芯片),或者调用外部的仿真程序。可根据自己的需要设置。

20.2.3

列表页面

列表页面用于调整生成的列表文件选项。在汇编或编译完成后将产生(*.lst)的列表文件,在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致的调节,其中比较常用的选项是“C Compile Listing”下的“汇编代码”项,选中该项可以在列表文件中生成C语言源程序所对应的汇编代码(图20-13)。

图20-13

Listing页面

20.2.4

C51页面

C51页面用于对Keil C51软件的C51编译器的编译过程进行控制(图20-14),其中比较常用的是“代码优化选项”组,该组中级别是优化等级,C51在对源程序进行编译时,可以对代码多至9级优化,默认使用第8级,一般不必修改,如果在编译中出现一些问题,可以降低优化级别再试。“侧重”是选择编译优先方式,第一项是代码大小优化(最终生成的代码量小),第二项是执行速度优先(最终生成的代码速度快),第三项缺省。默认的是速度优先,可根据需要更改。

图20-14

C51页面

20.2.5

调试页面

调试页面中(图20-15)有两类仿真形式可选:“使用模拟器”和“Keil Monitor-51 Driver”,前一种是纯软件仿真,后一种是带有Monitor-51目标仿真器的仿真。对于没有Monitor-51目标仿真器的用户,只有采用软件仿真。默认方式下的仿真是软件仿真(使用模拟器)。

图20-15

Debug页面 启动时加载程序:选择这项之后,Keil C51会自动装载程序代码。

一直运行到main():调试C语言程序时可以选择这一项,PC会自动运行到main程序处。

工程设置对话框中的其他各页面与C51编译选项、A51的汇编选项、BL51连接器的连接选项等用法有关,这里均取默认值。

设置完成后按确认返回主界面,工程文件就建立、设置完毕了。20.3

编译、连接

在设置好工程后,即可进行编译、连接。选择主菜单栏中的“项目”,在下拉菜单中选中“构造对象”(图20-16),对当前工程进行编译、连接,这时输出窗口出现源程序的编译结果。如果选择“重新构造所有对象文件”将会对当前工程中的所有文件重新进行编译,然后再连接,这样最终产生的目标代码是最新的。

图20-16

编译、连接操作

以上操作也可以通过工具栏按钮直接进行。

编译过程中的信息将出现在输出窗口中的构造页中,如果源程序中有语法错误,将提示错误ERROR(S)的类型和行号,双击该行,可以定位到出错的位置。对源程序进行修改没有语法错误后,重新进行编译、连接,编译成功后,最终可得到hex格式的文件(如test.hex),该文件可被编程器读入并写到芯片中,同时还会产生一些其他相关的文件,可被用于Keil C51的仿真与调试。20.4

Keil C51集成开发环境软件的调试方法 20.4.1

常用调试命令

在对工程成功地进行编译(汇编)、连接以后,在主菜单中打开“调试”栏,点击“开始/停止调试模式”,即可进入软件模拟仿真调试状态,Keil C51内建了一个仿真CPU用来模拟执行程序,该仿真CPU功能非常强大,可以在没有硬件和仿真器的情况下进行程序的调试,但是在时序上,软件模拟仿真是达不到硬件的时序的。进入调试状态后,“调试”栏菜单项中原来不能用的命令现在已经可以使用了。“调试”栏菜单上的大部分命令可以在调试界面上找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、单步跳过、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令(图20-17)。

图20-17

软件模拟仿真调试状态

使用菜单“单步到之外”或相应命令或功能键F10可以用“单步跳过”形式执行命令,所谓“单步跳过”,是指将汇编语言中的子程序或高级语言中的函数作为一个语句一步执行完。使用菜单“单步”或相应的命令按钮或使用快捷键F11可以单步执行程序(即一条一条语句执行),通过单步执行程序,可以找出一些问题的所在,但是仅依靠单步执行来查错效率较低。

20.4.2

断点设置

程序调试时,一些程序行必须满足一定的条件才能被执行到(如程序中某变量达到一定的值、按键被按下、串口接收到数据、有中断产生等),这些条件往往是异步发生或难以预先设定的,这类问题使用单步执行的方法是很难调试的,这时就要使用到程序调试中的另一种非常重要的方法:断点设置。断点设置的方法有多种,常用的是在某一程序行设置断点(图20-18),设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此时观察有关变量值,以确定问题所在。在程序行设置/移除断点的方法是将光标定位于需要设置断点的程序行,使用菜单:“调试>设置/取消断点”设置或移除断点,也可以用鼠标在该行双击实现同样的功能;另外“使能/禁止断点”用来开启或暂停光标所在行的断点功能;其它还有“禁止所有断点”、“取消所有断点”等设置。这些功能也可以用工具条上的快捷按钮进行设置。

图20-18

断点设置

20.4.3

在线汇编

在进入Keil C51的调试环境以后,若发现程序有错,可以直接对源程序进行修改,但是要使修改后的代码起作用,必须先退出调试环境,重新进行编译、连接后再次进入调试。如果调试时只是需要对某些程序行进行临时的试验修改(如修改参数以得到所需的延时时间),那么这样的重复过程显得太麻烦,为此Keil C51软件提供了在线汇编的能力。将光标定位于需要修改的程序行上,用菜单“调试>在线汇编”即可出现如图20-19所示的对话框,在“输入新指令”后面的编缉框内直接输入需更改的程序语句,输入完后键入回车将自动指向下一条语句,可以继续修改。如果不再需要修改,可以点击右上角的关闭按钮关闭窗口。

图20-19

在线汇编对话框

20.4.4

程序调试时的常用窗口 Keil C51软件在调试程序时提供了多个窗口,主要包括输出窗口(Output Windows)、查看和呼叫堆栈窗口(Watch & Call Statck Windows)、存储器窗口(Memory Window)、反汇编窗口(Dissambly Window)和串行窗口(Serial Window)等。进入调试模式后,可以通过菜单“查看”(View)下的相应命令打开或关闭这些窗口。图20-20是输出窗口、查看和呼叫堆栈观察窗口和存储器窗口,各窗口的大小可以使用鼠标调整。进入调试程序后,输出窗口自动切换到Command页。

图20-20

输出窗口、查看和呼叫堆栈窗口和存储器窗口

存储器窗口

存储器窗口中可以显示系统各种内存中的值,通过在“地址”(Address)后的编缉框内输入“字母:数字”即可显示相应内存值,其中字母可以是C、D、I、X,分别代表代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM空间,数字代表想要查看的地址。例如输入“D:0x20”即可观察到地址20H开始的片内RAM单元值;键入“C:0x100”即可显示从100H开始的ROM单元中的值,即查看程序的二进制代码。该窗口的显示值可以以各种形式显示,如十进制、十六进制、字符型等,改变显示方式的方法是点鼠标右键,在弹出的快捷菜单中选择,该菜单用分隔条分成三部分,其中第一部分与第二部分的三个选项为同一级别,选中第一部分的任一选项,内容将以整数形式显示,而选中第二部分的ASCII项则将以字符型式显示,选中Float项将以相邻四字节组成的浮点数形式显示,选中Double项则将相邻8字节组成双精度形式显示。第一部分又有多个选择项,其中Decimal项是一个开关,如果选中该项,则窗口中的值将以十进制的形式显示,否则按默认的十六进制方式显示。Unsigned和Signed后分别有三个选项:Char、Int、Long分别代表以单字节方式显示、将相邻双字节组成整型数方式显示、将相邻四字节组成长整型方式显示,而Unsigned和Signed则分别代表无符号形式和有符号形式,究竟从哪一个单元开始的相邻单元则与你的设置有关。以整型为例,如果你输入的是“I:0”,那么00H和01H单元的内容将会组成一个整型数,而如果你输入的是“I:1”,01H和02H单元的内容会组成一个整型数,依此类推。第三部分的Modify Memory at X:xx用于更改鼠标处的内存单元值,选中该项即出现如图20-21所示的对话框,可以在对话框内输入要修改的内容。

图20-21

更改内存单元值 工程窗口寄存器页

图20-22是工程窗口寄存器页的内容,寄存器页包括了当前的工作寄存器组和系统寄存器组。系统寄存器组有一些是实际存在的寄存器,如A、B、DPTR、SP、PSW等,有一些是实际中并不存在或虽然存在却不能对其操作的,如PC、States等。每当程序中执行到对其寄存器的操作时,该寄存器会以反色(蓝底白字)显示,用鼠标单击然后按下F2键,即可修改该值。

图20-22

工程窗口寄存器页 查看和呼叫堆栈观察窗口

这也是很重要的一个窗口,工程窗口中不仅可以观察到工作寄存器和有限的寄存器如A、B、DPTR等,如果需要观察其他寄存器的值或者在高级语言编程时需要直接观察变量,还要借助于这个窗口了。

一般情况下,我们仅在单步执行时才对变量值的变化感兴趣,全速运行时,变量的值是不变的,只有在程序停下来之后,才会将这些值的最新变化反映出来。但是,在一些特殊场合我们也可能需要在全速运行时观察变量的变化,此时可以点击查看>定期窗口更新,确认该项处于被选中状态,即可在全速运行时动态地观察有关值的变化。但是,选中该项,将会使程序模拟执行的速度变慢。

Keil C51提供了串行窗口,我们可以直接在串行窗口中键入字符,该字符虽不会被显示出来,但却能传递到仿真CPU中,如果仿真CPU通过串行口发送字符,那么这些字符会在串行窗口显示出来,用该窗口可以在没有硬件的情况下用键盘模拟串口通信。由于该项涉及到高级语言编程,这里就不具体介绍了。

20.5

外围接口工具

为了能够比较直观地了解单片机中定时器、中断、并行端口、串行端门等常用外设的使用情况,Keil C51提供了一些外围接口对话框,通过“外围设备”菜单选择。“外围设备”的下拉菜单内容与你建立项目时所选的CPU有关。如果是选择的89C51这一类单片机,那么将会有Interrupt(中断)、I/O Ports(并行I/O口)、Serial(串行口)、Timer(定时/计数器)这四个外围设备菜单(图20-23)。打开这些对话框,列出了外围设备的当前使用情况,各标志位的情况等,可以在这些对话框中直观地观察和更改各外围设备的运行情况。

图20-23

外围设备菜单 20.5.1

P1□作为输入端□

程序每执行一个循环之前,修改一次P1端口的值(图20-24),观察变量的值是直接观看屏幕右下角的变量表;另外的方法是将鼠标移动到源程序的变量处,等待大约1秒钟左右,屏幕上即可弹出该变量的相关信息。

图20-24

P1□作为输入端□ 20.5.2

P1□作为输出端□

执行循环时观察P1口的输出。由于P1口只用于输出,故无须修改端口值(图20-25)。

图20-25

P1□作为输出端□

20.5.3

外部中断INT0 外部中断INT0对应于P3.2口线,因此,用鼠标单击“外设>Port3”窗口从右向左数第三位(P3.2口线对应的位),每单击一下,即产生一次中断,原因是外部中断是下降沿或低电平有效(图20-26)。

图20-26

外部中断INT0 另外,也可以点击“外设>Interrupt”,在出现图20-27所示中断对话界面后,进行设置。

图20-27

中断对话界面 20.5.4

定时器/计数器0 MCS-51系列单片机有两至三个定时器/计数器,均可以作为定时器或计数器使用。点击“外设>Timer0”即出现图20-28所示定时/计数器0的外围接口界面,可以直接选择Mode组中的下拉列表以确定定时/计数工作方式(0~3四种工作方式,设定定时初值等),点击选中TR0,status后的stop(停止)就变成了run(运行)。如果全速运行程序,此时TH0、TL0后的值也快速地开始变化(要求“定期窗口更新”处于选中状态),直观地演示了定时/计数器的工作情况。

图20-28

篇3:2024单片机实验教案

一、传统单片机实验教学方法的不足及改进

目前在单片机实验教学中, 广泛采用的是实验箱操作模式。试验箱教学是一种优秀的教学学习模式, 可以让学习者在较短时间内了解系统的基本开发过程。但其集成性强、开放性不足的特点, 也会让学生在学习中产生“黑盒子效应”, 对内部模块的工作过程不求甚解, 认识不深入。在实践过程中教师按操作步骤逐步进行, 留给学生分析思考的余地很少, 学生基本上都将操作程序化, 当作一种任务来完成, 即测量、记录所需的数据并形成报告就算完成设计。从某种意义上讲, 学生将“单片机设计”当成了传统的“实验课”来实施, 实验只是对前人知识的验证、重复和再现, 对锻炼学生的动手能力, 以及加深原理理解有一定的作用, 但对于培养学生综合分析问题和解决实际问题的能力方面是远远不够的[1]。

模块课程最早见于20世纪50~70年代的职业技术教育课程, 即将内在逻辑联系紧密、学习方式要求和教学目标相近的教学内容整合在一起, 构成小型化的模块课程。实施模块教学的首要工作是对教学内容的改革, 而教学内容的确立最终应归结于课程体系的建立。因此, 实施模块教学的重点是建立模块课程体系。模块课程体系就是打破原有学科课程体系, 以实用能力和必备素质为培养目标, 采用模块教材形式, 改进原有学科内容的编排方式, 综合原有相关学科内容, 而形成的各个全新课程的集合。模块化教学多见于大学课程, 是按照程序模块化的构想和原则来设计教学内容的一整套教学体系, 采用模块化思想, 构建一个单片机模块化设计平台, 学生可以采用提供的模块, 根据要求, 自己动手独立完成一个完整的单片机设计题目。通过这样的实验教学模式, 学生可以摆脱试验箱固有模式对设计思想的束缚, 采用类似搭积木的方式构建硬件连接, 从而把更多的精力放在创造性的设计上来;采用模块化方式构建硬件架构, 围绕单片机核心, 学生可以在后期的专业设计中, 采用扩展模块的方式, 自主选择各种功能模块, 并添加进自己的电路中, 大大丰富了应用层面的内容, 加强了其他专业课和单片机课之间的联系, 无论对单片机内容的学习, 还是相关专业内容的学习, 都起到了强有力的推动作用;模块化式的硬件平台构建模式中所有的功能模块是可以被替换和增加的, 可以很方便在不舍弃其他功能模块的基础上, 将新芯片融合到已有的设计中去, 不仅能够加快对新芯片的消化过程, 而且不再另外增加硬件成本。

二、实验教学内容设置

CDIO是基于项目教育和学习的新型教学模式, 它以工程项目从研发到运行的生命周期为载体, 让学生主动获取知识, 培养学生的工程能力、硬件设计和软件设计技能;注重知识与多种能力的关联, 培养学生运用知识解决问题的能力、终生学习能力、交流能力和大系统掌控能力[4]。

根据CDIO工程教育理念, 将实验环节与产品开发生命周期———构思、设计、实现和运作紧密结合起来, 实验课程体系可分解为4个层次:基础性实验、设计性实验、综合性实验和专业创新性实验[5。

在此设计理念指导下, 总体设计思路是以完整的系统设计内容为主线, 在4个层次的实验内容分配中, 先易后难, 先基础后综合, 通过该系统完整功能的实现将实验的主要内容贯穿起来, 使实验内容成为一个整体, 形成进阶式的学习模式, 提高学生的学习兴趣。具体的实施时, 先将该系统进行模块分解, 然后将分解后的模块按照系统的设计进程, 贯穿到整个实验中, 每个模块是相关的, 前一次实验是后一次实验实施基础[6]。教师在设计课程时, 也必须考虑到如下问题:教学过程中所有成分都要能体现在课程内容中;所选的内容和题目要遵循教学论的基本原理;内容的设置要考虑到教学目的、设计的可行性, 教学任务、内容的统一, 以及教学的组织形式;在选择课程内容设置时充分考虑到每一步的教学手段与方法的不足之处;在体现教学方法多样化的时候, 不可贪多求繁;课程内容的设置要有发展的眼光, 具体的设计方法和题目要随着技术的发展而变, 随着教学对象的变化而变化。

以激光器驱动源的设计为例, 该设计是本专业学生在后续专业课学习中经常要用到的基本设计。按照设计进程, 将内容拆解, 第一次实验内容是基本编译环境构建和IO口的编程控制, 可以用IO口控制LED实现指示灯亮灭, 以便于后续作状态显示;第二次实验进行外围扩展接口的调试, 如AD和DA, 为后续实现开环和闭环控制做准备;第三次实验进行中断系统的调试, 采用按键通断触发控制外部中断, 以便于实现人机交互;第四次实验在压控恒流源的基础上, 通过按键加减改变DA输出, 控制恒流源电流大小。前两次课内容属于基础性实验, 只有少量的设计性实验内容, 后两次课就开始增加了设计性实验内容的比重。最后两次课属于综合设计内容和在此基础上的专业创新性实验, 可以利用AD采样实现恒流源电流采样, 并通过负反馈实现驱动电流的闭环控制, 对于进度较快的同学, 可以引入负反馈控制算法的改进探讨。这样, 学生每一次实验都必须是在前一次实验完成的情况下进行, 并且实验内容可以很好的结合专业方向的应用, 对学生更有吸引力。进阶式的连续设计也使得学生在不知不觉中从难道易, 逐步掌握了单片相关的实验内容。同时由于实验内容的设计导致每一次实验课都是下一次实验课的延续, 如果没有上次实验课的实现, 下次的实验课也无法继续进行, 这样也就迫使学生克服危难情绪, 勇于去面对实践中碰到的问题, 这样在每次成功后的成就感也会鼓励学生继续自主学习。

类似这样的设计例子有很多, 基本都可以按照同样的思路进行模块化分解, 同时所选的设计内容可以灵活结合专业特点。

三、实验课程实施

实验课实施环节是课程内容达到预期效果的保证。“做中学”是CDIO的一个显著的特点。在实验实施过程中, 教师通过提出设计要求, 让学生根据要求, 查找相应地资料, 跟同学交流探讨。所有的实验软硬件平台的构建和调试都是由学生主动来完成, 教师只是设计一些问题, 引导学生自己从互联网查找资料, 积极思考, 学生独立分析项目实施过程的每个步骤, 独立解决项目过程出现的问题, 培养学生解决问题的能力。

综合性设计实验以个人为单位进行, 可以避免部分学生“搭顺风车”的思想。以前试验箱教学方法由于条件限制, 需要将学生以小组形式进行实验, 每个组基本统一一个成绩, 这样甚至会出现一个做、其他人看的局面, 无法保证整体的学习效果。而采用模块化教学, 每个学生都将领到一套实验课中需要用到的器件, 不仅能锻炼学生的独立学习能力, 同时在实践过程中, 也会驱使学生主动去跟其他同学沟通、学习, 解决自己碰到的问题。

四、结论

单片机的实验教学内容对于整个“单片机”课程而言, 是非常重要的一个部分, 在教学过程中合理的教学内容设置, 可以有效的提高教学效果。采用模块化教学模式, 将专业设计中一些经典的设计实例进行分解, 按照先易后难, 先基础后综合的方式, 合理分配基础性实验、设计性实验、综合性实验和专业创新性实验四个层次实验内容的比重, 形成进阶式学习进度控制。同时由于设计内容更贴近学生的专业, 可以更好地提高学生的学习兴趣, 并为后续专业课设计打好基础。这样的教学改革与实践笔者已经实施了三年, 可以明显看到, 学生在学习内容后, 在后期的课程设计以及毕业设计中能够主动将本课程内容与各自的具体研究课题相结合, 熟练应用本课程学到的实验技能, 提高了实践应用能力。

参考文献

[1]李春晕, 张学睦, 李建楠.高等学校实践教学质量综合评价体系研究[J].实验技术与管理, 2009, 26 (3) :222-224.

[2]孟祥霓, 杨雪岩, 翟殿棠.基于创新模式的电子设计综合实训教学体系及其实践研究[J].信息系统工程, 2010, (8) :36-37.

[3]林祝亮, 马世平, 杨金华.项目教学法在电子类课程设计中的应用研究[J].实验技术与管理, 2009, 26 (8) :114-116.

[4]查建中.工程教育改革战略“CDIO”与产学合作和国际化[J].中国大学教育, 2008, (5) :16-19.

[5]郭皎, 鄢沛, 应宏, 陈晓峰.基于CDIO的计算机专业实验教学改革[J].实验技术与管理, 2011, (2) :115-117.

篇4:单片机实验教学改革分析

关键词:单片机;教学改革;现状;措施

【中图分类号】TP368.1-4

单片机是一种最简单的电子计算机,在实际的生活中发挥着重要的作用,使得传统的电子设备具有智能化、自动化的功能,从而提高了设备的运行效率。同时单片机又因其结构简单、操作简便的特点,在各大高校中的自动化、通信等专业得到了普遍的应用。在实际的生产领域,单片机的性能的在不断的提高、其构造也在不断的复杂化,复杂数据的处理能力以及编程语言更加智能化,这就对单片机的实验教学提出了更高要求。

一、单片机实验教学的现状分析

目前,在单片机的实验教学的过程中,一般都是由老师在黑板或者是投影仪上,将在实验指导书中有关实验方面的内容讲解给学生,然后在试验箱中进行操作,将实验的结果演示给学生,最后让学生根据实验指导书的步骤进行实验。因单片机存在实践性很强的特点,老师只是采取口头讲解的方法,导致一些概念学生不理解,而试验箱的结果也会因学生的做法存在差别,从而影响其授课效果。

一般来说,现在单片机的实验教学设备大多采用实验箱或实验板的方式,其实验内容基本上是验证性的基本实验,如 I/O 口控制实验、串并转换、显示与键盘及 A / D等[1]。其实验的模式一般采用由实验老师选择一个实验,然后由学生编写程序,最后在实验箱上进行连线操作,验证其结果正确与否的方式。而在这其中就会存在一些问题,首先由于实验箱的限制,会使得实验的内容受到限制,重复性比较高,学生之间的抄袭现象严重。经常会出现一个做出来,全班都做出来了相同实验的现象,达不到实验的目的[2]。其次,由于实验箱的使用时间过长,存在接触不良等现象,就会导致实验效果出错,从而降低学生的兴趣。最后,由于试验箱只能放在实验室,对于一些爱好学习的学生来说,想做实验,会受到限制。因此必须对单片机的实验教学进行改革,使其适应当前社会发展的需要。

二、单片机实验教学改革措施

1、在单片机的实验教学中采用多媒体软件

多媒体教学的发展给实验教学带来了极大的便利,打破了传统的老师采用黑板教学的方式。教师可以利用多媒体软件直接进行各种实验的演示,让学生清楚的明白单片机的工作原理,实验的原理以及操作过程。利用多媒体软件技术,可以让学生清楚的看到每个实验的原理、步骤,从而实现了集语音、图像等一体的教学模式。这样不仅减轻了教师的负担,而且提高了教学效率,带动了学生的学习积极性。

例如在闪烁灯的实验中,教师就可以利用多媒体软件来进行教学。闪烁灯实验的任务就是在电路图中的P1.0端口上接一个发光二极管L1,使L1不停的一亮一灭,且时间间隔为0.2秒。如果是用传统的黑板教学,就会使得描述电路图中端口的接线比较繁琐,若利用多媒体软件教学则可以利用软件不仅可以将电路图中的接线过程清晰的呈现在学生的面前,而且可以将在闪烁灯这个实验中的实验原理、实验流程以及程序设计都可以清晰的表现出来,有利于学生的理解,便于学生掌握有关实验的知识,达到教学的目的。

2、引入 Proteus 仿真软件

由于在利用实验箱进行实验时,一般只有单片机I/O的接线示意图,学生只需要根据接线图接好线就可以进行实验,从而导致学生对外围电路一点也不了解。如果利用Proteus 仿真软件进行实验,就可以达到让学生熟悉单片机的外围电路以及了解常用元器件使用方法的目的。Proteus 仿真软件具有原理图设计、电路仿真、软件仿真的功能。Proteus虚拟仿真实验还具有不需要实验硬件设备就可以完成实验的优点。对于学生来说,计算机更容易普及,就可以不受实验室条件的限制可以自由的开展实验[3]。对教师而言,利用Proteus 仿真软件进行教学,使得教学目的更容易实现。

利用Proteus 仿真软件,可将复杂、难理解的概念形象化、具体化。例如在走马灯这个基本的实验,就牵扯到了中断的概念。在设计走马灯实验的时候共分为硬件设计和软件设计两个部分,其中硬件设计部分:首先使用89C2051单片机作为控制芯片,可以用P1端口作为控制端口,用来控制LED的點亮,其次用外部中断0控制走马灯的暂停和继续操作,最后用定时/计数器T0来控制走马灯闪烁的速度问题。这时教师可以利用Proteus 仿真软件演示给学生看,首先给学生演示不加中断的走马灯实验,可以看到由P1口控制LED灯的闪烁,其闪烁速度是由延时控制的。其次加上外端中断,即用外部的按键控制走马灯的暂停和继续操作。最后加上定时/计数器来控制走马灯的闪烁的速度,而此时的闪烁速度是由定时器控制[4]。其用Proteus 仿真软件仿真的效果图如图1所示。这样通过教师的演示操作,能够让了解中断的概念,以及对外端终端和定时器的使用方法,达到教学实验的目的。

结束语:

随着电子科学技术的不断发展,越来越多的芯片不断被研制出来并投入实际生产中,使得各种智能化的设备逐渐被带入人们的生活中,给人们的生活带来了极大的便利。随之带来的就是对硬件设备制造、嵌入式系统开发人才的大量需求[5]。各大院校通过对单片机实验教学的改革,使得学生更容易对单片机有关的知识进行掌握,从而使自身的专业能力得到提升,促进学生的就业能力。

参考文献:

[1]玄金红,郭振环. 单片机实验教学改革实例[J]. 科技信息(科学教研),2008,04:17.

[2]李莉. 单片机实验教学改革与创新能力的培养[J]. 电脑与电信,2008,04:71-72.

[3]冯刚. 单片机实验教学平台的改革[J]. 计算机教育,2010,02:144-146.

[4]郑晓霞. 浅谈单片机实验教学改革[J]. 青春岁月,2014,21:106.

篇5:单片机原理与应用课程实验教案

第一章 实验安排

共8个实验,要求8次上机完成。这8个实验分别为: 实验一 利用软件仿真器调试算术运算程序 实验二 INT0中断实验

实验三 定时器/计数器定时实验 实验四 定时器/计数器计数实验

实验五 定时器/计数器T0扩展外部中断源实验 实验六 串行口扩展实验 实验七 DAC0832数模转换实验 实验八 8155接口芯片使用实验

其中前六个实验为验证性实验,第七个实验为设计性实验。最后一个为综合性实验。每个实验3学时。

第二章 实验须知

一、预习要求

1、实验前认真阅读实验要求,明确实验目的和实验任务。

2、拟订实验步骤,编好上机程序。

二、报告要求

共八个实验,每个实验完成后交实验报告,写在实验报

告纸上,报告中应包含以下内容:

1、实验名称、实验人姓名、学号、班级

2、实验目的、任务(内容);

3、实验步骤

记录主要实验过程。

4、实验结果

(1)记录实验现象;

(2)要求写出已调试通过的实验程序清单(加适量注 释)

第三章 实验项目及内容

实验一 利用软件仿真器调试算术运算程序 1.目的要求

(1)熟悉WAVE调试软件的使用。(2)熟悉算术运算程序编程和调试的方法。2.实验内容

(1)有6个数据分别放在片内RAM区50H~55H单元中,试求和,并将结果放在片内RAM区03H(高位),04H(低位)单元中。

(2)编程将内部RAM70H~7FH中的16个数据按从小到 大的顺序重新排序。

3.主要仪器设备

PC机一台。

4.程序清单(1)数据和.ASM ORG 0000H LJMP MAIN ORG 1000H MAIN:MOV R2,#06H MOV R3,#00H MOV R4,#00H MOV R0,#50H L1:MOV A,R4 ADD A,@R0 MOV R4,A INC R0 CLR A ADDC A,R3 MOV R3,A DJNZ R2,L1 END(2)数据排序.ASM ORG 0000H LJMP MAIN ORG 1000H MAIN:MOV R2,#70H MOV R3,#71H L2:ACALL L1 INC R2 INC R3 CJNE R3,#80H,L2 L3:SJMP L3 NOP L1:MOV A,R2 MOV R0,A MOV A,R3 MOV R1,A MOV A,@R0 L5:CLR C SUBB A,@R1 MOV A,@R0 JC L4 XCH A,@R1 MOV @R0,A L4:INC R1 CJNE R1,#80H,L5

RET END

实验二 INT0中断实验(验证性实验

3学时,必做)

1.目的要求

(1)掌握MCS-51单片机中断原理以及编程使用方法。(2)理解下降沿中断和低电平中断的区别。

2.实验内容

(1)编写主程序,读取开关SW1的状态,当其闭合时初始化为下降沿中断,反之,初始化为低电平中断,且发光管灭;编写中断服务程序,使发光管闪烁5次,间隔250ms,即中断服务程序的执行时间为2.5秒。退出中断程序时,使发光管灭。(2)用万用表测量C点的电平,按下TR31秒钟,然后松 开,观察C点电平的变化。

3.实验所用仪器

实验板一块、直流稳压电源、编程器一台、万用表一块

4.程序清单(EXP7.ASM)ORG 0000H SJMP MAIN ORG 0003H LJMP INT0 MAIN:MOV SP,#60H mov p1,#0ffh NOP CLR P1.2 NOP NOP MOV C,P1.3 JC LOWER SETB IT0 SJMP CONT LOWER:CLR IT0 CONT:SETB EX0 SETB EA HERE:SJMP HERE INT0:MOV R0,#5 LP:CPL P1.2 DLY:MOV 30H,#5 DEL0:MOV R7,#100 DEL1:MOV R6,#125

DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 DJNZ 30H,DEL0 DJNZ R0,LP CLR P1.2 RETI END

实验三 定时器/计数器定时实验(验证性实验

3学时,必做)

1. 目的和要求

(1)掌握MCS-51单片机定时器/计数器定时功能的使用方法。

(2)了解定时和计数的本质区别和联系。

2. 实验内容

编写程序,初始化定时器/计数器T0工作在定时方式1,使P1.2输出周期为10秒的方波,即使发光管亮3秒,灭7秒。

3.实验所用仪器

实验板一块、直流稳压电源、编程器一台、万用表一块

4. 程序清单(EXP9.ASM)ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 MAIN: MOV SP,#60H CLR P1.2 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 SETB ET0 SETB EA LP: SETB P1.2 MOV A,#30 MOV 30H,#00 DL1:CJNE A,30H,DL1 CLR P1.2

MOV A,#70 MOV 30H,#00 DL2:CJNE A,30H,DL2 SJMP LP INTT0: MOV TL0,#0B0H MOV TH0,#3CH INC 30H RETI END 实验四 定时器/计数器计数实验(验证性实验

3学时,必做)

1. 实验目的和要求

(1)掌握MCS-51单片机定时器/计数器计数功能的使用方法。

(2)了解定时和计数的本质区别和联系。

2. 实验内容

编写程序,通过8个发光二极管来显示所计脉冲个数。

3.实验所用仪器

实验板一块、直流稳压电源、编程器一台、万用表一块

4.程序清单(EXP10.ASM)

U33CLK EQU 0FF90H ORG 0000H MAIN:MOV SP,#60H MOV TMOD,#05H SETB TR0 MOV DPTR,#U33CLK RDTIMER: MOV A,TH0 MOV R0,TL0 CJNE A,TH0,RDTIMER MOV R1,A MOV A,R0 CPL A MOVX @DPTR,A SJMP RDTIMEr END

实验五 定时器/计数器T0扩展外部中断源实验

(验证性实验

3学时,必做)

1. 实验目的和要求

掌握利用定时器/计数器扩展外部中断源使用的方法。

2. 实验内容

编写主程序,使发光管灭;编写中断服务程序,当执行中断服务程序时,发光管闪烁5次,间隔500ms,主程序运行后通过按TR3按钮触发中断。

3.实验所用仪器

实验板一块、直流稳压电源、编程器一台、万用表一块

3. 程序清单(EXP11.ASM)ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 MAIN:MOV SP,#60H MOV TMOD,#05H MOV TH0,#0FFH MOV TL0,#0FFH SETB ET0

SETB EA SETB TR0 CLR P1.2 HERE:SJMP HERE INTT0:MOV R0,#10 LP:CPL P1.2 DLY:MOV 30H,#10 DEL0:MOV R7,#100 DEL1:MOV R6,#125 DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 DJNZ 30H,DEL0 DJNZ R0,LP CLR P1.2 MOV TH0,#0FFH MOV TL0,#0FFH RETI END

实验六 串行口扩展实验(验证性实验

3学时,必做)

1.实验目的和要求

(1)掌握MCS-51单片机串行口方式0的工作原理。(2)了解方式0的应用,即通过串行口扩展输出口,进行静态显示的方法。

(3)掌握串行移位寄存器芯片74LS164的工作原理。

2.实验内容

编制程序使数码管循环依次显示00到99,每秒加1。

3.实验所用仪器

实验板一块、直流稳压电源、编程器一台、万用表一块

4.程序清单(12.ASM)

ORG 0000H LJMP MAIN ORG 000BH LJMP intt0 MAIN:MOV SP,#60H MOV TMOD,#01H SETB ET0 SETB EA MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 LLP:MOV 30H,#0 MOV 31H,#0 MOV 32H,#0 MOV 33H,#0 LP:MOV R0,#32H MOV R7,#2 ACALL BINBCD MOV DPTR,#TAB DSPLY: MOV A,@R0 MOVC A,@A+DPTR;cpl a MOV SBUF,A DSP1:JNB TI,DSP1 CLR TI INC R0 DJNZ R7,DSPLY LP1:MOV A,30H CJNE A,#10,LP1 MOV 30H,#00H INC 31H MOV A,31H

CJNE A,#100,LP SJMP LLP intt0:MOV TL0,#0B0H MOV TH0,#3CH INC 30H RETI;tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h BINBCD:MOV A,31H MOV B,#10 DIV AB MOV 33H,A MOV A,B MOV 32H,A RET END

实验七 DAC0832数模转换实验(设计性实验

3学时,必做)

1. 设计目的

(1)掌握DAC0832与MCS51单片机的接口方法。(2)掌握D/A转换程序的设计方法。

2. 设计题与要求

认真复习所学习的DAC0832的工作方式,利用单缓冲

方式使0832输出锯齿波和三角波。并设计使运放LM741输出0-5V和0--5V的波形。如果不用示波器,如何测试你所设计的电路和所编写的程序是否正确。

3.实验所用仪器

实验板一块、直流稳压电源、编程器一台、万用表一块、示波器一台。

4.设计原理

D/A转换器的输入为数字量,经转换后输出为模拟量。

DAC0832为一个8位D/A转换器,单电源供电,在+5~+15V范围内均可正常工作。MCS-51单片机与DAC0832的接口有3种连接方式,即直通方式、单缓冲方式及双缓冲方式。所谓单缓冲方式就是使DAC0832的两个输入寄存器中有一个处于直通方式,而另一个处于受控的锁存方式,当然也可使两个寄存器同时选通及锁存。本实验中采用该方式。要求WR1和WR2连接在一起接在89C51的WR端,CS和XFER连接在一起接在片选端,ILE接+5V。

0832可以产生很多波形,如:三角波、锯齿波、梯形波等。5.设计内容

编制程序使运放LM741输出锯齿波和三角波,具体步骤:断开开关SW1,输出锯齿波;闭和开关SW1,输出三角波。

6.程序清单(DAC0832.asm)CS0832 EQU 0FF9FH ORG 0000H MAIN:MOV P1,#0FFH NOP JNB P1.3,RWAVE MOV DPTR,#CS0832 MOV A,#00H LP:MOVX @DPTR,A NOP NOP INC A AJMP LP RWAVE:MOV DPTR,#CS0832 MOV A,#00H LP1:MOVX @DPTR,A NOP INC A CJNE A,#255,LP1 NOP LP3:MOVX @DPTR,A NOP

DEC A CJNE A,#00H,LP3 MOVX @DPTR,A NOP SJMP LP1 END

实验8 8155接口芯片使用实验(综合性实验

3学时,必做)

1.实验目的和要求

(!)掌握MCS-51单片机系统I/O扩展方法。

(2)掌握并行接口芯片8155的性能以及编程使用方法。(3)掌握单片机系统动态LED显示和键盘输入程序的设计方法。

2.实验内容

编写程序实现下列功能:程序运行后数码显示管显示HHMMSS(000000),即时分秒,按键调整其为正确的时间并继续运行。

该实验综合性较强,建议学生分两步走:第一步完成显示,可以参考实验六;第二步完成键盘扫描。

3.实验所用仪器

实验板一块、直流稳压电源、编程器一台、万用表一块

4.程序清单(EXP152.asm)CE8155 EQU 0FF80H CA8155 EQU 0FF81H CB8155 EQU 0FF82H CC8155 EQU 0FF83H HMS EQU 40H SECOND EQU 41H MINUTE EQU 42H HOUR EQU 43H ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 MAIN:MOV SP,#60H MOV A,#00000011B MOV DPTR,#CE8155 MOVX @DPTR,A MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA

SETB TR0 LP2:MOV HMS,#00H MOV SECOND,#00H MOV MINUTE,#00H MOV HOUR,#00H LP3:MOV R0,#30H MOV R7,#6 ACALL BINBCD MOV R2,#01H MOV A,R2 LOOP:MOV DPTR,#CA8155 MOVX @DPTR,A INC DPTR PUSH DPL PUSH DPH MOV DPTR,#TAB MOV A,@R0 MOVC A,@A+DPTR POP DPH POP DPL MOVX @DPTR,A ACALL DL2MS INC R0 MOV A,R2 JB ACC.5,LP1 RL A MOV R2,A AJMP LOOP lp1:acall kd1 AJMP LP3 INTT0:MOV TL0,#0B0H MOV TH0,#3CH INC HMS MOV A,HMS CJNE A,#0AH,PP MOV HMS,#00H INC SECOND MOV A,SECOND CJNE A,#60,PP MOV SECOND,#00H INC MINUTE MOV A,MINUTE CJNE A,#60,PP MOV MINUTE,#00H

INC HOUR MOV A,HOUR CJNE A,#24,PP MOV HOUR,#00H PP:RETI BINBCD:MOV A,HOUR MOV B,#10 DIV AB MOV 30H,A MOV 31H,B MOV A,MINUTE MOV B,#10 DIV AB MOV 32H,A MOV 33H,B MOV A,SECOND MOV B,#10 DIV AB MOV 34H,A MOV 35H,B RET tab:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DL2MS:MOV R3,#5 DLT1:MOV R4,#125 DLT2:DJNZ R4,DLT2

DJNZ R3,DLT1

RET KD1:ACALL KS1 JNZ LK1 ACALL DL2MS AJMP QQ LK1:ACALL DL2MS ACALL DL2MS ACALL DL2MS ACALL DL2MS ACALL KS1 JZ QQ MOV R5,#0FEH MOV R4,#00H MOV DPTR,#CA8155 MOV A,R5 MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR JB ACC.0,LONE mm1:acall dl2ms acall dl2ms acall ks1 jnz mm1 INC HOUR MOV A,HOUR CJNE A,#24, LONE MOV HOUR,#00H LONE:MOV A,R5 RL A MOV R5,A MOV DPTR,#CA8155 MOV A,R5 MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR JB ACC.0,LONE1 mm2:acall dl2ms acall dl2ms acall ks1 jnz mm2 INC MINUTE MOV A,MINUTE CJNE A,#60,LONE1 MOV MINUTE,#00H LONE1: MOV A,R5 RL A MOV R5,A MOV DPTR,#CA8155 MOV A,R5 MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR JB ACC.0,QQ mm3:acall dl2ms acall dl2ms acall ks1 jnz mm3 INC SECOND MOV A,SECOND

CJNE A,#60,QQ MOV SECOND,#00H QQ:RET KS1:MOV DPTR,#CA8155 MOV A,#00H MOVX @DPTR,A INC DPTR INC DPTR MOVX A,@DPTR CPL A ANL A,#03H RET END

四、考核办法

每个实验:预习10%、实验操作60%、实验报告30%。最后成绩以每次实验课程成绩累加被实验项目个数相除的办法计算。

五、主要参考资料

1、《单片机接口技术开发实验指导书》

北京科技大学C31实验室

2、《8051实验指导书》

篇6:单片机实验二实验报告

课程名称:微机原理与接口技术

指导老师:李素敏

学生姓名:

学号:

专业: 自动化

日期:2014-04-10 地点:理工楼603

实验二

1.实验目的和要求

① 掌握keil软件和STC-ISP 软件的使用方法 ② 熟悉发光管的工作原理 ③ 通过编程体验发光管的延时闪烁及移位等功能

2.主要仪器设备

PC机

单片机学习开发套件(型号:89C52RC)

3.实验内容

①实验内容1:第一个发光管以间隔200ms闪烁

源程序:

#include #define uint unsigned int

//宏定义

main(){

while(1){ P1=0xfe;delay(200);P1=0xff;delay(200);} } void delay(uint z)//延时函数,z的取值为这个函数的延时ms数 {

uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);

一台一件

}

实验结果说明:要使发光管闪烁,只需设置合适的时间延时即可。

②实验内容2 : 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。

源程序:

#include

#include //后面要用到它里面的_crol_(k,l)函数 //这个函数的意思是把一个字符变量k 循环左移l 位 #define uint unsigned int

//宏定义

unsigned char a,b,k,j;

//定义五个字符变量 sbit beep=P2^3;// 定义蜂鸣器的接口

void delay(uint z)//延时函数,z的取值为这个函数的延时ms数 {

uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);}

void main(){

k=0xfe;//先给k一个初值11111110等待移位 while(1){

delay500ms();

beep=0;//打开蜂鸣器

delay500ms();//让它响500ms

beep=1;//关闭蜂鸣器

j=_crol_(k,1);//把k循环左移一位

k=j;//把移完的值再送给k

P1=j;//同时把值送到P1口点亮发光二极管 } //再次循环 }

实验结果说明:在此程序中用到了_crol_(k,l)函数,此函数的功能在于循环移位,在每次发光管闪烁相应时间后左移一位,把移完的值再送到P口,点亮对应的发光管。这样循环往复,达到发光管流动的效果。

③实验内容3 :用8个发光管演示出8位二进制数累加过程,即用8个二极管表示8个二进制位(亮为1,灭为0),依次以二进制形式显示0,1,2,……255。

源程序: #include

#include //包含有左右循环移位子函数的库 #define uint unsigned int

//宏定义 #define uchar unsigned char //宏定义

void delay(uint z)//延时函数,z的取值为这个函数的延时ms数,{

uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);} void main()

//主函数 {

} uchar a;while(1)

//大循环 {

} a++;P1=~a;delay(200);

实验结果说明:在此定义一个无符号字符变量a,a的值进行累加,但是由于表示的二进制数要求亮为1,灭为0,与发光管的0亮1灭正好相反,所以将a的计数取反并设置相应延时,重复此过程就得到了在发光管上显示八位二进制数的累加过程。

④实验内容4 :间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。

源程序:

#include //52单片机头文件

#include //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义

void delay(uint z)//延时函数,z的取值为这个函数的延时ms数 {

uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);} void main()//主函数 { uchar a,i,j;while(1)//大循环

} {

} a=0xfe;//赋初值

for(j=0;j<8;j++){ for(i=0;i<8-j;i++)//左移

} {

P1=a;//点亮小灯

delay(300);//延时300毫秒

a=_crol_(a,1);//将a变量循环左移一位

} a=_crol_(a,j);//补齐,方便下面的左移一位 P1=0xff;//全部关闭

a=a<<1;//左移一位让多一个灯点亮

4.心得体会:此次实验中练习较多的就是闪烁和移位,在编程过程中,设置闪烁的时间必须达到人眼正常观察的要求,这就需要计算合适的闪烁时间,不停的尝试,最终选择适宜观察的时间间隔。发光管的循环移位时调用_crol_(k,l)函数

上一篇:我要做好孩子读后感下一篇:海南医学院临床专业认证知识要点