按键中断,改变流水灯方向的汇编程序

合集下载

3-1单键改变8流水灯状态

3-1单键改变8流水灯状态

Page 8
单键改变8流水灯状态 3-1 单键改变 流水灯状态
Priority)——中断优先级选择 3)IP(Interrupt Priority)——中断优先级选择 IP( MCS-51单片机具有高、低两级中断优先级, MCS-51单片机具有高、低两级中断优先级,每个中断源可通过中断 单片机具有高 优先级寄存器IP设置中断优先级。初始状态为00H IP设置中断优先级 00H。 优先级寄存器IP设置中断优先级。初始状态为00H。
Page 10
单键改变8流水灯状态 3-1 单键改变 流水灯状态
(4)中断处理的过程 中断处理过程大致分为三步:中断请求、中断响应、中断处理。 中断处理过程大致分为三步:中断请求、中断响应、中断处理。 值得注意的是: 在中断处理过程中, 值得注意的是:①在中断处理过程中,因为中断程序中断了单片机 正在处理的工作,因此必须将有关寄存器数据进行压栈保护—— ——即 正在处理的工作,因此必须将有关寄存器数据进行压栈保护——即 保护现场,待中断服务程序完成后再出栈恢复数据——即现场恢复; ——即现场恢复 保护现场,待中断服务程序完成后再出栈恢复数据——即现场恢复; ②中断返回指令为RETI,绝对不可以使用子程序返回指令RET。 中断返回指令为RETI,绝对不可以使用子程序返回指令RET。 RETI RET
*串行接口:串行口接收(发送)一次数据完毕; 串行接口:串行口接收(发送)一次数据完毕;
(P3.2)有中断信号输入 低电平触发或下降沿触发); 有中断信号输入( *外部中断0:该引脚 INT0(P3.2)有中断信号输入(低电平触发或下降沿触发); 外部中断0 (P3.3)有中断信号输入 低电平触发或下降沿触发) 有中断信号输入( *外部中断1:该引脚 INT1(P3.3)有中断信号输入(低电平触发或下降沿触发) 。 外部中断1

中断实现流水灯程序编写

中断实现流水灯程序编写

;启动T1
MOV R3,#0AH
;置0.5s定时的循环初值为10
DISP: MOV A, #0FEH
;P1端口输出低电平点亮发光二极管
MOV P1,A
;P1端口初始化亮灯状态
SJMP $
;主程序完成初始化,等待中断
;**********中断服务子程序 ************* ;中断服务子程序名:CONT ;程序功能:定时器50ms定时时间到时进入中断服务程序:重置计数初值, 判断0.5s到则移位流水灯
程序结构包括主程序(定时器的初始化和中断初始化设 置)和中断服务子程序。
;*********** 0.5s移位流水灯中3_2.asm
;程序功能:采用定时器1的中断方式实现0.5s移位的流水灯功能
ORG 0000H
;程序入口
AJMP MAIN
;指向主程序
CONT: EXIT:
MOV MOV DJNZ MOV RL MOV RETI END
TH1,#3CH TL1,#0B0H R3,EXIT R3,#0AH A P1,A
;重置50ms定时初值
;判断0.5s定时到否 ;重置0.5s循环初值 ;流水灯左移一位输出显示
;中断返回
中断实现流水灯程序编写
【例3.2】 中断方式实现的0.5s定时。采用本项目任务 1中的硬件电路,用中断方式
实现每隔0.5s向左移位一次的流水灯控制。 (1)题意分析
本实例是用定时器作为中断源,每隔50ms的定时时间产 生一个定时器中断请求,在中断服务子程序中判断是否到 0.5s(统计50ms的次数为10次时),时间到则实现信号灯的 一次左移操作。
ORG 001BH
;声明定时器1中断入口地址
AJMP CONT

最新单片机课程设计 外部中断控制流水灯变化

最新单片机课程设计 外部中断控制流水灯变化

单片机课程设计报告设计题目:外部中断控制流水灯变化姓名一.设计目的通过学习单片机工作原理和各种工作方式及各管脚的功能,想通过P3口的俩管脚P3.2和P3.3第二功能,即外部中断来使CPU响应,达到控制流水灯的目的。

二.设计要求主程序实现8个灯从P2.0到P2.7依次亮灭,灯与灯之间间歇约0.5秒.当P3.3口是低电平时,灯从P2.7到P2.0依次亮灭,灯与灯之之间间歇约0.5秒.循环3次返回主程序.当P3.2口是低电平时,灯全灭,当P3.2口是高电平时,返回主程序.当同时使P3.2和P3.3为低电平时,灯全灭,因为外部中断0的优先级高于外部中断1的优先级. 三.MCS-51的硬件结构:四.P3口的状态P3口是双功能口,默认为第一功能(通用I/O口),通过编程可设置第二功能。

五.中断传送方式:中断方式则是在外设为数据传送做好准备之后,就向CPU发出中断请求信号(相当于通知CPU)。

CPU接收到中断请求信号之后立即作出响应,暂停正在执行的原程序(主程序),而转去外设的数据输入输出服务,待服务完之后,程序返回。

CPU再继续执行被中断的原程序。

六.外部中断外部中断是指从单片机外部引脚输入请求信号。

输入/输出的中断请求、实时事件的中断请求、掉电和设备故障的中断请求都可以作为外部中断源,从引脚INT0、INT1输入。

外部中断请求、有两种触发方式:电平触发及跳变(边沿)触发。

这两种触发方式可以通过对特殊功能寄存器TCON编程来选择。

七.电路原理逻辑图如下:P3.3 P3.2 灯亮情况0 0 全灭0 1 全灭1 0 从P2.0到P2.7依次亮灭1 1 从P2.7到P2.0依次亮灭八.实验硬件电路图如下九.程序流程图如下十.程序清单ORG 0000HAJMP STARTORG 0003HAJMP SERORG 0013HAJMP SER1ORG 0030HSTART: MOV I E,#85H ;外部中断0和1都开MOV I P,#01H ;外部中断0级优先高MOV TCON,#00H ;低电平出发MAIN: MOV A,#0FEH ;P2.0口亮MOV P2,AACALL TIMO ;延时RL A ;循环左移SJMP RESSER1: MOV R2,#18H ;循环3次MOV A,#0EFH ;P2.7口亮SER2: MOV P2,AACALL TIMO ;延时RR A ;循环右移DJNZ R2,SER2RETITIMO: MOV R5,#50 ;延时子程序LOOP1: MOV R6,#100LOOP2: MOV R7,#50LOOP3: DJNZ R7,LOOP3DJNZ R6,LOOP2DJNZ R5,LOOP1RETSER: MOV P2,#0FFH ;灯全灭RETIEND十一.课程设计总结:通过本次课程设计,发现了学习中一些不足的地方,及时进行了补充学习。

流水灯C语言及汇编程序

流水灯C语言及汇编程序

一、51单片机流水灯C语言源程序文件说明:流水灯C程序程序说明:MCU采用AT89S51,外接11.0592M晶振,P2口输出#include<reg51.h> //51系列单片机定义文件#define uchar unsigned char //定义无符号字符#define uint unsigned int //定义无符号整数void delay(uint); //声明延时函数void main(void){uint i;uchar temp;while(1){temp=0x01;for(i=0;i<8;i++) //8个流水灯逐个闪动{P2=~temp;delay(100); //调用延时函数temp<<=1;}temp=0x80;for(i=0;i<8;i++) //8个流水灯反向逐个闪动{P2=~temp;delay(100); //调用延时函数temp>>=1;}temp=0xFE;for(i=0;i<8;i++) //8个流水灯依次全部点亮{P2=temp;delay(100); //调用延时函数temp<<=1;}temp=0x7F;for(i=0;i<8;i++) //8个流水灯依次反向全部点亮 {P2=temp;delay(100); //调用延时函数temp>>=1;}}}void delay(uint t) //定义延时函数{register uint bt;for(;t;t--)for(bt=0;bt<255;bt++);}二、汇编程序:(同样P2为输出端口)左移依次循环:ORG 0000HSJMP MAINORG 0030H 主程序开始的地址MAIN: MOV R2,#08H 设置循环次数MOV A,#0FEH 赋初值NEXT: MOV P2,A 把初值送到P2口LCALL DELAY 延时RL A 左移一位DJNZ R2,NEXT 判断循环次数是否到,没有跳转到NEXT继续执行SJMP MAIN 重复循环DELAY: MOV R3,#0FFH 延时程序DEL2: MOV R4,#0FFHDEL1: NOPDJNZ R4,DEL1DJNZ R3,DEL2RETEND 结束二边散开后缩进(查表指令)ORG 0000HSJMP MAINORG 0030HMAIN: MOV SP,#60HMOV DPTR,#TAB 把表首地址送到DPTR MOV R2,#06 设置循环次数LOOP: CLR A 清零AMOVC A,@A+DPTR 查表指令MOV P1,A 把A中的值送到P1口 LCALL DELAY 延时INC DPTR 改变数据指针DJNZ R2,LOOP 判断循环是否到,没有跳转LOOP SJMP MAIN 重复循环DELAY: MOV R0.#10 延时DEL2: MOV R1,#200DEL1: MOV R3,#255DJNZ R3,$DJNZ R1,DEL1DJNZ R0,DEL2RETTAB: DB 0E7H,0DBH,0BDH,7EH,0BDH,0DBH 查表END。

4外部中断按键控制流水灯综述综述

4外部中断按键控制流水灯综述综述

全局中断使能位:
EA :全局中断使能位(总允许位)。
=0:全局中断禁止;=1:全局中断允许。
中断服务函数
中断函数的写法
void 函数名() interrupt 中断编号
{

}
二、中断方式实现流水灯
1.硬件电路













2.程序设计
实验:
1、利用库函数、逻辑运算实现流水灯。
部结构。
按键实物图
按键内部结构图
按键去抖动的硬件电路
二、按键设计
对于按键的使用一般有
两种方式,即独立式和矩阵
式(也称为行列式)。
独立式:
按键设
计简单,但
占用单片
机的硬件
资源较多。
矩阵式:
按键设
计复杂,但
却能从很
大程度上
节省单片
机的硬件
资源。
独立式按键结构电路图
任务实施



实现按键控制小灯
优先权排队问题。同一优先级的中断优先权排队,
由中断系统硬件确定的自然优先级形成,其排列如
所示:
3.中断处理
1)中断系统的功能
(2)
(1)
• 实现中断响应
和中断返回
• 实现优先级排队
(3)
• 实现中断嵌套
MCS-51单片机的中断系统结构
主程序
中断请求
中断响应
执行主
程序
断点
继续执行
主程序
执行
中断
处理
程序
中断返回
中断响应条件

