定时中断程序框图
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发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。
第三节程序框图和程序说明
第三节程序框图和程序说明一.内部资源分配INT0接的中断信号IRQ,初始化程序设置为每秒钟产生一次中断,在INT0的中断服务程序中读时钟信息,根据时钟信息去处理显示程序。
在初始化后开中断,在校时,校闹铃开始后关中断,校时,校利率结束后再开中断。
INT1接收遥控器的输入信号。
用作位定时器,在主板接收到校时或校利率的信号后启动,工作时每产生一次中断,中断次处理一次被校位的送黑或送亮,使被校位给人一个闪耀的感觉。
这里的被校位的送黑或送亮系指被校位全黑或显示数字。
中所定义的存储单元功能如表所示。
闹铃时间存储地址在从开始的存储区,每一个闹铃信息占用个字节:第一字节说明该地址开始的个单元闹的性质(“”,星期,日不闹,闹;“”星期和星期,日都闹;,星期25 / 10日都不闹)。
第字节为分,第字节为小时。
表中的地址存储在的“”单元。
二.软件设计思路使用遥控器的电子日历的软件按功能除了初始化程序外,主要有两部分:.正常的显示功能。
.修改时钟或闹铃的数据。
在下文中我们称之为校时或校闹。
正常的显示功能由INT0的中断服务程序完成。
在初始化程序中设定时钟芯片每一秒钟产生一次中断,在INT0中断服务程序中读取时间信号(即调用子程序),判断时、分是否到闹铃的时间,以便决定是否送闹铃响(即调用子程序),并送显示时间数据(即调用)。
修改时钟或闹铃的数据在程序中占了主要的篇幅。
校时或校闹的基本思路是怎样确定的呢?首先考虑怎样使用遥控器修改数据。
我们想确定个按键,分别为校时和校闹键。
第一次按校时键时开始校时,第二次按校时键时结束校时;按校闹键时开始校闹,按闹铃或闹铃时将输入的闹时间送入相应单元,并结束校闹。
其他的按键为上下(校闹的序号)左右(被校时日历、时钟或被校闹时钟的位数)移动功能键或数字键。
按照上面的思路,在内部设立两个软开关:①标志着程序在校时,标志着程序在校闹。
26 / 10②,当前程序在校时或校闹,,当前程序未校时或校闹。
实验二P1口控制LED发光二极管
实验二 P1口控制LED发光二极管一、实验目的1、进一步熟练Proteus及Keil软件的基本操作2、掌握8051单片机P1口的使用方法3、掌握LED发光二极管的原理及使用方法4、学习汇编程序的调试及仿真方法二、实验电路三、实验内容及步骤:要求:8个LED发光二极管循环左移显示(发光的移位),间隔时间为一秒。
1、使用Proteus画出电路原理图2、在Keil uVision中完成程序编辑、调试及编译,生成.HEX文件3、进行Protues与Keil uVision联动的相关设置:4、在Proteus中仿真运行。
四、思考1、将本实验的实验现象改为“不发光二极管循环移位”。
2、将本实验的实验现象改为“每隔0.5秒发光二极管循环移位”。
参考程序:ORG 0LJMP MAINORG 30H MAIN: MOV A,#0FEH LOOP: MOV P1,ALCALL DELAYRL ASJMP LOOP DELAY: MOV R7,#20H DELAY1:MOV R6,#200 DELAY2:MOV R5,#123DJNZ R5,$DJNZ R6,DELAY2DJNZ R7,DELAY1RETEND实验三数码管静态显示实验一、实验目的1、进一步熟悉51系列单片机2、了解8051单片机P0口的使用方法3、掌握共阴极数码管的原理及使用方法4、学习8051的编程、调试、编译、仿真。
二、实验电路图3 数码管静态显示电路原理图注:数码管要从元件库选择Optoelectronics类中的7SEG-COM-CAT-GRN。
三、要求及步骤:要求:在七段数码管上以递增方式循环显示数字0—9,间隔时间为一秒。
1、使用Proteus画出电路原理图2、在Keil uVision中完成程序编辑、调试及编译,生成.HEX文件3、进行Protues与Keil uVision联动的相关设置:4、在Proteus中仿真运行。
四、思考1、为什么要将P0口各引脚通过电阻R3-R9接到电源?2、如何在共阴数码管上循环显示十六进制数字0—F(不区分字母的大小写)?3、怎样修改程序使数字以递减方式循环显示?4、若用共阳极数码管应如何修改电路和程序,才能完成本实验的功能?参考程序:ORG 00HLJMP STARTORG 30HSTART: MOV DPTR,#TABLES1: MOV R4,#00HS2: MOV A,R4MOVC A,@A+DPTRMOV P0,ALCALL DELAYINC R4CJNE R4,#0AH,S2SJMP S1DELAY: MOV R5,#20 ;延时子程序D2: MOV R6,#200D1: MOV R7,#123DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RETTABLE: DB 3FH,06H,5BH,4FH,66H ;段码表DB 6DH,7DH,07H,7FH,6FHEND实验四基本输入/输出实验一、实验目的1、进一步熟悉8051单片机并行I/O口的使用方法3、掌握并行I/O口输入/输出操作的方法4、学习8051的编程、调试、编译、仿真。
DSP实验-定时器中断实验
实验四 定时器中断实验一:实验目的1。
熟悉定时器初始化的步骤;2。
熟悉定时器控制寄存器(TCR )的含义和使用;3.熟悉定时器的原理和应用。
二:实验内容本实验要求编写一个简单的定时器中断程序,设置一定的周期控制与XF 引脚相连的LCD 指示灯.当定时器中断产生时可以观察到LCD 周期性闪烁。
三:实验原理1.定时器.C54xx 系列的DSP 都具有一个或两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特定的状态位实现停止、重启动、重设置或禁止。
定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。
应用中可以用定时器来产生周期性的CPU 中断或脉冲输出.定时器的功能方框图如图9。
1所示,其中有一个主计数器(TIM )和一个预定标计数器(PSC )。
TIM 用于重装载周期寄存器PRD 的值,PSC 用于重装载周期寄存器TDDR 的值。
图5。
1信号,是在器件复位时,DSP 向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:寄存器TIM 和PRD 装载最大值(0FFFFH );TCR 的所有位清0;结果是分频值为0,定时器启动,TCR 的FREE 和SOFT 为0。
定时器实际上是有20bit 的周期寄存器.它对CLKOUT 信号计数,先将PSC (TCR 中的D6~D9位)减1,直至PSC 为0,然后把TDDR (TCR 中的低4位)重新装载入PSC,同时将TIM 减1,直到TIM 减为0.这时CPU 发出TINT 中断,同时在TOUT 引脚输出一个脉冲信号,脉冲宽度与CLKOUT 一致,然后将PRD 重新装入TIM ,重复下去直到系统或定时器复位.定时器产生中断的计算公式如下:TINT t c 为 CLKOUT 的周期)TIM :定时器寄存器,用于装载周期寄存器值并自减1。
PRD :周期寄存器,用于装载定时器寄存器。
TCR :定时器控制寄存器,包含定时器的控制状态位。
PIC实验报告(中断、定时、PWM、AD程序代码)
实验一:定时器1. 实验目的:利用定时器0,定时器1,定时2实现4盏流水灯2. 实验内容 a,程序框图定时器0:/************************************************** 计算公式:(256-X)*K*T=25 000us,定时器延时25ms,预分频为K 为64,利用软件编程实现1s 脉冲输出,RB0作为输出 ************************************************/ #include<pic.h>__CONFIG(0x20F1); __CONFIG(0x3F71); #define T0_25MS 61 char a=0;void interrupt ISR() {if(T0IF==1)定时器1定时500MS定时器0定时50MS 、定时器1定时器2定时50MS时间到? 时间到? 时间到?a 的值加1 led 灯循环左移一位 a 的值加1a=20?a=10?a=0,led 灯循环左移一位 a=0,led 灯循环左移一位开始开始开始T0IF=0;TMR0=T0_25MS;a++;if(a==20) //输出1s脉冲{PORTD=(PORTD<<1);a=0;if(PORTD==0x10)PORTD=0x01;}}}void timer0init(){OPTION=0b10000110; //,预分频器给TMR0,TMR0预分频系数为1:64 INTCON=0b10100000; //GIE,PEIE置1}void main(){timer0init();TRISD=0;PORTD=0x01;while(1);}定时器1:/**************************************************计算公式:(65536-X)*K*T=500 000us,定时器延时500ms,预分频为8,利用软件编程实现1s脉冲输出,RB0作为输出************************************************/#include<pic.h>__CONFIG(0x20F1);__CONFIG(0x3F71);#define T1_500MS 3036void interrupt ISR(){if(TMR1IF==1){TMR1IF=0;TMR1H=T1_500MS>>8;TMR1L=T1_500MS;PORTD=(PORTD<<1);if(PORTD==0x10)PORTD=0x01;}void timer1init(){TMR1H=T1_500MS>>8;TMR1L=T1_500MS;TMR1IE=1;INTCON=0b11000000; //GIE,PEIE置1T1CON=0b00110001;; //TMR1预分频系数为1:8}void main(){timer1init();TRISD=0;PORTD=0x01;while(1);}定时器2:/**************************************************计算公式:(PR2+1)*K1*K2*T=50 000us,定时器延时50ms,预分频为K1为16,后分频器K2为15利用软件编程实现1s脉冲输出,RB0作为输出************************************************/#include<pic.h>__CONFIG(0x20F1);__CONFIG(0x3F71);#define LED RB0char a=0;void interrupt ISR(){if(TMR2IF==1){TMR2IF=0;a++;if(a==10) //1秒到了{PORTD=(PORTD<<1);a=0;if(PORTD==0x10)PORTD=0x01;}}}void timer2init()TMR2IE=1;PR2=207;INTCON=0b11000000; //GIE,PEIE置1T2CON=0B001110111; //TMR2预分频系数为1:16,后分频器为1:15 }void main(){timer2init();TRISD=0;PORTD=0x01;while(1);}实验二:RB0中断1.实验目的:a.利用外部中断RB0实现流水灯左移2.程序框图:开始RB0按下?进入中断,led灯循环左移一位程序:#include<pic.h>__CONFIG(0x20F1);__CONFIG(0x3f71);void delaynms(unsigned int n);void interrupt ISR(void);void main(){OPTION=0b00000000;ANS12=0;WPUB0=1;TRISB=0b00000001;INTCON=0b10010000;TRISD=0b00000000;PORTD=0x01;while(1);}void interrupt ISR(void){if(INTF==1){delaynms(30);INTF=0;PORTD=(PORTD<<1);if(PORTD==0x10)PORTD=0x01;}}void delaynms(unsigned int n){unsigned int j;char k;for(j=0;j<n;j++)for(k=246;k>0;k--)NOP();}实验三:AD转换1.实验目的:利用PIC内部AD转换器,AN0通道口采集模拟数据,通过LCD1602显示结果2.程序框图:程序:#include<pic.h>__CONFIG(0x3F39); __CONFIG(0x20F1); #define RS RD4 #define RW RD5 #define E RD6#define uint unsigned int char QW,BW,SW,GW;//8段共阳LED 显示代码,0位-7位分别控制a -h 段const char LED_CODE[]={0b11000000, 0b11111001,0b10100100,0b10110000,0b10011001, 0b10010010,0b10000010,0b11111000,0b10000000,0b10010000,0b01111111}; uint AD_SUB(char k);void init1602(); //1602初始化 void write_com(char com);//写指令 void write_date(char data);//写数据 void delaynms(unsigned int n); void spiinit();void SPI_WRITE(char ); void displayled(); void display1602(); void BCD(uint R1); void main() {uint y;TRISA=0b00000001;选择AD 通道启动ADGODON E=0?数据送1602显示初始化数据送数码管显示 开始ANSEL=0b11111111; //AN0~AN7为模拟输入,上电默认,可不设TRISD=0; //D口设置为输出PORTD=0;spiinit();init1602();while(1){y=AD_SUB(0); //0表示第0个通道BCD(y);displayled();display1602();delaynms(500); //此不不能忽略}}void BCD(uint R1){QW=0;BW=0;SW=0;GW=0;while(R1>=1000){R1-=1000;QW++;}while(R1>=100){R1-=100;BW++;}while(R1>=10){R1-=10;SW++;}GW=R1;}void displayled(){SPI_WRITE(GW); //先发个位SPI_WRITE(SW); //发十位SPI_WRITE(BW); //发百位SPI_WRITE(10); //发小数点SPI_WRITE(QW); //发千位}void display1602(){write_com(0x80);write_date(0x30+QW);write_date(0x2e); //小数点write_date(0x30+BW);write_date(0x30+SW);write_date(0x30+GW);write_date(0x56); //"V"}void SPI_WRITE(char b){char BUF;BUF=LED_CODE[b];SSPBUF=BUF; //发出数据while(BF==0);BUF=SSPBUF;}void spiinit(){TRISC=0b00010000;SSPEN=1;CKP=1;SSPM3=0;SSPM2=0;SSPM1=0;SSPM0=1;SMP=1;CKE=0;}uint AD_SUB(char k){char i;uint temp;float x;ADCON0=0b01000001; //TAD=8TOSC,ADFM=1; //设置成右对齐ADCON0|=(k<<4);for(i=1;i<5;i++)NOP(); //打开AD通道后延时20us左右GODONE=1; //开始AD转换while(GODONE==1); //等待转换完成ADIF=0;temp=ADRESH<<8;temp|=ADRESL;x=temp/1023.0*5.0;temp=x*1000;return(temp);}void init1602(){delaynms(20); //延时时间大于15mswrite_com(0x03);delaynms(5);write_com(0x03);delaynms(5);write_com(0x03);delaynms(5);write_com(0x02); //归HOME位,此不不可少delaynms(5);write_com(0x28); //工作方式设置,4位数据线,2行字符,5*7字体write_com(0x0c); //显示开关设置,画面开,光标消失,禁止闪烁write_com(0x06); //输入方式设置,AC为加一计数器write_com(0x01); //清屏write_com(0x80); //开始显示位置delaynms(2);}void write_com(char com){RS=0; //写指令RW=0;PORTD&=0xf0; //低四位清0E=1; //有效发送PORTD|=((com>>4)&0x0f);//先发高四位delaynms(5);E=0;PORTD&=0xf0;E=1;PORTD|=(com&0x0f);//再发低四位delaynms(5);E=0;}void write_date(char data){RS=1; //写数据RW=0;PORTD&=0xf0;E=1;PORTD|=((data>>4)&0x0f);//先发高四位delaynms(5);E=0;PORTD&=0xf0;E=1;PORTD|=(data&0x0f); //再发低四位delaynms(5);E=0;RS=0;}void delaynms(unsigned int n){unsigned int j;char k;for(j=0;j<n;j++)for(k=246;k>0;k--)NOP();}实验四:PWM1.实验目的:通过PIC单片机输出PWM不同占空比脉冲波形2.程序流程:程序:#include<pic.h>__CONFIG(0x3f3a);char a;void CSH();void interrupt ISR(void);void delaynms(unsigned int n); void main(){CSH();while(1){if(a==0)开始初始化占空比为0.1RB0是否按下进入中断,a加1a=1,则输出占空比0.1 a=2,则输出占空比0.3a=3,则输出占空比0.6a=4,则输出占空比0.9a=5,则a清0,占空比为0.1CSH();}}void CSH(){TRISC2=0;TRISD=0;PR2=249;CCPR1L=0x32;CCP1CON=0x0c;T2CON=0x05;OPTION=0b00000000;ANS12=0;WPUB0=1;TRISB=0b00000001;INTCON=0b10010000;}void interrupt ISR(void){if(INTF==1){delaynms(30);if(RB0==0){INTF=0;a++;switch(a){case 1:CCPR1L=0x19;PR2=249;CCP1CON=0x0c;T2CON=0x05;break; //占空比0.1 case 2:CCPR1L=0x4b;PR2=249;CCP1CON=0x0c;T2CON=0x05;break; //占空比0.3 case 3:CCPR1L=0x96;PR2=249;CCP1CON=0x0c;T2CON=0x05;break; //占空比0.6 case 4:CCPR1L=0xe1;PR2=249;CCP1CON=0x0c;T2CON=0x05;break;// 占空比0.9 case5:a=0;break;}}}}void delaynms(unsigned int n){unsigned int j;char k;for(j=0;j<n;j++)for(k=246;k>0;k--)NOP();}。
单片机中断系统ppt课件
DJNZ R7 MOV P1,#0
CLR EA
SJMP $ ;结束
INT1: INC R0 ;中断次数加1
MOV A,R0
MOV DPTR,#TAB ;DPTR
MOVC A,@A+DPTR
POP DPH
POP DPL
MOV DPTR,#AL1
PUSH DPL
PUSH DPH ;修改中断返回点,AL1压入堆栈
第6章 MCS-51单片机的中断系统
本章介绍的主要内容 ★中断的基本概念 ★中断的系统结构 ★中断的响应过程 ★中断的的应用编程
在CPU和外设交换信息时,存在着快速CPU和慢速外 设间的矛盾,机器内部有时也可能出现突发事件,为此, 计算机中通常采用中断技术。 中断
CPU和外设并行工作,当外设数据准备好( 或有某种突 发事件发生)时向CPU提出请求,CPU暂停正在执行的程序 转而为该外设服务(或处理紧急事件),处理完毕再回到原断 点继续执行原程序。 中断源
例1. 在图6.3中P1.4~P1.7接有四个发光二极管,P1.0~ P1.3接有四个开关,消抖电路用于 产生中断请求信号,当 消抖电路的开关来回拔动一次将产生一个下降沿信号,通 过INT0向CPU申请中断,要求:初时发光二极管全黑,每 中断一次,P1.0~P1.3所接的开关状态反映到发光二极管 上,且要求开关断开的对应发光二极管亮,电路和现象如 下:
以上中断在AL1或AL2两指令处发生,究竟是哪一指 令处中断是随机的,为保证返回到AL1显示‘F ’ ,这里 采用修改中断返回点的办法, 即先从栈中弹出中断响应 时压入的 断点弹到DPTR中,修改DPTR为用户需要的返 回点,并将其压 入堆栈,再通过执行RETI指令弹出栈中 内容到PC、弹出的即为修改后的地址,从而返回到主 程
基于单片机控制的智能定时闹钟方案设计书(含完整程序仿真图)
本设计是定时闹钟的设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子定时闹钟。
电子钟设计可采用数字电路实现,也可以采用单片机来完成。
数字电子钟是用数字集成电路构成的,用数码管显示“时”,“分”,“秒”的现代计时装置。
若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。
若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用AT89C51,它是低功耗、高性能的CMOS型8位单片机。
片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。
另外,AT89C51的指令系统和引脚与8051完全兼容,片内有128B的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
AT89C51单片机结合七段显示器设计的简易定时闹铃时钟,可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响,进—步可以扩充控制电器的启停。
设计内容包括了秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分的设计。
采用四个开关来控制定时闹钟的工作状态,分别为:K1、设置时间和闹钟的小时;K2、设置小时以及设置闹钟的开关;K3、设置分钟和闹钟的分钟;K4、设置完成退出。
课设准备中我根据具体的要求,查找资料,然后按要求根据已学过的时钟程序编写定时闹钟的程序,依据程序利用proteus软件进行了仿真实验,对出现的问题进行分析和反复修改源程序,最终得到正确并符合要求的结果。
设计完成的定时闹钟达到课程设计的要求,在到达定时的时间便立即发出蜂鸣声音,持续一分钟。
显示采用的六位数码管电路,如果亮度感觉不够,可以通过提升电阻来调节,控制程序中延迟时间的长短,可以获得不同的效果。
单片机实验 带程序的
五.实验步骤: 1. 连接电源线和串行口数据线; 2. 把P3.1接至P3.0孔,P1.0~P1.7分别接发光二极管 L1~L8孔。 3.打开DICE—5203 K实验开发系统的电源; 4. 启动计算机,打开桌面软件文件夹,选择MS51仿真 开发系统图标双击,进入软件编程界面; 5. 编制程序,调试、运行; 6. 从按键开关输入数字量,观察发光二极管的发光状 态,或从寄存器观察其对应数值。 六.思考题: 修改程序,使串行口工作于方式3或 2(考虑波特率)。
四、实验步骤 (一)定时/计数器T0延时实验 1、连接电源线和串行口数据线; 2、用插针将P1.0孔与发光二极管L1孔相连, P1.1孔与发光二极管L2孔相连; 3、打开DICE—5203 K实验开发系统的电源; 4、启动计算机,打开桌面软件文件夹,选择 MS51仿真开发系统图标双击,进入软件 编程界面; 5、编制程序,调试、运行; 6、观察发光二极管状态。
• void tim0(void) interrupt 1 using 1 • { EA=0; • i++; • j++; • if(i==20) • {P1_0=!P1_0; • i=0;} • if(j==100) • {P1_1=!P1_1; • j=0;} • TH0=(65536-50000)/256; • TL0=(65536-50000)%256; • EA=1; • }
ds-ms(int j) {uchar k; while(j--!=0) for(k=0,k<125,k++);}
void main (void) { uchar i,a; COM8255 =0x80; a =0x01; for(i=0,i<8,i++) {PB8255=a; ds-ms(500); a=a<<1; if(a==0)a=0x01; } }
中断优先级及原理图
中断优先级及原理图IE.0 0 外部中断0IE.1 1 定时器0 溢出IE.2 2 外部中断1IE.3 3 定时器1 溢出IE.4 4 串口中断IE.5 5 定时器2 溢出TCONIT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
SCONRI(SCON.0),串行口接收中断标志位。
当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。
注意,RI必须由软件清除。
TI(SCON.1),串行口发送中断标志位。
当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。
每发送完一个串行帧,由硬件置位TI。
CPU响应中断时,不能自动清除TI,TI必须由软件清除。
IEEX0(IE.0),外部中断0允许位;ET0(IE.1),定时/计数器T0中断允许位;EX1(IE.2),外部中断0允许位;ET1(IE.3),定时/计数器T1中断允许位;ES(IE.4),串行口中断允许位;EA (IE.7), CPU中断允许(总允许)位。
IPPX0(IP.0),外部中断0优先级设定位;PT0(IP.1),定时/计数器T0优先级设定位;PX1(IP.2),外部中断0优先级设定位;PT1(IP.3),定时/计数器T1优先级设定位;PS (IP.4),串行口优先级设定位;PT2 (IP.5) ,定时/计数器T2优先级设定位。
IPHPX0(IPH.0),外部中断0优先级设定位;PT0(IPH.1),定时/计数器T0优先级设定位;PX1(IPH.2),外部中断0优先级设定位;PT1(IPH.3),定时/计数器T1优先级设定位;PS (IPH.4),串行口优先级设定位;PT2 (IPH.5) ,定时/计数器T2优先级设定位。
定时器、计数器、中断
例 假设允许片内定时器/计数器中断,禁止其他中断。试根据假 设条件设置IE的相应值。 根据题目要求,要允许内部定时器中断,就需要将IE寄存器的EA、 ET1、ET0置1,其他位清0,可分别通过字节寻址或者位寻址进行。 (1) 用字节操作指令: MOV IE,#8AH 或者, MOV A8H,#8AH (2) 用位操作指令: SETB ET0 ;定时器/计数器0允许中断 SETB ET1 ;定时器/计数器1允许中断 SETB EA ;CPU开中断
8BH IE1 8AH IT1 89H IE0 88H IT0
TCON (88H)
2.
SCON (98H)
串行口控制寄存器SCON
99H TI 98H RI
SCON中TI和RI的格式如图5.5所示。
3.
中断允许控制 IE
IE的格式如图5.6所示。
IE (A8H) AFH EA ACH ES ABH ET1 AAH EX1 A9H ET0 A8H EX0
1. 工作模式寄存器TMOD
TMOD (89H) D7 GATE D6
——
D5 M1
D4 M0
D3 GATE
D2
——
D1 M1
D0 M0
C/ T
C/ T
T1 控制位
T0 控制位
图6.2 TMOD 的位定义
2. 定时器控制寄存器TCON
TCON (88H) 8FH TF1 8EH TR1 8DH TF0 8CH TR0 8BH IE1 8AH IT1 89H IE0 88H IT0
TABLE:
TABLE1:
DB DB DB DB DB DB DB RET DB DB DB RET END
0FEH,0FDH,0FBH,0F7H 0EFH,0DFH,0BFH,07FH 0BFH,0DFH,0EFH,0F7H 0FBH,0FDH,0FEH,0FFH 0AAH,55H,0AAH,55H 0AAH,55H,0FFH 1BH 0FFH,00H,0FFH,00H,0FFH 00H,0FFH,00H,0FFH,00H 1BH