单片机电风扇汇编.docx

上传人:b****7 文档编号:9073726 上传时间:2023-02-03 格式:DOCX 页数:14 大小:51.33KB
下载 相关 举报
单片机电风扇汇编.docx_第1页
第1页 / 共14页
单片机电风扇汇编.docx_第2页
第2页 / 共14页
单片机电风扇汇编.docx_第3页
第3页 / 共14页
单片机电风扇汇编.docx_第4页
第4页 / 共14页
单片机电风扇汇编.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机电风扇汇编.docx

《单片机电风扇汇编.docx》由会员分享,可在线阅读,更多相关《单片机电风扇汇编.docx(14页珍藏版)》请在冰豆网上搜索。

单片机电风扇汇编.docx

单片机电风扇汇编

东南大学自动化学院

实验报告

课程名称:

MCU(微控制器)综合课程设计

实验名称:

综合课程设计

院(系):

自动化学院专业:

自动化专业

姓名:

学号:

实验室:

测控技术实验室实验组别:

同组人员:

实验时间:

2011年6月10日

评定成绩:

审阅教师:

一.实验目的和要求……………………………………………………3

二.实验原理……………………………………………………………3

三.实验方案与实验步骤………………………………………………4

四.实验设备与器材配置………………………………………………7

五.实验记录……………………………………………………………7

六.实验总结……………………………………………………………7

七.思考题………………………………………………………………7

八.汇编语言源代码……………………………………………………7

一.课程设计目的和要求

1、课程设计题目:

家用电器模拟:

电风扇

2、模拟设计要求:

(1)初始加电程序运行,电风扇无速度,只有按下风速选择的任一按键,电风扇开始工作。

此时,只要进行新的速度选择也不按下停止键,电风扇就将按设计的风速持续运行。

(2)开启摇头开关后,模拟风扇摇头,并且在摇头状态中也可进行风扇的调速。

(3)利用LED流水灯的间隔时间模拟风速,程序运行后呈现较长的间隔时间以模拟风扇上电但未运行。

按键盘上的键选择速度,并用数码管显示速度选择的数字。

拨码开关为摇头开关,开关打开后,流水灯反向表示摇头。

二.实验原理

1、:

使用硬件设备

数码管、发光二极管、键盘、拨码开关。

实验不需要接线。

2、设计思想

(1)整体设计的主要程序使用定时器定时中断实现。

(2)实验要求二极管的流水灯按照按键的不同以不同的间隔时间依次点亮,则将按键的键码作为流水灯的间隔时间,设置一定的中断时间,中断每运行一次则INCR1,再将R1与A作比较(再次之前已经经过键盘扫描,将键盘的键码赋值给了A),若一致则运行流水灯,若不一致则再次运行中断,由此,按不同的键有不同的键码,则中断运行次数不同,流水的时间间隔自然不同。

(3)为保证在按键后能够及时的改变风速,则每次中断时扫描一次键盘,并计算键码显示在数码管上。

(4)每次中断扫描拨码开关状态,以便能够及时的判断是否要处于摇头状态。

(5)数码管显示风速选择的数字,并实时刷新。

三.实验步骤与实验方案

 

1、程序流程图

(1)主程序

 

 

(2)中断服务程序:

2、实验步骤:

(1)在Medwin中完成项目的创建;

(2)添加自己编写的.asm源文件并编译/汇编;

(3)生成代码并下载到仿真器上;

(4)程序运行。

返回监控后可查看寄存器和存储器的值。

(5)按键盘选择风速,波动拨码开关选择摇头。

四.实验设备与器材配置

PC机;

EEEC-030型单片机/ISP综合设计实验装置

五.实验分析与总结

1、此次实验中加深了对中断程序的理解。

最开始的程序流水灯的部分用的是软件延时来实现,但是在调试过程中发现,利用延时会让程序一直处于第一个延时的循环中,在这种情况下无法进行按键的二次选择,拨码开关也只能够选择一次,除了关闭程序以外也没有按预想的实现风扇的停止状态。

在这种情况下,我开始在程序里加入中断,以实现能够每次都进行键盘的扫描。

加入中断的开始阶段,风速仍然是使用软件延时的流水灯在中断外部以调用子程序的方式来实现的,但是调试过程中发现,中断的调用不理想,延时不能按预想的所实现,常常会出现所有的发光二极管一起亮起的状态,出现问题之后请教了同学使用了现在以中断的最大等待时间作为流水灯间隔时间的方式。

INCR1;时间加1

MOVA,R5

XRLA,R1;最大等待时间到?

JNZEE1;没到,转到EE1

R5为储存的输入键码,以不同的R5实现延时,从而模拟不同的风速变化。

在之后的调节中还出现过虽然按了键码但是流水灯速度不变的情况,经过查看寄存器发现是R1在流水灯运行、按键重新选择时没有进行清零,从而时的R1的数值一直处于同一个状态。

2、在调试中由于中断程序无法进行单步调试,全速运行时无法观察寄存器的变化,则设置断点,全速运行程序停止,在断点处单步运行观察寄存器。

而在软件中还有“执行到…”的选择,只要选择认为需要调试的程序部分的地址或者标号,就可以执行到此处,然后就可以单步跟踪程序的运行了。

3、由于自己的能力有限,所以此次设计只是进行了简单的模拟,实现了相对简单的功能。

作为程序的改进,还可以加上时间的设置,可在初始化寄存器事设定一定的初值,当在一定风速时,不同的拨码开关波动后,R1与此初值比较,当R1与设置的初值相等,风扇回复按键“0”状态,以实现电风扇的定时。