用中断做流水灯课程设计

用中断做流水灯课程设计

用中断做流水灯课程设计一、课程目标知识目标:1. 让学生理解中断的概念,掌握中断在流水灯控制中的应用原理;2. 学会使用中断功能实现流水灯效果,了解相关电路连接和编程方法;3. 掌握中断优先级和中断嵌套的基本知识,提高对多中断处理的能力。

技能目标:1. 培养学生动手实践能力,能独立完成中断流水灯电路搭建和程序编写;2. 提高学生分析问题和解决问题的能力,能针对实际问题进行中断程序的调试和优化;3. 培养学生团队合作精神,能在小组讨论中积极参与,共同完成中断流水灯项目。

情感态度价值观目标:1. 激发学生对电子技术和编程的兴趣,培养其探索精神;2. 培养学生严谨、细心的学习态度,养成科学规范的操作习惯;3. 增强学生的自信心,使其在成功实现中断流水灯项目的过程中,感受到学习的乐趣和成就感。

课程性质:本课程为电子技术和编程实践课程,结合理论知识和实际操作,培养学生的动手能力和创新能力。

学生特点:学生具备基本的电子电路知识和编程基础,对实际操作有较高的兴趣。

教学要求:教师需关注学生的个体差异,采用启发式教学,引导学生主动探索,注重实践与理论相结合,提高学生的综合能力。

