当前位置:文档之家› 单片机整理笔记

单片机整理笔记

单片机整理笔记
单片机整理笔记

#1楼主:快捷共享《删繁就简-单片机入门到精通》之中断

文章发表于:2010-04-01 20:59

1.10.方便实用的中断

每个周末丁丁小朋友的父母会要求他独立完成一些家务,来培养他的劳动习惯,家务是固定的三件事情:烧两壶开水、炖一锅排骨、将家里的地板拖一遍。如果单独完成这些事情,烧一壶开水大概需要十分钟,炖排骨大概二十五分钟,拖地板大概需要三十分钟,烧开水只要等水开了倒进保温瓶里,排骨炖好后关掉火就行。

第一周,丁丁小朋友先开始烧水和炖排骨,然后去拖地板,为了看水有没有烧开和排骨有没有炖好,拖一会地板就要停下来跑到厨房去看一看,这样看一次需要一分钟,总共看了十次,四十分钟后三样家务全部做完。

虽然四十分钟把家务全部做完,但丁丁小朋友是隔几分钟才去看一下水有没有烧开,于是水被烧开了一会丁丁小朋友才发现,水烧开后从壶里溢出流到煤气灶上,有点危险,显然从家务完成的质量来看不是很理想。

第二周,丁丁小朋友吸取了上周的经验,烧水换用水烧开后可以自动鸣笛的壶,排骨有上周的经验知道炖二十五分钟火候差不多,于是炖的时候用一个闹钟定时二十五分钟,接下来专心开始拖地板。大约十分钟后,第一壶水烧开鸣笛,丁丁小朋友停下拖地板去把水倒进保温瓶接着烧第二壶,继续拖地板;又过了大约十分钟,第二壶水烧开,丁丁小朋友同样处理;二十五分钟时间到,闹钟响起,丁丁小朋友过去看排骨,已经炖好于是关火,接着拖地板;三十三分钟,地板拖完,家务全部完成。

和第一周对比,时间少用了七分钟,而且水一开就去倒掉,消除了潜在危险,完成的质量自然要好一些,看来日常生活中的一些事情,不同的处理方法做出来的效果也会有明显差异。

丁丁小朋友做家务的例子对应单片机同时需要处理几个工作任务的两种基

本方法:轮流查询和中断响应。开水烧开了不马上处理就会有危险,拖地板被打断有延时不会发生什么意外,但烧开水只要把水倒进壶里烧就行,烧的过程中并

不需要做其它事情,拖地板则需要一直拖到全部地板拖完。如果说第一周的方法是轮流查询那二周的方法就是中断响应,水烧开鸣笛和闹铃为中断发生信号,从丁丁小朋友两周完成的结果可以看出中断响应效果要好过轮流查询。

图1.10.-1 丁丁第一周家务流程图

图1.10.-2 丁丁第二周家务流程图

序言中就说过单片机技术是一门实用工程技术学科,和日常生活息息相关,正是为了应付丁丁小朋友做家务例子中烧水炖排骨这类问题,单片机有了中断的概念。中断就是在工作过程中突然有更紧要的事情去要去处理,于是将当前的工作打断,处理好更紧要的事情后再继续当前的工作。单片机的中断可分为两大类:一种是单片机内部控制电路在某种条件下产生的叫内部中断,另外一种则是由单片机外部器件产生的叫外部中断。

丁丁小朋友烧水和炖排骨对于他是两个独立的外部事情,这两个外部事情所产生的“中断信号”分别属于外部中断和内部中断。水烧开是水壶主动发出笛声,这个笛声和丁丁小朋友没有直接的关联,他不知道具体会在什么时候响,只要水开就会由水壶产生并传到丁丁小朋友的耳朵里,笛声是他的“外部中断信号”;闹铃是丁丁小朋友用他的闹钟来产生的,和炖排骨没有直接联系,只是因为丁丁小朋友知道排骨二十五分钟可以炖好才设置成这个时间,他自己是知道闹铃什么时候会响,只是他不想频繁地去看时间才用闹钟定时,闹铃声是他的“内部中断信号”。

通过丁丁小朋友做家务的例子我们明白了中断的原理和方法:单片机在工作的时候往往需要处理多个事情,有些事情只并不需要单片机时刻进行控制,只是需要在某些特定的条件下由单片机做出相应处理,有些事情则需要单片机花比较多的时间逐步控制,一旦停止控制就无法进行下一步操作,中断的引入可以让单片机面对这样的问题时有更高的工作效率,对于不需时刻进行控制的事情在需要被干预时发出中断信号让单片机来进行相应处理,需要时刻控制的就由单片机主程序循环持续控制。

单片机中断分为内部中断和外部中断两大类,外部中断由单片机外部设备产生,中断产生后通过单片机的外部管脚传递给单片机,传递这个中断信号最简单的方法就是规定单片机的管脚在什么状态下有外部中断产生,这样单片机通常是有一个或多个IO口当在输入状态时可以用来检测外部中断信号。有外部中断产生的条件通常也就是这五种:IO口输入为高、IO口输入为低、IO口输入由高变为低、IO口输入由低变为高、IO口输入由高变低或者由低变高。

一个连接到单片机的外部设备,如果想要使用单片机的外部中断,就必须在自己请求单片机中断响应的时候给单片机提供单片机在这五种信号中所支持的类型来触发单片机中断。程序运转中,一个中断不是只产生一次,一般都会间隔持续产生,这五种外部中断触发信号前四种都有一个问题,就是外设发出请求中断信号后如果信号请求线状态不改变,外设会无法向单片机提供下一次中断请求信号。让我们来看看以单片机和外部设备采用负跳变触发中断为例的触发情况。

外部设备以负跳变触发单片机中断,第一次中断请求外部设备的中断请求输出脚可以从高变低,触发单片机中断,第一次中断请求发生后中断请求脚保持输出低,外部设备无法产生第二次中断的触发负跳变信号。

图1.10.-3 外设只能产生一次中断请求信号示意图

将外部设备的中断请求信号做出修改,原来为需要中断时只是输出从高到低变化,现在改为输出先从高变到低,经过一小段时间后自己从低变回高,这样就可以每次需要中断时都能向单片机输出负跳变触发信号。

图1.10.-4 外设可连续产生中断请求信号示意图一

或者是由外部设备提供某种接口,单片机通过该接口可以对外部设备进行中断清除操作,中断清除操作可以让外部设备的中断请求输出脚恢复到高。

图1.10.-5 外设可连续产生中断请求信号示意图二

外部中断触发还有一些特殊方式,比如外部脉冲宽度测量、外部脉冲计数等,这些方式都是在前面几种基本触发方式上进行功能扩展得来的,外部脉冲宽度测量就是当中断信号线跳变时会启动内部一个计时器,到下一次中断信号线跳变时通过计时器得到脉冲宽度并重新启动计时器,这些方式很少会使用到,不做详述。

内部中断是指单片机内部的功能模块产生中断信号,只要是单片机内部在C PU外围能独立工作的功能模块都会提供中断功能,常见的内部中断类型有时钟T Imer、串口UART、模数转换ADC等。内部中断的工作流程和外部中断没太多区别,只是中断请求信号是在单片机内部进行传输,中断信号不是管脚上的电平状态,而是一个寄存器里面的相应标志位,通常当某个内部中断产生中断请求时就会将相应标志位置为1,CPU响应中断时将这个标志位清0。

图1.10.-6 内部中断触发示意图

单片机对中断标志位的处理方法没有统一标准,具体的约定方法要看单片机文档。大部分是标志位为1有中断产生,但有少数单片机是标志位为0有中断产生;有的单片机对中断标志位是CPU写入什么就是给改写成什么,有的则是规定必须通过写1或写0来实现清除操作,还有少数只要读一下中断标志位就会自动清除掉该标志位。

