搜档网
当前位置:搜档网 › 用汇编实现利用中断控制LED灯定时的亮和灭

用汇编实现利用中断控制LED灯定时的亮和灭

用汇编实现利用中断控制LED灯定时的亮和灭
用汇编实现利用中断控制LED灯定时的亮和灭

用汇编实现利用中断控制LED灯定时的亮和灭

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

;AVR汇编程序实例

;使用INT0、INT1控制LED数码管显示

;Mega16 4MHz

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

.include "m16def.inc"

.def temp = r23 ;临时变量

.def counter = r24 ;计数变量

.def flag=r25

;中断向量区配置,FLASH空间$000~$028

.org $000

jmp RESET ; 复位处理

jmp EXT_INT0 ; IRQ0 中断向量

nop

reti ; Timer2 比较中断向量

nop

reti ; Timer2 溢出中断向量

nop

reti ; Timer1 捕捉中断向量

nop

reti ; Timer1 比较A 中断向量

nop

reti ; Timer1 比较B 中断向量

nop

reti ; Timer1 溢出中断向量

nop

reti ; Timer0 溢出中断向量

nop

reti ; SPI 传输结束中断向量

nop

reti ; USART RX 结束中断向量

nop

reti ; UDR 空中断向量

nop

reti ; USART TX 结束中断向量

nop

reti ; ADC 转换结束中断向量

nop

reti ; EEPROM 就绪中断向量

nop

reti ; 模拟比较器中断向量

nop

reti ; 两线串行接口中断向量

nop

reti ; IRQ2 中断向量

nop

reti ; 定时器0 比较中断向量

nop

reti ; SPM 就绪中断向量

nop

.org $02A

RESET: ; 上电初始化程序

ldi r16, high(RAMEND)

out SPH, r16

ldi r16, low(RAMEND)

out SPL, r16 ; 设置堆栈指针为RAM 的顶部ldi r16, 156

ser temp

out ddra, temp ; 设置PORTA为输出,段码输出out porta,temp ; 设置PORTA输出全1

;设置中断方式

ldi temp, 0x0a

out mcucr, temp ; INT0、INT1下降沿触发

ldi temp, 0xc0

out gicr, temp ; 允许INT0、INT1中断

out gifr, temp ; 清除INT0、INT1中断标志位

clr counter

clr flag

sei ; 使能中断

state: ldi zl, low(led_7 * 2)

ldi zh, high(led_7 * 2) ; Z寄存器取得7段码组的首指针clr counter

loop:

cpi flag,1

brbs 1,stop

cpi counter,0x10

brbs 1,state

lpm

inc counter

inc zl

out porta, r0

call delay

rjmp loop

stop: cpi flag,0

brbs 1,loop

rjmp stop

EXT_INT0: in temp, sreg

push temp

;mov temp,counter

;push temp

cpi flag,1

brbs 1,abc

inc flag

;pop temp

;mov counter, temp

pop temp

out sreg, temp ; 中断现场恢复

reti

abc: dec flag

pop temp

;mov counter,temp

;pop temp

out sreg, temp ; 中断现场恢复

reti

led_7: ;7段码表

.db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07

.db 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

实验五 流水灯与中断控制

一、实验设备 (1)PC一台 (2)单片机多功能试验板一块 (3)KEIL uVision 4.22 集成开发环境、STC-ISP烧录软件、串口调试助手(电子工程基础实验QQ群文件共享) 二、实验目的 (1)了解单片机的4组I/O端口 (2)掌握通过串口通信控制LED灯的方法 (3)复习巩固C语言知识 三、实验要求与任务 使用KEIL uVision 4软件新建一个C51内核工程,步骤如下: (1)在”Soruce Group 1”新建C程序文件,文件名:main.c (2)在工程中新建两个组,名称分别为com和myled. (3)在工程文件对应的目录下,再新建两个目录,com文件夹和myled文件夹。 (4)在工程中新建四个文件,分别名称com.c, com.h, myled.c, myled.h,前两个文件保存在com文件夹中,后两个文件保存在myled文件夹中。 (5)将共享资料的“单片机开发板资料\学习版资料\例程\LED\driver”目录及文件拷贝到工程文件所在的目录中,并在工程中新建driver组,把driver文件夹下的 两个文件添加进去。(提示,我们要使用它提供的延时函数) 文件的组织结构如下图: 实验任务: 通过串口助手输入分别输入字符‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,分别完成以下功能: 输入’0’,打开led1到led5共5个灯,它们处于常亮状态。 输入’1’,关闭led1到led5共5个灯。 输入’2’,led1到led5这5个灯间隔0.5秒轮流点亮(流水灯效果)。

