定时中断程序框图
51系列单片机在矩阵灯光控制器中的应用

51系列单片机在矩阵灯光控制器中的应用一、引言近年来,随着文化事业的发展,灯光在大型剧院、舞台、演播厅、体育场馆等场合得到广泛的应用,灯光通过专用控制器的控制变幻出各种效果,营造出许多优美的艺术氛围,在舞美艺术中扮演着不可或缺的角色。
灯光控制不仅包括对发光体进行简单的电气通断控制,同时还包括对发光体亮度的动态、静态控制和大规模灯光场景的调度及总体控制。
灯光控制器一般有两种,既手动调光台与电脑调光台。
手动调光台多数为模拟调光,一般应用于小规模的灯光控制场合,而电脑调光台则可以同时管理着几百个回路的灯光,包括亮度调节与多种管理功能。
本文主要阐述利用51系列单片机自身的各种资源,如何实现在64路矩阵灯光控制器中完成多种灯光控制功能。
二、基本功能矩阵灯光控制器由控制与功率两部分组成,即可独立使用,亦可连接硅箱增大功率输出。
单独使用时,通过控制纵横各8个共16只硅块实现对64路灯光的控制给,即矩阵控制。
其功能主要有:1.走灯效果调用编辑控制器内固化有100个走灯花样效果程序,可由用户编辑调用。
2.走灯速度控制可由用户设定走灯速度,走灯效果程序可自动或由用户手动运行,通过音频接驳口接入声音信号亦可声控走灯速度。
3.灯光亮度调节利用数字调光方法通过对可控硅的控制实现对灯光亮度调节。
4.通讯功能拷贝功能,一个控制器得运行控制参数(如灯光效果编组情况,走灯速度,亮度等)可通过串口传送到其他控制器中,使其他控制器具有相同的运行控制参数;将64路灯光亮度值以DMX标准信号形式送出,用来连接大功率硅箱以增大功率输出。
三、控制原理1.调光控制部分对于亮度的调节,主要是通过改变发光体的电压来调节灯光亮度,目前调压方法主要采用可控硅控制方式,即通过改变可控硅的触发角来改变其导通相位与时间,从而改变作用于发光体的电压有效值,完成调压过程。
一般的灯光控制器主要是采用调整控制电压方式改变触发角,即模拟调光,其原理如图1,图2所示,由于调光器采用双向可控硅,则控制以半波为周期,首先工频正弦波电压信号经同步采样电路产生同步电压U1,U UU O然后经锯齿波发生电路转换成同步锯齿波信号U 2,锯齿波信号同控制电压信号U k 经比较器产生用于触发可控硅的触发脉冲Uout ,改变控制电压U K 也就是改变它与同步电压锯齿波的交点即可实现触发脉冲的相移,从而改变发光体两端的电压,调节灯光亮度。
第5章-MCS-51单片机中断系统-PPT

5、2、2 MCS-51单片机得中断源
IT1=1,外中断1为下降沿触发 采样:CPU在每一个机器周期得S5P2期间 对P3、3引脚采样,若上一个机器周期检测为 高电平,紧挨着得下一个机器周期为低电平,则 使IE1置1。 IT0:外中断0触发方式控制位。
CPU主要就是通过标志寄存器、控制 寄存器、优先级寄存器对中断源进行管
5、2、2 MCS-51单片机得中断源
(1)与中断标志相关得SFR
主要有:定时器/计数器T0、T1控制寄 存器TCON
串行口控制寄存器SCON 定时器/计数器2控制寄存器T2CON(第 6章介绍) (2)中断控制寄存器:TCON、IE (3)中断优先级寄存器:IP
DMA释放总线:当一批数据传送后, DMA控制器再向CPU发出“结束总线请 求”,CPU响应请求,收回总线使用权。
DMA方式速度高、效率高,可以与CPU 并行工作。
5、1、2 中断得相关概念
1、中断得概念
CPU在正常运行得时候, 外部或者内部发生了请求 CPU迅速去处理得事件,CPU 暂时中断当前得程序,去处理 所发生得事件,处理完事件后, 再返回到原来被中断得程序 继续运行。此过程称为中断。
图5-3 定时器得控制寄存器
TCON可位寻址。复位后TCON=00H。 TF1(TCON、7):T1溢出标志位
当T1计满溢出时,由内部硬件置位; 中断响应后自动清 0。
5、2、2 MCS-51单片机得中断源
TF0:T0溢出标志位 功能同TF1。
IT1:外中断1触发方式设置位 IT1=0,外中断1为低电平触发
5、1、1 微机得输入/输出方式
51单片机中断程序大全