在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。

二、教学内容1. 中断概念及原理:回顾中断的定义、作用和分类,重点讲解中断响应过程和中断优先级管理。

教材章节:第三章第三节“中断与中断处理”2. 流水灯电路设计:介绍流水灯电路的基本原理,分析电路元件的选型和连接方式。

教材章节:第二章第二节“组合逻辑电路设计”3. 中断编程:讲解中断编程的基本方法,包括中断向量表、中断服务程序和中断返回等。

教材章节:第五章第二节“中断编程与应用”4. 流水灯程序编写:指导学生使用中断编程方法编写流水灯程序,实现流水灯效果。

教材章节:第五章第三节“中断在流水灯控制中的应用”5. 中断优先级和中断嵌套:分析多中断处理时的问题,讲解中断优先级和中断嵌套的解决方法。

流水灯[汇编程序]

流水灯[汇编程序]

4.1 流水灯程序介绍:利用P1 口通过一定延时轮流产生低电平输出,以达到发光二极管轮流亮的效果。

实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。

程序实例(LAMP.ASM)ORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV P1,A ;灭所有的灯MOV A,#11111110BMAIN1:MOV P1,A ;开最左边的灯ACALL DELAY ;延时RL A ;将开的灯向右边移AJMP MAIN ;循环DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEND4.2 方波输出程序介绍:P1.0 口输出高电平,延时后再输出低电平,循环输出产生方波。

