STC15F104E单片机之串口、外部中断、掉电存储、定时器
51单片机中的特殊寄存器、外部中断、定时器计器
1.特殊功能寄存器TCON (2)2.特殊功能寄存器SCON (9FH) (3)3.中断允许控制寄存器IE (0A8H) (3)4.中断优先级控制寄存器IP(B8H) (3)5.中断的系统结构 (4)6.开启外部中断 (5)7.定时器/计数器介绍 (6)8.定时/计数器的控制寄存器 (7)8.1定时/计数器控制寄存器TCON (7)8.2定时/计数器工作方式控制寄存器TMOD (7)9.定时/计数器工作方式 (9)9.1 工作方式0 (9)9.2 工作方式1 (9)9.3 工作方式2 (9)9.4 工作方式3 (9)10.定时/计数器的应用 (10)10.1计算定时/计数初值 (10)1.特殊功能寄存器TCONTCON 在特殊功能寄存器中,字节地址为88H ,位地址(由低位到高位)分别是88H-8FH 。
计数溢出标志位TF0(TF1)=1,计数溢出,要求单片机中断有效。
1,脉冲触发方式,下降沿有效现有效中断请求信号效中断请求信号88H 89H 8AH 8BH 8DH 8FHTCON 位功能:IE0/IE1:外部中断申请标志位: =0:没有外部中断申请;=1:有外部中断申请。
置1清0由硬件完成。
① IE1 —— 外中断中断请求标志当P3.3引脚信号有效时,IE1=1 ② IE0 —— 外中断中断请求标志当P3.2引脚信号有效时,IE0=1 ③ IT1 —— 外中断触发方式控制位• IT1=1,边沿触发方式;下降沿触发。
• IT1=0,电平触发方式。
低电平有效。
④ IT0 —— 外中断触发方式控制位• 其意义和功能与IT1相似。
• IT0/IT1:外部中断请求的触发方式选择位通过软件编程实现: • =0:在INT0/INT1端申请中断的信号低电平有效; • =1:在INT0/INT1端申请中断的信号负跳变有效. ⑤ TF1 —— T1溢出中断请求标志 T1计数溢出后,TF1=1 ⑥ TF0 —— T0溢出中断请求标志 T0计数溢出后,TF0=1TF0/TF1:定时器溢出中断申请标志位: (由硬件自动置位)。
STC15F104E单片机之串口、外部中断、掉电存储、定时器
STC15F104E单片机之串口、外部中断、掉电存储、定时器/************************************************************** ******单片机与PC机采用9针串口,MAX232通讯,波特率默认为9600.单片机接收PC机发送的数据码表如下:01、开:PC发送'A';02、关:PC发送'B';03、输出状态查询:PC发送C;单片机返回输出状态‘A’表示开‘B’表示关;04、继电器状态取反:PC发送D 继电器状态取反*************************************************************** ******/#include "reg52.h"#include#define uchar unsigned char //宏定义字符型变量#define uint unsigned int //宏定义整型变量/************************************************************** ******eeprom函数声明*************************************************************** ******/extern void IapIdle(); //操作函数extern uchar IapReadByte(uint addr); //读取函数extern void IapProgramByte(uint addr,uchar dat); //写入函数extern void IapEraseSector(uint addr); //擦除函数/********************************************************************波特率设定*************************************************************** ******///#defineBAUD0XF400//******************//#defineBAUD0XFA00//******************//#defineBAUD0XFD00//******************#defineBAUD0XFE80//******************//#defineBAUD0XFF40//*******************//#defineBAUD0XFFA0//*******************uchar miao,fen,times;uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容sbit P33=P3^3; //定义继电器控制输出脚/************************************************************** ******定义特殊寄存器*************************************************************** ******/sfr AUXR = 0x8E; //辅助寄存器sbit RXB=P3^0;sbit TXB=P3^1;/************************************************************** ******定义数据类型*************************************************************** ******/uchar TBUF,RBUF;uchar TDAT,RDAT;uchar TCNT,RCNT;uchar TBIT,RBIT;uint TING,RING;uint TEND,REND;void UART_INIT(); //声明函数uchar t,r; //定义数据类型uchar but[16]; //数据存储数组/************************************************************** ******延时函数*************************************************************** ******/void delay(uchar t){uchar i,j;for(i=0;i<t;i++){for(j=13;j>0;j--);{ ;}}}/************************************************************** ******定时器0初始化函数*************************************************************** ******/void TIMER0_INIT(void)TMOD=0X00; //定时器T0设定AUXR|=0X80; //辅助寄存器TL0=BAUD; //十六</t;i++)位寄存器TH0=BAUD>>8; //十六位寄存器TR0=1; //开定时器ET0=1;PT0=1;}/************************************************************** ******定时器1初始化函数*************************************************************** ******/void TIMER1_INIT(void){TH1=(65536-10000)/256; //对TH1 TL1赋值TL1=(65536-10000)%256;ET1=1;TR1=1; //开始定时}/************************************************************** ******外部中断0初始化*************************************************************** ******/void Init_exint(void)INT0=1; //下降沿触发IT0=1;EX0=1;}/************************************************************** ******功能:串口初始化,波特率9600,方式1*************************************************************** ******/void UART_INIT(){TING=0;RING=0;TEND=1;REND=0;TCNT=0;RCNT=0;}/************************************************************** ******主函数*************************************************************** ******/void main(){TIMER0_INIT(); //定时器0初始化模拟串口用TIMER1_INIT(); //定时器1初始化Init_exint();times=IapReadByte(0); //读取函数EA=1; //开总中断UART_INIT(); //串口初始化while(1){if(REND){REND=0;r++;//but[r++&0x0f]=RBUF;dat=RBUF;}if(TEND){if(t!=r){TEND=0;//TBUF=dat;switch(dat) //接收数据判断{uchar k;k=10;case 'A': P33=1;delay(k);TBUF = dat;dat=0xee;break; // 开case 'B': P33=0;delay(k);TBUF = dat;dat=0xee;break; // 关case 'C': if(P33==1)TBUF = 'A'; // 串口读输出口状态if(P33==0)TBUF = 'B';delay(k);dat=0xee;break;case 'D': P33=!P33;delay(k);TBUF = dat;dat=0xee;break; // 输出口取反case 'E': delay(k);TBUF = times;dat=0xee;break; // 串口读取当前设定值default:break;}t++;//TBUF=but[t++&0x0f];TING=1;}}/************************************************************** ******接收数据判断函数*************************************************************** ******/}}/************************************************************** ******定时器T0中断服务函数*************************************************************** ******/void tm0()interrupt 1 using 1 {if(RING){if(--RCNT==0){RCNT=3;if(--RBIT==0){RBUF=RDAT;RING=0;REND=1;}else{RDAT>>=1;if(RXB)RDAT|=0X80;}}}else if(!RXB){RING=1;RCNT=4;RBIT=9;}if(--TCNT==0){TCNT=3;if(TING){if(TBIT==0){TXB=0;TDAT=TBUF;TBIT=9;}else{TDAT>>=1;if(--TBIT==0){TXB=1;TING=0;TEND=1;}elseTXB=CY;}}}}/********************************************************************外部中断0服务函数*************************************************************** ******/void Extern0 (void) interrupt 0 using 0{times++;if(times==20) //最大设定时间40秒times=0;IapEraseSector(0); //擦除0地址数据IapProgramByte(0,times); //写入0地址数据}/************************************************************** ******定时1中断服务函数*************************************************************** ******/void t1(void) interrupt 3 using 2{miao++;if(miao==200) //2秒{miao=0;fen++;if(fen==times) // times秒{fen=0;P33=!P33; //继电器状态取反}}}/************************************************************** ******结束*************************************************************** ******/。
51单片机中断号与定时器的工作方式
51单片机中断号与定时器的工作方式
中断号interrupt 0 外部中断0(EX0)interrupt 1 定时器/计时器器中断0(ET0)interrupt 2 外部中断1 (EX1)interrupt 3 定时器/计时器器中断1(ET1)interrupt 4 串口中断(ES)定时器工作方式1. 方式0 由TH0 的8 位和TL0 的低5 位组成一个13 位计时器。
当13 位计时器从0 或设定的处值,加1 到全1 以后,再加1 就产生溢出。
这时,置TCON 的TF0 位为1,同时把计时器初始化变为全02.方式1 方式1 和方式0 的工作相同,唯一的差别是TH0 和TL0 组成一个16 位计数器。
重置方式与方式0 相同3.方式2 把TL0 配置成一个可以自动恢复初值(初始常数自动重新装入)的8 位计时器,TH0 作为常数缓冲器,TH0 由软件预置值,当TL0 产生溢出时,一方面使溢出标志位置1,同时把TH0 中的8 位数据重新装入TL0 中。
方式2 常用于定时控制,例如希望每隔250us 产生一个定时控制脉冲,则可以采用12MHz 的振荡器,把TH0 预置为6,并使C/=0 就能实现,方式2 不用作串行口波特率发生器。
4.方式3 方式3 对定时器T0 和定时器T1 是不相同的若T1 设置为方式3 则停止工作(其效果与TR1=0 相同)所以方式3 只适用于T0tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
STC15F104E和STC15F104W的区别
STC15F104E和STC15F104W的区别
1. STC15F104E的外部中断不好用,STC15F104W的外部中断可以用,而且多一个掉电唤醒专用定时器。
2. STC15F104E的定时器有T0、T1,而STC15F104W的定时器是T0、T2。
3. 管脚不同。
STC15F104W重点介绍:
(1)定时器模块:T0和T2,T0工作在方式0时是16位可自动重装初始值的定时计数器,方式2时是8位自动重装的计数器,方式3时是可分解的;T2的工作模式固定在16位自动重装初始值模式,故特别适应到LED行业,该芯片的定时器模块可产生更高精度的定时时间。
(2)内核:采用Y5超高速CPU内核,比普通1T还快20%,详情见指令集。
共111条指令。
(3)管脚图:
P3.3是RSTOUT_LOW,上电和复位后输出低电平,也可由软件设置低或高电平,该管脚可以作为16位或32位单片机的复位电路使用;P3.4可以输出系统时钟,故可以作为16位或32位单片机的的时钟电路;该芯片还有很强的加密功能,可取代加密芯片,单价只有一块多,故可以推荐给客户。
STC15F104W无串口,具有中继广播方式,可以软件模拟I2C、串口、SPI、利用IO口充放电测量外部电压实现AD功能。
可在下载软件中设置P3.1直通输出P3.0的输入电平,类似15系列串口1的中继广播方式。
STC15W104SW——DIP/SOP16,在性能和价格上都优于STC11F04E,故,可以替代STC11系列和89C4051等芯片,重点推荐给LED行业。
51单片机每个外部中断和定时器中断 应用模版
第一步,中断配置/************************************************************函数名:INT0_Config功能:配置单片机与中断相关的硬件,让单片机能够正常检测中断和执行中断代码。
输入参数:输出参数:************************************************************/void INT0_Config(void){IT0=1; //中断触发方式,IT0=0,低电平触发,INT0=1下降沿触发(下降沿就是由高电平向低电平的跳变);EX0=1; //外部中断0的中断开关,每个中断源都有自己的中断开关。
EA=1; //打开总中断,如果总中断不打开,就是其他中断开关被打开,单片机也不能执行中断。
}第二步,中断服务,也就是cpu被中断后所要做的事。
/************************************************************函数名:Isr_INT0功能:中断服务输入参数:输出参数:************************************************************/void Isr_INT0() interrupt 0 //interrupt表明该函数是中断函数,后面的标号表示是哪个中断源产生的中断。
{ //(INT0)为0, Timer0为1,INT1为2,Timer3,串口中断为4。
// Add your code here //自己想要中断后发生的程序}第三部主函数/************************************************************函数名:main功能:主函数输入参数:输出参数:************************************************************/void main(){INT0_Config();//调用这个函数来配置外部中断while(1){//Add your code here//CPU一直在这里循环的执行代码,一旦发生中断,就停下来去执行中断函数Isr_INT0() interrupt 0,//执行完成后,返回从断点处继续往下执行原来的代码。
STC15F104E.H
#endif
/*
STC15F104E单片机特殊功能寄存器头文件
*/
#ifndef __REG52_H__
#define __REG52_H__
/* BYTE Registers */
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
/*
CLK_DIV
时钟分频寄存器控制系统时钟的分频数。12倍速单片机上电默认是不分频的
0 0 0-晶振时钟
0 0 1-晶振时钟/2
0 1 0-晶振时钟/4
。。。。依次类推
*/
sfr CLK_DIV=0X97;
/*
内部时钟输出
IRC_CLK0 BIT7 EN_IRCO 使能时钟输出
/* PSW */
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0; //8052 only
/* TCON */ ห้องสมุดไป่ตู้
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
1 0 设置为高阻输入模式
单片机原理与应用 第3版课件-STC15F系列单片机中断系统
中断源
中断响应过程
5.1 中断系统概述
❖ 中断的作用
解决高速CPU与低速外设的匹配问题 及时处理突发事件 实时控制 实现人机联系 实现多机联系
5.1 中断系统概述
❖ 中断系统的几个概念
中断系统 中断源 中断请求 中断响应过程 中断服务 中断返回 主程序 中断服务程序
主程序 随机事件
本章主要内容和学习目标?中断系统概述?stc15f系列单片机的中断系统结构?stc15f系列单片机的中断源?中断标志中断允许中断优先级等控制?中断响应过程?中断服务函数及其应用51中断系统概述?应用中的几个问题?高速与低速设备之间的协同工作?突发事件处理?随机事件处理?人机联系方式51中断系统概述?某人看书?电话铃响?暂停看书?书中作记号?电话谈话?继续看书执行主程序中断信号暂停执行主程序pc当前值入栈保存执行中断服务程序返回主程序日常事务中断请求中断响应保护断点中断服务中断返回51中断系统概述?所谓中断是指程序执行过程中允许外部或内部事件通过硬件打断程序的执行使其转向为处理外部或内部事件的中断服务程序中去完成中断服务程序后cpu返回继续执行被打断的程序
5.3 STC15F系列单片机中断系统的控制
❖ 中断标志寄存器
串行口1控制寄存器SCON
SCON是串行口1控制寄存器,锁存了串行口1的发送、接收中断标志位TI和RI。 地址为98H,复位值为00H。
位号
B7
B6 B5 B4 B3 B2 B1 B0
位名称 SM0/FE SM1 SM2 REN TB8 RB8 TI RI
❖ 规则的力量
任何事物都不是独立存在的,都有其自身内在的规律性,必须要掌握事物的内在规律,并 合理的利用好。
本章主要内容和学习目标
STC15单片机外部中断的特点及应用研究
S T C 15单片机外部中断的特点及应用研究*刘宝成(内蒙古民族大学工学院,通辽028043)*基金项目:内蒙古自治区高等学校科学研究项目 无线电波充电技术的研究(N J Z Y 17202);内蒙古民族大学教育教学研究课题 实践教学的综合改革与实践的研究(Y B 2017008)㊂摘要:外部中断在单片机应用系统中经常用于系统故障处理㊁采集数据的处理㊁人机交互的键盘输入以及通过按键唤醒单片机退出掉电工作模式等工作场景㊂S T C 15系列单片机外部中断0㊁外部中断1增加了上升沿或下降沿均可触发中断的新特性,这种新特性在使用时如果不加以注意可能会使中断服务程序重复执行两次,导致程序出错,尤其是在采集数据的处理㊁人机交互的键盘输入等应用场合埋下隐患㊂通过对使用S T C 15系列单片机的外部中断0㊁外部中断1的实例分析,给出解决方案㊂对使用S T C 15系列单片机进行系统设计,尤其是对原来使用S T C 89系列等通用51单片机的系统进行硬件升级后的软件移植具有重要指导意义和参考价值㊂关键词:S T C 15;单片机;外部中断;A D C中图分类号:T P 368.1 文献标识码:AR e s e a r c h o n C h a r a c t e r i s t i c s a n d A p p l i c a t i o n o f E x t e r n a l I n t e r r u pt o n S T C 15M C U L i u B a o c h e n g(C o l l e g e o f E n g i n e e r i n g ,I n n e r M o n g o l i a U n i v e r s i t y f o r N a t i o n a l i t i e s ,T o n gl i a o 028043,C h i n a )A b s t r a c t :E x t e r n a l i n t e r r u p t i s t y p i c a l l y u s e d i n s y s t e m f a u l t p r o c e s s i n g ,d a t a a c q u i s i t i o n ,k e y b o a r d i n p u t a n d w a k e -u p s i n g l e -c h i p mi c r o -c o m p u t e r t o q u i t p o w e r -o f f m o d e .T h e e x t e r n a l i n t e r r u p t 0a n d e x t e r n a l i n t e r r u pt 1o f S T C 15s e r i e s M C U a d d a n e w f e a t u r e t h a t t h e i n -t e r r u p t c a n b e t r i g g e r e d b y t h e r i s i n g e d g e o r f a l l i n g e d g e .I f t h e u s e r d o e s n o t p a y m u c h a t t e n t i o n t o t h i s f e a t u r e ,i t m a y ca u s e t h e i n t e r -r u p t s e r v i c e p r o g r a m t ob e e x ec u t ed t w i ce ,w h i c h w i l l l e a d t o a p r o g r a m e r r o r .T h i s k i n d of n e w f e a t u r e w i l l h a v e a n u n d e r l y i ng pr o b l e m i n t h e a p p l i c a t i o n o f d a t a a c q u i s i t i o n p r o c e s s i n g ,k e y b o a r d i n p u t o f h u m a n -c o m p u t e r i n t e r a c t i o n a n d o t h e r a p p l i c a t i o n s .T h e e x a m pl e s o f e x t e r n a l i n t e r r u p t 0a n d e x t e r n a l i n t e r r u p t 1o f S T C 15s e r i e s M C U a r e d i s c u s s e d i n t h i s p a p e r ,t h e s o l u t i o n s a r e g i v e n .T h e s t u d y o f t h i s p a p e r h a s i m p o r t a n t g u i d i n g s i g n i f i c a n c e a n d r e f e r e n c e v a l u e f o r t h e s y s t e m d e s i g n e d b y S T C 15s e r i e s M C U ,e s p e c i a l l yt h e s o f t w a r e t r a n s -p l a n t a t i o n a f t e r a h a r d w a r e u p g r a d e o f t h e o r i g i n a l s y s t e m u s e d S T C 89s e r i e s a n d o t h e r g e n e r a l -p u r p o s e M C S 51s i n g l e -c h i p m i c r o c o m pu t e r .K e yw o r d s :S T C 15;M C U ;e x t e r n a l i n t e r r u p t ;A D C 0 引 言中断系统是单片机的重要组成部分,一般包括定时/计数器中断㊁串行口中断㊁外部中断等[1]㊂中断的使用提高了单片机系统的数据处理效率,因此在单片机中得到了广泛的应用[2]㊂外部中断在单片机应用系统中经常用于故障中断㊁A /D 转换数据处理等实时性要求很高的操作中㊂笔者从事51单片机的教学工作多年,过去在学生实验中使用S T C 89系列单片机,也使用S T C 89系列单片机及A T 89系列单片机进行过一些电子装置的设计,都很顺利㊂最近,在调试一个使用S T C 15F 2K 60S 2单片机的外部中断0和外部中断1的中断实验中遇到了一个奇怪的问题:中断服务程序总是被执行两次㊂仔细分析实验程序,没有发现任何问题,事实上该实验程序在S T C 89C 52R C 上执行也没有任何问题,曾一度使笔者陷入迷惑㊂1 外部中断实验1.1 外部中断实验设计外部中断实验是教学中为了演示单片机外部中断特性和中断优先级而设计的,软㊁硬件思路是:主程序循环点亮接在P 1.0~P 1.3的4个L E D 发光二极管,点亮时间间隔约1s ;两个按键分别接在单片机的两个外部中断引脚I N T 0和I N T 1上,按键按下为低电平,触发相应外部中断进而执行相应外部中断服务程序;外部中断0的服务程序使接在P 1.6上的L E D 发光二极管点亮约5s,外部中断1的服务程序使接在P 1.7上的L E D 发光二极管点亮约10s㊂电路原理图如图1所示㊂图1 外部中断实验电路原理图1.2 实验现象及存在问题为了突出S T C 15系列单片机同S T C 89系列单片机及其他通用M C S 51兼容单片机外部中断0和外部中断1的主要区别,下面的实验仅描述外部中断0和外部中断1单独中断的现象㊂实验程序如图2所示,其中图2(a )㊁图2(b )㊁图2(c)分别是实验主程序㊁外部中断0服务程序㊁外部中断1服务程序,这三个程序对于S T C 89C 52R C 和S T C 15F 2K 60S 2是一样的㊂由于S T C 15系列单片机是1T 单片机,S T C 89系列单片机是12T 单片机,因此实现相同延时时间的延时子程序不一样,S T C 89C 52R C 的延时子程序如图2(d )所示,S T C 15F 2K 60S 2的延时子程序如图2(e)所示㊂图2 外部中断实验汇编源程序把汇编好的单片机程序分别下载到S T C 89C 52R C 和S T C 15F 2K 60S 2单片机中,接在P 1.0~P 1.3的L E D 按约1s 的时间间隔逐个点亮并周而复始地循环,说明下载到两个单片机里的延时程序的延时时间是正确的㊂分别单独按下I N T 0所接按键K 1和I N T 1所接按键K 2,均能正常中断主程序的执行,但两种单片机中断服务程序的执行时间不同,S T C 15F 2K 60S 2的执行时间约为S T C 89C 52R C 执行时间的2倍,即S T C 89C 52R C 的中断现象是正常的,S T C 15F 2K 60S 2的中断现象不对,似乎重复执行了两遍中断服务程序㊂仔细分析两种单片机的实验程序,在两个外部中断服务程序里均通过切换工作寄存器组的方法对主程序和中断服务程序共同使用的延时程序里的R 3㊁R 4㊁R 5进行了切换,不存在资源冲突的情况,同时S T C 15F 2K 60S 2单片机的延时子程序在主程序中调用的延时时间是正确的,而同样的中断服务程序在S T C 89C 52R C 又是正常的㊂那么唯一的可能就是S T C 15F 2K 60S 2和S T C 89C 52R C 的中断特性不一样㊂2 S T C 15系列单片机中断特性S T C 15系列和S T C 89系列单片机都是M C S 51的兼容单片机,只不过S T C 15系列单片机是1T 单片机,S T C 89系列单片机是12T 单片机,容易让人想当然地认为除了软件执行速度不同外,其他都是一样的㊂这种惯性思维方式一度使上述问题的分析陷入了困境,甚至怀疑是不是S T C 15F 2K 60S 2单片机存在B U G ㊂通过仔细阅读S T C 15系列单片机的数据手册才发现S T C 15系列单片机外部中断0和外部中断1的触发方式已经不再是低电平和下降沿两种通常所用的触发方式,而是变成了下降沿+上升沿和下降沿两种触发方式[3-4]㊂默认的触发方式为下降沿+上升沿触发,也就是说下降沿或者上升沿都可以触发中断㊂为了验证是不是由于这种新的触发方式引起的上述问题,将触发方式设置为单一的下降沿触发,发现进入中断后点亮L E D 发光二极管的时间正确了,也就是说确实是这种新的触发特性导致的㊂2.1 S T C 15系列单片机外部中断新的触发方式对比分析51单片机外部中断0或1的触发方式是由特殊功能寄存器T C O N 中的I T 0或I T 1进行设置,单片机上电复位后T C O N 的复位值是00H ,即对于普通51单片机来说外部中断0或1的触发方式是低电平触发,对于S T C 15系列单片机来说外部中断0或1的触发方式是下降沿+上升沿触发㊂在上面的实验中,按键从按下到释放需要的时间一般在0.1~0.3s 之间,而上述中断服务程序的执行时间约为5s 或10s,即中断服务程序的执行时间远远大于按键的操作时间,当中断服务程序执行完,按键早已经释放,对应的中断引脚电平已经恢复为高电平㊂I T 0或I T 1为0时,对应普通51单片机而言,外部中断0或1是低电平触发方式,按键按下单片机执行相应外部中断服务程序,当外部中断服务程序执行完,按键已经释放,单片机不会再次进入中断㊂而对于S T C 15系列单片机来说,为什么按键早已释放还会再次进入中断呢?只有一种解释,那就是S T C 15系列单片机对按键释放时的上升沿做了记忆㊂推测S T C 15系列单片机对I T x (x 取0或1)为0时外部中断的执行过程如下:当按下按键时,外部中断0或1的引脚上出现下降沿,置位I E x (x 取0或1),在允许中断的情况下C P U 响应该中断,内部生成一条长调用指令(L C A L L )转到相应的中断入口地址执行相应的中断服务程序,与此同时清除置位的I E x (x 取0或1)外部中断请求标志位;当按键释放时,外部中断0或1的引脚上出现上升沿,再次置位I E x (x 取0或1),此时单片机正在执行中断服务程序,待中断服务程序执行完返回主程序后,由于I E x (x 取0或1)置位导致单片机再次进入中断㊂如果真的是这样的过程,对于采用这种触发方式进行按键处理和A /D转换数据处理时就会带来致命错误,尤其是对从S T C 89系列或其他普通51单片机移植过来的程序来说,这种错误更容易发生,必须引起足够重视㊂图3 判断I E 0在进入中断服务程序后的状态2.2 S T C 15系列单片机下降沿+上升沿触发方式验证为了弄清楚S T C 15系列单片机外部中断0或1的下降沿+上升沿触发方式的操作机理,特设计下面实验进行验证㊂2.2.1 中断请求标志位在进入中断时是否被清零以外部中断0为例进行说明㊂在开总中断和允许外部中断0中断的情况下,当外部中断0满足中断条件时,I E 0被置1向C P U 申请中断,C P U 响应该中断后把I E 0清0并生成一条长调用指令转到外部中断0的矢量地址0003H 去执行程序㊂由于I E 0是内部信号,故设计图3所示程序,以判断I E 0在进入中断服务程序后的状态㊂仍然沿用图1所示电路,把图3中程序汇编后下载到S T C 15F 2K 60S 2单片机中,按下接外部中断0引脚的K 1按键,可以发现在K 1按键按下的同时P 1.0所接的L E D 点亮,说明在进入中断服务程序后I E 0已经被清0㊂2.2.2 下降沿之后的上升沿是否被记忆在上述实验中已经验证I E 0在进入中断服务程序后被清0,但并不能说明按键释放后I E 0是否又被置1,从而再次进入中断服务程序㊂为此又设计如图4(a )所示程序进行实验,延时程序D E L A Y 1000M S 同图2(e)㊂图4 判断下降沿之后上升沿是否置位I E 0实验程序同样把图4(a )所示程序汇编后下载到S T C 15F 2K 60S 2单片机中,按下就马上松开接外部中断0引脚的K 1按键,观察到的现象是:接在P 1.0上的L E D 先是点亮约1s,然后熄灭1s ,接着又再次点亮㊂这个实验现象说明当按键按下后单片机进入中断服务程序,且I E 0是被清0的,由于按键按下后马上就松开了,这个过程的时间小于中断服务程序的执行时间,在中断服务程序的第一个1s 延时后再去读I E 0,此时I E 0又被置1了,这就是实验现象中L E D 先点亮约1s ,然后熄灭1s 的原因㊂接下来L E D 又再次点亮说明单片机中断返回后马上又再次进入中断㊂即S T C 15F 2K 60S 2单片机的外部中断0在下降沿触发中断后还能记忆上升沿的触发标志㊂为进一步验证该现象又设计了如图4(b )所示的程序,把这个程序汇编后下载到单片机中,按下并立即释放按键K 1发现接在P 1.0的发光二极管D 1在按下按键K 1的同时熄灭了,然后发光二极管D 1马上又点亮的同时接在P 1.1的发光二极管D 2熄灭了㊂延长按键按下的持续时间,可以清楚地发现:在按键K 1按下的同时,发光二极管D 1开始点亮并持续到按键K 1释放;按键K 1释放的同时,发光二极管D 1熄灭,而发光二极管D 2点亮㊂用S T C 15F 2K 60S 2单片机的外部中断1重复实验,实验现象与此相同㊂此实验现象充分说明S T C 15F 2K 60S 2单片机的外部中断0和外部中断1在下降沿触发中断后还能记忆上升沿的触发标志㊂用类似的方法也可以验证S T C 15F 2K 60S 2单片机的外部中断0和外部中断1在上升沿触发中断后也能记忆下降沿的触发标志,这里不再赘述㊂3 S T C 15系列单片机下降沿+上升沿触发方式的应用及注意事项S T C 15系列单片机外部中断0和外部中断1在单片机上电复位后的默认触发方式是下降沿+上升沿触发方式㊂由于S T C 15系列单片机外部中断0和外部中断1对下降沿和上升沿均能触发中断并能对下降沿(上升沿)随后的上升沿(下降沿)触发信号记忆,在使用时需要注意以下事项㊂3.1 用于键盘中断由于S T C 15系列单片机外部中断0和外部中断1的上述新特性,在触发中断后并不能区分是下降沿还是上升沿触发的中断,而且还会对下降沿(上升沿)随后的上升沿(下降沿)触发信号记忆㊂而普通51单片机在上电复位后的外部中断的默认触发方式是低电平触发,这种触发方式是每个机器周期都去采样外部中断引脚上的电平信号,但并不对该信号做记忆,当单片机正在执行该外部中断服务程序或其他同优先级/高优先级中断服务程序时,即使采样到低电平信号,也不会置位相应中断标志位,而是直接丢弃该中断申请,只有在中断返回后采样到外部中断引脚上的低电平信号,才会置位相应中断标志位㊁向C P U 申请中断㊂因此在普通51单片机中只要在中断服务程序返回前外部引脚上的低电平信号消失,就不会引发二次中断㊂因此,在键盘中断应用中使用S T C 15系列单片机外部中断0或外部中断1将会出现按键按下时进入中断,执行一次中断服务程序,在按键释放时还会进入中断,并再次执行中断服务程序㊂因此在键盘中断应用中如果不能很好考虑到这种触发特性,将导致键码或按键功能被识别或执行两次,从而引起系统功能错误㊂这种错误经常发生在由普通51单片机改型为S T C 15系列单片机的使用者身上,可以在这类应用中将特殊功能寄存器T C O N 中的I T x (x 取0或1)设置为1,即使用外部中断的下降沿触发方式㊂3.2 用于A /D 转换的数据处理许多A D C 芯片具有转换结束输出信号E O C ,如A D C 0809㊁T L C 2543等,常把该信号接到单片机的外部中断引脚,以便于及时对采样到的数据进行处理㊂以A D C 0809为例,一般是把E O C 信号经非门接到单片机的外部中断引脚,假设接到外部中断0引脚[5-6]㊂如果使用S T C 15系列单片机的默认触发方式,就会出现在A D C 开始转换和A D C 转换结束分别进入中断,进行两次数据处理,如果是直接使用单次转换结果还比较容易发现错误,可是如果在数据处理上使用了一些滤波算法就不容易发现该错误㊂因此千万不要认为S T C 15单片机外部中断0和外部中断1的默认触发是下降沿或者上升沿都可以,而没有深入认识到这种单片机外部中断触发特性的真正机理,就直接使用这种默认触发模式,会给系统调试带来困难㊂在这类应用中也推荐将特殊功能寄存器T C O N 中的I T x (x 取0或1)设置为1,使用外部中断的下降沿触发方式㊂3.3 用于单片机低功耗模式唤醒S T C 15系列单片机外部中断0和外部中断1的下降沿+上升沿触发方式特别适合于单片机低功耗省电模式的唤醒,在外部中断0或外部中断1的引脚上无论出现下降沿还是上升沿,都能把单片机从掉电模式或空闲模式唤醒㊂外部中断0或外部中断1引脚上的信号可以由按键动作给出,也可以是其他系统给出的下降沿或上升沿信号,还可以由串行通信信号给出,特别适合于需要上升沿唤醒单片机掉电模式的应用场景㊂3.4 用于正负脉冲宽度及矩形波周期的测量普通的51单片机通过定时/计数器的门控位可以直接进行正脉冲宽度的测量,如果要对一个矩形波的周期或负脉冲进行测量,一般需要外加硬件电路才能实现㊂由于S T C 15系列单片机外部中断0和外部中断1在I T x (x 取0或1)置0的模式下,可以由上升沿或下降沿触发新特性,再结合定时/计数器的门控位,使用定时器应该可以对输入的矩形波进行正脉冲和负脉冲宽度以及周期的测量㊂这里不做展开,留待后续的应用中进行深入探讨㊂4 结 语S T C 15系列单片机外部中断0和外部中断1的默认下降沿+上升沿触发方式是一种全新的触发方式,与普通51单片机外部中断0和外部中断1默认触发方式存在较大差异,通过几个实验程序对S T C 15系列单片机外部中断触发新特性的执行机理进行了分析和验证㊂S T C 15系列单片机的这种新特性可以较好地应用于单片机掉电模式的唤醒,但也会让熟悉普通51单片机的使用者先入为主地认为S T C 15系列单片机只是多了一种上升沿触发方式,使程序设计出现一种隐性错误㊂通过文中的分析可以清楚了解到S T C 15系列单片机的外部中断0和外部中断1的默认触发方式可以对下降沿(或上升沿)随后的上升沿(或下降沿)进行记忆,对于键盘中断㊁A /D 转换中断等的处理上会使中断服务程序执行两次,导致结果出错㊂文中的分析与讨论对于新接触S T C 15系列单片机或经常使用普通51单片机的人来说具有很好的指导意义,对于从普通51单片机升级到S T C 15系列单片机的系统移植也具有参考意义㊂对S T C 15系列单片机这种新特性的具体应用给出了参考思路,在后续的研究中再进行深入探讨㊂参考文献[1]张毅刚,赵光权,刘旺.单片机原理及应用[M ].3版.北京:高等教育出版社,2016:12.[2]马淑华,王凤文,张美金.单片机原理与接口技术[M ].2版.北京:北京邮电大学出版社,2011:146147.[3]江苏国芯科技有限公司(宏晶科技).S T C 89C 51R C /R D+系列单片机器件手册[E B /O L ].[202010].h t t p://w w w.s t c -m c u d a t a .c o m /d a t a s h e e t /s t c /S T C A D P D F /S T C 15.pd f .[4]江苏国芯科技有限公司(宏晶科技).S T C 89C 51R C /R D +系列单片机器件手册[E B /O L ].[202010].h t t p://w w w .s t c m c u d a t a .c o m /d a t a s h e e t /s t c /S T C A D P D F /S T C 89C 51R C R D .pd f .[5]Te x a s I n s t r u m e n t s I n c o r po r a t e d .A D C 0808/A D C 08098B i t P C o m p a t i b l e A /D C o n v e r t e r s w i t h 8C h a n n e l M u l t i pl e x e r d a t a s h e e t (R e v .H )[E B /O L ].[202010].h t t ps ://w w w .t i .c o m /l i t /d s /s y m l i n k /a d c 0809n .pd f ?t s =1603095063975&ref _u r l =h t t ps %253A %252F %252F w w w .t i .c o m%252F p r o d -u c t %252F A D C 0809N .[6]T e x a s I n s t r u m e n t s I n c o r p o r a t e d .12B i t A n a l o g t o D i gi t a l C o n v e r t e r s W i t h S e r i a l C o n t r o l a n d 11A n a l o g I n pu t s d a t a s h e e t (R e v .F )[E B /O L ].[202010].h t t ps ://w w w.t i .c o m /l i t /d s /s y m l i n k /t l c 2543.pd f ?t s =1603095199651&ref _u r l=h t t p s %253A%252F %252F w w w.t i .c o m%252F pr o d u c t %252F T L C2543%253F k e yM a t c h %253D T L C 2543%2526t i s e a r c h %253D S e a r c hE Ne v e r y-t h i n g%2526u s e c a s e %253D G P N.刘宝成(副教授),主要研究方向为嵌入式系统㊁智能仪器仪表设计㊁自动化控制等㊂(责任编辑:薛士然 收稿日期:2020-10-29)参考文献[1]牛跃听.C A N 总线嵌入式开发:从入门到实战[M ].北京:北京航空航天大学出版社,2016.[2]陈海燕.支持多主通信的星载C A N 总线应用协议设计[J ].航天器工程,2014(4).[3]曾青林.反熔丝F P G A 在多路数据采集存储系统中的应用[J ].计算机测量与控制,2011(11).[4]王福友.舰船导航系统C A N 总线网络设计的关键技术[J ].中国造船,2008(2).[5]李云.基于S J A 1000的C A N 总线控制节点的设计与实现[J ].空军工程大学学报(自然科学版),2003(3).[6]岳奎.S J A 1000内寄存器的V H D L 语言读写设计与应用[J ].计算机与数字工程,2009(10).[7]尤程瑶.C A N 通信电路的干扰分析与抗干扰措施[J ].电子测量技术,2017(11).[8]崔艳召.TM S 320L F 2407系统设计及外扩C A N 总线设计[J ].航天返回与遥感,2008(2).刘志宏(工程师),主要研究方向为空间遥感器嵌入式系系统开发㊂(责任编辑:薛士然 收稿日期:2020-07-31)儒卓力和英飞凌扩大合作关系自2020年10月1日起,儒卓力成为原赛普拉斯半导体公司整个产品组合的分销商㊂儒卓力原有的分销协议在英飞凌收购赛普拉斯之后,得以扩展到欧洲㊁中东以及非洲地区㊂英飞凌负责欧洲㊁中东以及非洲地区分销及E M S 管理的M a t h i a s R o e t t je s 解释道: 现有协议的扩展,是我们与儒卓力成功合作重要且必要的一步㊂这不仅扩大了我们的销售网络,同时还能为客户提供更好的支持以满足其系统需求㊂增加的产品组合包括存储器㊁微控制器㊁传感器㊁蓝牙和W i F i 技术㊂对儒卓力而言,此次分销协议的扩展,使其现有产品阵容更加丰富,尤其是在汽车㊁工业㊁电机控制和照明等细分市场中㊂儒卓力半导体产品营销总监T h o m a s U l i n s k i 表示:这使得我们能够为客户提供其应用所需的更加优化的全方位解决方案㊂这次产品组合的扩展还巩固了我们作为主动㊁被动㊁无线和机电等元器件分销商的领先地位㊂关于儒卓力儒卓力(R u t r o n i k E l e k t r o n i s c h e B a u e l e m e n t e G m b H )是欧洲第三大分销商(资料来源:E u r o pe a n 分销报告2017)以及世界第十一大分销商(资料来源:S o u r c e T o d a y,2018年5月)㊂作为宽线产品分销商,儒卓力可提供半导体㊁无源和机电组件以及显示屏㊁嵌入式主板㊁存储解决方案和无线解决方案等㊂公司的主要目标市场是汽车㊁医疗㊁工业㊁家用电器㊁能源和照明业㊂儒卓力通过R U T R O N I K E M B E D D E D ㊁R U T R O N I K S MA R T ㊁R U T R O N I K P OW E R 及R U T R O N I K A U T OMO T I V E 系列提供定制的综合性产品和服务,为客户满足其应用的需求㊂对产品开发及设计的专业技术支持㊁物流和供应链管理解决方案,以及综合服务使得儒卓力的服务日趋完善㊂。
51单片机介绍及头文件-STC15F104E
8脚51单片机介绍及头文件-STC15F104E发布时间:2011-02-15 15:17:36上次买芯片无意间发现STC也有8个脚的单片机,在我印象中貌似只有ATMEAG有8只脚的。
于是乎买了几个回来,今天下了手册研究以下。
再次将心得写出来STC的8脚单片机有直插和SOP两种形式的封装,其中有6个IO口,剩下2个是VCC和GND ,不需要带晶振内部自带有时钟发生电路,在此要说明这种型号的单片机有专用的烧录软件,在宏晶官网都有下载。
这6个I O口实际上是我们普通单片机上的P3口,实际编程时也是使用P3.X来实现IO口操作。
唯一的不同就是没有硬件的串口,需要用到定时器来模拟(这点不好),但是下载电路和STC的串口下载电路时一样的。
不做修改。
这个有点费解?下载时用到的是串口形式的下载电路,硬件上使用时却没有串口。
杯具啊!关于IO口的复用功能,除P3.1没有复用功能外,其他引脚均有复用功能。
分别是5个外部中断,3个时钟输出,一个复位输入。
芯片默认是不需要复位电路的,上电自复位的。
可以通过软件来选择引脚作为复位脚。
同时在烧录软件上可以选择低压复位。
手册上说的是8种。
软件上只显示了6种-不解???让人惊喜的是烧录软件上提供硬件开启看门狗功能。
还可以选择看门狗分频级数。
还是蛮方便的嘛。
程序又少了几句话。
最后要说一点的是该种单片机以E结尾的都有EEPROM喔。
例如我买的STC15F104E。
有了这种小的单片机,大家以后做点简单的玩意也不拍浪费了。
好东西。
支持一下!特附上修改过的STC15F04 E头文件/*STC15F104E单片机特殊功能寄存器头文件*/#ifndef __REG52_H__#define __REG52_H__/* BYTE Registers */sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;/*BIT5 LVDF 低压检测标记位只要VCC小于芯片门槛电压自动置1 需软件清0 同时也是低压检测中断标记位BIT1 PD 为1进入掉电模式硬件清0BIT0 IDL 为1进入空闲模式硬件清0*/sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;/* PSW */sbit CY = PSW^7;sbit AC = PSW^6;sbit F0 = PSW^5;sbit RS1 = PSW^4;sbit RS0 = PSW^3;sbit OV = PSW^2;sbit P = PSW^0; //8052 only /* TCON */sbit TF1 = TCON^7;sbit TR1 = TCON^6;sbit TF0 = TCON^5;sbit TR0 = TCON^4;sbit IE1 = TCON^3;sbit IT1 = TCON^2;sbit IE0 = TCON^1;sbit IT0 = TCON^0;/* IE */sbit EA = IE^7;sbit ELVD = IE^6; //低压检测中断sbit ET1 = IE^3;sbit EX1 = IE^2;sbit ET0 = IE^1;sbit EX0 = IE^0;/* IP */sbit PT1 = IP^3;sbit PX1 = IP^2;sbit PT0 = IP^1;sbit PX0 = IP^0;/* P3 */sbit RD = P3^7;sbit WR = P3^6;sbit T1 = P3^5;sbit T0 = P3^4;sbit INT1 = P3^3;sbit INT0 = P3^2;sbit TXD = P3^1;sbit RXD = P3^0;/*IO口的设置寄存器四种模式P3M0 P1M10 0 与普通的IO口一样0 1 设置为强推挽模式1 0 设置为高阻输入模式1 1 设置为高漏输出模式*/sfr P3M0=0XB2;sfr P3M1=0XB1;/*AUXR寄存器BIT7 T0X12 定时器0速度为传统12倍BIT6 T1X12 定时器1速度为传统12倍*/sfr AUXR=0X8E;//不可以位寻址的/*CLK_DIV时钟分频寄存器控制系统时钟的分频数。
8脚51单片机介绍及头文件-STC15F104E
8脚51单片机介绍及头文件STC15F104ESTC的8脚单片机有直插和SOP两种形式的封装,其中有6个IO口,剩下2个是VCC和GND ,不需要带晶振内部自带有时钟发生电路,在此要说明这种型号的单片机有专用的烧录软件,在宏晶官网都有下载。
这6个IO口实际上是我们普通单片机上的P3口,实际编程时也是使用P3.X来实现IO口操作。
唯一的不同就是没有硬件的串口,需要用到定时器来模拟(这点不好),但是下载电路和STC的串口下载电路时一样的。
不做修改。
这个有点费解?下载时用到的是串口形式的下载电路,硬件上使用时却没有串口。
杯具啊!关于IO口的复用功能,除P3.1没有复用功能外,其他引脚均有复用功能。
分别是5个外部中断,3个时钟输出,一个复位输入。
芯片默认是不需要复位电路的,上电自复位的。
可以通过软件来选择引脚作为复位脚。
同时在烧录软件上可以选择低压复位。
手册上说的是8种。
软件上只显示了6种-不解???让人惊喜的是烧录软件上提供硬件开启看门狗功能。
还可以选择看门狗分频级数。
还是蛮方便的嘛。
程序又少了几句话。
最后要说一点的是该种单片机以E结尾的都有EEPROM喔。
例如我买的STC15F104E。
有了这种小的单片机,大家以后做点简单的玩意也不拍浪费了。
好东西。
支持一下!特附上修改过的STC15F04E 头文件/*STC15F104E单片机特殊功能寄存器头文件*/#ifndef __REG52_H__#define __REG52_H__/* BYTE Registers */sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;/*BIT5 LVDF 低压检测标记位只要VCC小于芯片门槛电压自动置1 需软件清0 同时也是低压检测中断标记位BIT1 PD 为1进入掉电模式硬件清0BIT0 IDL 为1进入空闲模式硬件清0*/sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;/* PSW */sbit CY = PSW^7;sbit AC = PSW^6;sbit F0 = PSW^5;sbit RS1 = PSW^4;sbit RS0 = PSW^3;sbit OV = PSW^2;sbit P = PSW^0; //8052 only/* TCON */sbit TF1 = TCON^7;sbit TR1 = TCON^6;sbit TF0 = TCON^5;sbit TR0 = TCON^4;sbit IE1 = TCON^3;sbit IT1 = TCON^2;sbit IE0 = TCON^1;sbit IT0 = TCON^0;/* IE */sbit EA = IE^7;sbit ELVD = IE^6; //低压检测中断sbit ET1 = IE^3;sbit EX1 = IE^2;sbit ET0 = IE^1;sbit EX0 = IE^0;/* IP */sbit PT1 = IP^3;sbit PX1 = IP^2;sbit PT0 = IP^1;sbit PX0 = IP^0;/* P3 */sbit RD = P3^7;sbit WR = P3^6;sbit T1 = P3^5;sbit T0 = P3^4;sbit INT1 = P3^3;sbit INT0 = P3^2;sbit TXD = P3^1;sbit RXD = P3^0;/*IO口的设置寄存器四种模式P3M0 P1M10 0 与普通的IO口一样0 1 设置为强推挽模式1 0 设置为高阻输入模式1 1 设置为高漏输出模式*/sfr P3M0=0XB2;sfr P3M1=0XB1;/*AUXR寄存器BIT7 T0X12 定时器0速度为传统12倍BIT6 T1X12 定时器1速度为传统12倍*/sfr AUXR=0X8E;//不可以位寻址的/*CLK_DIV时钟分频寄存器控制系统时钟的分频数。
单片机定时器、串行口、中断完美总结版
定时器/计数器接口TMOD(方式寄存器)设定定时器/计数器T0和T1的工作方式GATE=0 定时器的启动不受到外部中断请求信号的影响一般情况下GATE=0。
GATE=1 T0的启动受到/INT0 控制,T1的启动还受到/INT1控制,只有当外部中断信号/INT0 和/INT1 为高电平的时候才启动。
C/T :定时/计数方式选择位C/T=0 工作于定时方式|C/T=1 工作于计数方式TL0(TL1)的低5位和TH0(TH1)的8位】满值为2的13次幂为8192 初值X=8192-N方式1(16位)TL0(TL1)的8位和TH0(TH1)的8位满值为2的16次幂为65536 初值X=65536-N方式2(8位自动重置定时计数器)16位计数器只用了8位(TL0或者TL1)来计数;TH0或者TH1用来保存初值。
满值为2的8次幂为256初值X=256-N方式3(只有T0才有)\Tl0可以作为定时/计数器使用;TH0只能用作定时器使用满值为2的8次幂为256初值X=256-N特殊功能寄存器TCON:①定时/计数器的控制寄存器(定时/计数器的启动与溢出(D4-D7))②外部中断控制(D0-D3)处理后由硬件电路自动清除。
TR1、TR0:定时计数器T1、T0的启动位(可由软件置位或者清零)TR1=1 启动TR1=0 停止\TR0=1 启动TR0=0 停止IT0、IT1:外部中断0(或者1)触发方式控制位。
IT0=0(IT1=0)选择外部中断为电平触发方式IT0=1(IT1=1)选择外部中断为边沿触发方式IE0、IE1:外部中断0(或者1)的中断请求标志位电平触发的时候【IT0=0(IT1=0)】若()引脚为高电平,则IE0(IE1)清零若()引脚为低电平,则IE0(IE1)置1,向CPU请求中断,CPU响应后不能由硬件自动将IE0(IE1)清零边沿触发的时候【IT0=1(IT1=1)】若第一个机器周期采样到()为高电平,第二个机器周期采样到()为低电平,[则IE0(IE1)置1,向CPU请求中断,CPU响应后由硬件自动将IE0(IE1)清零经常要用到的位:TMOD :【定时/计数器的选择以及他们的工作方式】MOV TMOD,#02H ;定时器0方式2TH0、TL0(TH1、TL1):【赋初值】EA :【中断允许总控制位】SETB EA;开启中断ET0 (ET1) :【定时计数器T0(T1)的溢出中断允许位】SETB ET0;T0溢出中断允许TR0(TR1):【启动定时/计数器】SETB TR0;开启定时器T051单片机串行口的功能与结构(串行口控制寄存器SCONA、方式0时,SM2必须为0B、方式1时,若SM2=1则接收到有效的停止位,接受才有效、C、方式2和方式3接受数据,SM2=1,①RB8=0(接收到的第九位数据),则输入移位寄存器中接受的数据不能移入到接收数据寄存器SBUF,RI不置1(接收中断标志位),接收无效;②RB8=1(接收到的第九位数据),则输入移位寄存器中接受的数据将移入到接收数据寄存器SBUF,RI置1(接收中断标志位),接收有效;REN :允许接收控制位REN=1 允许接收REN=0 禁止接收TB8(发送数据的第9位)在方式2和方式3中,TB8为发送数据的第9位,可以用来做奇偶校验位在多机通信当中,用来表示主机发送的是地址还是数据,TB8=0表示数据,TB8=1表示地址。
STC15F104E最小板产品使用手册
void delay()//延时程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
*********************************************************************/
12
#include<reg52.h>
//库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
主函数
*********************************************************************/
void main()
Байду номын сангаас
{
while(1)
{
temp=0xfe; //11111110 定义每次一个灯亮
P3=temp;//直接对 1/0 口赋值,使批输出低电平。
编译环境:Keil
作者:zhangxinchun
.淘宝店:
汇诚科技
郑兴电子直销部 .6..
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
*********************************************************************/
/******************************************************************** 汇诚科技
第四章STC15F系列单片机的中断系统
福建师范大学福清分校
二、中断系统的功能
3.中断返回过程 首先恢复原保留寄存器的内容和标志位的状态,这
2. 中断允许的控制 中断允许寄存器 IE
地址 B7 B6
B5
B4
B3
B2
B1
B0
复位值
IE A8H EA ELVD
EADC ES ET1
EX1
ET0
EX0
00x0 0000
EA=0,所有中断请求被屏蔽 EA=1,CPU开放中断,但各个中断源的中断请求是否允许,还要由
IE中的各个中断请求允许控制位决定 ET0:定时器/计数器T0的溢出中断允许位
0:禁止T0溢出中断;1:允许T0溢出中断 EX0:外部中断0中断允许位
0:禁止外部中断0中断;1:允许外部中断0中断
3. 中断优先的控制 中断优先级寄存器 IP
地址 B7
B6
B5 B4 B3 B2 B1 B0 复位值
IP B8H PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000 0000
些急需处理的异常情况和特殊请求,CPU暂时中止现行 程序,转去对随机发生的更紧迫事件进行处理,处理完 毕后,CPU自动返回原来的程序继续执行。
福建师范大学福清分校
一、中断系统的几个概念
中断入 口地址
一、中断系统的几个概念
中断服务 程序
中断入口地址
中断服务程序
可编程定时器循环开关程序(STC15F104W)实测可用。
可编程定时器循环开关程序(STC15F104W)实测可用。
//用定时器T0的中断实现长时间定时#include<reg51.h> // 包含51单片机寄存器定义的头文件#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit K1=P3^5; //按一下,减5分钟--(原5分钟)sbit K2=P3^4; //按一下,加5分钟--(原5分钟)sbit D1=P3^2; //将D1位定义为P3.2引脚sbit LED1=P3^3; //秒闪指示灯unsigned char Countor,miao,min,shi,j; //设置全局变量,储存定时器T0中断次数//延时void DelayMS(uint ms){uchar t;while(ms--)for(t=0;t<120;t++);}/************************************************************** 函数功能:主函数**************************************************************/ void main(void){EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式2TH0=(65536-50000)/256; //定时器T0的高8位赋初值TL0=(65536-50000)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0Countor=0; //从0开始累计中断次数min=0;j=0;D1=1;while(1)//无限循环等待中断{if(K1==0){while(K1==0);if(j>1){j--;}if(j==0){j=1;}DelayMS(200);}if(K2==0){while(K2==0);if(j<99){j++;if(j==99){min=0;}}DelayMS(200);}}}/************************************************************** 函数功能:定时器T0的中断服务程序**************************************************************/ void Time0(void) interrupt 1 using 0 //“interrupt”声明函数为中断服务函数//其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器{Countor++; //中断次数自加1if(Countor==20) //若累计满20次,即计时满1s{Countor=0; //将Countor清0,重新从0开始计数LED1=~ LED1;miao++;if(miao==60){min++;if(min>=j){D1=~D1;min=0;}}}TH0=(65536-50000)/256; //定时器T0的高8位重新赋初值TL0=(65536-50000)%256; //定时器T0的高8位重新赋初值}。
51单片机定时器计数器、外部、串行中断服务控制字(详版)
51单片机定时器0中断服务51单片机定时器0工作在模式0,每中断10次,使P2.0引脚连接的LED灯闪烁。
#include "reg_c51.h"int nn; //中断次数变量中断服务程序中计数count++时,count应在void main()外定义为全局变量!!!void main(void){//TMOD=0x0F;TMOD &= 0xF0; //定时器0运行在模式0 ,13位计数器// GATE0=0; C/T0#=0; M1=0; M0=0;TH0 = 0x00; //设置初值0x00,所以计数值为8192(213),若是时钟频率为12MHzTL0 = 0x00; //则8192μs中断一次(定时器每计数一次1μs,8192次即8192μs)ET0=1; //允许定时器0中断EA=1; //允许总中断TR0=1; //启动定时器0while(1); //无限循环,没有循环体}void it_timer0(void) interrupt 1 定时器0中断服务程序{nn=nn++; //每次中断nn加1if(nn==10) //当中断10次后,使LED灯闪烁{ nn=0;P2_0 = ~P2_0; //引脚P2.0取反}}①IT0(IT1):外部中断0(或1)置0:电平触发置1:边沿触发②IE0(IE1):外部中断标志硬件置位③TF0(TF1):定时器0(或1)溢出中断标志(通常用于查询方式)当T0(T1)被允许计数后,T1(T0)从初始值开始加1计数,最高位产生溢出时,该位由内部硬件置位,并向CPU请求申请中断。
当CPU响应时,由硬件清零。
硬件置位硬件清零④TR0(TR1):定时器/计数器T1(T0)的运行控制位置0:关闭定时器/计数器置1:启动定时器/计数器TMOD高4位:定时器1(1)M1M0:工作方式0 0 方式0:13位定时器/计数器0 1 方式1:16位定时器/计数器1 0 方式2:自动重装8位定时器/计数器1 1 方式3:仅适用于T0,分为两个8位定时器/计数器方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:定时器0分成两个8位计数器,所以两个定时器的M值均为256(2)C/T:计数器/定时器0:定时器1:计数器(3)GA TE:门控位GA TE=0时,只要TRi=1,定时器/计数器就开始工作,称为软启动。
STC15F104E的外部中断工作异常
STC15F104E的外部中断⼯作异常STC15F104E使⽤了外部中断,发现中断⼯作有时会失效,必需重新上电才能恢复,使⽤中不时会失效。
1/*******************************************************************2 INT0 or 1中断函数3*******************************************************************/4#if(VER==1)5void exint1() interrupt 2//INT1,interrupt 2 (location at0013H)6#endif7#if(VER==2)8void exint0() interrupt 0//INT0,interrupt 0 (location at0003H)9#endif10 {//static uchar CountTemp=0; //11// static bit flag_Hand=0; //标记⽤于⼿动开关在开的状态下灯灭,要点亮需再开关⼀次⼿动开关。
12 u8_CntTim001=0;13if(RelayCtl)14// if(DetInput) //read INT1(P3.3)port status,1:上升沿中断 0:下降沿中断15 { RelayCtl=0; //关灯16 flag_RelayState=RelayCtl; //存储继电器状态1718 flag_countdown_enable=0; //倒计时使能标志,0除能,1使能19 flag_SetCouDownIndict=0; //倒计时开始指⽰,0指⽰关,1指⽰开,⾃动清0.【灭⼀下指⽰】20 flag_HandCouDownIndict=1; //机械⼿动开关倒计时使能标志,0除能,1使能【为1时,HandSwitch_Cnt开始增1计数,为0时,清0】21 }22else23 { if((HandSwitch_Cnt<=2)&&flag_HandCouDownIndict) //0.25x4=1.0s 如果关灯时间在1.0s内⼜重新开灯时。
51单片机定时器、串口、中断
51单⽚机定时器、串⼝、中断⽂章⽬录MCS-51功能单元⼀、定时器&计数器1. 数量:两个可编程的16位的定时器/计数器T0和T1;都是16位加法计数结构;分为⾼8位和低8位;TH0、TL0,TH1、TL1;定时器/计数器T0、T1是80C51的中断源之⼀,当数据寄存器溢出,则向CPU申请中断。
数据寄存器的复位状态为0。
为使计数值或定时值满⾜⾃⼰的要求,需预先将数据寄存器赋值,称为初值设定,中断中也要重新设定初值。
2. 定时器和计数器本质:都是计数器,对下降沿进⾏计数,计数达到溢出后置为标志位或者进⼊中断;3. 两者的区别:定时器是对内部的机械周期脉冲进⾏计数,每个脉冲都是⼀个机械周期;定时时间=机器周期*(2^L-初值) (L=13,16,8)计数器则是通过外部IO⼝进⾏脉冲计数,⼀个脉冲加⼀个数;对应IO⼝:T0-P3.4,T1-P3.5;计数长度:计数长度=(2^L-初值) (L=13,16,8)两者的模式切换通过TMOD控制4. TMOD结构图:5. TMOD详解GATE:门控位GATE =1,由中断引脚INT0(P3.2)、INT1(P3.3)和TCON中的位TR0、TR1共同控制来启动定时器/计数器GATE =0,由TR0和TR1置位来启动定时器/计数器**(⼀般为0)**C/!T:模式选择位:1时,计数器模式;0时,定时器模式;M0 & M1共同控制⼯作⽅式:项⽬开发⼀般⽤01,考试⼤概率考00;6. 启动停⽌与中断控制寄存器TCONTFx:定时器或者计数器溢出时置位1,请求中断,中断程序进⼊后⾃动清零;TRx:定时器启动控制位,当其等于1时定时器/计数器启动;7. 中断允许控制寄存器:IEETx:定时器/计数器的中断允许位EA:CPU总中断的允许位8. 定时器/计数器使⽤:(重点)⼯作⽅式的设置://设置定时器0⼯作在16位模式//C语⾔TMOD=0x01; //定时器//汇编MOV TMOD, #01H;计数初值的计算+装载:伪代码://机械周期1us,设置500us中断⼀次为FE0C//C语⾔TH0=0xFE;TL0=0x0C;//汇编MOV TH0, #0FEH ;MOV TL0, #0cH ;中断允许位的设置:伪代码://CEA=1;ET0=1;//assemblySETB EA ;turn on all interruptSETB ET0 ;turn on 0 interrupt开启定时器:伪代码://cTR0=1;//assemblySETB TR0 ;turn onCLR TR0 ;turn off !9. 使⽤实例:定时器使⽤⽅式(中断⽅式):ORG 0000H;AJMP MAIN;ORG 001BH;AJMP IRQ1;MAIN:MOV TMOD, #00H ;⼯作模式0,⾼8+低5MOV TH1, #0FCHMOV TL1, #03HSETB TR1;SETB ET1;SETB EA;AJMP $;IRQ1:MOV TMOD, #00HMOV TH1, #0FCHCPL P1.0RETI ;中断返回⼀定要加!计数器使⽤⽅式(中断⽅式):ORG 0000H;AJMP MAIN;ORG 001BH;AJMP IRQ1;MAIN:MOV TMOD, #04H ;计数器模式MOV TH1, #0FCH ;⼀千个下降沿中断⼀次 MOV TL1, #03HSETB TR1;SETB ET1;SETB EA;AJMP $;MOV TMOD, #00HMOV TH1, #0FCHCPL P1.0RETI ;中断返回⼀定要加!查询⽅式则是判断TF溢出标志,变⾼后进⼊⾃定义韩式处理数据,清空标志;⼆、并⾏⼝&串⾏⼝并⾏⼝:并⾏传输数据(不常⽤)占据资源⼤,错误率⾼,但快串⾏⼝:(重要)稳定,占据IO⼝⼩,准确,稍微慢1. 串⾏⼝控制寄存器SCON:SM0和SM1:串⾏⼝⽅式选择位;00-移位寄存器⽅式01-8位UART,波特率可变10-9位UART,波特率为fosc/64或fosc/32(PCON决定)11-9位UART,波特率可变⽅式1为常⽤通信⽅式;⽅式2、3为多机通信,⽅式0为移位寄存器,不常⽤;重要标志位:TI:发送完成标志RI:接收完成标志2. 串⼝波特率与定时器1关联,公式如下:波特率=2^SMOD * fosc / [32 * 12(2^K-初值)];(fosc系统主频)波特率翻倍寄存器:PCON只有最⾼位(SMOD)有效:为1时波特率翻倍,为0时不翻倍⽅式1串⼝通信接收代码:ORG 0000HLJMP MAINORG 0023HLJMP RX_TIMAIN:MOV SCON, #50HMOV PCON, #00HMOV TMOD, #02HMOV TH1, #0FDHMOV TL1, #0FDHSETB TR1SETB EASETB ESRX_TI:PUSH ACCMOV TH1, #0FDHMOV TL1, #0FDHMOV A, SBUF;处理POP ACCRETI发送套⽤代码:MOV SBUF, AJNB TI, $CLR TIRET三、中断系统所有中断控制位:TCON:TF1、TF0:定时器溢出标志、请求中断:IE1、IE0:外部中断溢出请求:IT1、IT0:外部中断触发⽅式选择-1下降沿触发、0低电平触发SCON:内部TI、RI触发接收发送中断。
单片机 串口中断和定时器0中断
单片机串口中断和定时器0中断1.引言1.1 概述概述部分内容:单片机是一种集成了处理器、存储器和输入输出功能的微型计算机系统。
它广泛应用于各种电子设备中,具有体积小、功耗低、成本低等特点。
在单片机的开发过程中,串口中断和定时器0中断是两个重要的功能模块。
串口中断是指在串口进行数据传输时,当接收到一个完整的数据帧或发送完成一个数据帧时,触发相应的中断。
通过使用串口中断,单片机可以实现与外部设备的高效通信。
串口中断的实现方法一般通过配置和使用相应的串口寄存器和中断向量表来完成。
定时器0中断是单片机中的一个特殊功能模块,它可以在指定的时间间隔内生成中断信号。
通过设置定时器的计数值和工作模式,单片机可以实现各种定时、延时、计数和脉冲生成等功能。
定时器0中断的实现方法一般是通过设置定时器的相关寄存器、中断使能控制和中断服务程序来实现。
本文将深入探讨串口中断和定时器0中断的定义、作用及其实现方法。
通过对这两个功能模块的详细介绍和分析,将帮助读者更好地理解和应用单片机中的串口中断和定时器0中断功能。
同时,本文还将讨论串口中断和定时器0中断在各种应用领域的重要性,并展望其未来的发展前景。
1.2 文章结构文章结构是指文章的整体架构和组织方式。
一个良好的文章结构可以使读者更清晰地理解文章的内容,并且能够更高效地获取所需要的信息。
本文将围绕单片机串口中断和定时器0中断展开讨论,包括引言、正文和结论三个部分。
2. 正文部分主要包括了串口中断和定时器0中断的内容。
首先,在2.1节中我们将深入探讨串口中断,介绍其定义和作用。
我们将解释为什么需要串口中断以及其在单片机应用中的重要性。
然后,我们将详细介绍串口中断的实现方法,包括相关的寄存器设置和中断服务程序的编写。
通过这些内容,读者将能够全面了解串口中断的原理和实际应用。
接下来,在2.2节,我们将转向定时器0中断的讨论。
我们将先介绍定时器0中断的定义和作用,解释其在单片机开发中的重要性。
STC15F104E的STC单片机自动下载系统设计
STC15F104E的STC单片机自动下载系统设计引言STC单片机是我国宏晶公司研制的一系列51单片机。
STC单片机以传统的8051单片机为基础,经过技术改进和资源扩展,具有片内资源丰富、运算速度快、价格低等优点。
STC 单片机下载程序不需要编程器烧写,可以通过串口下载。
美中不足的是,STC单片机下载时必须进行冷启动,即下载信号加到单片机串口以后必须对单片机断电再上电,这给用户带来了一些不便。
尤其是反复调试程序需要多次下载时,显得更加繁琐。
为了解决这一问题,有必要研制一种STC单片机专用的自动下载系统,使系统接收到上位机发往单片机的下载信号后,自动冷启动STC单片机,完成下载任务。
1 原理分析STC单片机下载时,需要使用宏晶公司提供的STCISP软件。
下载开始时,上位机软件首先向单片机发出下载命令。
自动下载系统收到上位机对单片机发出的下载命令后,实现对单片机的断电、上电冷启动操作。
单片机经冷启动后,收到命令数据流后作出回应,开始下载程序。
需要注意的是,单片机在正常工作中,串口有可能接收数据,由于自动下载系统与单片机串口连接,因而系统必须具有自动判断接收的数据流是否为下载命令的能力,保证及时冷启动目标单片机。
为了检测下载程序的命令数据流,可以采用如下方法:从PC的串口引出连接线,接至PC的另一个串口,用串口调试助手打开;用STC-ISP软件发送下载命令,可以检测到在波特率为9 600 bps的情况下,该软件持续向单片机发送十六进制的0x80;当自动下载系统连续接收到足够数量的0x80时,即可判定接收到了下载命令数据流,从而进入冷启动程序。
2 系统硬件设计2.1 主控芯片STC15F104E简介自动下载系统需要接收上位机发往目标单片机的下载命令程序流,并对目标单片机进行冷启动。
STC15F104E是宏晶公司研发的一款单片机,具有省去一些外部电路而功能较全面的优点。
该单片机的特点有:◆内部集成了可靠复位,省去了外部复位电路。
单片机原理与应用 第3版课件-STC15F系列单片机定时器/计数器
位号
位名
B7
B6
T0x12 T1x12
B5
B4
T2R
B3
B2
ഥ T2x12
T2_CΤT
B1
B0
复位值
00H
定时计数器T2的控制
❖ 定时计数器T2
T2的电路结构与T0、T1基本一致,但T2的工作模式固定为16位自动重装初始值模式。T2
定时计数器T0、T1的控制
❖ 定时计数器的控制寄存器TCON
定时器的控制寄存器TCON具有中断控制和定时控制两种功能。
TCON的字节地址是88H,故它可以进行位寻址操作
位号
B7
B6
B5
B4
B3
B2
B1
B0
复位值
位名
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
00H
定时计数器T0、T1的控制
THx 和TLx 硬件上的4 种不同组合,使得定时器/ 计数器有4 种工作方式。
M1
0
M0
0
工作方式
方式0
功能说明
定时初值计算
自动重装初值的16位定时/计数器
(216-X)/f = N
TH=X高8位,TL=X低8位
0
1
方式1
16位不可重装模式定时/计数器
(216-X)/f = N
TH=X高8位, TL=X低8位
定时计数器T0、T1的控制
❖ 定时计数器工作方式寄存器TMOD
位号
B7
B6
B5
B4
ഥ
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
t++;
//TBUF=but[t++&0x0f];
TING=1;
}
}
/********************************************************************
接收数据判断函数
TH0=BAUD>>8; //十六位寄存器
TR0=1; //开定时器
ET0=1;
PT0=1;
}
/********************************************************************
定时器1初始化函数
//#define BAUD 0XF400 //1200bps@ 11.0592MHZ
//#define BAUD 0XFA00 //2400bps@ 11.0592MHZ
//#define BAUD 0XFD00 //4800bps@ 11.0592MHZ
#define BAUD 0XFE80 //9600bps@ 11.0592MHZ
*********************************************************************/
uchar TBUF,RBUF;
uchar TDAT,RDAT;
uchar TCNT,RCNT;
uchar TBIT,RBIT;
uint TING,RING;
{
for(j=13;j>0;j--);
{ ;
}
}
}
/********************************************************************
定时器0初始化函数
功能:串口初始化,波特率9600,方式1
*********************************************************************/
void UART_INIT()
{
TING=0;
RING=0;
TEND=1;
ET1=1;
TR1=1; //开始定时
}
/********************************************************************
外部中断0初始化
sbit P33=P3^3; //定义继电器控制输出脚
/********************************************************************
定义特殊寄存器
*********************************************************************/
*********************************************************************/
void TIMER0_INIT(void)
{
TMOD=0X00; //定时器T0设定
AUXR|=0X80; //辅助寄存器
TL0=BAUD; //十六位寄存器
/********************************************************************
单片机与PC机采用9针串口,MAX232通讯,波特率默认为9600.
单片机接收PC机发送的数据码表如下:
01、开:PC发送'A';
02、关:PC发送'B';
REND=0;
TCNT=0;
RCNT=0;
}
/********************************************************************
主函数
*********************************************************************/
#include <gned char //宏定义字符型变量
#define uint unsigned int //宏定义整型变量
/********************************************************************
03、输出状态查询:PC发送C;单片机返回输出状态‘A’表示开 ‘B’表示关;
04、继电器状态取反:PC发送D 继电器状态取反
*********************************************************************/
#include "reg52.h"
uint TEND,REND;
void UART_INIT(); //声明函数
uchar t,r; //定义数据类型
uchar but[16]; //数据存储数组
/********************************************************************
sfr AUXR = 0x8E; //辅助寄存器
sbit RXB=P3^0;
sbit TXB=P3^1;
/********************************************************************
定义数据类型
void main()
{
TIMER0_INIT(); //定时器0初始化模拟串口用
TIMER1_INIT(); //定时器1初始化
Init_exint();
times=IapReadByte(0); //读取函数
EA=1; //开总中断
TEND=0;
//TBUF=dat;
switch(dat) //接收数据判断
{
uchar k;
k=10;
case 'A': P33=1;delay(k);TBUF = dat;dat=0xee;break; // 开
case 'B': P33=0;delay(k);TBUF = dat;dat=0xee;break; // 关
UART_INIT(); //串口初始化
while(1)
{
if(REND)
{
REND=0;
r++;
//but[r++&0x0f]=RBUF;
dat=RBUF;
}
if(TEND)
{
if(t!=r)
{
extern uchar IapReadByte(uint addr); //读取函数
extern void IapProgramByte(uint addr,uchar dat); //写入函数
extern void IapEraseSector(uint addr); //擦除函数
*********************************************************************/
}
}
/********************************************************************
*********************************************************************/
void Init_exint(void)
{
INT0=1; //下降沿触发
IT0=1;
EX0=1;
}
/********************************************************************
case 'C': if(P33==1)
TBUF = 'A'; // 串口读输出口状态
if(P33==0)
TBUF = 'B';
delay(k);
dat=0xee;
break;
eeprom函数声明
*********************************************************************/
extern void IapIdle(); //操作函数
//#define BAUD 0XFF40 //19200bps@ 11.0592MHZ
//#define BAUD 0XFFA0 //38400bps@ 11.0592MHZ
uchar miao,fen,times;
uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
case 'D': P33=!P33;delay(k);TBUF = dat;dat=0xee;break; // 输出口取反
case 'E': delay(k);TBUF = times;dat=0xee;break; // 串口读取当前设定值
default:break;
{
if(--RCNT==0)
{
RCNT=3;
if(--RBIT==0)
{
RBUF=RDAT;
RING=0;
REND=1;