江苏大学 单片机课程设计.docx

上传人:b****4 文档编号:3637935 上传时间:2022-11-24 格式:DOCX 页数:13 大小:121.29KB
下载 相关 举报
江苏大学 单片机课程设计.docx_第1页
第1页 / 共13页
江苏大学 单片机课程设计.docx_第2页
第2页 / 共13页
江苏大学 单片机课程设计.docx_第3页
第3页 / 共13页
江苏大学 单片机课程设计.docx_第4页
第4页 / 共13页
江苏大学 单片机课程设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

江苏大学 单片机课程设计.docx

《江苏大学 单片机课程设计.docx》由会员分享,可在线阅读,更多相关《江苏大学 单片机课程设计.docx(13页珍藏版)》请在冰豆网上搜索。

江苏大学 单片机课程设计.docx

江苏大学单片机课程设计

第一章前言

单片机作为微型计算机的一个重要分支,以广泛应用到工业控制、智能仪器和家用电器等各个领域,特别是Intel公司生产的MCS-51系列单片机,由于其集成度高、处理功能强、结构简单、可靠性高、价格低廉等一系列特点,已成为应用系统开发的首选单片机之一。

随着单片机技术的日益成熟和广泛应用,单片机技术已成为工科学生,特别是电类学生必须掌握的一门专业技术。

步进电机作为执行元件,是机电一体化的关键产品之一,随着工业自动化的发展,步进电机的应用越来越广泛,广泛应用在各自动化控制系统中,步进电机是一种用于开环控制的驱动元件。

它是用电脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的微电动机。

步进电动机已成为除直流电动机和交流电动机以外的第三类电动机。

步进电动机的发展与计算机工业密切相关。

自从步进电动机在计算机外围设备中取代小型直流电动机以后,使其设备的性能提高,很快地促进了步进电动机的发展。

另一方面,微型计算机和数字控制技术的发展,又将作为数控系统执行部件的步进电动机推广应用到其他领域,如电加工机床、小功率机械加工机床、测量仪器、光学和医疗仪器以及包装机械等。

发展趋势之一,是继续沿着小型化的方向发展。

随着电动机本身应用领域的拓宽以及各类整机的不断小型化,要求与之配套的电动机也必须越来越小,在57、42机座号的电动机应用了多年后,现在其机座号向39、35、30、25方向向下延伸。

瑞士ESCAP公司最近还研制出外径仅10mm的步进电动机。

发展趋势之二,是改圆形电动机为方形电动机。

由于电动机采用方型结构,使得转子有可能设计得比圆形大,因而其力矩体积比将大为提高。

同样机座号的电动机,方形的力矩比圆形的将提高30%-40%。

发展趋势之三,对电动机进行综合设计。

即把转子位置传感器,减速齿轮等和电动机本体综合设计在一起,这样使其能方便地组成一个闭环系统,因而具有更加优越的控制性能。

发展趋势之四,向五相和三相电动机方向发展。

目前广泛应用的二相和四相电动机,其振动和噪声较大,而五相和三相电动机具有优势性。

而就这两种电动机而言,五相电动机的驱动电路比三相电动机精密且复杂,因此三相电动机系统的价格比要比五相电动机更低一些。

随着我国制造业的发展,嵌入式系统已经成为制造业的核心技术,它被广泛地应用到工业控制、仿真系统、医疗仪器、信息家电、通信设备等众多领域。

目前,围绕嵌入式系统展开研究和开发,已经成为计算机软硬件技术发展最活跃的方向之一。

嵌入式系统不同与通常纯粹的软件系统或硬件系统,而是软件与硬件通过自爱一起的,有些功能既可以用软件实现,也可以通过硬件实现。

另外,嵌入式系统设计所面临的挑战不仅涉及到计算机软件和硬件,也不涉及到许多非计算机工程方面的问题,注入机械尺寸问题、功耗问题和制造成本问题等,即使是计算机工程方面的问题,大部分系统在实时性、可靠性和多速率等问题方面也都有特别要求。

目前,实现嵌入式系统的硬件方法主要有:

定制逻辑(ASIC),现场可编程逻辑门阵列(FPGA)和嵌入式微处理器三种。

在实际系统实施中,绝大多数系统是采用嵌入式微处理器方式,如:

单片机、单板机或嵌入式微处理器芯片等。