实际应用中例如:波形发生器。

程序实例(FAN.ASM):ORG 0000HMAIN:;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAYSETB P1.0ACALL DELAY10CLR P1.0AJMP MAIN;////////////////////////////////////////////////// DELAY:MOV R1,#0FFHDJNZ R1,$RETEND五、定时器功能实例5.1 定时1秒报警程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。

实际应用例如:定时报警器。

程序实例(DIN1.ASM):ORG 0000HAJMP MAINORG 000BHAJMP DIN0 ;定时器0入口MAIN:TFLA G EQU 34H ;时间秒标志,判是否到50个0.2秒,即50*0.2=1秒MOV TMOD,#00000001B;定时器0工作于方式1MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒11SETB EA ;开总中断SETB ET0 ;开定时器0中断允许SETB TR0 ;开定时0运行SETB P1.0LOOP: AJMP LOOPDIN0:;是否到一秒//////////////////////////////////////// INCC: INC TFLAGMOV A,TFLAGCJNE A,#20,REMOV TFLAG,#00HCPL P1.0;////////////////////////////////////////////////// RE:MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒RETIEND5.2 频率输出公式介绍:f=1/ts51 使用12M晶振,一个周期是1微秒使用定时器1工作于方式0,最大值为65535,以产生200HZ的频率为例:200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电12平或低电平的时间为2500 微秒。

流水灯(汇编+c)

流水灯(汇编+c)

流水灯实验(C语言和汇编)程序A:(汇编)ORG 0000HSTART:MOV P1,#01111111B ;最下面的LED点亮LCALL DELAYMOV P1,#10111111B ;最下面第二个的LED点亮LCALL DELAYMOV P1,#11011111B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#11101111BLCALL DELAYMOV P1,#11110111BLCALL DELAYMOV P1,#11111011BLCALL DELAYMOV P1,#11111101BLCALL DELAYMOV P1,#11111110BLCALL DELAYMOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:(汇编)org 00h ;程序上电从00h开始ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成11111110loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend程序C:(C语言)#include<reg51.h>#include <intrins.h>void delayms(unsigned char ms) // 延时子程序{unsigned char i;while(ms--){for(i = 0; i < 120; i++);}}main(){unsigned char LED;LED = 0xfe;P1 = LED;while(1){delayms(200);LED = LED>>1; //循环右移1位,点亮下一个LEDP1 = LED;}}[本站(中国单片机网),摘自/jiaocheng/yuanchuang/2006 07/1235.html]。

最新外部中断0和1控制双向流水灯设计

最新外部中断0和1控制双向流水灯设计

外部中断0和1控制双向流水灯设计外部中断0和1控制双向流水灯设计一.外部中断的基本知识中断是为单片机具有对外部或内部的事件实时处理而设置的,中断功能是单片机最重要的功能之一。

51打片机内部共有5个中断源,外部中断0,外部中断1,定时器/计数器0中断,定时器/计数器1中断,串行口中断。

例:EX0为外部中断0允许位,EX0=1,打开外部中断0中断;EX0=0,关闭外部中断0中断。

IT0为外部中断0触发方式选择位,IT0=0,为电平触发方式,每个机器周期的S5P2采样INT0引脚,若INT0为低电平,则置1,否则清0;IT0=1,为跳变沿触发方式,当一个机器周期采样到INT0为低电平时,则IE1置1.IE1=1,表示外部中断正在向CPU申请中断。

当CPU响应中断,转向中断服务程序时,该位由硬件清0。

