首页 > 精品范文库 > 4号文库
电子科技大学微机实验报告 实验5
编辑:浅唱梦痕 识别码:13-1128775 4号文库 发布时间: 2024-09-06 16:58:52 来源:网络

第一篇:电子科技大学微机实验报告 实验5

实验五 基于ARM的模块方式驱动程序实验 【实验目的】 1.掌握Linux 系统下设备驱动程序的作用与编写技巧 2.掌握Linux 驱动程序模块加载和卸载的方法 3.了解Linux 内核中的makefile和kconfig文件

【实验内容】

1.基于s3c2440 开发板编写led 驱动程序。2.将编写好的led驱动加入linux内核中,修改makefile和kconfig文件,配置和编译内核。3.编写关于led 的测试程序,交叉编译后运行,控制led 灯的亮灭。

【预备知识】

1.了解ARM9处理器结构和Linux 系统结构

2.熟练掌握C语言。

【实验设备和工具】

 硬件:ARM嵌入式开发平台,PC机Pentium100 以上。

 软件:PC机Linux操作系统+MINICOM+AMRLINUX 开发环境

【实验原理】

linux设备驱动程序  驱动的模块式加载和卸载

 编译模块

 装载和卸载模块

 led 驱动的原理

在本开发板上有八个led指示灯,从下往上分别为LED0-LED7。这八个led灯都是接的芯片上的gpio口(通用功能输入输出口)。在本实验的开发板硬件设计中,当led 灯对应的gpio的电平为低时,led灯被点亮;当led灯对应的gpio的电平为高时,led灯灭。本驱动的作用就是通过设置对应gpio口的电平来控制led 的亮灭。

因为ARM 芯片内的GPIO口都是复用的,即它可以被配置为多种不同的功能,本实

验是使用它的普通的I/O口的输出功能,故需要对每个GPIO口进行配置。在内核中已经定义了对GPIO口进行配置的函数,我们只需要调用这些函数就可以完成对GPIO口的配置。

【实验步骤】实验程

序运行效果:

程序会提示:“pleaseenterthe led status”

输入与希望显示的led状态对应的ledstatus值(输入十进制值即可),观察led 的显示情况。例如:

 输入数字“3”,对应的二进制数字为00000011

故点亮LED2~LED7

 输入数字“4”,对应的二进制数字为00000100

故点亮LED0,LED1,LED3~LED7

【实验结果和程序】

C语言程序:

#include #include #include #include #include #include #include #include #include #include #include #include #include#defineDEVICE_NAME “s3c2440-led”

static intLedMajor=231;

staticintLedMinor=0;

static charledstatus=0xff;staticstructclass*s3c2440_class;staticstructcdev *s3c2440_led_cdev;

/*

******************************************************************************* ************************

** Function name:Update_led()**Descriptions **Input :NONE **Output :NONE :update the led status

******************************************************************************* ************************

*/ staticvoid Update_led(void)

{

if(ledstatus&0x01)

s3c2410_gpio_setpin(S3C2410_GPC7,1);//LED0灭

else

s3c2410_gpio_setpin(S3C2410_GPC7,0);//LED0亮

if(ledstatus&0x02)

s3c2410_gpio_setpin(S3C2410_GPC5,1);//LED1灭

else

s3c2410_gpio_setpin(S3C2410_GPC5,0);//LED1亮

if(ledstatus&0x04)

s3c2410_gpio_setpin(S3C2410_GPH9,1);//LED2灭

else

s3c2410_gpio_setpin(S3C2410_GPH9,0);//LED2亮

if(ledstatus&0x08)

s3c2410_gpio_setpin(S3C2410_GPB4,1);//LED3灭

else

s3c2410_gpio_setpin(S3C2410_GPB4,0);//LED3亮

if(ledstatus&0x10)

s3c2410_gpio_setpin(S3C2410_GPG5,1);//LED4灭

else

s3c2410_gpio_setpin(S3C2410_GPG5,0);//LED4亮

if(ledstatus&0x20)

s3c2410_gpio_setpin(S3C2410_GPG6,1);//LED5灭

else

s3c2410_gpio_setpin(S3C2410_GPG6,0);//LED5亮

if(ledstatus&0x40)

s3c2410_gpio_setpin(S3C2410_GPG7,1);//LED6灭elses3c2410_gpio_setpin(S3C2410_GPG7,0);//LED6亮

if(ledstatus&0x80)

s3c2410_gpio_setpin(S3C2410_GPG8,1);//LED7灭

else

s3c2410_gpio_setpin(S3C2410_GPG8,0);//LED7亮

}