六.附上源代码

ORG0000H

LJMPMAIN

ORG000BH

AJMPIINT0

MAIN:

NOP

NOP

ACALLLED1

MOVR1,#00H

MOVR6,#00H

MOVR3,#00H

MOVR5,#00H

MOVIE,#00H;关中断

MOVTMOD,#01H;设置定时器定时方式

MOVTH0,#0E0H

MOVTL0,#0E0H;初值

SETBTR0

SETBEA

SETBET0;开中断,启动定时

HERE:

ACALLSHOW1;数码管刷新,等待中断

JMPHERE

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;中断服务程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

IINT0:

ACALLKS;键盘全局检测

JNZLK1;有键闭合,转移

AJMPDO

LK1:

ACALLCHECK

DO:

MOVDPTR,#0F500H

MOVXA,@DPTR

CJNEA,#00H,YURE;判断开关是否正确拨动

INCR1;时间加1

MOVA,R5

XRLA,R1;最大等待时间到?

JNZEE1;没到,转到EE1

MOVA,R7

RRA

MOVR7,A

MOVDPTR,#0F600H

MOVX@DPTR,A

MOVR1,#00H

AJMPEE1

YURE:

INCR1;时间加1

MOVA,R5

XRLA,R1;最大等待时间到?

JNZEE1;没到,转到EE1

MOVA,R7

RLA

MOVR7,A

MOVDPTR,#0F600H

MOVX@DPTR,A

MOVR1,#00H

EE1:

MOVTH0,#0E0H

MOVTL0,#0E0H

SETBTR0;重设初值,启动中断

RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;LED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LED1:

ANLA,#07H;模8

MOVR0,A

CJNER0,#00H,L1

MOVA,#80H

AJMPLL

L1:

CJNER0,#01H,L2

MOVA,#01H

AJMPLL

L2:

CJNER0,#02H,L3

MOVA,#02H

AJMPLL

L3:

CJNER0,#03H,L4

MOVA,#04H

AJMPLL

L4:

CJNER0,#04H,L5

MOVA,#08H

AJMPLL

L5:

CJNER0,#05H,L6

MOVA,#10H

AJMPLL

L6:

CJNER0,#06H,L7

MOVA,#20H

AJMPLL

L7:

MOVA,#40H

LL:

CPLA;取反输出

MOVR7,A;R7存LED的值

MOVDPTR,#0F600H

MOVX@DPTR,A

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;键盘扫描;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CHECK:

MOVR2,#0FEH;低4位为要选通的行线值

MOVR4,#00H;行号

CHECK1:

MOVA,R2

MOVDPTR,#0F700H

MOVX@DPTR,A

MOVXA,@DPTR;读入,高4位为列线状态

ANLA,#0F0H;屏蔽无效的低4位行线状态

JBACC.4,LONE;检测第一列,没按下跳转至下一列

MOVA,#0CH;该列第一个键码值为0CH

AJMPLKP

LONE:

JBACC.5,LTWO;检测第二列

MOVA,#08H

AJMPLKP

LTWO:

JBACC.6,LTHR;检测第三列

MOVA,#04H

AJMPLKP

LTHR:

JBACC.7,NEXT;检测第四列

MOVA,#00H

LKP:

ADDA,R4;计算键码

MOVR5,A

ACALLSHOW1;数码管显示最大等待时间

AJMPTC;键码存在R5中

NEXT:

MOVA,R2

JNBACC.3,CHECK;4行都已扫描一遍,转回重新从第一行开始

RLA

MOVR2,A;选通值选中下一行

INCR4

AJMPCHECK1

TC:

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;软件延时子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DELAY:

MOVR2,#0C8H

LOOP:

NOP

NOP

NOP

DJNZR2,LOOP

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;数码管刷新;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SHOW1:

PUSHACC

MOVR0,#00H

QQ1:

MOVA,#0FBH

MOVDPTR,#0F400H

MOVX@DPTR,A;输出位码

MOVA,R6;R6存分数

MOVB,#0AH;B存10,做除法时用

DIVAB;除法后,A存十位数字,B存个位数字

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#0F300H

MOVX@DPTR,A;十位输出

ACALLDELAY;调延时

MOVA,#0FDH

MOVDPTR,#0F400H

MOVX@DPTR,A;输出位码

MOVA,B

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#0F300H

MOVX@DPTR,A;个位输出

ACALLDELAY;调延时

MOVA,#0FEH

MOVDPTR,#0F400H

MOVX@DPTR,A;输出位码

MOVA,R5;R5存最大设定时间(键盘)

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#0F300H

MOVX@DPTR,A;输出键盘值

ACALLDELAY;调延时

CJNER0,#3AH,QQ

AJMPQQ2

QQ:

INCR0

AJMPQQ1

QQ2:

POPACC

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;全局键盘检测;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KS:

MOVDPTR,#0F700H

MOVA,#0F0H;4行全选中

MOVX@DPTR,A

MOVXA,@DPTR

CPLA;A取反,若无键按下,高四位就全为0

ANLA,#0F0H;屏蔽无效的低4位行线状态

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;段码表;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TAB:

DB0C0H

DB0F9H

DB0A4H

DB0B0H

DB99H

DB92H

DB82H

DB0F8H

DB80H

DB90H

DB88H

DB83H

DB0C6H

DB0A1H

DB86H

DB8EH

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

END

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

当前位置:首页 > 解决方案 > 学习计划

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

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