//实例 42 :用定时器 T0 查询方式 P2 口 8 位控制 LED 闪烁#include<reg51.h>//包含51单片机寄存器定义的头文件/**************************************************************函数功能:主函数**************************************************************/void main(void){// EA=1;// 开总中断// ET0=1;// 定时器 T0 中断允许TMOD=0x01;// 使用定时器 T0 的模式 1TH0=(65536-46083)/256; // 定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256; // 定时器 T0 的高 8 位赋初值TR0=1;// 启动定时器 T0TF0=0;P2=0xff;while(1)// 无限循环等待查询{while(TF0==0);TF0=0;P2=~P2;TH0=(65536-46083)/256; // 定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256; // 定时器 T0 的高 8 位赋初值}}// 实例43 :用定时器T1查询方式控制单片机发出1KHz音频#include<reg51.h>sbit sound=P3^7;// 将// 包含 51 单片机寄存器定义的头文件sound 位定义为 P3.7 引脚/**************************************************************函数功能:主函数**************************************************************/ void main(void){// EA=1;// 开总中断// ET0=1;// 定时器 T0 中断允许TMOD=0x10;// 使用定时器 T1 的模式 1 TH1=(65536-921)/256; // 定时器 T1 的高 8 位赋初值TL1=(65536-921)%256; // 定时器 T1 的高 8 位赋初值TR1=1;// 启动定时器 T1TF1=0;while(1)// 无限循环等待查询{while(TF1==0);TF1=0;sound=~sound; // 将 P3.7 引脚输出电平取反TH1=(65536-921)/256; // 定时器 T0 的高 8 位赋初值TL1=(65536-921)%256; // 定时器 T0 的高 8 位赋初值}}//实例 44 :将计数器 T0 计数的结果送 P1 口 8 位 LED 显示#include<reg51.h> // 包含 51 单片机寄存器定义的头文件 sbitS=P3^4; // 将 S位定义为 P3.4 引脚/**************************************************************函数功能:主函数**************************************************************/void main(void){// EA=1;// 开总中断// ET0=1;// 定时器 T0 中断允许2TMOD=0x02;// 使用定时器 T0 的模式TH0=256-156; // 定时器 T0 的高 8 位赋初值TL0=256-156; // 定时器 T0 的高 8 位赋初值TR0=1;// 启动定时器 T0while(1)// 无限循环等待查询{while(TF0==0)// 如果未计满就等待{if(S==0)// 按键S 按下接地,电平为0P1=TL0; //计数器 TL0 加 1 后送 P1 口显示}TF0=0; // 计数器溢出后,将TF0清 0}}//实例 45 :用定时器 T0 的中断控制 1 位 LED 闪烁#include<reg51.h> // 包含 51 单片机寄存器定义的头文件sbit D1=P2^0; // 将 D1 位定义为 P2.0 引脚/**************************************************************函数功能:主函数**************************************************************/void main(void){EA=1;// 开总中断ET0=1;// 定时器 T0 中断允许TMOD=0x01;// 使用定时器 T0 的模式 2TH0=(65536-46083)/256; //定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256; //定时器 T0 的高 8 位赋初值TR0=1;// 启动定时器 T0while(1)// 无限循环等待中断;}/**************************************************************函数功能:定时器T0 的中断服务程序**************************************************************/void Time0(void) interrupt 1 using 0 // “interrupt ”声明函数为中断服务函数// 其后的 1 为定时器 T0 的中断编号; 0 表示使用第 0 组工作寄存器{D1=~D1; // 按位取反操作,将P2.0 引脚输出电平取反TH0=(65536-46083)/256; //定时器 T0 的高 8 位重新赋初值TL0=(65536-46083)%256; //定时器 T0 的高 8 位重新赋初值}//实例 46 :用定时器 T0 的中断实现长时间定时#include<reg51.h> //包含51单片机寄存器定义的头文件sbit D1=P2^0; // 将 D1 位定义为 P2.0 引脚unsigned char Countor; //设置全局变量,储存定时器T0 中断次数/**************************************************************函数功能:主函数**************************************************************/void main(void){EA=1;// 开总中断ET0=1;// 定时器 T0 中断允许TMOD=0x01;// 使用定时器 T0 的模式 2 TH0=(65536-46083)/256; //定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256; //定时器 T0 的高 8 位赋初值TR0=1; Countor=0;// 启动定时器 T0// 从 0 开始累计中断次数while(1)// 无限循环等待中断;}/**************************************************************函数功能:定时器T0 的中断服务程序**************************************************************/void Time0(void) interrupt 1 using 0 // “interrupt ”声明函数为中断服务函数// 其后的 1 为定时器 T0 的中断编号; 0 表示使用第 0 组工作寄存器{Countor++; // 中断次数自加 1if(Countor==20)// 若累计满20 次,即计时满1s{D1=~D1; Countor=0;// 按位取反操作,将P2.0 引脚输出电平取反// 将 Countor 清 0,重新从 0 开始计数}TH0=(65536-46083)/256; //定时器 T0 的高 8 位重新赋初值TL0=(65536-46083)%256; //定时器 T0 的高 8 位重新赋初值}//实例 47 :用定时器 T1 中断控制两个 LED 以不同周期闪烁#include<reg51.h> //包含51单片机寄存器定义的头文件sbit D1=P2^0; // 将 D1 位定义为 P2.0 引脚sbit D2=P2^1; // 将 D2 位定义为 P2.1 引脚unsigned char Countor1; //设置全局变量,储存定时器unsigned char Countor2; //设置全局变量,储存定时器T1 中断次数T1 中断次数/**************************************************************函数功能:主函数**************************************************************/ void main(void){EA=1;// 开总中断ET1=1;// 定时器 T1 中断允许TMOD=0x10;// 使用定时器 T1 的模式 1TH1=(65536-46083)/256; //定时器 T1 的高 8 位赋初值TL1=(65536-46083)%256; //定时器 T1 的高 8 位赋初值TR1=1;// 启动定时器 T1Countor1=0;// 从 0 开始累计中断次数Countor2=0;// 从 0 开始累计中断次数while(1)// 无限循环等待中断;}/**************************************************************函数功能:定时器T1 的中断服务程序**************************************************************/void Time1(void) interrupt 3 using 0 // “interrupt ”声明函数为中断服务函数// 其后的 3 为定时器 T1 的中断编号; 0 表示使用第 0 组工作寄存器{Countor1++; //Countor1 自加 1Countor2++; //Countor2 自加 1if(Countor1==2) // 若累计满 2 次,即计时满{100msD1=~D1; Countor1=0;// 按位取反操作,将P2.0引脚输出电平取反// 将 Countor1 清 0,重新从 0 开始计数}if(Countor2==8) // 若累计满 8 次,即计时满 400ms {D2=~D2; Countor2=0;// 按位取反操作,将P2.1引脚输出电平取反// 将 Countor1 清 0,重新从 0 开始计数}TH1=(65536-46083)/256; //定时器 T1 的高 8 位重新赋初值TL1=(65536-46083)%256; //定时器 T1 的高 8 位重新赋初值}//实例 50-1 :输出 50 个矩形脉冲#include<reg51.h> // 包含 51 单片机寄存器定义的头文件sbit u=P1^4;// 将 u 位定义为 P1.4/*************************************************函数功能:延时约30ms (3*100*100=30 000μs =30m*************************************************/void delay30ms(void){unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<100;n++);}/*******************************************函数功能:主函数******************************************/void main(void){unsigned char i;u=1;// 初始化输出高电平for(i=0;i<50;i++) // 输出 50 个矩形脉冲{u=1;delay30ms();u=0;delay30ms();}while(1);// 无限循环,防止程序“跑飞”}//实例 50-2 :计数器 T0 统计外部脉冲数#include<reg51.h> // 包含 51 单片机寄存器定义的头文件/*******************************************函数功能:主函数******************************************/void main(void){TMOD=0x06;// TMOD=0000 0110B,使用计数器 T0 的模式 2EA=1; ET0=0; TR0=1;// 开总中断// 不使用定时器// 启动 T0T0 的中断TH0=0; TL0=0; while(1)// 计数器 T0 高 8 位赋初值// 计数器 T0 低 8 位赋初值// 无限循环,不停地将TL0 计数结果送P1 口P1=TL0; }//实例 51-2 :定时器 T0 的模式 2 测量正脉冲宽度#include<reg51.h> // 包含 51 单片机寄存器定义的头文件sbit ui=P3^2;// 将 ui 位定义为 P3.0( INT0)引脚,表示输入电压/*******************************************函数功能:主函数******************************************/void main(void){TMOD=0x0a;// TMOD=0000 1010B,使用定时器T0 的模式2, GATE置 1EA=1; ET0=0; TR0=1; TH0=0; TL0=0; while(1)// 开总中断// 不使用定时器 T0 的中断// 启动 T0// 计数器 T0 高 8 位赋初值// 计数器 T0 低 8 位赋初值// 无限循环,不停地将TL0 计数结果送P1 口{while(ui==0)//INT0为低电平,T0 不能启动;TL0=0;//INT0 为高电平,启动T0 计时,所以将while(ui==1) // 在 INT0 高电平期间,等待,计时TL0清;P1=TL0;// 将计时结果送P1 口显示}}//实例 53 :用外中断 0 的中断方式进行数据采集#include<reg51.h> sbit S=P3^2;// 包含 51 单片机寄存器定义的头文件// 将 S位定义为 P3.2,/*******************************************函数功能:主函数******************************************/ void main(void){EA=1; // 开放总中断EX0=1; // 允许使用外中断IT0=1;// 选择负跳变来触发外中断P1=0xff;while(1);// 无限循环,防止程序跑飞}/**************************************************************函数功能:外中断T0 的中断服务程序**************************************************************/void int0(void) interrupt 0 using 0 // 外中断 0 的中断编号为 0{P1=~P1; // 每产生一次中断请求,P1 取反一次。
一种SPWM波的软件法实现