staticssize_ts3c2440_Led_write(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){

copy_from_user(&ledstatus,buffer,sizeof(ledstatus));

Update_led();

printk(“write: led=0x%x,count=%dn”,ledstatus,count);returnsizeof(ledstatus);} staticints3c2440_Led_open(structinode*inode,struct file *filp)

{

printk(“led device openn”);

return 0;

} staticints3c2440_Led_release(structinode*inode,struct file*filp)

{

printk(“led device releasen”);

return 0;} staticstructfile_operationss3c2440_fops={.owner=THIS_MODULE,.open=s3c2440_Led_open,.write=s3c2440_Led_write,.release=s3c2440_Led_release, };

staticintinits3c2440_Led_init(void)

{

dev_ts3c2440_leds_devno;

/*configure the gpiofor leds*/

s3c2410_gpio_cfgpin(S3C2410_GPG5,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPG6,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPG7,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPG8,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPC7,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPC5,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPH9,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPB4,S3C2410_GPIO_OUTPUT);

Update_led();/*registerthe devnumber*/ s3c2440_leds_devno=MKDEV(LedMajor,LedMinor);ret=register_chrdev_region(s3c2440_leds_devno, 1,DEVICE_NAME);

/*registerthe chardevice*/

s3c2440_led_cdev=cdev_alloc();if

(s3c2440_led_cdev!= NULL)

{ cdev_init(s3c2440_led_cdev, &s3c2440_fops);s3c2440_led_cdev->owner=THIS_MODULE;if(cdev_add(s3c2440_led_cdev, s3c2440_leds_devno, 1))

printk(KERN_NOTICE “Something wrong when addings3c2440_led_cdev!n”);

else

printk(“Success addings3c2440_led_cdev!n”);} /*create the device node in /dev*/ s3c2440_class =class_create(THIS_MODULE, “led_class”);class_device_create(s3c2440_class, NULL, s3c2440_leds_devno, NULL, DEVICE_NAME);

printk(DEVICE_NAME “ initializedn”);

return 0;

}

staticvoid exits3c2440_Led_exit(void)

cdev_del(s3c2440_led_cdev);class_device_destroy(s3c2440_class, MKDEV(LedMajor,LedMinor));class_destroy(s3c2440_class);printk(DEVICE_NAME “ removedn”);

}

module_init(s3c2440_Led_init);

module_exit(s3c2440_Led_exit);

【思考题】

1.设备驱动程序的功能是什么?答:设备驱动的功能就是将系统提供的调用映射到作用于实际硬件的和设备相关的操作上。

2.模块化的最大优点是什么?答:可以在系统正在运行着的时候给内核增加模块

提供的功能(也可以移除功能)。

3.如果在驱动模块中删除module_exit(s3c2440_Led_exit);后会有什么影响?

答:这个模块将不能被移除。

4.驱动代码中调用的宏MKDEV 的作用是什么?答:获取设备在设备表中的位置。输入主设备号,从设备号,返回位置号。

【实验结论】

本实验实现了linux环境下的led灯驱动的添加。

第二篇:电子科技大学微机实验报告 实验4

实验四基于ARM的嵌入式Linux开发环境建立 【实验目的】 1.掌握嵌入式Linux 开发环境的基本流程。2.熟悉Linux 操作系统 3.熟悉嵌入式开发平台

【实验内容】