输入’3’,led1、led3、led5这3个灯间隔0.5秒轮流点亮(流水灯效果)。 输入’4’,led2、led4这3个灯间隔0.5秒轮流点亮(流水灯效果)。 四、示例代码 1. 实例代码 https://www.sodocs.net/doc/c22299871.html,.c文件(不需要修改,可参考主程序中如何调用它里面的函数)

(完整word版)51单片机流水灯

51单片机的流水灯控制 班级:100712 姓名:全建冲 学号:10071047

一、设计要求 用51单片机设计一个流水灯的控制方案,要求采用定时器定时,利用中断法控制流水灯的亮灭,画出电路图和程序流程图,写出程序代码以及代码注释。 二、电路原理图 原理图分析: 本原理图采用STC89S52单片机控制8个LED灯,其中8个LED灯的负极接单片机的P1端口,正极通过1KΩ排阻连接到电源上。原理图中还给出了晶振与复位端,以保证控制器的稳定工作。

三、程序流程图

四、程序代码及注解 1.非中断定时器控制 #include #include//包含了_crol_函数的头文件 #define uchar unsigned char #define uint unsigned int uint i=0; uchar a=0xfe; void main() { TMOD=0x01;//设置工作方式为定时器0,16位手动重装初值 TH0=(65536-46080)/256;//50毫秒定时赋初值 TL0=(65536-46080)%256; TR0=1;//启动定时器0 while(1) { If(TF==1)//读溢出标志位 { TH0=(65536-46080)/256;//重新赋初值 TL0=(65536-46080)%256;

i++; if(i==10)//500毫秒定时 { i=0; P1=a;//P1端口赋值 a=_crol_(a,1);//循环左移 } TF=0;//清除定时器溢出标志 } } } 程序分析:本程序采用非中断定时器法控制流水灯,核心语句在于读取标志位TF位,TF为定时器溢出标志位,溢出时硬件自动置一,所以循环读取标志位以判断定时器是否溢出,而每次溢出需要手动清零,否则定时器无法再次溢出,利用标志i读取10次即可达到500毫秒的定时。另外需要注意的是单片机晶振为11.0592MHz,所以计时一个数的时间为12/11.0592=1.085us,故定时50毫秒的计数为50000/1.085=46080。 2.中断定时器控制 #include

定时器控制流水灯

成绩 信息与通信工程学院实验报告 (操作性实验) 课程名称:微机原理与微控制器应用 实验题目:c51单片机的定时器实验指导教师: 班级: 学号:学生姓名: 一、实验目的和任务 1.掌握定时器中断的编程方法。 2.掌握keil C51集成开发环境在硬件仿真条件下各参数的设置。 二、实验仪器及器件 硬件:电脑一台、微机原理与单片机试验箱:51开发板、开关及LED显示单元、导线若干 软件:keil uVision4 三、实验内容及电路图 利用实验板上的八个LED灯作显示,利用定时器中断编写中断一次为50ms的定时程序,控制单片机定时器进行定时,总定时时间为0.75ms。

四、流程图与程序 #include "SST89x5x4.h" #include int temp=0x01,num=0; void T0Int() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; num++; if(num==15) { num=0; P1=_crol_(temp,1);

temp=P1; } } void main() { EA=1; ET0=1; TMOD=0X01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; TR0=1; while(1); } 五、实验结果 八个LED灯由左往右依次亮起,并且每个LED灯点亮时间大约为0.75m。

六、实验数据分析及处理 从实验现象来看,LED灯从左到右依次点亮,符合实验要求,说明实验操作正确,实验结果正确。 七、实验结论与感悟(或讨论)

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

单片机课程设计报告 设计题目:外部中断控制流水灯变化 姓名