如果单片机不想被外部中断触发,大不了将用于连接外部中断触发信号的管脚接成不会触发中断的电压状态就可以,但内部中断无法去改变内部连线,所以单片机为了可以选择中断是否可以被除法,在其内部会有相关的寄存器来进行选择,通过里面的控制标志位开发人员可以根据实际情况决定是否使用中断。通常单片机里面有一个总控制位,这个位可以控制所有中断的开与关,然后每一种中断自己还有一个独立的控制位决定自己的开与关,如果想使用某个中断,就需要将总中断开关和对应中断的开关都打开。

当单片机有中断信号产生时,就会触发对应中断,不同的中断源会需要不同的响应方法,也就是说不同的中断产生的时候,需要单片机程序依照不同的中断

源做出不同的响应,这就是中断服务程序。如果是UART收到新数据产生中断,应该是UART中断服务程序将数据读回来并做处理,如果是ADC转换完成产生的中断,需要的则是ADC中断服务程序将数据读回来并做处理。如果需要清中断标志位动作,一般都是在中断服务程序里面完成。

不同的中断源需要与之对应的中断服务程序,实际开发中并不是所有的中断都会被用到,开发人员为了节约程序代码空间会只写出自己要使用到的中断服务程序,也就是说会有一些中断没有与之对应的中断服务程序,如果触发了这样的中断,单片机程序会运行出错,前面中断各自独立的控制位就排上用场,将这些控制位关掉,相应中断就不会被触发。

单片机开始上电的时候,如果控制中断是否被打开的寄存器控制标志位被打开,可能会出现中断被误触发的情况,而这个中断如果没有与之相对应的中断服务程序的话程序就会跑飞,所以单片机上电的时候一般会自动将这些寄存器里面的标志位都关掉,以免误触发。

中断服务程序是单片机程序的一部分,具体内容由开发人员决定,这样中断服务程序的大小在单片机程序中的位置就不固定,当单片机的中断被触发后,单片机需要知道中断服务程序在什么位置才能执行它,单片机通过中断跳转表(中断向量表)来解决这个问题。

虽然中断服务程序的大小和在整个程序中的位置会不固定,但程序只要被烧进单片机系统,对于这个程序来说其中断服务程序的大小和在整个程序中的位置就会被固定下来,如果对单片机程序空间分配我们做出一些约定,将一个绝对固定地址专门分配给中断使用,程序编译时会将中断服务程序的起始地址(或者是跳转到中断服务程序的指令)填到这个绝对固定地址所在的空间,当中断产生时候,单片机先将绝对固定地址所在位置里面的内容读出,根据所读内容就可以跳转到中断服务程序。

图1.10.-7 中断响应示意图

简单的单片机所提供的中断种类有限,为了简化程序,会给每一个中断分配一个用来存放中断服务程序地址的地址空间,这种方法其实没什么不好的地方,只是单片机技术发展到现在遇到了瓶颈,高端单片机越来越复杂,于是一些专业厂商开始合作共享技术资源,例如ARM公司利用他们在CPU架构体系上的技术优势专门给另外的厂商提供CPU内核,另外的厂商在ARM内核的CPU外围增加功能模块,这些功能模块大都支持中断。

图1.10.-8 ARM内核单片机架构图

不同厂家在相同CPU内核基础上设计出来的单片机外围的功能模块会各不相同,从而中断的种类和个数也各不相同,而CPU处理中断的方法是一样的,如果延续简单的单片机给每个中断都分配一个地址空间的做法显然有问题,CPU无法知道到底有多少种中断需要支持,这些中断又分别对应什么模块,于是采用另外一种中断处理方法,将所有中断地址都指向同一个,并将所有中断依次编号,中断产生时候CPU会告诉中断服务程序当前中断编号是多少,然后中断服务程序根据中断编号做出相应响应。

图1.10.-9 公用中断入口中断响应流程图

图1.10.-10 独立中断入口中断响应流程图

所有中断使用同一个中断向量地址然后通过中断号判断中断类别的方法虽然解决了通用CPU内核中断不能直接对应中断向量地址的问题,但把它中断处理的流程和具有独立中断向量表的单片机相比就会发现中断的响应速度会变慢。具有独立中断向量表的单片机只要一条跳转指令就可以直接进入中断程序,而没有独立中断向量表的单片机需要先跳转到中断公共入口,然后通过代码判定中断类别,确定中断类别后才跳转到真正的中断程序中去。C语言的代码会让这种情况更加恶化,所以如果是没有独立中断向量表的单片机一般采用汇编查表的方法加快中断响应速度。

图1.10.-11 汇编中断快速跳转表

中断程序执行完毕后回返回继续执行主程序,这样就要求中断不改变主程序的运行状态,所以中断响应时需要将程序当前运行的状态信息保存起来,比如程序运行到什么位置、当前CPU状态寄存器的状态等信息。当中断程序执行完毕,可以通过这些信息将CPU状态寄存器恢复原来状态,并能返回原程序继续执行。不同的单片机对此的处理方式也会有不同,一种是完全由硬件来完成,并不需要程序来进行管理;另外一种是将状态信息用相应指令保存在特定位置,返回时再用相应指令恢复原来状态。

单片机中断还有中断优先级和中断嵌套的概念,但不是所有的单片机都会支持这两种功能。中断优先级是不同的中断会有不同的优先级别,如果同时有两个中断产生,单片机会先响应优先级高的中断。中断嵌套是指在中断响应当中又有新的中断产生,单片机可以暂停当前的中断程序执行去响应新的中断,新中断程序执行完以后在接着执行当前中断程序。一般中断嵌套是高优先级的中断可以插入低优先级中断响应程序,同级或低级的中断不能插入当前中断响应程序。

图1.10.-12 中断嵌套示意图

中断步骤说明:

步骤①保存主程序现场,执行中断1服务程序

步骤②保存中断1服务程序现场,执行中断2服务程序

步骤③恢复中断1服务程序现场,继续执行中断1服务程序

步骤④恢复主程序现场,准备继续执行主程序,有新中断不能继续执行主程序

步骤⑤保存主程序现场,执行中断3服务程序

步骤⑥恢复主程序现场,准备继续执行主程序,有新中断不能继续执行主程序

步骤⑦保存主程序现场,执行中断4服务程序

步骤⑧恢复主程序现场,无中断产生继续执行主程序

有的单片机一进入中断函数就会自动将中断的总控制位关掉,需要开发人员在中断程序中用程序再次打开,否则一次中断后所有的中断就不能继续使用。对于中断标志位,在写单片机程序的时候要依据单片机文档进行清除标志为操作,不然有可能会一旦产生某个中断就会连续不停的反复响应这个中断,导致主程序不能继续运行。

单片机中断系统

概念:引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。

80C51的中断系统有5个中断源,2个优先级,可实现二级中断嵌套(就是可以在嵌套过程中再次响应嵌套)。

中断源

1、INT0(P3.2),外部中断1。可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。

2、INT1(P3.3),外部中断2。可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。

3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。

4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。

5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。

中断请求标志

1、TCON的中断标志