在PC机虚拟机下的Linux系统中建立基于ARM 的嵌入式Linux 开发环境。

1.学会网口的配置 2.Minicom端口的使用

【预备知识】

1.了解ARM9处理器结构 2.了解Linux 系统结构

3.了解ARM开发板使用常识

【实验设备和工具】

硬件:PC机Pentium100以上,ARM嵌入式开发平台

软件:PC机Linux 操作系统+MINICOM+AMRLINUX开发环境

【实验原理】

1.交叉编译器在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译,这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构

(Architecture)、操作系统(OperatingSystem)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intelx86体系结构和Linuxforx86操作系统的统称;而x86WinNT平台 实际上是Intelx86体系结构和Windows NTforx86操作系统的简称。交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软

件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++ 开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为nativecompilation,中文可理解

为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的ARM平台,其一般的静态存储空间大概是16到32MB,而CPU 的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilationtoolchain)需要很大的存储空间,并需要很强 的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。

要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(crosscompilation tool-chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下:

1、在WindowsPC上,利用RVDS(ARM开发环境),使用armcc编译器,则可编译出针对ARMCPU的可执行代码。

2、在LinuxPC上,利用arm-linux-gcc编译器,可编译出针对LinuxARM平台的可执行代码。

3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARMCPU的可执行代码。

2.NFS服务

NFS是Net FileSystem的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS.NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系

统上的文件。

NFS至少有两个主要部分:一台服务器和一台(或者更多)客户机。客户机远程访问存放在服务器上的数据。为了正常工作,一些进程需要被配置并运行。

在本实验中就是将PC机作为服务器,而将ARM开发板作为客户机,这样ARM开发板就可以远程

访问存放在在PC机上的数据,这样可以缩短研发周期,更方便的调试程序。

【实验步骤】

1.双击桌面上VMWARE,打开Linux 虚拟机 2.点击启动虚拟机,启动虚拟机 3.以root身份登陆虚拟机,密码123456

4.其他步骤详见实验指导书

【实验结果和程序】

基于ARM 的嵌入式Linux开发环境建立完毕。

【思考题】

1.如何验证交叉编译器已安装成功? 答:在终端输入命令:cd/arm/rootfs/home/driver(文件夹里已有test_led.c文件)arm-linux-gcc–o test_ledtest_led.c

若有可执行文件test_led生成则表示交叉编译器已安装成功

2.如果我们需要变更根文件系统的目录,该如何设置使得ARM开发板可以成功挂载?答:修改/etc/exports 文件的内容,将/arm/rootfs*(rw,sync,no_root_squash)改为/XX/XXX

*(rw,sync,no_root_squash)(/XX/XXX为变更后点的文件目录)

3.怎么在u-boot命令行下修改ARM 开发板的IP?

答:输入setenvip=x.x.x.x:192.168.0.1:192.168.0.1:255.255.255.0:uestc:eth0:off

Saveenv

x,x,x,x为ARM开发板的新IP。

【实验结论】

本实验实现了基于ARM 的嵌入式Linux 开发环境建立

第三篇:电子科技大学实验报告格式

九、实验结论:

十、总结及心得体会:

十一、对本实验过程及方法、手段的改进建议:

报告评分:指导教师签字:

电子科技大学

学生姓名:

学号:

指导教师:

日期:实 验 报 告年月日

一、实验室名称:

二、实验项目名称:

三、实验原理:

四、实验目的:

五、实验内容:

六、实验器材(设备、元器件):

七、实验步骤:

八、实验数据及结果分析:

第四篇:电子科技大学实验报告格式

九、实验结论:

十、总结及心得体会:

十一、对本实验过程及方法、手段的改进建议:

报告评分:

指导教师签字: 电子科技大学

学生姓名:学

号:指导教师:日

期:实 验 报 告

****年**月**日

一、实验室名称:

二、实验项目名称:

三、实验原理:

四、实验目的:

五、实验内容:

六、实验器材(设备、元器件):

七、实验步骤:

八、实验数据及结果分析:

第五篇:北京科技大学微机原理实验报告

微机原理及应用实验报告

学院: 班级: 学号: 姓名:

微机实验报告书(Ⅰ)学号:姓名:班级: 同组名单:实验日期:

实验题目:8253可编程定时器计数器

实验目标:掌握8253的基本工作原理和编程方法 实验步骤:

连接电路图

如图虚线连接电路,将计数器0设置为方式0,计数器初值为N(N<=0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。程序框图:

程序清单:

;*************************;;* 8253方式0计数器实验 *;;*************************;IOPORT

EQU

0C800H-0280H

IO8253A EQU

IOPORT+283H

IO8253B EQU

IOPORT+280H

CODE SEGMENT

ASSUME

CS:CODE

START: MOV

AL,00010000B

;设置8253工作方式

MOV

DX,IO8253A

OUT

DX,AL

MOV

DX,IO8253B

;送计数初值为0FH

MOV

AL,0FH

OUT

DX,AL

LLL: IN

AL,DX

;读计数初值

CALL

DISP

;调显示子程序

PUSH

DX

MOV

AH,06H

MOV

DL,0FFH

INT

21H

POP

DX

JZ

LLL

;跳转到LLL

MOV

AH,4CH

;退出

INT

21H

DISP PROC

NEAR

;显示子程序

PUSH

DX

AND

AL,0FH

;首先取低四位

MOV

DL,AL

CMP

DL,9

;判断是否<=9

JLE

NUM

;若是则为'0'-'9',ASCII码加30H

ADD

DL,7

;否则为'A'-'F',ASCII码加37H

NUM: ADD

DL,30H

MOV

AH,02H

;显示

INT

21H

MOV

DL,0DH

;加回车符

INT

21H

MOV

DL,0AH

;加换行符

INT

21H

POP

DX

RET

;子程序返回

DISP ENDP

CODE ENDS

END

START 运行结果:

每输入一个单脉冲,屏幕上的数值减1,从15减到0后(拨动16次后),检测到OUT0输出由低电平变为高电平。小结(体会与收获):

通过预习和实验,学会了 8253 芯片和微机接口原理和方法,掌握 8253 定时器/计数器的基本工作原理、工作方式和编程原理,熟悉了汇编代码的编写。实验中,连接电路,利用代码控制实验电路,深对了课本理论的理解。

由于是第一次实验,进程比较缓慢,所以仅进行了8253可编程定时器/计数器的一个实验,下次实验会熟练一些。

微机实验报告书(Ⅱ)

学号:姓名:班级: 同组名单:实验日期:

实验题目:1.8253可编程定时器计数器

2.8255可编程并行接口(方式0)3.七段数码管

实验目标:1.掌握8253的基本工作原理和编程方法

2.掌握8255方式0的工作原理及使用方法 3.掌握数码管显示数字的原理

实验步骤: 实验一:

连接电路图

按上图连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。实验二:

连接电路图

1)实验电路如图,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。

2)编程从8255C口输入数据,再从A口输出。实验三:

