版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理(yunl)复习一、理论知识码制(二进制(B),八进制(O),十六进(H),十进制(D)注:后面的B,H,O,D只是表示(biosh)进制方式,不表示数值。举例(j l):1101 0101B=0 xD5H=325O=213D四者之间的转换技巧:二进制转十进制比较简单。二进制转十六进制,从低位开始四位一次转化,即1101 0101B就是0 xD5H,二进制转八进制,则从低位开始三位一次转化,即0 11 01 0 101B不够的加0补上。其他之间的转化可以按照:先转化为二进制再转化成其他进制数的顺序转化。对于反码,补码比较简单看一遍书就可以理解。逻辑运算(与&,或|,非!,取反,按位异
2、或)常用的几个 比较简单,例:(0010 0100) & (1001 0010)= 0000 0000 (0010 0100) | (1001 0010)= 1011 0110 (0010 0100)=1101 1011(0010 0100)(1001 0010)=1011 0110 对应位相同则是0,不 同则按或运算来C语言基础知识(二级考过了的应该都没问题,心疼狮城632的人) 指针和结构体不考。4.80C51单片机的组成ROM4KB RAM128B 并行I/O32个(P0,P1,P2,P3 4x8) 串行口UART 中断源5个 定时器2个 最大晶振24M 引脚数40个注:1)8bit(位
3、)=1byte(字节,简称B) 1024B=1KB 1024KB=1M ROM和RAM计算,“8051”中的“1”一般代表ROM=”1”x4KB RAM 记住就行 组成:CPU(运算器,程序计数器PC,指令寄存器),存储器(ROM程序 存储器,RAM数据存储器),I/O口5.8051的特殊功能寄存器(SFR)21个不连续的分布在80HFFH的128B地址空间中,地址是?0H和?8H是可位寻址的寄存器。具体寄存器表可以看下面的附件表,有些重要的下面会提到。6.8051堆栈及作用在这个涉及到比较(bjio)底层一点寄存器地址分布,如果要了解的话可以看书上P19的讲解。这里说起来比较复杂,总之通俗来
4、说,就是给单片机的储存空间进行整理排序是用户或者单片机内部可以合理调用和储存。时钟电路(dinl)及CPU工作时序时钟电路即晶振电路,两等值电容一端同接地(jid)(GND),另一端分别接晶振的两端,再接入XTAL1和XTAL2构成。振荡周期:1/fosc fosc为晶振频率;状态周期:2倍的振荡周期;机器周期:12倍的振荡周期,6倍的状态周期;指令周期:14倍的机器周期,即12,24,36,48倍的振荡周期;8.80C51的储存结构和地址空间1)地址空间:两种结构形式,即普林斯顿结构和哈佛结构普林斯顿结构特点是,微型计算机只有一个地址空间,ROM和RAM安排在这一地址空间的不同区域,一个地址
5、对应唯一的一个存储器单元(一个存储器单元存放一个8位二进制数),CPU访问ROM和访问RAM用同一访问指令。相当于“串行”。哈 佛结构结构特点是,微型计算机的ROM和RAM分别安排在不同的地址空间,ROM和RAM可以有相同的地址,CPU访问ROM和访问RAM存储器用不同的指令访问。相当于“并行”。2)4个物理地址:片内ROM(程序存储器),片外ROM,片内RAM(数据存储器),片外RAM。3)3个逻辑地址:片内RAM,片外RAM,片内,外统一编址的ROM单片机正常工作时引脚EA=1内部4KB ROM;当用于调试时EA=0(接地) 64KB ROM全为片外;片外RAM,最高可以拓展64KB RA
6、M;片内RAM是使用最多的地址空间, 所有操作指令的操作数只能在此地址空间或SFR中。6)8051片内RAM 地址空间在前128B(00H7FH)储存用户变量,后128B地 址空间(80HFFH)用来储存SFR,所以片内RAM地址空间和SFR是连续 的。 单片机复位方式8051单片机复位引脚RST出现5ms以上高电平时,就会完成复位。持续高电平则会循环复位无法执行程序。复位形式有:上电复位(自动),开关复位(一般由按键操作)10.单片机工作方式复位方式、程序执行方式、低功耗方式、以及EPROM编程和校验方式11.单片机低功耗方式 单片机有两种低功耗操作(cozu)方式:节电操作(cozu)方式
7、和掉电操作(cozu)方式。在节电方式时,CPU停止工作,RAM、定时器、串行口和中断系统继续工作。在掉电方式时,仅给片内RAM供电,片内所有其他的电路均不工作。单片机用软件来选择操作方式,由电源控制寄存器PCON中的有关位控制,这些有关的位是:IDL(PCON.0)节电方式位,IDL=1时,激活节电方式PD(PCON.1)掉电方式位,PD=1时,激活掉电方式单片机程序执行方式程序执行方式所执行的程序可以在内部ROM、外部ROM、或者同时放在内外ROM中。数据指针DPTR作用16位寄存器,可分为DPL(低8位)和DPH(高8位)两个8位寄存器。DPTR用来存放16位地址值,以便间接寻址或变址寻
8、址的方式对片外数据RAM或ROM进行64KB范围内的数据操作。14.8051单片机总线 地址总线,数据总线,控制总线。15.8051指令系统(了解)寻址方式一、寄存器寻址:指令中地址码给出的是某一通用寄存器的编号,寄存器的内容为操作数。MOV A,R0 ;8051可用寄存器寻址的空间是:R0R7,ACC,CY(位),DPTR,AB 6二、直接寻址:指令中地址码部分直接给出了操作数的有效地址MOV A,4FH;可用于直接寻址的空间是,内部RAM低于128字节(包括其中的可位寻址区)、SFR 三、寄存器间接寻址:指令中给出的寄存器的内容为操作数的地址,不是操作数本身,即寄存器为地址指针MOV A,
9、R1 四、立即寻址:指令中地址码部分给出的就是操作数MOV A,#6FH 五、变址寻址:指定的变址寄存器的内容与指令中给出的偏移量相加,结果为操作数地址MOVC A,A+DPTR 六、相对寻址:由PC提供的基地址与指令中提供的偏移量el相加,得到的操作数的地址,这时指出的地址是操作数与现行指令的相对位置SJMP rel 七、位寻址:操作数是二进制的某一位,其位地址出现在指令中SETB bit 8051可用于位寻址的空间是,内部RAM的可位寻址区和SFR区中的字节地址可以被8整除(即地址以“0”或“8”结尾)的寄存器所占空间。并行I/O口说明P0口:可以作为输入/输出口,但在实际应用中常作为地址
10、/数据总线口,即低8位地址与数据分时使用P0口。低8位地址由ALE信号的下跳沿锁存到外部地址锁存器中,高8位则由P2口输出。P1口:只作为(zuwi)普通输入/输出端口。P2口:可以作为输入/输出口,可与P0口一起组成(z chn)16位地址总线使用。对于内部无ROM的单片机,P2口一般不作为I/O口与外设直接相连。P3口:双功能口,第一功能使用时与P1相同,第二功能如下(应该要记住(j zh),可能会考简答题):第二功能P3.0 RXD 串行输入口P3.1 TXD 串行输出口P3.2 INT0 外部中断0输入P3.3 INT1 外部中断1输入P3.4 T0 计数器0计数输入P3.5 T1 计
11、数器1计数输入P3.6 WR 外部数据RAM写选通信号P3.7 RD 外部数据RAM读选通信号定时器/计数器工作原理8051系列单片机至少有两个16位内部定时器/计数器,8052有三个定时器/计数器,两个基本定时器/计数器是定时器/计数器0(T/C0)和定时器/计数器1(T/C1)。它们既可以编程为定时器使用,也可以编程为计数器使用,若是计数内部晶振驱动时钟,它是定时器;若是计数8051的输入管脚(看上面P3.4和P3.5)的脉冲信号,它是计数器。1)当T/C工作在定时器时,每个机器周期计数值加1,例如当晶振为6MHz时,每2us计数值加1。2)当T/C工作在计数器时,计数脉冲来自外部脉冲输入
12、管脚T0(P3.4)或T1(P3.5),当T0或T1脚上负跳变时计数值加1。识别管脚上的负跳变需两个机器周期,即24个振荡周期。所以T0或T1脚输入的可计数外部脉冲的最高频率为1/24fosc,当晶振为12MHz时,最高计数率为500KHz,高于此频率将出错。18.看门狗概念即看门狗一个定时器,实质上为一个监视定时器,他的定时时间是不可变的,到达时间则会产生中断或者脉冲溢出,是系统复位。一般程序正常运行的时候会在看门狗定时器到达规定时间前对其进行刷新使其重新计时(重置定时器,“喂狗”)。若程序出现跑飞,则不会对其刷新,看门狗定时器到达规定时间则会产生中断或溢出脉冲对程序进行复位。串口工作原理及
13、多机通信方式,四种工作方式波特率和比特率:单位时间内传输二进制代码的有效位(bit)数为比特率,单位为bit/s(bps)单位时间内传输码元符号的个数单位为Baud。说明一下,对于串口通信,一般码元为8或10或11位的二进制代码组成,那么比特率分别等于8倍,10倍,11倍的波特率。工作(gngzu)原理:设两个单片机之间通信甲机发送,乙机接受。甲机CPU向SBUF(发送缓存区)写入数据,就启动了发送过程,在发送控制器的控制指令下,按设定好的波特率,每来一个移位(y wi)时钟,数据移出一位,由低位到高位一位一位发送到电缆线上,移出的数据位通过线直达乙机,按照波特率,每来一个移位时钟,由低位到高
14、位一位一位移入SBUF(接收缓存区);这样,一个移出一个移入便实现数据传输。注意:双方(shungfng)波特率必须相等,否则移位时钟不同则会丢失数据。多机通信方式:单片机之间的通信(二者RXD,TXD交叉相接,共地,即接同一个GND。)单片机与PC通信(单片机需要利用MAX232芯片转换电平,RS232连接线)四种工作方式及波特率计算:方式0(移位寄存器方式)数据通过RXD输入/输出,TXD输出频率为fosc/12的时钟脉冲。数据格式为8位,低在前高位在后:Baud=(fosc为晶振频率) 发送过程以写SBUF开始,当8位数据传送完,TI(发送中断标志位)被置1。方可发送下一帧数据。接受时必
15、须REN=1(允许接受)和RI=0(接受中断标志位),当8位接受完后RI置1,此时,可通过读SBUF指令,将串口数据读入。方式1(波特率可变10位异步通信方式)TXD为发送端,RXD位接受端,每帧10位:1个起始位0,8个数据位,一个停止位1。其中,起始位和停止位会自动插入。由T1定时器提供移位时钟,即设置波特率: X为定时器初值举个例子:当SMOD=0(后面会介绍各寄存器)时,晶振频率为12MHz,需要设置波特率为9600。那么根据公式可以算出X=253。可能会出现小数,那就取整即可,但是实际得到的波特率会和9600不相等。补充一点,如果问你晶振设置为11.0592MHz的原因,就可以回答,
16、方便设置波特率,这个晶振下设置的波特率算出来的多为整数比较准确。方式2(波特率固定11位异步通信方式)TXD为发送端,RXD位接受端,每帧11位:一个起始位0,9个是数据位,1个停止位1。发送时,第九位数据由SCON中的TB8为提供,接收到的第九位放在SCON的RB8中。他可用为校验位或者多机通信中地址还是数据的特征位:方式3(波特率可变11位异步通信方式)引脚使用和数据格式同方式(fngsh)2,波特率计算同方式1。中断(zhngdun)系统8051单片机有5个中断源,有一个中断优先级,每个中断源的优先级可以(ky)编程控制,中断允许受到CPU开中断和中断源开中断的两级控制。中断源:外部中断
17、请求0由INT0(P3.2)输入;外部中断请求1由INT1(P3.3)输入;定时器/计数器0溢出中断请求;定时器/计数器1溢出中断请求;串行口发送/接收中断请求。中断优先级:由寄存器IP控制,只能实现二级中断服务嵌套。简单点说,进入一个中断后,再只能进一个中断,不能再再第二个中断里进入第三个中断。如下图说明:Main函数 中断3 中断2 中断1 第三个中断无法实现的!这就 是二级嵌套的含义。 END中断处理过程:中断请求,即中断标志位置1,请求中断。CPU在每个指令周期的最后一个机器周期都会检查是否有中断请求,检查到后如果相应中断允许位置1的话则会进入中断响应。否则继续执行下条指令。中断响应阶
18、段,如有多个中断源,则CPU判断优先级,优先级高的先执行。并阻断低级中断。中断服务(fw)是完成中断要处理的事务,就是执行中断函数中的内容。中断返回是通过执行一条RETI中断返回指令完成的,该指令是堆栈(duzhn)中被压入的断点地址弹到PC,从而(cng r)返回主程序断点继续执行主程序。(说这么多实际就是打波浪线这句话)程序解析主要内容有定时器,中断函数,数码管,流水灯,按键等。注:程序题需要根据具体电路编写!两个数码管显示两位数,一个显示十位,一个显示各位,按键按下一次对应数码管显示数字将加1,加到50后清零。24Mhz晶振频率1)参考电路图:参考(cnko)程序:#include re
19、g51.hsbit Key=P32;/key位申明(shnmng)unsigned char count=0; /按键(n jin)次数纪录变量unsigned char shi=0; /十位数字unsigned char ge=0;/个位数字bit buf=1; /用于储存key的之前状态unsigned char Buffer10=0 x03,0 x9f,0 x25,0 x0d,0 x99,0 x49,0 x41,0 x1f,0 x01,0 x09;/数码管09编码共阳极void delay();/延时函数void main()Key=1; /初始化P0=0 xFF;P2=0 xFF;wh
20、ile(1)buf=Key; /将key当前状态赋给buf if(Key!=buf) /如果key当前的状态值不等于之前状态,则有可能按下按键delay(); /延时消抖if(Key!=buf) /确认(qurn)按键按下count+;if(count=50)/到50便请零count=0;shi=count/10;/十位(sh wi)赋值ge =count%10;/个位赋值P0=Buffershi;/数码管1赋值P2=Bufferge;/数码管2赋值void delay()unsigned int i;for(i=0;i500;i+);定时流水灯,8个LED依次(yc)发光间隔1s,晶振频率1
21、2MHz参考电路图参考(cnko)程序:#include reg51.hunsigned char count=0; /计数变量用来(yn li)计定时次数unsigned int tmp=0; /用于记录(jl)定时器初值bit flag=0;unsigned char buf=0 x01;void main()EA=1; /开总中断TMOD=0 x01; /选择定时器0方式1,如果用T1的话则是 TMOD=0 x10;tmp=(12000000/12)*50/1000; /每次定时50ms,计算定时器初值 注:不要写成(50/100),原因是这个结果为0,使得tmp会等于0;tmp=655
22、36-tmp;TH0=tmp/256; /初值高8位赋值TL0=tmp%256; /初值低8位赋值ET0=1; /开定时器0中断TR0=1; /开启定时器0while(1)if(flag=1)/判断1s是否(sh fu)到达flag=0; /清除(qngch)标志位P1=buf; /此时(c sh)P1=1111 1110B 即对应第一个灯亮buf=buf=20) /中断20次即,20 x50ms=1s;count=0;/计数变量清空flag=1; /1s时间达到标志位三、程序技巧(写给对单片机完全无法(wf)不理解,C语言也不是很好的朋友)1.写程序的时候(sh hou)构架不会写算法函数,
23、那也的写一个完成的程序。下面(xi mian)是一个空程序,实在不会就先把这个摆上去:#include void main()这个程序是没有语法错误的,是可以运行的,但是没有算法。2.写定时器的时候程序的时候实在不会写就把下面的几句话写上去:TMOD=0 x01;(或者TMOD=0 x10)TH0=(fosc/12)*ms/1000/256; TL0=(fosc/12)*ms/1000%256;TR0=1;ET0=1;注:其中fosc是题目给的晶振频率,如果是12MHz,就应该写 12000000,ms是一次定时时间,如果50ms,就写50,注意单位。有涉及到延时的程序就可以这样写:#incl
24、ude void delay();void main()delay();void delay()unsigned int i;for(i=0;i200;i+);一个设置定时器0工作方式1的函数(hnsh):(默认的晶振是12MHz)#include unsigned char T0RH=0 x00;unsigned char T0RL=0 x00;void ConfigTimer0(unsigned int ms);void main() void ConfigTimer0(unsigned int ms) unsigned long tmp; tmp=(12000000/12)*ms/100
25、0; tmp=65536-tmp; T0RH=tmp/256; T0RL=tmp%256; TMOD=0 x01; TH0=T0RH; TL0=T0RL; ET0=1; TR0=1;对于有中断(zhngdun)的程序:(加粗的都是关键字,要记得单词)#include unsigned char T0RH=0 x00;unsigned char T0RL=0 x00;void ConfigTimer0(unsigned int ms);void main() EA=1; ConfigTimer0(50); /例如(lr)定时50msvoid ConfigTimer0(unsigned int m
26、s) unsigned long tmp; tmp=(12000000/12)*ms/1000; tmp=65536-tmp; T0RH=tmp/256; T0RL=tmp%256; TMOD=0 x01; TH0=T0RH; TL0=T0RL; ET0=1; TR0=1;void Timer0() interrupt 1TH0=T0RH;TL0=T0RL;总之,不会(b hu)写就记一些成段有联系的程序往上写就行了。赶时间写的,肯定会有遗漏的地方,多多(du du)包涵!附:重要寄存器(查找方便(fngbin)一点,省得翻书)1.SFR(打星号为可位寻址,这个是52单片机的SFR多了一些(y
27、xi)东西)IP中断(zhngdun)优先级寄存器PS串行口中断(zhngdun)优先级控制位。PS=1,串行口中断(zhngdun)定义为高 HYPERLINK /subview/1035789/1035789.htm t /item/IP/_blank 优先级中断。PS=0,串行口中断定义为低优先级中断。PT1 HYPERLINK /subview/281961/281961.htm t /item/IP/_blank 定时器/计数器1中断优先级控制位。PT1=1,定时器/计数器1中断定义为高优先级中断。PT1=0,定时器/计数器1中断定义为低优先级中断。PX1 HYPERLINK /su
28、bview/494468/494468.htm t /item/IP/_blank 外部中断1 HYPERLINK /subview/1206615/1206615.htm t /item/IP/_blank 中断优先级控制位。PX1=1,外部中断1定义为高优先级中断。PX1=0,外部中断1定义为低优先级中断。PT0定时器/计数器0中断优先级控制位。PT0=1, HYPERLINK /subview/281961/281961.htm t /item/IP/_blank 定时器/计数器0中断定义为高优先级中断。PT0=0,定时器/计数器0中断定义为低优先级中断。PX0外部中断0中断优先级控制位
29、。PX0=1,外部中断0定义为高优先级中断。PX0=0,外部中断0定义为低优先级中断。IE中断(zhngdun)允许寄存器SCON串行口控制(kngzh)寄存器SM0、SM1串行口工作方式(fngsh)控制位SM2多机通信(tng xn)控制位多机通信是工作(gngzu)于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当 HYPERLINK /view/1060187.htm t /_blank 串行口工作(gngzu)于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入 HYPERLINK /view/3357584.htm t /_
30、blank SBUF,且置位RI发出中断申请,否则会将接收到的数据放弃。当SM2=0时,就不管第9位数据是0还是1,都会将数据送入 HYPERLINK /view/3357584.htm t /_blank SBUF,并发出中断申请。工作于方式0时,SM2必须为0。REN允许接收位REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。TB8发送接收数据位8在方式2和方式3中,TB8是要发送的即第9位 HYPERLINK /view/190231.htm t /_blank 数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB
31、8=1时为地址。RB8接收数据位8在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。TI发送中断标志位可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。RI接收中断标志位可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。在串口 HYPERLINK /view/4499229.htm t /_blank 中断处理时,TI,RI都需要软件清0,硬件置位后不可能自动清0,此外,在进行缓冲区操作时,需要ES=0,以防止中
32、断出现。TMOD定时器工作方式寄存器,GATE门控制(kngzh)。GATE=1时,“与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(judng)(即此时K=TRxINTx),当且仅当TRx=1,INTx=1(高电平)时,计数(j sh)启动;否则,计数停止。当INT0引脚为高电平时且TR0置位,TR0=1;启动定时器T0;当INT1引脚为高电平时且TR1置位,TR1=1;启动定时器T1。GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。当TR0=1,启动定时器T0。当T
33、R1=1,启动定时器T1。,C/T功能选择位C/T=0时为定时功能: 加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;C/T=1时为计数功能: 加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外信号脉冲进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;,M0、M1方式选择功能MCS-51的定时器T0有4种工作方式:方式0,方式1,方式2,方式3。MCS-51的定时器T1有3种工作方式:方式0,方式1,方式2。M1M0工作方式功能说明00方式013位定时器/计数器01方式116位定时器/计数器10方式2自动重载8位定时器/计数器11方式3T0分为2个8位独立计数器,T1无方式3TCON定时器控制(kngzh)寄存器TF1:定时器1溢出(y ch)标志位。当定时器1计满溢出时,由硬件使TF1置“1”,并且申
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海科创职业技术学院《建筑照明技术A》2023-2024学年第一学期期末试卷
- 上海健康医学院《园林工程项目管理》2023-2024学年第一学期期末试卷
- 上海建设管理职业技术学院《建筑工程制图与识图》2023-2024学年第一学期期末试卷
- 上海行健职业学院《医学微生物学C》2023-2024学年第一学期期末试卷
- 上海海事大学《数字系统设计基础》2023-2024学年第一学期期末试卷
- 上海海关学院《图案构成设计》2023-2024学年第一学期期末试卷
- 六年级语文上册 第八单元 26《我的伯父鲁迅先生》教学实录 新人教版
- 2024年中国按摩博士市场调查研究报告
- 水稻节肥技术培训课件
- 上海工商职业技术学院《软件工程专业学科前沿讲座双语》2023-2024学年第一学期期末试卷
- 一元二次方程基础练习50题含详细答案
- 李白杜甫酒诗
- 古代诗人作家人物介绍-苏东坡
- 现代药物制剂与新药研发智慧树知到答案2024年苏州大学
- 湖南省郴州市2023-2024学年三年级上学期期末考试科学试题
- 《智慧体育竞技科技助力新突破》演讲课件
- 《登岳阳楼》课件+2023-2024学年统编版高中语文必修下册
- 新进高校教师工作计划
- 2024年人教版初一生物(上册)期末试卷及答案(各版本)
- 中考英语688高频词大纲词频表
- 《马克思主义发展史》题集
评论
0/150
提交评论