一.设计目的 通过学习单片机工作原理和各种工作方式及各管脚的功能,想通过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编程来选择。 七.电路原理逻辑图如下:

八.实验硬件电路图如下

九.程序流程图如下 十.程序清单 ORG 0000H AJMP START ORG 0003H AJMP SER ORG 0013H AJMP SER1 ORG 0030H START: MOV IE,#85H ;外部中断0和1都开

推荐-基于单片机AT89C51控制的中断控制流水灯课程设计

宁波技师学院 课程设计报告 设计课题:单片机——中断控制流水灯

摘要 随着计算机技术的迅猛发展,计算机越来越广泛地应用于人们工作和生活的各个领域。作为计算机领域里的一个重要方面单片机及其应用技术近年来也得到了长足的发展。 单片机被广泛地应用在工业自动化控制、智能仪器仪表、数据采集、通讯以及家用电器等领域。单片机以其与通用微机完全不同的发展模式,不断满足工业测控、恶劣环境下可靠运行的要求。、单片机已成为现代工业领域中不可缺少的重要角色。 单片机技术的发展速度十分迅速,速度更快、功能更强的16位、32位单片机以及陆续问世,但8位机,特别是新一代高档8位机具有优异的性能,已能满足大部分单片机应用领域的需要,另外,它还具有可靠性高、外围芯片配套、系统结构简单、应用软件丰富、技术成熟、开发应用方便等优点,在单片机市场中依旧据有一定地位。

目录

一总体设计方案 1.1系统设计方案 流水灯系统主要由:复位电路、晶振电路、数码管显示电路、LED灯指示电路、速度与方式选择电路等部分电路组成。 各器件的选用: 1 单片机的选用: 单片机芯片选用A T89C51。 2数码管的选用: 数码管选用共阳极数码管。 3晶振的选用: 晶振选用的是12MHZ。 1.2系统结构框图 框图如图1.2-1。 图1..2-1系统结构框图

二系统硬件设计 复位电路、晶振电路、数码管显示电路迪电路组成。 2.1晶振电路 图2.1-1晶振电路 内部方式时钟电路如图2.1-1所示。在XTAL2和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。

2.2复位电路 图2.2-1按键复位电路 按键手动复位有电平方式和脉冲方式。而此次选用的便是按键电平复位。按键电平复位是通过复位端经电阻与Vcc接通而实现的。电路如图2.2-1所示。

单片机控制LED流水灯从中间向两边

单片机控制LED流水灯从中间向两边,从两边向中间 这个就是把先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的应该是这样的先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动; #include< reg52.h> #include< intrins.h> #define uint unsigned int #define uchar unsigned char void delay(); void main() { uchar temp,temp1,temp2,a,b; P3=0xff; while(1) { for(b=3;b>0;b--) { temp=0xaa; P1=temp; delay(); temp=0x55; P1=temp; delay(); } for(a=3;a>0;a--) { temp=0xfe; for(b=7;b>0;b--) { P1=temp; temp=_crol_(temp,1); delay(); P1=temp; delay(); } } temp1=0xfe; temp2=0x7f; for(a=8;a>0;a--) { temp=temp1&temp2; P1=temp; delay(); temp1=_crol_(temp1,1); temp2=_cror_(temp2,1);

} } void delay() { uint a,b; for(a=100;a>0;a--) for(b=600;b>0;b--); } 程序实现的第2种方法:下面是https://www.sodocs.net/doc/c22299871.html,单片机12群里的朋友木信大侠提出的,实现单片机led流水灯从中间向两边,从两边向中间的效果,下面的程序就是实现思路,这个是直接调用,应该明白吧,数组那其实也可以改一下,如采用一维数组,在多次调用;也可以采用二维数组。主要看个人喜好. ----------------------------------------------------- #include< reg52.h> unsigned char code TABLE[]={ 0xFF,0xE7,0xC3,0x81,0x00, //从中间向两侧点亮 0xFF,0xE7,0xC3,0x81,0x00, 0xFF,0xE7,0xC3,0x81,0x00, 0xFF,0x7E,0x3C,0x18,0x00, //从两侧向中间点亮 0xFF,0x7E,0x3C,0x18,0x00, 0xFF,0x7E,0x3C,0x18,0x00 }; unsigned char i; DELAY() { unsigned int s; for(s=0;s<30000;s++); } main() { while(1) { if(TABLE[i]!=0x01) { P1=TABLE[i]; i++; DELAY(); } else