连接电路图

静态显示:按图连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中), S0、dp接地(关闭)。编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。程序框图: 实验一:

实验二:

实验三:

程序清单: 实验一:

;*******************;* 8253分频 *;******************* IOPORT EQU

0C800H-0280H

IO8253A EQU

IOPORT+283H

IO8253B EQU

IOPORT+280H

IO8253C EQU

IOPORT+281H

CODE SEGMENT

ASSUME

CS:CODE

START: MOV

DX,IO8253A;向8253写控制字

MOV

AL,36H

;工作方式

OUT

DX,AL

MOV

AX,1000

;写入循环计数初值1000

MOV

DX,IO8253B

OUT

DX,AL

;先写入低字节

MOV

AL,AH

OUT

DX,AL

;后写入高字节

MOV

DX,IO8253A

MOV

AL,76H

;设工作方式

OUT

DX,AL

MOV

AX,1000

;写入循环计数初值1000

MOV

DX,IO8253C

OUT

DX,AL

;先写低字节

MOV

AL,AH

OUT

DX,AL

;后写高字节

MOV

AH,4CH

;程序退出

INT

21H

CODE ENDS

END

START

实验二:

;*************************;;* 8255A的基本输入输出 *;;*************************;IOPORT EQU 0C800H‐280H IO8255A EQU IOPORT+288H IO8255B EQU IOPORT+ 28BH IO8255C EQU IOPORT+28AH CODE SEGMENT ASSUME CS:CODE START: MOV DX,IO8255B;对 8255 进行设定,A 输出,C 输入