一种SPWM 波的软件法实现摘 要:使用软件法实时计算生成SPWM 波的电路具有结构简单、使用灵活性、价比高的特点,由于实时计算对控制器的运算速度要求非常高,数字信号处理器是一种理想的选择。
在此介绍一种基于TMS320LF2407 DSP 芯片的SPWM 波的软件生成方法。
关键词: SPWM 波;数字信号处理器;TMS320LF2407A0 引言正弦脉宽调制(SPWM )波是将正弦波变成宽度变化的脉冲波,脉冲波的宽度变化完全符合正弦的变化规律。
根据面积等效原理,脉冲序列的面积分布满足正弦规律,当脉冲序列输出至负载时,负载得到非常接近正弦波的输出电压和电流。
SPWM 的控制信号有多种生成方法,早期的SPWM 是采用模拟控制方式来实现的,通过信号发生器产生所需的信号,由比较器进行信号之间的比较,产生出SPWM 控制所需的脉冲信号序列。
近年来,数字技术和微处理器技术在SPWM 逆变技术中得到了广泛的应用,多数SPWM 系统采用数字控制方式或微处理器控制方式。
数字控制方式采用一定的算法产生出SPWM 控制所需的脉冲信号序列。
DSP 无疑是数字控制方式中最为理想的控制器[1]。
本文应用TI 公司的16位定点DSP 芯片TMS320LF2407A 具有高速信号处理和数字化控制功能所必需的结构特点,应用对称规则采样法来进行SPWM 波的数字化实现。
1 数字法SPWM 波调制原理SPWM 数字控制方式通常有等效面积法,自然采样法和规则采样法,规则采样法又分为对称规则采样法和不对称规则采样法。
自然采样法在算法上仿真模拟控制方式中双极性正弦脉冲调制方式,通过计算正弦调制波r u 与三角波C u 的交点位置,确定调制的脉冲宽度。
但是计算正弦调制波r u 与三角波C u 的交点需要求解超越方程,计算非常困难。
因此,这种方法不适用于微处理器的实时控制[2]。
规则采样法是对自然采样法的简化,其计算的几何关系如图1所示: c u A t D t B tA BD r u图1 对称规则采样法生成SPWM 波这种方法实际上是用一个阶梯去逼近正弦波。
单片机原理及应用 单片机的中断系统(详细分析:中断)共18张PPT