IT0(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溢出中断请求标志位。

单片机TCON辅助设置工具

2、SCON的中断标志

RI(SCON.0),串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。同样,RI必须由软件清除。

TI(SCON.1),串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。

80C51中断的控制

中断允许控制

CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。

?EX0(IE.0):外部中断0允许位;

?ET0(IE.1):定时/计数器T0中断允许位;

?EX1(IE.2):外部中断1允许位;

?ET1(IE.3):定时/计数器T1中断允许位;

?ES(IE.4):串行口中断允许位;

?EA (IE.7):CPU中断允许(总允许)位。

单片机IE自动设计工具

中断优先级控制

80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的。

?PX0(IP.0),外部中断0优先级设定位;

?PT0(IP.1),定时/计数器T0优先级设定位;

?PX1(IP.2),外部中断1优先级设定位;

?PT1(IP.3),定时/计数器T1优先级设定位;

?PS? (IP.4),串行口优先级设定位;

?PT2(IP.5),定时/计数器T2优先级设定位。

单片机IP自动设计工具

中断优先级规则:

?CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。

?正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。

?正在进行的低优先级中断服务,能被高优先级中断请求所中断。

中断系统总结:

TCON和SCON是中断请求,以及控制外部中断的有效方式。IE控制是否允许CPU 响应中断,是否允许响应某一个中断。IP控制中断的优先级。

单片机定时器/计数器

相关工具:单片机延时设计工具(计数器初值计算)

80C51单片机内部设有两个16位的可编程定时器/计数器。可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。

从上面定时器/计数器的结构图中我们可以看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1 构成。其访问地址依次为

8AH-8DH。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器 TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。TMOD主要是用于选定定时器的工作方式; TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0 (P3.4)和T1(P3.5)输入。

定时计数器的原理:

当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz,则计数周期为:

T=1/(12×106)Hz×1/12=1μs

这是最短的定时周期。若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。

当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平。若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个由1至0的跳变需要两个机器周期,故外部事年的最高计数频率为振荡频率的1/24。例如,如果选用12MHz晶振,则最高计数频率为0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。

当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU 当前操作。CPU

也可以重新设置定时器工作方式,以改变定时器的操作。由此可见,定时器是单片机中效率高而且工作灵活的部件。

综上所述,我们已知定时器/计数器是一种可编程部件,所以在定时器/计数器开始工作之前,CPU必须将一些命令(称为控制字)写入定时/计数器。将控制字写入定时/计数器的过程叫定时器/计数器初始化。在初始化过程中,要将工作方式控制字写入方式寄存器,工作状态字(或相关位)写入控制寄存器,赋定时/计数初值。下面我们就提出的控制字的格式及各位的主要功能与大家详细的讲解。

控制寄存器定时器/计数器T0和T1有2个控制寄存器-TMOD和TCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。其中,TCON寄存器中另有4位用于中断系统。

TMOD定时器/计数器方式寄存器

单片机TMOD自动设计工具

定时器方式控制寄存器TMOD在特殊功能寄存器中,字节地址为89H,无位地址。TMOD 的格式如下图所示。

由图可见,TMOD的高4位用于T1,低4使用于T0,4种符号的含义如下:

GATE:门控制位。GATE和软件控制位TR、外部引脚信号INT的状态,共同控制定时器/计数器的打开或关闭。

C/T:定时器/计数器选择位。C/T=1,为计数器方式;C/T=0,为定时器方式。

M1M0:工作方式选择位,定时器/计数器的4种工作方式由M1M0设定。

定时器/计数器方式控制寄存器TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器0,高半字节定义为定时器1。复位时,TMOD所有位均为0。

例:设定定时器1为定时工作方式,要求软件启动定时器1按方式2工作。定时器0为计数方式,要求由软件启动定时器0,按方式1工作。

我们怎么来实现这个要求呢?

大家先看上面TMOD寄存器各位的分布图

第一个问题:控制定时器1工作在定时方式或计数方式是哪个位?通过前面的学习,我们已知道,C/T位(D6)是定时或计数功能选择位,当C/T=0时定时/计数器就为定时工作方式。所以要使定时/计数器1工作在定时器方式就必需使D6为0。

第二个问题:设定定时器1按方式2工作。上表中可以看出,要使定时/计数器1工作在方式2,M0(D4) M1(D5)的值必须是1 0。

第三个问题:设定定时器0为计数方式。与第一个问题一样,定时/计数器0的工作方式选择位也是C/T(D2),当C/T=1时,就工作在计数器方式。

第四个问题:由软件启动定时器0,前面已讲过,当门控位GATE=0时,定时/计数器的启停就由软件控制。

第五个问题:设定定时/计数器工作在方式1,使定时/计数器0工作在方式1,M0(D0)M1(D1)的值必须是0 1。

从上面的分析我们可以知道,只要将TMOD的各位,按规定的要求设置好后,定时器/计灵敏器就会按我们预定的要求工作。我们分析的这个例子最后各位的情况如下:

D7 D6 D5 D4 D3 D2 D1 D0

0 0 1 0 0 1 0 1

二进制数00100101=十六进制数25H。所以执行MOV TMOD,#25H这条指令就可以实现上述要求。

TCON定时器/计数器控制寄存器

TCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)为88H一8FH,由于有位地址,十分便于进行位操作。

TCON的作用是控制定时器的启、停,标志定时器溢出和中断情况。

TCON的格式如下图所示。其中,TFl,TRl,TF0和TR0位用于定时器/计数器;IEl,ITl,IE0和IT0位用于中断系统。

PIC单片机CCP模块技术笔记

与输入捕捉模式\比较器相关的寄存器

作用:1)用于测量输入引脚的周期信号的周期,频率和占空比等 2)测量输入的非周期性矩形脉冲信号的宽度,到达时刻和消失时刻等 特点: 1)时钟源来自TMR1 2)应先设好TMR1,且RC2/CCP1脚设为输入状态 3)捕捉开启后,TMR1自动累加,CCP1一直检测引脚状态,与设定事件相 同符时,TMR1的值被捕捉到CCPR1中,并产生中断. 工作原理:捕捉条件,1)每个脉冲下降沿; 2)每个脉冲上升沿; 3) 每4个脉冲上升沿; 4) 每16个脉冲下降沿; 发生后,CCPR1马上记下TMR1的值 注意点:1) CCP1中断后,应用软件将其清0; 2)当CCPR1中的值还没取出时有新的捕捉发生, 则原有的值被覆盖; 3) 如果修改预分频器的值,可能会产生一次错误中断,并且预分频器不会清0.因此第 一次捕捉可能是从预分频器的一个非0的起始值开始计数的. 4)TMR1要设为定时器或同步工作方式; 使用输入捕捉模式的步骤: 1 设置RC2/CCP1为引脚输入;(TRISC寄存器) 2 设置TIMER1的参数: T1CON=--000001:内部时钟,计数器频率FOSC/4,工作允许(进一步可设置PIE1中的TMR1IE中断允许,PIR1中的TMR1IF) 3 设置CCP1CON的参数: CCP1CON=----0100;每个下降沿捕捉;(进一步可设置PIE1中的CCP1IE中断允许, PIR1中的CCP1IF) 4 等待捕捉成功(中断或者查询) 5 从CCPR1L和CCPR1H取值,该值代表捕捉发生的时刻; 6 和上次的捕捉值相减,得到两次捕捉之间的时间; 7 保留本次捕捉值,为下次作准备; 8 重复等待捕捉成功(跳到第4步); 输出比较模式

单片机复习笔记