这是因为用微处理器实现嵌入式系统是一种十分有效的方法,它使得在不同价位上设计不同特性的产品系列成为可

能,并且能够扩展新特性以满足飞速发展变化的市场需求。

第二章系统硬件设计

2.1步进电机简介

本课程设计采用单片机软件实现对步进电机的运转控制,使用单片机的Pl口循环输出代码,经功率放大器来控制步进电机的三相绕组,从而控制步进电机运转。

步进电机以三相六拍的工作方式转动。

过改变三相通电顺序来实现转向的控制,若按A→AB→B→BC→C→CA→A次序通电为正转,则按A→AC→C→CB→B→BA→A次序通电为反转。

用89C51的P1.1、P1.2、P1.3分别按图1所示的A、B、C三信号格式送数即可,正转时输出的顺序为02H→06H→04H→0CH→08H→0AH→02H,反转时输出的顺序为02H→0AH→08H→0CH→04H→06H→02H。

2.2专用键盘显示接口芯片8279

8279是专用键盘/显示器控制芯片,能对显示器自动扫描,能识别键盘上按下键的键号;可充分提高CPU的工作效率。

8279与MCS-51接口方便,由它构成的标准键盘/显示器接口在微机应用系统中使用越来越广泛。

2.2.18279特征

●能同时执行键盘与显示器操作。

●扫描式键盘工作方式。

●有8个键盘FIFO(FirstinFirstout)存储器。

●带触点去抖动的双键锁定或N键巡回功能。

●两个8位或16位的数字显示器。

●可左/右输入的16字节显示用RAM。

●由键盘输入产生中断信号。

●扫描式传感器工作方式。

●用选通方式输入信号。

●单个16字符显示器。

●可编程扫描定时。

●工作方式可由CPU编程。

图2-18279芯片示意图

2.2.28279命令状态字

表1命令状态字

表2命令状态字

2.3其他器件选择

1.74LS373:

74LS373是八D锁存器(三态).一个封装中有八个锁存器,三态总线驱动输出,置数全并行存取,缓冲控制输入,时钟/使能输入有改善抗扰度的滞后作用。

在电路中的作用是:

由于P0口既是数据口又是地址口,所以加一个锁存器锁存地址。

2.74LS138为3线-8线译码器共有54/74S138和54/74LS138两种线路结构型式。

利用G1、/(G2A)和/(G2B)可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。

若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。

电路中的作用是:

使器件的地址连续,用三根线控制八根线。

3.74LS240:

八单线驱动器。

(反码,三态输出),这种八缓冲器和线驱动器是为提高三态输出存储地址驱动器,时钟驱动器和总线定向接收器和发射器的性能可和集成度而特意设计的。

4.7451:

8路驱动器,增强数码管显示的亮度。

2.4电路原理图及说明

MCS-51采用8279扩展的键盘、显示器的接口电路控制三相步进电机的运转,P1.1、P1.2、P1.3分别接三相步进电机的A、B、C三相,构成一个完整的单片机应用系统,设计20个键组成的键盘以输入数据与命令,8只LED显示器用于系统显示输出。

采用89C51的P1口输出信号,经放大驱动一台步进电机,电路图见附录1。

第三章系统软件设计

3.1程序流程图:

图3-1

3.2程序清单(详见附录2)

3.3调试过程

1)在调试过程中,我们遇到了以下问题:

i.按EXEC键后的速度不明显。

ii.当输入200步,1000步后,步进电机不按步数进给,无法停止。

2)问题解决方案:

i.我们将EXEC键的处理程序L3中设置步数的部分放到延时程序中LATE2,可以使调速变得明显

ii.我们将LOOP9后的程序“DJNZR4,LOOP8改为”CJNER4,#00H,LOOP8

DJNZR3,LOOP9”CJNER3,#00H,LOOP9

这样就不会让R3为0时再自减。

第四章总结

十天时间转眼间就过去了,不得不说这十天过的很充实。

刚开始,看到一切都是那么的陌生,经过三天的摸索,终于能够看懂程序,好的开始就是成功的一般,看懂了程序,心中就有了计划,第四天开始尝试着编写程序,写程序要求要求的是严谨的思维,一丝不苟的态度,以及较强的逻辑思维能力,我并不是一个专业的程序员,以前也没写过这么复杂的程序。