1.定时控制寄存器TCON
D7 D6 D5 D4
TF1
TF0
D3 D2 D1 D0 IE1 IT1 IE0 IT0
中断请求标志
触发方式 0 低电平1
选择
下降沿
注意:电平触发时,在中断返回前应撤除中断源。
2.串行口控制寄存器SCON
D7 D6 D5 D4 D3 D2 D1 D0 串行中断 TI RI 请求标志
③ 若现行指令是RETI、RET或访问IE、IP指令,则需要
执行到当前指令及下一条指令方可响应。
响应过程--单片机响应中断后,自动执行下列操作: ① 置位中断优先级有效触发器,即关闭同级和低级
中断:
② 调用入口地址,断点入栈,相当于LCALL指令; ③ 进入中断服务程序。
响应时间--从查询中断请求标志位到转向中断服务入 口地址所需的机器周期数。 (1)最快响应时间
T0 中断000,BH 允许或禁止向CPU请求中断。
响应条件----CPU要响应中断需满足下列条件:
有关的特殊功能寄存器(SFR)有: 注意:电平触发时,在中断返回前应撤除中断源。
5个中断源,具有二个中断优先级,可实现二级中断服务程序的嵌套。 将PCON寄存器的IDL位置“1”,单片机则进入待机方式。
中断返回—中断处理程序的最后一条指令 是RETI,它使CPU结束中断处理程序的执 行,返回到断点处,继续执行主程序。
中断系统初始化
开相应中断源的中断;(IE) 设定中断优先级;(IP) 若为外部中断,设定外部中断的触发方式。
中断应用举例
外设每准备好一个数据后,发出选通信号,使D触发器
输出1再经非门得0至INT0,向CPU发出中断请求,
掉电保护方式。如果单片机检测到电源电压过低, 此时除进行信息保护外,还需将PD位被置“1”, 使单片机进入掉电保护方式。
中断服务程序流程图