89C51单片机定时器控制的流水灯

89C51单片机定时器控制的流水灯 /*************************************************** Copyright: 2014-02-11.version1.0 File name: timer.c Description: 定时中断控制的流水灯 Author: lxl Version: version1.0 Date: 2014.02.11 History: 无 ****************************************************/ #include char a=0xff; int num=0; /************************************************* Function: init() Description: 定时中断初始化功能 Calls: 无 Called By: main() Table Accessed: 无 Table Updated: 无 Input: void Output: 无 Return: void Others: 无 *************************************************/ void init(void) { TMOD=0x01; EA=1; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; } /************************************************* Function: main() Description: 程序的主函数 Calls: init() Called By: 无 Table Accessed: 无

外部中断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 #include #define uint unsigned int #define uchar unsigned char uchar led1=0xfe; uchar led2=0x7f; void delay(uint x) //延时子程序 { uinti,j; for(i=x;i>0;i--) for(j=120;j>0;j--); } void main() //main主程序 { EA=1; //开总中断 EX0=1; //开外部中断0 EX1=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); //左移库函数

基于单片机AT89C51控制的中断控制流水灯课程设计报告

宁波技师学院 摘要 随着计算机技术的迅猛发展,计算机越来越广泛地应用于人们工作和生活的各个领域。作为计算机领域里的一个重要方面单片机及其应用技术近年来也得到了长足的发展。 单片机被广泛地应用在工业自动化控制、智能仪器仪表、数据采集、通讯以及家用电器等领域。单片机以其与通用微机完全不同的发展模式,不断满足工业测控、恶劣环境下可靠运行的要求。、单片机已成为现代工业领域中不可缺少的重要角色。 单片机技术的发展速度十分迅速,速度更快、功能更强的16位、32位单片机以及陆续问世,但8位机,特别是新一代高档8位机具有优异的性能,已能满足大部分单片机应用领域的需要,另外,它还具有可靠性高、外围芯片配套、系统结构简单、应用软件丰富、技术成熟、开发应用方便等优点,在单片机市场中依旧据有一定地位。

目录 一总体设计方案 (1) 1.1系统设计方案 (1) 1.2系统结构框图 (1) 二系统硬件设计 (2) 2.1晶振电路 (2) 2.2复位电路 (3) 2.3数码管电路 (4) 2.4LED指示电路与模式电路 (5) 三软件设计 (6) 3.1主程序流程图 (6) 3.2程序图 (7) 四制作与调试 (10) 五结论 (11) 六致谢 (12) 附录1系统实物图 (13) 2实验原理图 (13) 3系统仿真图 (14) 4 PCB原理图 (15)

一总体设计方案 1.1系统设计方案 流水灯系统主要由:复位电路、晶振电路、数码管显示电路、LED灯指示电路、速度与方式选择电路等部分电路组成。 各器件的选用: 1 单片机的选用: 单片机芯片选用A T89C51。 2数码管的选用: 数码管选用共阳极数码管。 3晶振的选用: 晶振选用的是12MHZ。 1.2系统结构框图 框图如图1.2-1。 图1..2-1系统结构框图

定时器控制流水灯

定时器控制流水灯 The Standardization Office was revised on the afternoon of December 13, 2020

成绩 信息与通信工程学院实验报告 (操作性实验) 课程名称:微机原理与微控制器应用 实验题目:c51单片机的定时器实验指导教师: 班级: 学号:学生姓名: 一、实验目的和任务 1.掌握定时器中断的编程方法。 2.掌握keil C51集成开发环境在硬件仿真条件下各参数的设置。 二、实验仪器及器件 硬件:电脑一台、微机原理与单片机试验箱:51开发板、开关及LED显示单元、导线若干 软件:keil uVision4 三、实验内容及电路图 利用实验板上的八个LED灯作显示,利用定时器中断编写中断一次为50ms的定时程序,控制单片机定时器进行定时,总定时时间为。

四、流程图与程序 #include "" #include<> int temp=0x01,num=0; void T0Int() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; num++; if(num==15) { num=0; P1=_crol_(temp,1); temp=P1; } } void main() {