MCS-51系列单片机的结构及原理 ●MCS-51单片机由8个部件组成:中央处理器(CPU ),片内数据存储器(RAM ),片内程序存储器(ROM/EPROM ),输入/输出接口(I/O 口,分为P0口、P1口、P2口和P3口),可编程串行口,定时/计数器,中断系统及特殊功能寄存器(SFR )。 ●EA 引脚是片内外程序存储器的选择信号。当EA 端保持高电平时,访问内部程序存储器,但在PC (程序计数器)值超过0FFFH (对于8051/8751/80C51)或1FFFH (对于8052)时,将自动转向访问外部程序存储器。当EA 端保持低电平时,不管是否有内部程序存储器,则只访问外部程序存储器。 ●由于8031片内没有程序存储器,所以在使用8031时,EA 引脚必须接低电平。 ●在MCS-51单片机中,除P3口具有第二功能外,还有3条控制线具有第二功能。 P3.0—RXD :串行数据接收端 P3.1—TXD :串行数据发送端 P3.2—0INT :0INT 申请输入端 P3.3—1INT :1INT 申请输入端 P3.4—T0:T 0计数输入端 P3.5—T1:T 1计数输入端 P3.6—WR :外部RAM 写选通 P3.7—RD :外部RAM 读选通 ALE —PROG :片内EPROM 编程脉冲。片内具有EPROM 的芯片,在EPROM 编程期间,此引脚输入编程脉冲。 RESET —VPD : VCC 掉电期间,此引脚可接备用电源,以保持内部RAM 数据不丢失。 EA —VPP :片内EPROM 编程电源。在对片内具有EPROM 的芯片进行编程时,此引脚用于施加21V 编程电源。 ●MCS-51单片机的内部存储空间分为数据存储器和程序存储器。 内部数据存储器:共256字节单元,包括低128个单元和高128个单元。低128字节又分成3个区域:工作寄存器区(00H~1FH ),位寻址区(20H~2FH )和用户RAM 区(30H~7FH )。高128字节是供给特殊功能寄存器使用的,因此称之为特殊功能寄存器区。 内部程序存储器:在8031片内无程序存储器,8051片内具有4KB 掩模ROM 。 ●MCS-51单片机提供了4组工作寄存器,对于当前工作寄存器组的选择,是通过PSW 中的RS1和RS0来进行选择。 ●DPTR 是数据指针寄存器,是一个16位寄存器,用来存放16位存储器的地址,以便对外部数据存储器RAM 中的数据进行操作。DPTR 由高位字节DPH 和低位字节DPL 组成。 ●所谓堆栈,顾名思义就是一种以“堆”的方式工作的“栈”。堆栈是在内存中专门开辟出来的按照“先进后出,后进先出”的原则进行存取的RAM 区域。堆栈的用途是保护现场和断点地址。在8051单片机复位后,堆栈指针SP 总是初始化到内部RAM 地址07H 。从08H 开始就是8051的堆栈区,这个位置与工作寄存器组1的位置相同。因此,在实际应用中,通常要根据需要在程序初始化时对SP 重新赋值,以改变堆栈的位置。 ●程序状态字寄存器PSW 是8位寄存器,用于存放程序运行的状态信息。 CY AC F0 RS1、RS0 OV F1 P

郭天祥51单片机笔记

1)二极管 导通电流I:3mA-10mA;导通压降v:1.7V。 (排阻计算公式:R = VCC(5V)-v(1.7V)/I(3mA) )。 2)电源指示灯 开关电源:内部有开关控制电流大小,不稳定。 去耦电容:稳压,去波。 3)锁存器(74HC573) OE:OutEnable,低电平有效(必须为低电平)。 输入端:OE(1),LE(11锁存端diola),D(D0(2)-D7(9),一般接P1^0-P1^7)。 输出端:Q(1Q-8Q)。 Z:高阻状态,非高非低电瓶。 LE:为高时,Q端与D同变换;为低电平时,Q端保持上次状态。 sbit LED00 = 0x80; //位指针;指针大小占一个字节;指针控制一个位的值; sfr LED0 = 0x80; //字节指针;指针大小占一个字节;指针控制一个字节的值;4)51库函数 头文件:#include 函数:unsigned char _crol_(unsigned char c, unsigned char b); 描述:The _crol_ routine rotates the bit pattern for the character c left b bits. This routine is implemented as an intrinsic function. The _crol_ routine returns the rotated value of c. 5) 蜂鸣器 名称:b:基极;C:集电极;e:发射集; 原理:e极发射电子;当b极接低电平时, ce导通,并且放大电流;当b接高电平时, ce截止。JPFMQ接P3.6管脚。 分类:有源蜂鸣器;无缘蜂鸣器。(源: 震荡源) Proteus:buzzer-有源;sounder、speaker-

51单片机数码管

数码管笔记 #include #define uchar unsigned char #define uint unsigned int uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,}; //char code储存数据在ROM中,程序无法改变其数值,char储存数据在RAM中,程序可操作sbitdula=P2^6; sbitwela=P2^7; void delay(uint x) { uchari; while(x--) for (i=0;i<110;i++); } void main() { while(1) { uchari; for(i=0;i<16;i++) { int a=200; while(a--) { P0=0xff; //clear led wela=1; P0=0xfe; wela=0; P0=0x00; //clear led dula=1; P0=table[i]; dula=0; delay(1); P0=0xff; wela=1; P0=0xfd; wela=0; P0=0x00; dula=1; P0=table[i+1]; dula=0; delay(1); P0=0xff; wela=1; P0=0xfb; wela=0; P0=0x00; dula=1; P0=table[i+2]; dula=0; delay(1); } // while(a--)扫描a(200)遍 } //for 显示在十六进制0-15循环 } //while 让程序持续循环 } //main 重要三点: Remark 1: 采用锁存器:先位选,后段选; Remark 2: 位选、段选前先清屏,防止残留现象;Remark 3: 不同位显示不同数字:逐个显示,快速扫描。把握单个数字显示滞留时间。

单片机读书笔记

单片机的分类 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。 众多的单片机可以从不同角度进行分类。 Ⅰ按生产厂家分 1.INTEL公司的单片机(MCS-48系列单片机:MCS-48单片机是美国INTEL公司于1976年推出,它是现代单片机的雏形,包含了数字处理的全部功能,外接一定的附加外围芯片即构成完整的微型计算机;MCS-51系列:MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品) 2.ATMEL公司的单片机(AT89系列单片机:AT89系列单片机是ATMEL 公司的8位Flash单片机系列。这个系列单片机的最大特点是在片内含有Flash存储器。因此,在应用中有着十分广泛的前途特别是在便携式、省电及特殊信息保存的仪器和系统中显得更为有用;A VR单片机:A VR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片

机。A VR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。) 3.Motorola公司的单片机(MC68300系列单片机:MC68300系列微控制器采用模块化设计,可以根据用户的要求,选择不同的模块,以适应不同的应用场合) 4. MicroChip单片机的单片机(PIC12CXXX系列单片机、PIC16CXXX系列单片机) 5.PHILIPS公司的单片机(通用型单片机:PHILIPS公司的P80C31基于80C51内核采用高密度CMOS技术设计制造,包含中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、3个16位定时/计数器和6个中断源,4层优先级中断嵌套结构,可用于多机通信的串行I/O口,I/O扩展或全双工UART,片内时钟振荡电路;Flash 单片机、低功耗OTP单片机) 6.TI公司的单片机(TI单片机MSP430:德州仪器(TI)超低功率16位RISC混合信号处理器的MSP430产品系列为电池供电测量应用提供了最终解决方案。德州仪器作为混合信号和数字技术的领导者,TI 创新生产的MSP430,使系统设计人员能够在保持独一无二的低功率的同时同步连接至模拟信号、传感器和数字组件。) 7.其他公司的单片机(美国SST公司的SST89系列、美国CYGNAL公司的C8051FXXX系列单片机、东芝TLCS-870系列单片机) Ⅱ按单片机数据总线的位数,可将单片机分为4位、8位、16位、32位

单片机听课笔记 0317

