单片机教材五章东北大学石亚与老师版.docx
- 文档编号:26375786
- 上传时间:2023-06-18
- 格式:DOCX
- 页数:29
- 大小:148.12KB
单片机教材五章东北大学石亚与老师版.docx
《单片机教材五章东北大学石亚与老师版.docx》由会员分享,可在线阅读,更多相关《单片机教材五章东北大学石亚与老师版.docx(29页珍藏版)》请在冰豆网上搜索。
单片机教材五章东北大学石亚与老师版
第五章89C51单片机的中断系统
中断的一般概念
1.输入/输出控制方式
单片机系统与其他微机系统一样,CPU不断与外部输入/输出设备交换信息。
这种信息交换通常有以下几种方式:
⑴无条件传送方式
CPU和存储器之间的数据传送属于无条件的。
在计算机系统设计时,已经充分考虑了两者之间的速度配合关系。
所谓无条件传送是指,当CPU读取存储器数据时,认为数据总是准备好的;当CPU写出数据时,认为存储器总是准备好接收的。
但I/O接口和I/O设备与此不同,它们的运行速度比CPU慢得多。
CPU与/O设备之间无法采用无条件传送方式,否则将导致传输混乱和信息丢失,难以保证数据传送的可靠性。
⑵查询传送方式
这是一种条件传送。
通常由于CPU工作速度比外设快得多,为了保证数据传送的正确性,CPU在每次数据传送前都要查询外部设备是否“准备好”。
比如当CPU要读取A/D转换结果之前,先要查询“转换结束”标志是否建立;当CPU要向打印机发送数据时,先要确认打印机是否“忙”等等。
如果查询结果为否定的,那么为了时间上的匹配,CPU就要等待,直到条件满足才能进行数据传送。
在等待的过程中浪费了大量的时间,效率很低。
再举一个比较极端的例子,例如单片机以查询方式管理键盘,为了不丢失键盘操作,要时刻查询是否有键按下,则单片机系统几乎无法再进行其他工作。
查询方式不增添硬件,不依赖CPU硬件资源,电路简单,但需要占用CPU大量运行时间。
当系统比较复杂,单片机工作任务比较繁重时不适合采用查询方法控制外设。
⑶中断传送方式
中断是一种异步机制,它的出现大大提高了CPU对外设的管理效率。
此外,在PC机上还支持DMA方式,这称为直接存储器存取,它是外设和存储器之间的直接数据交换,89C51单片机不支持这种方式。
2.中断概念
举一个生活中的事例:
假设某人正在写工作计划,把中断请求比作来电话振铃。
写工作计划是他当前的主要工作,可比作执行主程序。
在他写作过程中突然电话铃响起,这可看做是一种中断请求。
他应该停止写作(当然一般应该写完一个字而不是半个字),起身去接听电话。
当通话完毕后,再从刚才停顿的地方继续写下去。
写作—听电话—继续写作,这就是一个完整的中断响应和返回过程。
设想如果电话没有振铃功能,那么为了不错过电话,他必须写一会,听一下有无来电;不断重复这个过程,会浪费大量时间。
在计算机系统中,当CPU正在处理例行程序时(一般是在执行主程序或其调用的子程序),外部设备发生操作请求,比如定时时间到,按键操作,A/D转换完成,收到串行通讯数据字节等,这些都要求CPU立即处理。
在具有中断功能的情况下,CPU暂时停止当前的程序运行,转去处理所发生的事件。
事件处理完毕后,再回到原来被打断的地方继续执行原来的工作。
实现这种功能的硬件结构称作中断系统,产生中断的请求来源叫做中断源。
中断源向CPU提出的服务请求称为中断请求。
CPU暂时停止自身工作转去处理突发事件的过程称为中断响应。
从中断服务过程转回到被打断的地方称为中断返回。
单片机的中断管理机制与一般的计算机系统相同。
中断方式解决了因查询等待而大量浪费CPU时间的问题,能够使多个外设“同时地”运行。
比如可以看到在CPU正常运行主程序的同时,打印机在工作,A/D转换在高速运行,键盘操作能随时得到响应,串行通讯能正常实现,等等。
这是因为中断请求和响应只占用CPU很短的时间,比如打印机打印一行字符需要若干秒钟,而CPU给打印机送出对应的数据只需要若干微秒。
宏观观察,似乎计算机系统的多个外设都在同时运行。
如果没有中断机制而仅采用查询方法,这是不可想象的。
外部设备提出中断请求的时刻是不可预知的,可能发生在主程序的任何地方。
为了能在执行中断服务程序后正确地返回断点,系统必须在响应中断请求时把下一条要执行的指令的地址保存到堆栈中。
并且,为了在中断服务程序中也能使用某些存储器资源而又不破坏它们原有的数值,还要人为地把要使用的资源推入堆栈中保存起来,这称为现场保护。
通常需要保护的存储器有:
A累加器,B寄存器,程序状态字PSW,数据地址指针DPTR,工作寄存器组等。
当中断服务程序结束返回时,要先人为地按照压栈时相反的次序恢复那些保护内容,这称为现场恢复。
最后当执行中断返回指令时,系统会自动将断点地址弹出到程序计数器PC,以便继续执行当时被打断的任务。
当CPU以中断方式管理外设时,CPU主程序中不涉及对这个外设的操作。
表面上看起来,CPU似乎不理睬或不知道这个外设的存在。
而一旦这个外设需要服务,它会发出一个请求,叫做中断请求。
在适当条件下CPU会立即接受这个请求并暂停正在执行的程序,转去执行一段事先编好的程序,称为中断服务子程序。
中断服务完毕后再返回断点处继续运行。
向CPU提出中断请的来源称为中断源,中断源越多,CPU功能越强大。
89C51单片机有5个中断源,其中2个外部中断,2个内部定时器/计数器中断,1个串行通讯中断,并可分别设置成高级中断或低级中断。
89C51单片机中,对中断的管理依靠下述的专用寄存器:
IE:
中断屏蔽寄存器,5个中断源可统一地或分别地允许或禁止;
IP:
中断优先级寄存器,可以用软件指定某些中断源为高级中断;
SCON:
其中有2个位是串行发送和接收中断请求位;
TCON:
其中6个位与中断有关。
89C51单片机系统中断结构和中断控制
89C51单片机的硬件设计包含了完整的中断管理系统,这包括5个中断源,2个优先级,系统和各中断源的允许控制,以及相关的专用寄存器等。
89C51单片机的中断结构如图所示。
图中从左到右分别表示了引起中断的请求源、中断请求标志位、总允许控制、源允许控制、优先级结构和软件查询序列。
中断是计算机的一个重要特征,它能实现以下功能:
1.分时操作。
计算机的中断系统可以使CPU与外设同时工作。
CPU在启动外设后,就继续执行主程序;而外部设备启动后,开始进行准备工作。
当外设准备就绪时就向CPU发出中断请求。
在合适的条件下CPU响应该中断请求并为其服务,中断服务程序结束后返回到刚才的断点处继续执行主程序。
外设在得到服务后也继续进行自己的工作任务。
因此,CPU可以使多个外设同时运行,并分时为它们提供服务,因此大大地提高了CPU的工作效率和系统运行速度。
2.实时处理。
当计算机用于实时控制时,中断请求是随机发生的。
CPU可利用中断系统作出快速响应,保证系统的实时性。
3.故障处理。
计算机在运行期间有时会出现一些故障,如电源故障、存储器校验错误、运算溢出、陷入死循环等等。
有了中断机制,当出现这类情况时,可以引发中断促使CPU转去执行故障处理程序,无须干预,自行脱离故障状态。
图中断系统结构
中断源概述
89C51的5个中断源分别是:
1.INT0:
外部中断0请求,外部引脚的负跳变或低电平触发;
2.T0:
定时器/计数器0溢出中断请求;
3.INT1:
外部中断1请求,外部引脚的负跳变或低电平触发;
4.T1:
定时器/计数器1溢出中断请求;
5.TXD/RXD:
串行口中断请求。
当串行口完成一帧数据的发送或接收时触发。
通常把前两个中断源称为外部中断,定时器/计数器溢出称为内部中断,每个中断源都对应一个中断请求标志位。
但串行口中断是一个中断源对应两个标志位,这些标志位分别存在于专用寄存器TCON和SCON中。
当发生中断请求时,对应的标志位置位,并锁存在相应的专用寄存器位地址中。
当中断源被允许时,能够自动触发CPU产生中断请求;当不允许中断时,这些标志位也可以供软件查询。
一般在下列情况下可考虑以中断方式管理外设:
1.较慢的外设。
如键盘、打印机、双积分型A/D转换器等,一般使用外部中断。
2.定时器中断。
如实时时钟、特定的定时时间等,比如年月日时分秒,定时10ms等。
在定时时间内,CPU不必查询等待,而能够继续执行主程序,10ms时间里大约能执行几千条指令。
而当定时时间到后,由于有中断请求,CPU能够立刻响应,执行预定的工作任务。
3.串行通讯场合。
在单片机系统具有串行通讯接口的情况下,为了能及时准确地收到通讯对方发来的信息,必须设置串行接收服务子程序,并设置为高优先级。
至于发送子程序,由于是主程序控制的,对要发送的若干字节数据,既可以采用查询等待方式一次性发送全部数据,也可以采用在中断程序中发送后续字节的方法(每次只发送1字节),详见后述。
4.硬件故障。
例如,电源断电就要求把正在执行的工作的一些重要信息(如程序计数器和各专用寄存器的内容,以及内部RAM中一些关键数据)保存起来,以便重新上电后能从断点处接续原状态继续运行。
中断控制寄存器
89C51单片机有4个与中断管理有关的专用寄存器:
定时器控制寄存器TCON(用6位);
串行口控制器SCON(用2位);
中断允许寄存器IE;
中断优先级寄存器IP。
这些寄存器中,TCON和SCON只有一部分位与中断控制有关,IE和IP中也有一些未定义位,使用时应加以注意。
从本小节开始,将接触控制字的概念。
控制字是计算机领域的重要技术特征,它以字节的形式出现,但字节的数值没有任何意义,其作用是按位定义和体现的。
编写程序时要根据实际需要对这些位分别赋值,获得确定的操作功能。
对控制字的学习,重点在于掌握其意义和使用方法,而不在于记忆。
通常,单片机里的SFR有两类:
控制类和常数类,前者一般支持字节操作和位操作,后者只能也只需字节操作。
控制字就是指对控制类寄存器规定的数据内容。
1.中断请求标志位
TCON是定时器/计数器T0和T1的控制寄存器,同时也锁存T0和T1的溢出中断标志以及外部中断0和1的中断标志。
TCON的位定义如下。
各控制位的意义如下:
TF1:
定时器/计数器T1的溢出中断请求标志位。
当启动T1运行后,T1常数寄存器从初始值
开始加1计数。
当计数器加满溢出时,由硬件自动使TF1置位,并向CPU发出中断请
求。
CPU响应中断后,硬件会自动清除TF1标志,使之清0。
TF0:
定时器/计数器T0的溢出中断标志位,意义同TF1。
IE1:
外部中断1的中断请求标志位。
当检测到外部中断引脚上存在有效的中断请求信号时(低
电平或负跳变),由硬件自动使IE1置位并向CPU请求中断。
当CPU响应该中断请求后,
由硬件自动清除IE1标志,使之清0。
IT1:
外部中断1的中断触发方式控制位。
IT1=0时,外部中断1程控为电平触发方式。
CPU在每个机器周期的S5P2期间采样外部中断1外部引脚的输入电平。
若该引脚为低电平则使IE1置位,若为高电平则该位清0。
IT1=1时,外部中断1程控为边沿触发方式。
CPU在每个机器周期的S5P2期间采样外部中断引脚的输入电平。
若在相邻的两个机器周期采样过程中,一个机器周期采样到高电平,接着的下一个机器周期采样到低电平,则可确认一次负跳变,硬件自动使IE1置位。
直到CPU响应中断时,才由硬件自动使IE1清除为0。
设计者可自行决定采用何种触发方式。
不过,一般来说要考虑到引起外部中断的外设产生触发信号的类型。
比如打印机发出的中断请求往往是电平信号,当它不忙时总是处于低电平,可设置为电平触发;而键盘操作一般只有短时间的低电平,则可设置为边沿触发。
IE0:
外部中断0的中断请求标志位,意义同IE1。
IT0:
外部中断0的中断触发方式控制位,意义同IT1。
TCON的说明:
两个空白格是定时器/计数器运行控制位,见第六章叙述;
串行中断标志不在这个寄存器中;
这些位通常由系统使用,用户无须处理。
但有时也可以作为软件查询标志。
比如启动定时器后,不允许中断,可以用程序指令来判断定时器溢出标志何时从0变为1。
推荐记忆法则:
TF=TimeroverFlow定时器溢出
IE=InterruptExternal外部中断
IT=InterruptType外部中断信号类型
2.SCON中的串行通讯中断标志
SCON是串行口控制寄存器,它的低2位锁存串行口的接收中断标志RI和发送中断标志
TI,两个标志的位置如下图。
TI:
串行口发送中断请求标志。
CPU把一个字节的数据写入到发送缓冲器SBUF就启动发动
过程。
每当发送完一帧数据后,硬件就自动使TI置位。
但CPU响应中断时并不自动清
除TI,必须用指令进行清除。
RI:
串行口接收中断标志。
在串行口允许接收时,每接收到一个串行帧,硬件会自动使RI
标志置位。
CPU响应中断时也不会自动清除RI标志,也必须用指令清除。
要特别注意TI和RI必须用指令清除的特点。
如果因为疏忽而在编程中没有进行标志清除,就会发生误触发中断的情况。
3.中断请求允许控制
89C51单片机使用中断允许寄存器IE实现对中断源的开放或屏蔽。
寄存器IE的位定义如下
89C51单片机对中断源的控制分为总允许和源允许两个级别。
回顾图可以看到,总允许位相当于一个总开关,它的主要用途是快速地完全关闭所有中断源。
在单片机应用程序中经常有临时关闭全部中断源的需求,如果此时有若干中断源是允许的,则利用总允许位实现全体中断源的关闭比逐个关闭各中断源简捷得多。
而一个中断源的允许却要求两个条件同时成立,既要求系统是开放中断的(总允许),又要求源也是允许的。
在中断允许控制字中,最高位为总允许控制位,2个空格为无定义,后5位对应5个中断源的控制状态,为1表示允许。
EA:
总允许位。
EA=1,系统开中断,各中断请求是否允许由各中断源控制位的状态决定。
EA=0,系统关中断,任何中断请求都不会被响应。
ES:
串行口中断允许位。
ESA=0禁止串行口中断;ES=1允许串行口中断。
ET1:
定时器/计数器1溢出中断允许位。
ET1=0禁止T1中断;ET1=1允许T1中断。
EX1:
外部中断1中断允许位。
EX1=0禁止外部中断1中断;EX1=1允许外部中断1中断。
ET0:
定时器/计数器0溢出中断允许位。
ET0=0禁止T0中断;ET0=1允许T0中断。
EX0:
外部中断0中断允许位。
EX0=0禁止外部中断0中断;EX0=1允许外部中断0中断。
例设系统要求允许外部中断0和定时器/计数器1中断,禁止其他中断,试编程实现。
解:
方法1,使用字节操作指令
MOVIE,#B或MOVIE,#89H
方法2,使用位操作指令
SETBEX0;允许外部中断0中断
SETBET1;允许T1中断
SETBEA;系统开中断
方法3,使用C51语言
IE=89H;
比较上述各方法,可知字节操作很快捷,但可读性较差,不容易从89H的表面情况看出操作意义;位操作较繁琐,但操作目的明确,可读性好;C51语言书写方便,更符合思维习惯。
4.中断优先级控制
89C51单片机的中断系统有两个优先级,每个中断源都可以用软件编程指定为高优先级中断或者低优先级中断。
中断系统有两个不可寻址的“优先级生效”触发器,一个指出CPU是否正在执行高优先级的中断服务程序,另一个指出CPU是否正在执行低优先级中断服务程序。
这两个触发器为1时,则分别屏蔽所有同级或低级中断请求。
另外,89C51单片机的专用寄存器中有一个优先级控制器IP,用来管理对中断优先级的定义,见下图。
IP寄存器的高3位无定义,低5位分别对应各中断源的优先级控制位,置1有效。
各位的意
义如下:
PS:
串行口中断优先级控制位。
PT1:
定时器/计数器T1中断优先级控制位。
PX1:
外部中断1中断优先级控制位。
PT0:
定时器/计数器T0中断优先级控制位。
PX0:
外部中断0中断优先级控制位。
单片机复位后,IP为0,所有中断源均为低优先级。
若要使某个或某几个中断源为高优先级,
可以使相应的控制位置位。
设置优先级的操作可以在系统初始化时,也可以在任何需要时进行,
并可根据需要随时变更。
由于同级中断源不能互相打断,而高级中断能打断低级中断(称为中断
嵌套),因此把所有中断源都定义为高优先级没有任何意义。
通常系统中只指定一个最紧急的中断
源为高优先级,比如很多情况下把系统的串行接收中断定义为最高优先级。
另外,为避免其他中
断请求长时间被阻断,应使中断服务程序尽可能简短,以不超过毫秒数量级为宜。
当多个同级中断请求同时发生时,由内部硬件查询序列决定响应顺序。
表给出了同优先级
情况下的中断响应查询顺序。
表中断优先级查询顺序
采用中断优先级控制可实现下述功能:
⑴同级中断按内部查询次序排队
有时系统中会出现2个以上中断源同时发生中断请求的情况。
表所示的查询次序是系统
硬件事先规定好的,如果希望排在后面的中断源能不受阻碍地得到响应,就可以把该中断源设置
为高优先级。
否则,系统会按照查询次序逐个地响应各中断请求。
通常,受阻断的中断请求会被
挂起,表示该中断请求暂时不能被接受,但请求标志保持有效。
当条件允许时,这个中断请求仍
可被CPU接受,但可能会滞后一段时间。
⑵利用高级中断实现中断嵌套
当CPU正在处理一个低级中断请求时,可能出现另一个高级中断请求。
这时CPU会暂时停
止正在执行的低级中断服务程序,保护当前断点,转去响应和执行高级中断请求。
高级中断请求
服务程序执行完毕后,再继续执行刚才被打断的低级中断服务程序。
这种情况称为中断嵌套,其
过程如图所示。
图中断嵌套过程示意
应该注意,在系统中同时存在低级中断请求和高级中断请求的情况下,应该为各级别的中断
服务程序分别设置一个工作寄存器区。
习惯上,主程序使用工作寄存器0区,低级中断服务程序
使用1区,高级中断服务程序使用2区。
还要指出,主程序、低级中断子程序和高级中断子程序
都可以调用各自的子程序,但必须分别对应自己的工作寄存器区。
另外,由于每级中断都要保护2字节返回地址并入栈保护若干资源(通常要保护的内容有A
累加器、B寄存器、PSW、DPTR等),因此应合理预留堆栈空间。
例89C51单片机的串行口设置为高优先级,其他中断源为低优先级,试对IP寄存器进行设置。
解:
用字节操作指令
MOVIP,#00010000B或者MOVIP,#10H
用位操作指令
SETBPS
说明:
上电复位后,各中断源初始状态都是低优先级的,所以在初始化程序中只对高优先级进行
设置即可。
若采用C51编程语言,则写为:
PS=1或者IP=20H
例设单片机系统中有高级中断和低级中断,子程序嵌套最多8层,试推测堆栈的预留深度。
解:
对于每级中断,应预留字节数为2+5=7(断点地址2字节加保护现场5字节)
对于有高级中断的情况,上述字节数需要加倍,此时中断系统共需7*2=14字节
对于子程序,每嵌套一层需要保留返回地址2字节,总共需要8*2=16字节
为两级中断程序调用子程序预留6字节
所以:
堆栈深度约为Σ=14+16+6=36(字节)
为堆栈留足空间很重要。
程序编译时并不检查堆栈预留是否充足,若不慎造成运行中堆栈溢出(即:
栈指针加到7FH后继续压栈),则所压栈内容得不到真正保留,当从堆栈恢复时就会发生严重错误。
其基本现象时:
单片机系统上电后短时工作似乎正常,但随着程序的运行,可能遇到各种情况。
当经过不确定的时间后,有可能出现最不利的情况,就会发生堆栈溢出,则单片机系统会突然死机或瘫痪。
顺便提及,在计算机术语中,常用“bug”一词来表示这类隐藏较深的软件缺陷。
这类缺陷,从编程语法、流程逻辑等方面都不容易发现,排查难度较大。
如果能预先清楚地将堆栈预留深度推测准确,就可以从根本上杜绝这个现象。
中断响应及处理过程
图中断响应过程流程图
单片机对中断请求的管理方法是,在每个机器周期的最后一个S状态即S6期间查询中断请求标志,在下一个机器周期的S1中响应相应的中断请求,并进行中断处理。
中断处理过程可分为4个阶段:
中断请求、中断响应、中断处理和中断返回。
89C51单片机的中断过程流程如图所示。
CPU执行程序时,在每个机器周期的最后一个S状态检测是否有中断请求,如果有中断请求,则相应的中断标志位置位。
CPU检测到中断请求标志后,如果中断是允许的,就进入中断响应阶段;如果没检测到中断请求或者中断被禁止,就继续执行下一条指令。
在中断响应阶段,如果有多个中断源,CPU要判断哪个中断源的优先级高,优先响应优先级高的中断请求,并阻断同级或低级的中断请求。
硬件产生子程序调用指令,将断点处的PC压入堆栈,将所响应的中断源矢量地址送入PC寄存器,跳转到该入口地址开始执行中断服务程序。
中断服务是要完成中断应处理的事务,根据需要编写中断服务程序。
编写中断服务程序时要注意,为了在中断程序中使用某些硬件寄存器而在返回时不破坏它们原来的内容,需要对使用的寄存器进行保护,这称为保护现场。
通常可以利用堆栈来保护累加器A、寄存器B、程序状态字PSW、数据地址指针DPTR,如果要使用工作寄存器区,可以通过设置PSW中的RS1和RS0位实现快速切换。
当然,在程序编写完毕后,可以根据实际情况调整,例如在中断程序中并没有使用寄存器B,则可以不对它进行压栈保护。
将不必要的指令语句去掉的过程是程序优化的组成部分。
中断服务程序执行完毕准备返回时,要先按照压栈时相反的顺序将当时保护的寄存器内容恢复回去,这称为恢复现场。
由于PSW也一并弹出,所以不必特别把工作寄存器区切换回去。
中断服务程序的最后一条指令是RETI,这条指令使堆栈中被压入的断点地址弹出到PC,从而能正确地返回到主程序的断点处继续执行。
另外,RETI还有恢复优先级状态触发器的作用,这是子程序返回指令RET所不能替代的。
可见,CPU执行中断服务程序和执行子程序很类似,因此也称为中断服务子程序。
但两者的区别
也是显而易见的:
首先,子程序是由主程序用LCALL或ACALL指令来调用的,中断服务程序是通
过中断请求和响应实现的。
其次,子程序是由主程序控制调用的,有确定的调用地点,而且子程序与
主程序使用相同的硬件资源。
而中断请求的发生时刻不可预知,通常不能使用与主程序相同的硬件寄
存器,存在断点现场保护和恢复的客观需求。
中断响应条件
1.当前无同级或高级中断在进行中;
2.当前机器周期是一条指令的最后一个周期;
3.当前执行的指令不是RETI或访问IE和IP的指令;
4.中断是允许的(包括总允许和源允许)。
例如CPU对外部中断0的响应,当采用边沿触发方式时,CPU在每个机器周期的S5P2期间
采样外部输入引脚/INT0。
如果在相邻的两次采样中,第一次采样到/INT0=1,紧接着第二次采样
到/INT0=0,则硬件将专用寄存器TCON中的IE0置位,请求中断。
IE0的状态会一直保持下去,
直到CPU响应该中断请求。
进入到中断服务程序时,才由硬件自动将IE0清除。
由于外部中断每
个机器周期被采样一次,因此输入的高电平或低电平信号必须保持至少一个机器周期,才能保证
被采样到。
对中断响应条件的解释:
①如果中断请求发生时已经有同级或高级中断在运行,则该中断请求不会被立即响应,必须等待同级或高级中断服务程序执行完毕后才能被接受;
②断点地址必须是一条完整指令的起始地址。
如果一条指令尚未执行完毕(比如双周期指令只执行了一个周期),就接受中断请求,则返回后无法继续执行刚才指令未完成的部分,而且可能由于误将指令操作数当作操作码而造成整个程序的混乱;
③当执行RETI指令时,系统正在将断点的PC值出栈。
如果此时再接受中断请求,会发生
断点保护的混乱。
因此要求在执行RETI指令时如果发生中断请求,必须得执行完RETI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 教材 东北大学 老师