EA=1; ET0=1; TMOD=0X01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; TR0=1; while(1); } 五、实验结果 八个LED灯由左往右依次亮起,并且每个LED灯点亮时间大约为。 六、实验数据分析及处理 从实验现象来看,LED灯从左到右依次点亮,符合实验要求,说明实验操作正确,

中断流水灯

贵州大学实验报告纸 系别电科班级09 姓名郭举龙学号0907010078 课程名称单片机应用实验成绩 评定教师签名: 实验时间 2012年 5月 17日 实验七外部中断实验 一、实验目的 学习外部中断技术的基本使用方法。 二、实验内容 1、INT0端接单次脉冲发生器。按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转。 2、修改程序,实现用一位开关产生外部中断1,每产生一次,调用一个流水灯方式,按顺序4次一个周期后重复。 三、实验要求 根据实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明和电路原理图 1)外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。中断方式设置一般有两种方式:电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入。 2)中断服务的关键: a、保护进入中断时的状态。 堆栈有保护断点和保护现场的功能使用PUSH指令,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。 b、必须在中断服务程序中设定是否允许中断重入,即设置EX0位。 c、用POP指令恢复中断时的现场。 3)中断控制原理:中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。 4)中断响应的过程:首先中断采样然后中断查询最后中断响应。采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。所谓查询就是由CPU测试TCON和SCON中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。

中断控制流水灯程序

/************************************************************************** ******* *实验名:外部中断实验 *注意:由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验效果,最好把红外线先 *取下来。 *实验效果:K3按下LED左循环,K4按下LED变右循环 * *************************************************************************** ******/ #include #include #define GPIO_LED P1 //外部中断的IO sbit K3=P3^2; sbit K4=P3^3; void IntConfiguration(); void Delay(unsigned int n); unsigned char KeyValue=0; /************************************************************************** ***** * 函数名 : main * 函数功能 : 主函数 * 输入 : 无

* 输出 : 无 *************************************************************************** ****/ void main(void) { GPIO_LED=0Xfe; IntConfiguration(); while(1) { if(KeyValue) GPIO_LED=_crol_(GPIO_LED,1); else GPIO_LED=_cror_(GPIO_LED,1); Delay(2000); } } /************************************************************************** ***** * 函数名 : IntConfiguration() * 函数功能 : 设置外部中断 * 输入 : 无 * 输出 : 无 *************************************************************************** ****/ void IntConfiguration() {

微机原理与接口技术控制流水灯

微机原理与接口技术控制流水灯 一、实验目的: 掌握汇编语言设计和调试方法。 二、实验要求: 利用8253、8255、8259三块芯片相接实现流水灯。 三、芯片介绍: 1、intel8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz) 8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。 执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。输出锁存器的值是通过程序设置的。输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用。

2、8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。 1)与CPU连接部分 根据定义,8255能并行传送8位数据,所以其数据线为8根D0~D7。由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0~A1。此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。各信号的引脚编号如下: (1)数据总线DB:编号为D0~D7,用于8255与CPU传送8位数据。 (2)地址总线AB:编号为A0~A1,用于选择A、B、C口与控制寄存器。 (3)控制总线CB:片选信号、复位信号RST、写信号、读信号。当CPU要对8255进行读、写操作时,必须先向8255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。

51单片机 流水灯 中断

//51单片机控制8个LED灯,左右循环移动,当外部中断0引脚的按键,第一次按下时,停在当前位置;第二次按下时,继续向下执行 //***************************************************************************** ***************************************** //注释:当主函数中在执行左右流水点亮LED灯的时候,按键按下(这是第一次按下,即奇数次),CPU暂时 //中断当前点亮灯的工作,转去处理中断程序(c=1),处理完后,再返回原来中断的地方继续原来的工作, //因为这时候C为1,while(c);为真,为死循环状态,即是LED亮的状态停在当前位置;当按键按下(这是第二次按下,即偶数次) //CPU中断当前状态,转去处理中断程序(c=0),处理完后,再返回原来中断的地方继续原来的工作, //这时候C为0,while(c);为假,则程序继续向下执行。 //***************************************************************************** ****************************************** #include<> #include<>//控制左右移的头文件 void delay(int);//声明延时函数 unsigned char i=0,a=0,b=0,c=0;//a为判断按键按下时奇数次还是偶数次 void main() { P2=0xfe; IT0=0;// 低电平有效 EX0=1;//开外部中断0 EA=1; //开总中断 while(1) { for(i=0;i<7;i++)//左循环 { b=1; while(c);//C为0时,顺序向下执行,为1时停在当前状态, P2=_crol_(P2,1); delay(500); } for(i=0;i<7;i++)//右循环 { b=1; while(c);//C为0时,顺序向下执行,为1时停在当前状态, P2=_cror_(P2,1); delay(500); }