MOV AL,10001001B

OUT DX,AL INPUT: MOV DX,IO8255C;从 C 输入

IN AL,DX

MOV DX,IO8255A;从 A 输出

OUT DX,AL

MOV DL,0FFH;判断是否有按键

MOV AH,06H

INT 21H

JZ INPUT;若无,则继续 C 输入,A 输出

MOV AH,4CH;否则,返回 DOS

INT 21H CODE ENDS END START 实验三:

;************************************;;*键盘输入数据(0-9)控制LED数码管显示*;;************************************;

DATA

SEGMENT

IOPORT

EQU

0C800H-280H IO8255A

EQU

IOPORT+288H IO8255B

EQU

IOPORT+28BH IO8255C

EQU

IOPORT+28AH

LED

DB

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

MESG1

DB

0DH,0AH,'Input a num(0--9),other key is exit:',0DH,0AH,'$' DATA

ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:

MOV

AX,DATA

MOV

DS,AX

MOV

DX,IO8255B

;使 8255 的A口为输出方式

MOV

AX,10000000B

OUT

DX,AL

SSS:

MOV

DX,OFFSET MESG1

;显示提示信息

MOV

AH,09H

INT

21H

MOV

AH,01

;从键盘接收字符

INT

21H

CMP

AL,30H

;是否小于 0

JL

EXIT

;若是则退出

CMP

AL,39H

;是否大于9

JG

EXIT

;若是则退出

SUB

AL,30H

;将所得字符的 ASCII 码减 30H

MOV

BX,OFFSET LED

;BX为数码表的起始地址

XLAT

;求出相应的段码

MOV

DX,IO8255A

;从 8255 的A口输出

OUT

DX,AL

JMP

SSS

;转 SSS EXIT:

MOV

AH,4CH

;返回

INT

21H CODE

ENDS

END

START;

运行结果: 实验一:

8253通道0和通道1均工作在方式3,计数初值均为1000。通道0的时钟输入为1MHz标准脉冲,产生1000Hz的方波;通道1以通道0输出的1000Hz方波脉冲为输入,产生1Hz的方波。用逻辑笔发现,OUT1 输出电平呈规律性高低变化(显示灯闪烁),时间间隔为 1s,说明输出频率为 1Hz,实现计时器功能。实验二:

当逻辑开关K0~K7中的一个或几个打开时,对应的LED灯就会亮起来,即利用8255A实现了基本的输入输出控制。实验三:

静态显示:当从键盘输入0~9任一数字时,七段数码管上便 会显示相应的数字,按下其他按键则退出程序。小结(体会和收获):

通过本次实验,进一步了解了8253可编程定时器/计数器;巩固了可编程并行接口8255的基本知识点,了解了该芯片的应用。通过编程实现,熟悉了8255方式控制字,了解了方式0和基本工作原理。通过这三次实验的学习,对于可编程接口芯片有了更深的认识,掌握了基本的微机接口方法。

在实验过程中要细心,当编译、链接或者运行的时候遇到错误的时候,要仔细检查程序的输入是否正确,很容易输错字母数字。

微机实验报告书(Ⅲ)

学号:姓名:班级: 同组名单:实验日期: 实验题目:步进电机控制实验

实验目标:1.了解步进电机控制的基本原理

2.掌握控制步进电机转动的编程方法