第一讲:第六章I/O接口原理—接口、端口、编址回顾:微机系统的层次结构,CPU、主机、接口电路及外部设备之间的结构关联,输入/输出的一般概念。
重点和纲要:微机系统主机与外部设备之间的数据传送,包括I/O端口的寻址方式,输入/输出的传送控制方式。
讲授内容:6。
1 输入/输出数据的传输控制方式一、输入/输出的一般概念1.引言输入/输出是微机系统与外部设备进行信息交换的过程。
输入/输出设备称为外部设备,与存储器相比,外部设备有其本身的特点,存储器较为标准,而外部设备则比较复杂,性能的离散性比较大,不同的外部设备,其结构方式不同,有机械式、电动式、电子式等;输入/输出的信号类型也不相同,有数字信号,也有模拟信号;有电信号,也有非电信号;输入/输出信息的速率也相差很大。
因此,CPU与外部设备之间的信息交换技术比较复杂.CPU与外设之间的信息交换,是通过它们之间接口电路中的I/O端口来进行的,由于同一个外部设备与CPU之间所要传送的信息类型不同,方向不同,作用也不一样(例如数据信息、状态信息、控制信息、输入/输出等),所以接口电路中可以设置多个端口来分别处理这些不同的信息.2.输入/输出端口的寻址方式微机系统采用总线结构形式,即通过一组总线来连接组成系统的各个功能部件(包括CPU、内存、I/O端口),CPU、内存、I/O端口之间的信息交换都是通过总线来进行的,如何区分不同的内存单元和I/O端口,是输入/输出寻址方式所要讨论解决的问题。
根据微机系统的不同,输入/输出的寻址方式通常有两种形式:(1).存储器对应的输入、输出寻址方式这种方式又称为存储器统一编址寻址方式或存储器映象寻址方式。
方法:把外设的一个端口与存储器的一个单元作同等对待,每一个I/O端口都有一个确定的端口地址,CPU与I/O端口之间的信息交换,与存储单元的读写过程一样,内存单元与I/O端口的不同,只在于它们具有不同的的地址。
优点:①CPU对I/O端口的读/写操作可以使用全部存储器的读/写操作指令,也可以用对存储器的不同寻址方式来对I/O端口中的信息,直接进行算术、逻辑运算及循环、移位等操作。
实验要求通过电位器提供模拟量的输...