中断控制的流水灯

中断控制的流水灯仿真实验 #include #include #define uint unsigned int #define uchar unsigned char /********以下是延时函数********/ void Delay_ms(uint xms) //延时程序,xms是形式参数 { uint i, j; for(i=xms;i>0;i--) // i=xms,即延时xms, xms由实际参数传入一个值for(j=115;j>0;j--); //此处分号不可少 } /********以下是主函数********/ void main() { P0=0; EA=1; //开总中断 EX0=1; //开外中断0 EX1=1; //开外中断1 IT0=0; //外中断0低电平触发方式 IT1=0; //外中断1低电平触发方式 while(1); //等待 } /********以下是外中断0函数********/

void int0() interrupt 0 { uchar led_data=0xfe; //给led_data赋初值0xfe,点亮最右侧第一个LED灯 uchar i; for(i=0;i<8;i++) { P0= led_data; Delay_ms(500); led_data=_crol_( led_data,1);//将led_data循环左移1位再赋值给led_data } P0=0; } /********以下是外中断1函数********/ void int1() interrupt 2 { uchar led_data=0x7f; //给led_data赋初值0x7f,点亮最左侧第一个LED灯 uchar i; for(i=0;i<8;i++) { P0= led_data; Delay_ms(500); led_data=_cror_( led_data,1);//将led_data循环左移1位再赋值给led_data } P0=0; }

单片机课程设计— 个按键控制 个LED自动设定控制流水灯

东北石油大学 实习总结报告实习类型生产实习 实习单位东北石油大学实习基地 实习起止时间 2018年7月7日至2018年7月16日 指导教师刘东明、孙鉴 所在院(系)电子科学学院 班级电子科学与技术15-2 学生姓名 学号 1509012402 2018年 7月 16日

目录 第1章按键控制流水灯设计 (1) 1.1 实习目的.............................................. 1.2 实习要求.............................................. 第2章电路工作原理 (2) 2.1 STC89C52单片机工作原理 (2) 2.2 LED工作原理 (3) 2.3按键工作原理 (3) 2.4整体电路图 (5) 2.5 本章小结 (6) 第3章 C程序设计 (7) 3.1 程序设计流程图 (7) 3.2实验结果 (8) 3.3 本章小结 (9) 总结及体会 (10)

参考文献 (11) 附录 (12)

第1章按键控制流水灯设计 1.1实习目的 本次实习以STC89C52单片机为控制核心。通过它实现对八盏LED灯的亮灭进行设定,并在设定完成之后能够按照之前的设定实现流水灯效果。外部电路为按键控制流水灯。P0口控制八盏灯,P1口控制矩阵键盘,P2口控制独立按键,程序利用单片机内部计时器中断实现流水效果。要求流水灯能够自行设定、暂停、复位,工作稳定,可靠性高。 生产实习的主要目的是培养理论联系实际的能力,提高实际动手操作能力。本专业的生产实习旨在广泛了解实际单片机电子产品工作的全过程,熟悉电子产品的主要技术管理模式,并在实习的操作过程中学习掌握电子产品的焊接安装调试的实际操作技能。巩固和加深理解所学的理论,开阔眼界,提高潜力,为培养高素质大学本科人才打下必要的基础。透过学习,是理论与实际相结合,能够使学生加深对所学知识的理解,并为后续专业课的学习带给必要的感性知识,同时直接了解本业的生产过程和生产资料,为将来走上工作岗位带给必要的实际生产知识。 1.2实习要求 1.深入学习单片机开发软件Keil的使用,熟悉单片机电路设计,根据

相关主题