于是,我把程序的要求和程序的运行步骤详细的写了出来,一步一步踏踏实实,经过四天的尝试,各个程序模块已经完成,实践是检验真理的唯一标准,第一次编译出错是难免的,几个比较严重的错误已经在上面调试过程中列了出来,功夫不负有心人,在同学老师的帮助下,一个完整的程序终于写好了。

在这次实习过程中,我锻炼自己的思考能力,动手能力。

总而言之,纸上得来终觉浅,绝知此事要躬行。

附录1硬件逻辑图

附录图1

附录2程序清单

DAT_8279EQU0C000H;键盘显示接口

COM_8279EQU0C001H

ORG0000H

NOP

AJMPMAIN

ORG0030H

MAIN:

CLREA;内外程序存储器选择端,可以使用内部存储器

MOVSP,#60H;设置堆栈指针

CLRA

MOVPSW,A;程序状态字清零

MOVIE,A;中断允许寄存器清零

MOVR0,#7FH

INIT:

MOV@R0,A;清除CPURAM

DJNZR0,INIT

INIT8279:

MOVDPTR,#COM_8279;初始化8279

MOVX@DPTR,A

MOVA,#34H;分频设置

MOVX@DPTR,A

ACALLOFFLED;调用子程序清除8279RAM

MOVDPTR,#COM_8279

MOVA,#80H;写显示RAM命令,从左面第一个LED开始进行

MOVX@DPTR,A

BACK:

MOVDPTR,#DAT_8279;写入数据进行显示

MOVA,#81H

MOVX@DPTR,A;LED数码管显示为q

MOV30H,#80H;LED数值所在地址放入30H

MOV31H,#40H;存放熟知的地址在31H,

WAIT:

ACALLSCANKEY

JNCWAIT;无键跳转

MOVA,R1

JBACC.4,COMMKEY;判断是否为命令键,是则跳转,不是则顺序执行

KEYNUM:

MOVA,30H;有键赋值,LED数值给A

MOVDPTR,#COM_8279

MOVX@DPTR,A;把LED数值送到端口地址

MOVA,R1;键值给A

MOVR0,31H

MOV@R0,A;将键盘真实值送到40H中(此程序保证键盘真实值被保留)

INC31H;31H自加,指向41H

MOVDPTR,#DISPCODE;段代码给数据指针

MOVCA,@A+DPTR;键值是多少就偏移多少单元

MOVDPTR,#DAT_8279

MOVX@DPTR,A;将键值的段代码送到显示接口

INC30H;30H内容加一,LED数值加一

MOVA,30H;LED数值送给A

CJNEA,#88H,WAIT;判断LED八个显示是否全部被操作,若没有则返回继续读键值

MOV30H,#80H;全部被操作后,从最左边重新开始

MOV31H,#40H

SJMPWAIT;以上程序保证了8个数码管全部显示

COMMKEY:

MOVDPTR,#PROGCOMM;其它键的处理与命令,PROGCOMM首地址给数据指针

MOVA,R1

ANLA,#03H;00000011相与,只看后两位

RLA;PROGCOMM中各句程序间相隔两个单元,保证跳转正常

JMP@A+DPTR;判断执行哪部操作

PROGCOMM:

AJMPLASTP

AJMPNEXTP

AJMPEXECP

LASTP:

MOVR2,#00H;实现电机的点动正转

MOVDPTR,#NUMBER1;正转首地址

L1:

MOVA,R2

MOVCA,@A+DPTR

MOVP1,A;电动机六拍依次给P1口,每输入一次调用一次延时,共六次

ACALLDELAY

INCR2

MOVA,R2

CJNEA,#06H,L1

RET

NEXTP:

MOVR2,#00H;实现电机的点动反转

MOVDPTR,#NUMBER2;反转首地址

L2:

MOVA,R2

MOVCA,@A+DPTR

MOVP1,A;电动机六拍依次给P1口,每输入一次调用一次延时,共六次

ACALLDELAY

INCR2

MOVA,R2

CJNEA,#06H,L2

RET

EXECP:

ACALLTIME;调用步进停止转动电机

RET

OFFLED:

MOVA,#0DFH;共阳极数码管,11011111,显示RAM置为FF,数码管关闭

MOVDPTR,#COM_8279

MOVX@DPTR,A;将状态字送给端口地址

OFFLED1:

MOVXA,@DPTR

JBACC.7,OFFLED1

RET;判断是否清0完毕,清除完则返回主程序