实验步骤:

连接电路图

1)按图14连接线路,利用8255输出脉冲序列,开关K0~K6控制步进电机转速,K7控制步进电机转向。8255 CS接288H~28FH。PA0~PA3接BA~BD;PC0~PC7接K0~K7。

2)编程:当K0~K6中某一开关为“1”(向上拨)时步进电机启动。K7向上拨电机正转,向下拨电机反转。程序框图:

程序清单:

;*******************************;;*

步进电机

*;;*******************************;

DATA

SEGMENT

IOPORT

EQU

0E400H-280H

IO8255A

EQU

IOPORT+288H

;8255A 输出端口

IO8255B

EQU

IOPORT+ 28BH

;8255B 控制端口

IO8255C

EQU

IOPORT+ 28AH

;8255C 输入端口

BUF

DB

0

MES

DB

'K0-K6 ARE SPEED CONTROL',0AH,0DH

DB

'K6 IS THE LOWEST SPEED ',0AH,0DH

DB

'K0 IS THE HIGHEST SPEED',0AH,0DH

DB

'K7 IS THE DIRECTION CONTROL',0AH,0DH,'$'

DATA

ENDS

CODE SEGMENT

ASSUME

CS:CODE,DS:DATA

START:

MOV

AX,CS

MOV

DS,AX

MOV

AX,DATA

MOV

DS,AX

MOV

DX,OFFSET MES

MOV

AH,09

INT

21H

MOV

DX,IO8255B

MOV

AL, 10001001B

OUT

DX,AL

;8255 C输入, A 输出

MOV

BUF,33H

OUT1:

MOV

AL,BUF

MOV

DX,IO8255A

OUT

DX,AL

PUSH

DX

MOV

AH,06H

MOV

DL,0FFH

INT

21H

POP

DX

JE

IN1

MOV

AH,4CH

INT

21H

IN1:

MOV

DX,IO8255C

IN

AL,DX

;输入开关状态

TEST

AL,01H

JNZ

K0

TEST

AL,02H

JNZ

K1

TEST

AL,04H

JNZ

K2

TEST

AL,08H

JNZ

K3

TEST

AL,10H

JNZ

K4

TEST

AL,20H

JNZ

TEST

JNZ

STOP:

MOV

MOV

JMP

K0:

MOV

SAM:

TEST

JZ

JMP

K1:

MOV

JMP

SAM

K2:

MOV

JMP

K3:

MOV

JMP

K4:

MOV

JMP

K5:

MOV

JMP

K6:

MOV

JMP

SAM

ZX0:

CALL

MOV

ROR

MOV

JMP

NX0:

CALL

MOV

ROL

MOV

JMP

DELAY

PROC

DELAY1:

MOV

DELAY2:

LOOP

K5

AL,40H K6

DX,IO8255C AL,0FFH

OUT1

BL,40H

AL,80H ZX0 NX0

BL,50H

BL,70H

SAM

BL,80H SAM

BL,0A0H SAM

BL,0C0H SAM

BL,0FFH

DELAY

AL,BUF

AL,1

BUF,AL OUT1

DELAY

AL,BUF

AL,1

BUF,AL OUT1

NEAR

CX,0FFFFH

DELAY2

DEC

BL

JNZ

DELAY1

RET

DELAY

ENDP

CODE

ENDS

END

START 运行结果:

当K0~K6中任意一开关向上拨时步进电机启动,且K1速度最快,K6速度最慢;当K7向上拨电机正转,向下拨电机反转。当键盘中有任意键输入的时候则程序终止。小结(收获与体会):

实验和理论是相互检验,相互补充和相互促进的,在实际动手动脑运用理论知识的时候,能更深入地领会概念,熟练运用,在此基础上方能进行创新和自由发挥。通过本次实验,我了解了步进电机控制的基本原理,掌握了控制步进电机转动的编程方法。更加深入地了解了微机原理这门课程。

电子科技大学微机实验报告 实验5
TOP