二.双向流水灯程序设计#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charuchar led1=0xfe;uchar led2=0x7f;void delay(uint x) //延时子程序{uint i,j;for(i=x;i>0;i--)for(j=120;j>0;j--);}void main() //main主程序{EA=1; //开总中断EX0=1; //开外部中断0EX1=1;IT0=0;IT1=0; //外部中断1的处罚方式为电平触发方式while(1);}void int0()interrupt 0{uint a;for(a=0;a<8;a++){P1=led1;delay(500);led1=_crol_(led1,1); //左移库函数P1=0xff;}}void int1()interrupt 2{uint a;for(a=0;a<8;a++){P1=led2;delay(500);led2=_cror_(led2,1); //左移库函数}P1=0xff;}三.工程及模拟仿真截图四.心得体会学习,我注重的是过程,当然,我也相信,在学习的过程中只要脚踏实地的去做,就会有收获。

流水灯汇编程序

流水灯汇编程序

注意:看程序,后面说明乱了的,没删除org 00h ;开始jmp startorg 03h ;int0中断入口(p32)jmp ext0 ;到中断子程序start: mov ie,#10000001b ;中断使能mov ip,#00000001b ;中断优先mov tcon,#0000000b ;中断为电平触发mov sp,#70h ;堆栈指针loop:mov a,#0feh ;左移动初值mov r2,#08 ;左移动3次loop1: mov p1,a ;输出到P1口rl a ;含c左移动一位call delay ;延时djnz r2,loop1 ;左移动3次了吗?mov r2,#07 ;设定右移3次loop2:rr a ; 含c右移动一位mov p1,acall delaydjnz r2,loop2 ;右移动3次了吗?mov r2,#06mov a,#0fchloop3: ;含c左移动一位mov p1,a ;输出到P1口rl acall delay ;延时djnz r2,loop3 ;左移动3次了吗?mov r2,#06 ;设定右移3次loop4:mov p1,arr a ; 含c右移动一位call delaydjnz r2,loop4 ;右移动3次了吗?mov r2,#06mov a,#0f8hloop5:mov p1,a ;输出到P1口rl a ;含c左移动一位call delay ;延时djnz r2,loop5 ;左移动3次了吗?mov r2,#06 ;设定右移3次loop6:rr a ; 含c右移动一位mov p1,acall delaydjnz r2,loop6 ;右移动3次了吗?mov r2,#06mov a,#0f0hmov r2,#05loop7:mov p1,a ;输出到P1口rl a ;含c左移动一位call delay ;延时djnz r2,loop7 ;左移动3次了吗?mov r2,#05 ;设定右移3次loop8:rr a ; 含c右移动一位mov p1,acall delaydjnz r2,loop8 ;右移动3次了吗?mov a,#0bbhmov r2,#08loop9:mov p1,a ;输出到P1口rl a ;含c左移动一位call delay ;延时djnz r2,loop9 ;左移动3次了吗?mov r2,#08 ;设定右移3次loop10:rr a ; 含c右移动一位mov p1,acall delaydjnz r2,loop10 ;右移动3次了吗?mov a,#00 ;使P1全亮一次mov r2,#10 ;闪烁5次(亮灭共10次,小心了)loop11: mov p1,a ;输出到P1call delaycpl adjnz r2,loop11 ;7次到了么?没有继续否则完成mov r2,#5loop01:;loop12:mov p1,#0E7Hcall delaymov p1,#0CBHcall delaymov p1,#0BCHcall delaymov p1,#07EHcall delay;loop13:mov p1,#07EHcall delaymov p1,#0BCHcall delaymov p1,#0CBHcall delaymov p1,#0E7Hcall delaydjnz r2,loop01jmp loopext0: push acc ;把a压入堆栈push psw ;保存现场setb rs0 ;设定工作寄存器1clr rs1mov a,#00 ;使P1全亮一次mov r2,#7 ;闪烁5次(亮灭共10次,小心了)loop00:mov p1,a ;输出到P1call delaycpl adjnz r2,loop00 ;7次到了么?没有继续否则完成pop psw ;恢复现场pop accretidelay: mov r5,#25 ;延时200MSd1:mov r6,#20d2: mov r7,#250djnz r7,$djnz r6,d2djnz r5,d1retend。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档