单片机实验实验一顺序结构程序实验二数据区传送子程序实验三简单I/O口控制实验实验四信号灯控制实验五脉冲计数实验实验六并口扩展芯片8255控制交通灯实验七点阵LED显示实验实验八AD转换实验实验九电脑时钟(定时器,中断综合实验)实验十步进电机控制实验实验十一LCD液晶显示屏实验实验一顺序结构程序设计一、实验目的掌握汇编语言设计和调试方法。
二、实验内容1.拼字程序:把2000H的内容拆开,高位送2001H低位,低位送2002H 低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
2.拼字程序:把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成—个字节。
3. 求和程序:将30H和31H单元中存放的2个一字节BCD码组合成一个2位的BCD 码存入32H单元,31H单元中的数为低4位。
三、实验步骤用连续或单步方式运行程序,检查2000—2002H中内容变化情况。
四、思考如何用断点方式调试本程序。
实验二数据传送程序一)实验目的:1)掌握单片机汇编语言程序设计和调试方法2)掌握单片机内部RAM,外部RAM,ROM中数据操作方法二)实验内容及步骤:1)再将内部RAM50H单元开始的十个数传到40H为始址的内部RAM中2)再将内部RAM 50H单元开始的十个数送到1000H为始址的外部RAM中3)再将ROM的2000H单元开始的十个数传送到以70H为始址的内部RAM中实验三简单I/O口控制实验一、实验目的(1)学习P1口的使用方法;(2)学习延时子程序的编写。
二、实验预备知识(1)P1口对准双向口,每一位都可独立地定义为输出线或输入线。
(2)本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。
三、实验内容P1作为输出口,接八只发光二极管,编写程序,使发光二极管左(右)循环点亮。
点阵电子时钟设计_单片机课程设计论文

课程设计题目名称点阵电子时钟设计课程名称单片机原理与接口技术系、专业电气工程系电气类2010年6月21 日摘要单片计算机即单片微型计算机。
由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
本设计主要设计了一个基于AT89C52单片机的电子时钟。
并在点阵上显示相应的时间。
关键字:单片机;LED;点阵显示屏AbstracMonolithic single-chip micro-computer that computer. By the RAM, ROM, CPU structure, timing, counting and multiple interfaces in one microcontroller. Its small size, low cost, function, widely used in industry and industrial automation intelligence. The 51 series is the most typical microcomputer and the most representative one. The curriculum design through its study, application, and thus achieve the study, design, development software and hardware capabilities.The design mainly designed based on AT89C52 microcontroller electronic clock. Dot matrix display in the corresponding time.Keywords:SCM; LED; dot matrix display.目录摘要 (4)1 电子时钟 (6)1.1电子时钟简介 (6)1.3电子时钟的原理 (6)2 单片机识的相关知识 (6)2.1单片机简介 (6)2.2 89C52单片机介绍3 控制系统的硬件设计3.1 点阵显示工作原理4 控制系统的软件设计5 基本显示原理结束语 (19)附录 (20)参考文献 (28)1电子时钟1.1 电子时钟简介1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。