SCANKEY:

MOVDPTR,#COM_8279;等待按键

MOVXA,@DPTR;接口地址得到的数值给A

ANLA,#07H;00000111相与,只看后三位状态

CJNEA,#00H,HAVEKEY;后三位不为零则有键输入,跳转到HAVEKEY

CLRC;无按键C清零

RET;返回

HAVEKEY:

MOVDPTR,#DAT_8279;有键读键值

MOVXA,@DPTR;键值给A

MOVB,A;备份键值

MOVR1,#00H

MOVDPTR,#KEYCODE;;查键值表,首地址取出,放到数据指针中

KEYLOOP:

CLRA

MOVCA,@A+DPTR;首地址键值给A

CJNEA,B,NOKEY;比较A与读入键值大小,若相等则找到键值,否则继续寻找

AJMPFOUNDKEY;找到键值,进行处理

NOKEY:

INCDPTR;指针偏移一个单元

INCR1;键值大小增加一

AJMPKEYLOOP;未找到循环继续找

FOUNDKEY:

MOVA,R1;键值大小给A

SETBC;C置一并返回

RET

NUMBER1:

DB02H,06H,04H,0CH,08H,0AH

NUMBER2:

DB02H,0AH,08H,0CH,04H,06H

LATE:

MOVA,44H;调速延时循环

SWAPA

ORLA,45H

MOVR7,A

L3:

DJNZR7,L3

DJNZR6,LATE

RET

DELAY:

MOVR7,#20H;点动延时循环

DELAY1:

MOVR6,#0EFH

DJNZR6,$

DJNZR7,DELAY1

RET

KEYCODE:

DB0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH

DB0D1H,0D9H,0DAH,0C3H,0CBH,0D2H,0D3H,0DBH

COMCODE:

DB0E3H,0E2H,0E1H,00H

DISPCODE:

DB0CH,9FH,4AH,0BH,99H,29H,28H,8FH

DB08H,09H,88H,38H,6CH,1AH,68H,0E8H

DB0C8H,3AH,0ECH,0FFH

TIME:

MOVA,40H;把千位百位放到R3

SWAPA;高低四位交换

ORLA,41H;逻辑或

MOVR3,A

MOVA,42H;把十位个位放到R4

SWAPA

ORLA,43H

MOVR4,A

L5:

MOVR2,#00H

L4:

MOVDPTR,#NUMBER1;电机开始步进转动

MOVA,R2

MOVCA,@A+DPTR

MOVP1,A

ACALLLATE

INCR2

ACALLCTIME1;调用步距程序

MOVA,R2

CJNEA,#06H,L4

AJMPL5

CTIME1:

CJNER4,#00H,MM1;R4不为零则转移

CJNER3,#00H,MM2;R3不为零则转

AJMPMM4;都为零时转到MM4

MM1:

DJNZR4,MM5;R4减1,不为零则转移

AJMPMM6;为零则转移到MM6

MM6:

LCALLSHOW1;调用显示程序

SJMPCTIME1

MM2:

DECR3;R3减1

SJMPMM1

MM4:

LCALLSHOW1

LJMPBACK;步进到零时回到初值

MM5:

LCALLSHOW1;调用显示程序

RET

SHOW1:

MOVR0,#40H;把改变后的千位百位值再送回显示的地址

MOVA,R3

ANLA,#0F0H

SWAPA

MOV@R0,A

INCR0

MOVA,R3

ANLA,#0FH

MOV@R0,A

INCR0

MOVA,R4;把改变后的十位个位值再送回显示的地址

ANLA,#0F0H

SWAPA

MOV@R0,A

INCR0

MOVA,R4

ANLA,#0FH

MOV@R0,A

LCALLSHOW2

RET

SHOW2:

MOV30H,#80H;把改变后的值都显示出来

MOV31H,#40H

MOVR5,#08H;一共八位

L6:

MOVDPTR,#COM_8279;键盘显示接口

MOVA,30H

MOVX@DPTR,A

MOVR0,31H;取40H中的数据送给R0

MOVA,@R0

MOVDPTR,#DISPCODE;取段代码

MOVCA,@A+DPTR

MOVDPTR,#DAT_8279;送键盘显示接口

MOVX@DPTR,A

INC31H;送下一位数据

INC30H

DJNZR5,L6;送完八位结束

RET

END

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1