1:单片机封装 1000mil=2.54cm 80mil 0805封装:80mil*50mil 6个引脚pic10f200 DIP40:最常见的51封装 2:keil的安装和使用 单片机的编程软件有很多种,keil是经典的51的编程和编译软件。 mplab:pic单片机的 IAR:用于avr单片机 以上类型的单片机几乎都支持c语言编程。 也有部分型号的单片机只能用汇编语言编程,汇编至少要能够看懂。 keil只要装过一次,只要不改变位置,以后就不用重装了。 安装结束后或者重装系统后,一定要注册。 注册方法是:file-license mangment获得计算机的id,叫做CID,把id号输入到注册机中,获得注册码,返回keil中输入即可。 建立第一个工程: 记住要把所有的工程文件放在一个新建的文件夹中。 project-new project,在弹出的文件对话框中,进入自己的工作目录,新建一个文件夹no1存放这个工程。进入no1文件夹,在保存栏内填写工程的名字:cno1,后缀默认是uvproj,无需输入。工程建好了,会立刻弹出一个对话框,选择device,选择atmel的at89s51。在弹出的启动代码是否添加中选择“是”。 就可以看到如左图。 file-new新建一个文件,保存到刚才的目录,取名字no1.c。双击source group ,添加这个c 文件。编写最简单的代码#include main(){while(1);} 按下F7编译。可以看到无警告无错误。 3:proteus的安装和使用 拷贝压缩文件,解压缩到d盘,看到如图目录结构:

破解:进入bin文件夹,双击licence.exe 单击install就可以了。 2013/5/2上午5时11分 1:晶振的本质:过滤需要的信号,带通滤波器 2:晶振配套电容22-47p。频率越高,容量越小。 3:在焊接电路板的时候晶振离单片机越近越好。 4:如果有两个芯片,都需要12M的震荡源,能否共用一个晶振?51单片机18脚是XTAL1,为内部非门驱动后的强振荡信号。经过晶振滤波送19脚进去作为单片机内部的时钟源。5:高电平低电平? TTL电路输出一个电平,如果要输出1/0,会输出多高/低的电平? 这个高/低电平经过衰减,送到另外一个TTL电路输入口,那么,剩余多高/低的电平会被认为是高/低电平? COMS电路输出一个电平,如果要输出1,会输出多高的电平? 这个高电平经过衰减,送到另外一个COMS电路输入口,那么,剩余多高的电平会被认为是高电平? 6:部分型号的单片机内部已经集成了复位和震荡电路。可以无需外接复位和震荡电路。7:引脚外接led灯的时候,要掌握的几个概念: 7.1 单片机引脚如何和外面沟通?通过上拉电阻输出高电平,通过导通场效应管,输出低电平。输出高电平的时候,电流不超过1mA,输出低电平可以到20mA。 7.2 P0口没有上拉电阻。所以无法送高电平,送的是悬空状态。如果需要送高电平?必须人为在引脚上接1-10k上拉电阻。 7.3 如果要读取某个引脚的电平,必须给这个引脚送高电平,截至内部的额场管。 1:led从下往上点亮。 2:每次点亮一个 第二次课: 1:检查程序代码的延时时间

51单片机学习笔记(六)_串口中断通信+定时器2串口中断

51单片机学习笔记(六)_串口中断通信+定时器2串口中 断 51 单片机默认使用定时器1 作为串口通信的波特率发生器、定时器1 中断 通信,串口与定时器1 冲突,在遇到定时器不够用的时候可以用定时器2 #include void DelayMs(unsigned int i);void SerialInit();void SendByte(unsigned char sbyte);void SendString(unsigned char *pstr);void main(void){SerialInit();while(1); //注:必需要无限循环}/*//单片机时钟周期: 11.0592MHz 以时钟1 作为波特率发生器void SerialInit(){TMOD=0x20; // 设置T1 工作方式为方式2TH1=0xfd; //给定时器高位装初值TL1=0xfd; //给定时 器低位装初值TR1=1; //开定时器//以上是设置波特率SM0=0; //设置串口通 讯方式为方式1SM1=1; REN=1; //串口是否接收数据的开关EA=1; //总中断 打开,采用查询法时不用打开中断ES=1; //串口中断开关,采用查询法时不用打开 中断}*///单片机时钟周期:11.0592MHz 以时钟T2 作为波特率发生器void SerialInit(){PCON &= 0x7F; //波特率不倍速SMOD=0SCON = 0x50; //方式1,8 位数据,可变波特率,接收允许T2CON = 0x34; RCAP2H = 0xFF; RCAP2L = 0xDC; TH2 = 0xFF; TL2 = 0xDC;EA=1; //总中断打开,采 用查询法时不用打开中断ES = 1; //串口中断开关,采用查询法时不用 打开中断}//串口中断函数:void SerialPortInte(void) interrupt 4 //采用串口中断法 收发数据{unsigned char rbyte;if(RI){ //RI=1,判定为串口接收到了数据,RI 要清零,RI=0;rbyte=SBUF; if(rbyte==0x0A){ SendString(“换行”);}else if(rbyte==0x0D){SendString(“回车”);}else{SendByte(rbyte);}}}//串口发送一个字节:void SendByte(unsigned char sbyte){ SBUF=sbyte; //发送数据while(!TI); //等待发送完成TI=0; //清零发送标志位}//串口发送一个字符串:void

51单片机复习笔记经典1

《单片机原理与应用》复习提纲第一章 第二章MCS-51系列单片机的硬件结构 1. MCS-51单片机的总体结构 MCS-51单片机的内部结构 ?8位的CPU; ?128个字节的片内RAM; ?4K字节的片内ROM程序存储器(8031无) ?外部的RAM和ROM的寻址范围为64K ?21个字节的专用寄存器 ?4个8位并行I/O口 ?1个全双工的串行口 ?2个16位的定时器/计数器 ?5个中断源、2个中断优先级 MCS-51单片机的总线结构

微处理器又称为CPU,是单片机内部的核心部件,它决定了单片机的重要功能特性。它由运算器和控制器两大部分组成。 对CPU的使用就是对CPU中的寄存器的使用。 ?累加器ACC ?寄存器B ?程序状态字PSW ?布尔处理器C ?程序计数器PC,16位 ?数据指针寄存器DPTR,16位DPTR寄存器中存放外部数据存储器地址 ?堆栈指针SP ? 2.程序存储器 程序存储器通常存放程序指令、常数及表格等,系统在运行过程中不能修改其中的数据。 .程序的几个特殊地址: ?复位0000H,PC复位指向该地址 ?外部中断0 0003H ?定时器/计数器0溢出000BH ?外部中断1 0013H ?定时器/计数器1溢出001BH ?串行口中断0023H 3.数据存储器 ?数据存储器则存放缓冲数据,系统在运行过程中可修改其中的数据。 ?包括: ?1)编址与访问 ?2)片内数据存储器 ?3)特殊功能寄存器块 片内128字节数据存储器 要求熟悉4个工作寄存器区的使用方法RS0,RS1。 如:RS1,RS0=10 , R1的直接地址为11H。 00H~1FH :32个字节,内部RAM的寄存器区共有32个单元,分为4组,每组8单元。 ?20H~2FH:16个字节,128位寻址区,128位寻址区的字节地址范围是20H~2FH。 ?30H~7FH:通用寄存器区或数据缓冲区,堆栈区。 ? ?堆栈: ?使用片内RAM、初始化时SP=07H ?51系列单片机的堆栈是向上生长的 ?一般程序中堆栈的开始: ?MOV SP,#60H

STC15W系列单片机初学者教程

目录 因为网站限制原因,其他链接都不予显示,还有联系方式都不予显示,带来不便非常抱歉 1.开始学习了 2.15W4K32S4单片机简介资料 3.单片机可以用来做什么呢? 4.单片机示例!写一个串口通讯程序,您也可以直接先从这 步开始学习 5.相关资料链接(数据手册,其他进阶例子,开拓眼界) 6.售后持续支持 7.所有下载链接汇总 一. 开始学习了 这个宝贝包含的硬件,也就是给您发货的内容包含以下东西:

1.15W4K32S4最小系统板 1块 2.转串口下载器一个2303转串口 1块用来下载程序和串口 通讯 3.白色面包板一个 1块适合搭建各种电路 4.一个霍尔传感器,制作一个霍尔电路做一个磁控开关 5.若干杜邦针;连接电路 6.彩灯3 颗若干电阻学习彩色灯控制彩色灯 7.三极管若干个电位计 1个灯亮度控制 8.提供上面所有元器件手把手教程手把手教程

这篇教程能够让您学会什么呢? 1.怎么使用 4软件编写的程序,并且使用下载程序到单片机 上面; 2.串口通讯程序,另外在电脑端使用软件进行图形化显示 程序; 如果您有兴趣的话,希望下面对您学习工作有帮助,资料有点多,但是还是值得花一些时间实际操作演示,只有自己动手了,才能体会到更多的内容。

二. 15W4K32S4单片机简介 15W4K32S4单片机是一款非常优秀的51系列单片机,很适合用来作为初学者入门单片机世界。当然单片机的世界没有最强大,只有最适合的单片机。如果你有了解过什么是51单片机和一点C语言。就可以尝试进入这款单片机。边玩边搭建更多的电路,在玩中学习。 继续往下看,将会一步一步演示给您看具体怎么是使用这款单片机。请有耐心的看下去哦,不过如果一次看不完的话,可以分多几天来操作,关键是要坚持! 那么单片机可以用来做什么呢? 目前单片机渗透到我们生活的各个领域,小到电话,玩具,手机,刷卡机,电脑键盘,彩电,冰箱,空调,电磁炉,大到汽车,工业自动控制,机器人,导弹导航装置,甚至是美国的火星车,这些设备里面都含有一个或者多个单片机。单片机的数量不仅远超过机,甚至比人类的数量还要多。可见数量之庞大,用途之广泛啊。 三. 我们掌握单片机有什么用呢?

51单片机基础知识及期末复习

51单片机简答题部分(经典) 1、什么叫堆栈? 答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以"后进先出"的结构方式处理的。实质上,堆栈就是一个按照"后进先出"原则组织的一段内存区域。 2、进位和溢出? 答:两数运算的结果若没有超出字长的表示范围,则由此产生的进位是自然进位;若两数的运算结果超出了字长的表示范围(即结果不合理),则称为溢出。 3、在单片机中,片内ROM的配置有几种形式?各有什么特点? 答:单片机片内程序存储器的配置形式主要有以下几种形式:(1)掩膜(Msak)ROM型单片机:内部具有工厂掩膜编程的ROM,ROM中的程序只能由单片机制造厂家用掩膜工艺固 化,用户不能修改ROM中的程序。掩膜ROM单片机适合于 大批量生产的产品。用户可委托芯片生产厂家采用掩膜方法 将程序制作在芯片的ROM。 (2)EPROM型单片机:内部具有紫外线可擦除电可编程的只读存储器,用户可以自行将程序写入到芯片内部的EPROM 中,也可以将EPROM中的信息全部擦除。擦去信息的芯片 还可以再次写入新的程序,允许反复改写。 (3)无ROM型单片机:内部没有程序存储器,它必须连接程序存储器才能组成完整的应用系统。 无ROM型单片机价格低廉,用户可根据程序的大小来选择外接 程序存储器的容量。这种单片机扩展灵活,但系统结构较复 杂。 (4)E2ROM型单片机:内部具有电可擦除叫可编程的程序存储器,使用更为方便。该类型目前比较常用 (5)OTP(One Time Programmable)ROM单片机:内部具有一次可编程的程序存储器,用户可以在编程器上将程序写入片内程 序存储器中,程序写入后不能再改写。这种芯片的价格也较 低。 4、什么是单片机的机器周期、状态周期、振荡周期和指令周期?它们之间是什么关系? 答:某条指令的执行周期由若干个机器周期(简称M周期)构成,一个机器周期包含6个状态周期(又称时钟周期,简称S周期),而一个状态周期又包含两个振荡周期(P1和P2,简称P周期)。也就是说,指令执行周期有长有短,但一个机器周期恒等于6个状态周期或12个振荡周

蓝侨杯单片机编程笔记-胡昶威

蓝桥杯单片机编程笔记 一点说明 本笔记为准备第六届蓝桥杯单片机组省赛时写下,其中知识点不乏有所错漏、理解偏颇,但都是经实际测试代码,仅用于应付比 赛使用。 作者:胡昶威 QQ:1040385974 2015.3.25

一、IO口编程 (3) 二、数码管动态扫描和定时器 (4) 三、矩阵键盘 (6) 四、串口通讯和串口中断 (7) 五、外部中断的使用 (14) 六、实时时钟DS1302的使用 (14) 七、PCF8591与IIC总线的使用 (16) 八、DS18B20温度芯片的使用 (22) 九、超声波传感器的使用 (24) 十、步进电机与直流电机的使用 (26) 十一、扩展:宏定义编程方法(推荐) (29) 十二、注意事项(常见编程错误) (30)

一、IO口编程 IO编程,该开发板使用了573锁存器,通过P2口的5,6,7位连接3-8译码器,扩展出了8个口,其中4个口分别连接4个573锁存器,这里以LED的锁存器来举例: 原理图573: 分析代码: P2=((P2&0x1f)|0x80); 其中0x1f=00011111,P2与0x1f进行与运算,高三位清零,其余位保持原来状态,不改变,即把控制3-8译码器的高三位留出来:

接着再或上0x80;容易发现0x80=10000000;或运算,与1或结果为1,与0或结果不变,所以或上0x80只需看P2的高三位,则高三位为100,对应3-8译码器的话,P2^7=1;P2^6=0;P2^5=0; 所以输出Y4=0;Y4再经过与非运算,看下图示: 则输出Y4C=1;即LED对应的锁存器的片选信号被选中,锁存器打通,接下来就可以对P0口进行操作,操作完之后, P2=P2&0x1f;P2高三位直接清零,此时Y4C=0,则把锁存器锁上了。 类似的方法,数码管、蜂鸣器等都是如此操作, 选中锁存器代码: P2=((P2&0x1f)|(这里填对应锁存器的位移号))。 二、数码管动态扫描和定时器 数码管显示分为段选和位选, 数码管定义和显示函数: codeunsigned chartab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char dspbuf[]={10,10,10,10,10,10,10,10}; unsigned char dspcom=0; void display() { //段选,消隐

双机间的串口双向通信2.0

单片机应用课程设计任务书

单片机应用课程设计说明书 学院名称:计算机与信息工程学院 班级名称:网工124 学生姓名:卞可虎 学号:2012211369 题目:双机间的串口双向通信设计指导教师:于红利 起止日期:2014.12.29至2015.1.4

目录 一、绪论 (1) 二、相关知识 (6) 2.1 双机通信介绍 (6) 2.2单片机AT89C51介绍 (6) 2.3 串行通信简介 (8) 2.3.1串行通信的特点 (8) 2.3.2串行通信技术标准 (9) 三、总体设计 (10) 3.1 设计需求 (10) 四、硬件设计 (10) 4.1 系统硬件电路设计 (10) 4.1.1整体电路设计 (10) 4.1.2 控制电路设计 (11) 4.1.3 复位电路 (11) 4.1.4 显示电路 (12) 五、软件设计 (12) 5.1发送端程序流程 (12) 5.2接收端程序流程 (13) 5.3按键程序 (14) 5.4串口通信程序 (15) 5.5数码管显示程序 (16)

六、Proteus软件仿真 (16) 七、结束语 (19) 参考文献 (20) 指导教师评语 (21) 成绩评定 (21) 附录:源程序 (22) 一、绪论 电子技术的飞速发展,单片机也步如一个新的时代,越来越多的功能各异的单片机为我们的设计提供了许多新的方法与思路。单片机之间的通信可以分为两大类:并行通信和串行通信。串行通信传输线少,长距离传输时成本低,且可以利用数据采集方便灵活,成本低廉等优点,在通信中发挥着越来越重要的作用。所以本系统采用串行通信来实现单片机之间可靠的,有效的数据交换。 对于一些类似复杂的后台运算及通信与高实时性前台控制系统、软件资源消耗大的系统、功能强大的低消耗系统、加密系统等等。如果合理使用多种不同类型的单片机组合设计,可以得到极高灵活性与性能价格比,因此,多种异型单片机系统设计渐渐成为一种新的思路,单片机技术作为计算机技术的一个重要分支,由于单片机体积小,系统运行可靠,数据采集方便灵活,成本低廉等优点,在通信中发挥着越来越重要的作用。但在一些相对复杂的单片机应用系统中,仅仅一个单片机资源是不够的,往往需要两个或多个单片机系统协同工作。这就对单片机通

03 第三讲 数字电路基础知识--力天手把手教你学单片机之入门篇

手把手教你学51单片机 ——之MCS-51入门篇 主讲: 尹延辉 策划:张勇 开发板:LT-Super51 QQ群:31646346 网址:https://www.doczj.com/doc/7114432032.html, E-Mail:litianmcu@https://www.doczj.com/doc/7114432032.html, litianmcu@https://www.doczj.com/doc/7114432032.html,

入门篇第三讲——数字电路基础知识?本讲内容提要 数字量和模拟量 数制和码制 算术运算和逻辑运算 数字芯片 常用数字芯片简介 可编程逻辑器件 存储器 学习板上扩展IO口 的实现

——数字量和模拟量 ?数字量和模拟量定义 模拟量:随时间连续变化的电压或电流信号称之为模拟量 数字量:随时间离散变化的量称之为数字量 ?数字量的实质为加入判决门限的模拟量

——数字电路’0’与’1’的定义?数字电路’0’与’1’的定义 TTL电平:电压+5V代表’1’,电压0代表’0’ LVTTL:+3.3V~’1’,0~’0’ RS232:-15V~’1’,+15V~’0’ LVDS:2根线上电压差的正负表示’1’或’0’

——数制和码制 ?数制的定义 计数过程中一位数字通常是不够用的,多位数码中每一位的构成方法及从低位向高位进位规则称为数制。 N进制数的通俗定义:逢N进1 ?十进制:逢十进一 ?十六进制:逢十六进一 ?二进制:逢二进一 ?常用数制 十进制、二进制、十六进制 ?人类有十个指头,所以习惯采用十进制 ?计算机只能识别0和1,采用二进制 ?为了计算机学中的数据书写方便,采用十六进制

——数制转换详解 ?数制间的转换 二-十转换 十-二转换 二-十六转换 十六-二转换 ?位与字节的概念: 位(bit):简写为b,表示二进制数的一位。 字节(Byte):简写为B,8位为一字节。 ?数制转换工具: Windows自带的计算器

51单片机毕业论文大全

mcu001 80386保护模式【论文+91页+4.2万+doc】 mcu002 ARM硬件电路板设计之外围接口电路研究【毕业论文+21页+1.2万+doc】 mcu003 CDMA通信系统中的接入信道部分进行仿真与分析【doc格式+45页+毕业论文1.6万】 mcu004 CDMA通信系统中的接入信道部分进行仿真与分析【论文+45页+1.7万+doc】 mcu005 CDMA系统的研究与MATLAB仿真【论文+41页+1.8万+doc】 mcu006 DS18B20温度采集【doc+毕业论文+45页1.9万】 mcu007 FIRA 5v5机器人足球赛进攻策略研究【毕业论文+45页+1.8万+doc】 mcu008 FIR数字滤波器设计与实现【论文+28页+0.7万+doc】 mcu009 FPGA实现差错控制编码技术【论文+31页+1.3万+doc】 mcu010 FPGA在数字滤波器设计中的应用【论文+9页+0.7万+doc】 mcu011 GPRS远程登陆数据终端设计【论文+55页+1.5万+doc】 mcu012 GPRS远程控制系统设计——信息收集与处理子系统【论文+16页+0.3万+doc】 mcu013 GPRS远程控制系统设——远程控制设计【论文+73页2.6万+doc】 mcu014 GPS汽车定位系统设计【论文+30页+1.35万+doc】 mcu015 GSM无线网络优化【论文+53页+2.6万+doc】 mcu016 I2C总线接口的数据采集系统【毕业论文+27页+0.85万+doc】 mcu017 IIR带通滤波器的VHDL描述及仿真【论文+doc+47页+2.1万字】 mcu018 LED显示屏动态显示和远程监控的实现【论文+11页+0.8万+doc】 mcu019 MCS-51单片机温度控制系统【论文+6页+0.2万+doc】 mcu020 MSN机器人程序的设计与实现【论文+0.8万+36页+doc】 mcu021 PLC在自动售货机中的运用【论文+26页+0.5万+doc】 mcu022 PT100温度巡检【毕业论文+22页+1万+doc】 mcu023 QPSK、QAM的调制通信仿真【毕业论文+43页+2万+doc】 mcu024 SPCE061A的教育机器人硬件平台设计【毕业论文+184页+1.37万+doc】 mcu025 USB接口的多路温湿度采集系统设备端设计【毕业论文+25页+0.9万+doc】 mcu026 USB摄像头驱动开发与研究【论文+28页+1.6万+doc】 mcu027 USB数据采集系统设计【论文+1.4万+46页+doc】 mcu028 Y2O3添加量对低居里点PTC热敏电阻器性能的影响【论文28页+1.7万+doc】 mcu029 π4-DQPSK信号的FPGA实现【论文+54页+2.5万+doc】 mcu030 板厚为6mm的0Cr18Ni9钢板采用焊条电弧焊的焊接工艺评定(拉伸)关于焊接的毕业论文【论文+1.3万+24页+doc】 mcu031 步进电机控制器设计与实现【毕业论文+30页+0.9万+doc】 mcu032 板卡式语音平台开发【论文+55页+2.3万+doc】 mcu033 采矿工程本科毕业论文【论文+6.3万+140页+doc】 mcu034 采用适用的跟踪来区分和监控站点活动【毕业论文+13页+0.8万+doc】 mcu035 仓库温湿度的监测系统【毕业论文+31页+1.4万+doc】 mcu036 常用电子元器件SQL查询系统设计【论文+33页+1.2万+doc】 mcu037 超声波明渠流量计【论文+84页+3.4万+doc】 mcu038 超声波明渠流量计的研究【论文+71页+2.1万+doc】 mcu039 车库电脑收费管理系统【论文+60页+2.3万+doc】 mcu040 传感器控制温度【毕业论文+33页+1.4万+doc】【论文+91页+4万+doc】 mcu041 串口通信与控制系统【毕业论文+38页+1.5万+doc】 mcu042 磁性物含量计设计【论文+95页+4.2万+doc】

第3课 HJ-2G AVR单片机学习笔记 程序编写编译环境

第3课ICC程序编写编译环境 基于HJ-2G AVR学习板 学习AVR单片机必需要安装的第二个软件:程序编写编译环境ICC AVR 1、下面说一说安装方法,在配套资料(网上下载)找到ICC AVR直接点击按装,装好后输入正版注册码,这样就可以正常使用ICCAVR软件编写编译。 2、在桌面上打开ICCAVR软件,出现如下图片:请点开工程,并新建一个工程。 3、下图为新建一个工程,请保存在C盘目录下,输入工程名称(只能是中文),点击保存。

4、新建立一个C文件,在下图空白处输入你的C源码,输完后请保存C文件。 5、加入刚才建好的C文件到工程当中,方法如下图。

6、设置一下编译器,如下图。 7、芯片用ATmega16

8、最后一步了,只要你按上面的一步一步做,最后点一下编译键,就可以正常编译成功,如果不成功,请查一查你的C源码是否正确,还有工程是不是在中文目录下。 9、总结:本课主要学习了程序编写编译环境ICC AVR的安装,设置,还有编译方法,开始学单片机时,新手不会写C源码,可以复制慧净写好的C源码到项目中,练习多次,ICCAVR 软件你就会使用了,以后学习中,每一课都会用到本软件,只要你认真跟着《慧净1天入门AVR单片机学习笔记》学习,多多练习,相信你很快速学会AVR单片机。 慧净AVR单片机免费共享学习笔记目录(配有视频教程,请在慧净空间下载) 第一部1天入门AVR单片机学习笔记 第1课:AVR单片机学习基本流程 第2课:AVR单片机程序烧写方法 第3课:程序编写编译环境 第4课:简单C语言基础知识 第二部10天学会AVR单片机学习笔记 第1课:IO端口操作 第2课:流水灯 第3课:单个数码管显示 第4课:多个数码管同时显示 第5课:独立按键 第6课:定时器 第7课:外部中断

51单片机学习笔记(三)_定时器和计数器

51单片机学习笔记(三)_定时器和计数器 注:定时器与计数器原理与使用方法相似、此处计数器知识为基础普及、后 面详讲2 个定时器(寄存器)、定时器0、定时器1、(计数器0、计数器1) TMOD:定时器/计数器模式控制寄存器详见百度百科TMOD 每经过一个机器周期、寄存器+1TF:定时器溢出标志。溢出时自动置1。中 断时硬件清零否则必须软件清零。TR:定时器运行控制位。置1 开始计时、清 零停止计时。C/T:该位为0 时用作计时器、该位为1 时用作计数器。溢出时 时间-开始计时时间=预设定时时间 一个机器周期共有12 个振荡脉冲周期若设定时为0.02s,则: 12*(65535-X)/11059200=0.02s 定时器作加1 次数:X=47104=0xB800 次时间为0.02s 使用定时器的方法 1、设置特殊功能寄存器TMOD,使之工作在需求的状态。 2、设置计数寄存 器的初值,精确设定好定时时间。3、设置特殊功能寄存器TCON,通过打开 TR 来让定时器进行工作。 4、判断寄存器TCON 的FT0 位、检测定时器溢出情况。 假设我们使用定时器0、定时为0.02s,两个寄存器计时 TMOD=0x01; TMOD=0x01,指的是采用T0 方式,将M1 置0,M0 置1,是 方式一的定时器 高八位寄存器TH0=0xB8、低八位寄存器TL0=0x00 C 程序实现1s 钟定时 #include typedef unsigned char uint8;typedef unsigned int uint16;sbit led=P1;uint8 counter;void main(){TMOD=0x01;TH0=0xb8;TL0=0x00;TR0=1;

51单片机

51单片机入门学习笔记 有一段时间不碰单片机了,现在重新整理。一是回忆知识,重新拾起来。二是给想入门单片机的朋友一点参考。一部分资料源于网络。 一、51单片机简介 目前学习板上常用的是STC89C52单片机。封装是DIP40。

主要参数 1. 增强型8051单片机,6 时钟/机器周期和12 时钟/机器周期可以任意选择,指令代码完全兼容传统8051。 2. 工作电压:5.5V~ 3.3V(5V单片机)/3.8V~2.0V(3V 单片机) 3.工作频率范围:0~40MHz,相当于普通8051 的0~80MHz,实际工作频率可达48MHz 4. 用户应用程序空间为8K字节 5. 片上集成512 字节RAM 6. 通用I/O 口(32 个),复位后为:P0/P1/P2/P3 是准双向口/弱上拉,P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O 口用时,需加上拉电阻。 7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片 8. 具有EEPROM 功能 9. 共3 个16 位定时器/计数器。即定时器T0、T1、T2 10.外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可由外部中断低电平触发中断方式唤醒 11. 通用异步串行口(UART),还可用定时器软件实现多个UART 12. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级) 二、I/O介绍 P0内部不带上拉电阻,其余三组带内部上拉电阻。P0是双向8位三态I/O口。由于内部没有上拉电阻。所以默认是高阻态(指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定。电路分析时高阻态可做开路理解),所以使用时外部必须接上拉电阻。 三、寄存器 存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器): MCS-51单片机的特殊功能寄存器 符号地址功能介绍

手把手教你学单片机进阶-框架篇(上)

手把手教你学单片机进阶教程 框架篇(上) 本篇里我们聊一聊软件框架,那么什么是框架呢?它又有什么用处呢? 软件框架,说简单一点就是我们组织软件的方式,没有框架的代码,模块是乱添的,写程序的人也不知道要添在哪里,只知道加在这里可以用,放在这里就行。有框架的代码,模块应该添加到哪里是清楚的。曾经看过一句话说的挺有道理,“一个好的程序架构,是一个有经验的工程师和一个初学者的分水岭”,我们在单片机软件中用的最多的结构莫过于下面这样的: 1While(1) 2{ 3Led_on(); 4i = 1000; 5While(i--); 6Led_off(); 7} 当我们刚开始学习的时个,程序比较简单,这样单纯的结构还是可以应付的。但是如果当我们真的要做一个系统级的工程的时候,有很多功能要处理,这样的结构显然就不能适应了,只那一个“while(i--)”就不知道耽误了多少事儿。 到这里有人要说了,工程复杂的时候我可以跑个OS。可以说RTOS对于功能复杂的嵌入式系统来说是个非常好的解决方案,如比较出名的RT-Thread (我们以后会推出这个的专题),uc/os-ii。不过,可惜的是,操作系统对于51来说有点太,系统的开销有可能比应用占用的资源的还要多。 那么我们就自己动手来打造一个小资源单片机适用的框架吧。我们将实现两个版本,其内在思想都是一样的,一个简单点,占用资源更小。一个稍复杂些, pzq@https://www.doczj.com/doc/7114432032.html,/csh@sparkcn

但更灵活。大家可以根据情况选用。 easy_framework 我们把这个框架暂时命名为easy_framework,这里我们仅提供思想和基本的代码。完整的代码可以在我们提供代码包(下载地址见文章最后)里找到。 这里测试和实验的硬件环境是Spark51学习板。大家如果有需要,可以到我们工作室店铺购买https://www.doczj.com/doc/7114432032.html,或直接通过QQ联系我们首先使用一个Timer来产生一个1m的定时中断。在51单片机上,这里选用Timer0 1init_sys_timer() 2{ 3/*T0 1方式*/ 4TMOD |= 0x01; 5/*设定1m的计时*/ 6TL0 = (u8)SYS_TIMER_INIT_VALUE; 7TH0= (u8)(SYS_TIMER_INIT_VALUE >> 8); 8/*允许中断*/ 9ET0 = 1; 10TR0 = 1; 11} 通过上面这个函数产生一个1m的中断,在其“中断服务函数”里我们对一些时间标志量进行记数 1/*Timer 0中断服务程序*/ 2void proc_sys_tick() interrupt 1 3{ 4TR0 = 0; 5Cnt5ms++; pzq@https://www.doczj.com/doc/7114432032.html,/csh@sparkcn

相关主题
文本预览
相关文档 最新文档