义隆单片机学习笔记之(一) 硬件框架&资源下载

参考网址:

点击链接或右键链接地址

(台湾义隆官网)http://www.emc.com.tw/chs/tech_8bit.asp

(EM78P153K官方资料)http://www.emc.com.tw/twn/8bit_prod_dsc.asp

(义隆单片机EM78P153使用)http://wenku.baidu.com/link?url ... ...

(官网工具)http://www.emc.com.tw/chs/st_8bit.asp

(汇编和C,编译器相关问题)http://www.amobbs.com/ ... ...

(义隆单片机 EM78P153_C语言范例)http://wenku.baidu.com ... ...


目录

第一章 简介

第二章 存储结构

2.1 ROM划分

2.1 RAM划分

第三章 IO系统

第四章 复位

第五章 休眠状态和唤醒

第六章 中断功能

第七章 时钟分频系统

 



台湾义隆公司推出的8位EM78P153系列单片机已有多年,但与AT89系列、PIC系列、Z86系列、GMS97系列等单片机比较而言,EM78系列单片机进入内地市场稍晚一些,所以一般人并不太了解。(另:该系列单片机IC价格便宜(小于 1RMB),但是仿真器、程序烧录器,价格比较贵(大于700RMB))。

OTP(One Time Programmable)是MCU的一种存储器类型,意思是一次性可编程:程序烧入IC后,将不可再次更改。

 

第一章 简介

先进的单片机结构
EM78系列单片机将众多功能集于一身,这其中包括ALU、ROM、RAM、I/O、堆栈、 中断控制器、定时/计数器、看门狗、
电压检测器、复位电路、振荡电路等,成为真正意义上 的单片机小系统。

优越的数据处理性能
EM78系列单片机采用RISC结构设计、单周期、单字节及流水线指令、五级堆栈、RAM 数量从32~157个,最短指令周期100ns,
程序页面为1K(多至4页),与其它一些单片机相比,EM78系列单片机具有更高、更快的运行处理速度。


强大的单片机新功能
这包括:
① 三个中断源:定时器中断、I/O唤醒中断、外部信号输入中断(只有下降沿触发?)
② R-OPTION功能:如果用户程序有几个版本,希望能放在同一ROM内,则通过R-OPTION功能便可实现此想法,R-OPTION功能
设置是在相关I/O上上拉或下拉电阻,通过判断相关I/O的状态来选择执行内部何种版本程序。
③ 内置电压检测器:当电源电压掉在一额定值以下时单片机始终处于复位状态,以此提高系统的复位性能。
④ 低功耗设计:正常工作电流2mA、休眠状态电流1μA
⑤ 多功能I/O口:可程序设置为I/O上拉、下拉、开路等方式
⑥ I/O唤醒功能:通过I/O变化唤醒处于休眠状态的单片机
⑦ 内置看门狗定时器:提高单片机抗干扰能力

通俗易懂的指令系统
EM78系列单片机指令系统采用与大家熟知的MCS-51指令风格设计,共计58条指令,大家通过较短的时间便能掌握运用。

 

采用 8 位数据总线和 13 位指令总线独立分离的 Harvard 结构设计。
采用 RISC 指令集,共有 57 条单字节指令,其中 99%为单周期指令(对程序计数器 PC 指针 进行写操作除外)。

1K~4KX13 的程序存贮器(有 OTP 和掩膜二个版本)。
48 个通用数据寄存器可直接寻址使用。
14 个特殊功能寄存器。

具有五级堆栈令程序嵌套更自由。

具有三个硬件中断和一个软件中断。

两种工作模式:正常工作模式 2mA/5V
休眠模式 1μA/5V(可由 I/O 唤醒)
·具有 R-OPTION 功能,即用电阻的上拉、下拉来选择内部程序的执行。
·一个带 8 位预置器的 8 位定时/计数器,一个看门狗定时器(WDT)。
·采用先进的加密方法保证用户代码不被读出。
·工作电压:2.5~5.5V 工作频率 DC~36MHZ、工作温度 0℃~70℃。

 

EM78 内部结构框图
EM78X56 在片内集成了一个 8 位算术运算单元 ALU 和工作寄存器 ACC、1K~4KROM、56 个 RAM、12 个 I/O 口,8位预置器(Prescaler)
及 8 位计数器(TCC)、振荡器、看门狗、五级堆栈、中断控制器、指令寄存器、译码器和其它一些寄存器等。
EM78 系列单片机采用 8 位数据/控制总线和 13 位指令总线独立分离的 Harvard 结构,流水线指令,即当一条指令在执行中,下一
条指令已被从 ROM 取出放在指令寄存器等待执行,如此 EM78 系列几乎全部为单周期指令,执行速度更快。
EM78 系列数据存贮器均可视为寄存器来寻址编程,分工作寄存器特殊功能寄存器二大类,2.5 节将详细讲述寄存器的使用方法。

RAM地址空间:

(0x00~0x10为特定功能的寄存器,之后~0x3F的寄存器为普通内存)

 

第二章 存储结构

2.1程序存储器ROM框图:

视不同的型号,程序ROM的大小不同,上图中,每一页的大小(00~3FF)= 1024 = 1K(寻址空间)。

系统运行时从ROM中读取程序,在编写汇编程序时可以使用ORG指明代码存放的ROM地址

PC 程序计数器 寄存器结构:

视不同的型号,其PC长度不同,A0~A9 10位长度的寻址空间为1K,A10、A11构成页地址。

1.在使用JMP 或者 CALL进行程序跳转时:

如果是仅仅局限在当前页的范围内,则不用修改(A11、A10),直接将目标地址赋值给A9~A0,【对于JMP指令,这样就行了;对于CALL指令还要将要执行的下一条指令PC+1入栈,以便CALL执行完毕之后,程序正确返回】

如果需要跳转到别的页中,则需要首先通过设置R3的PS0、PS1进而载入到PC的A11 A10

如果使用指令直接修改的PC(R2)的值,(如:MOV  R2 A 或者 ADD R2 A 或者 BC R2,0)则PC低8位以上的位会被清零,所以之后产生的 跳转会被限制在也页面的256地址。

 

堆栈
EM78X56有五级堆栈,遵循后入先出的原则实现程序多至五级嵌套调用.通常堆栈使用如下:
当CALL和中断响应时PC+1压栈;
当子程序或中断返回,执行RET、RETL(带参数返回)、RETI(中断返回),将栈顶值(栈1)弹回程序计数器PC、同时将堆栈2的值拷
贝到堆栈1,堆栈3的值拷贝到堆栈2,以此类推。
要注意的是RET、RETL、RETI指令并没有改变R3中的PS0~PS1位便返回到原来调用程序的页面,所以当从一次跨页的子程序
调用返回时,一定要用指令恢复R3中原先的PS0、PS1值。

 

 

2.2内存 (数据存储器RAM结构)

[具体的register对应地址见附录],累加器A是不可以寻址的

EM78X56 的数据存储器分工作寄存器、特殊功能寄存器和一般通用寄存器三大类

工作寄存器

(系统运行状态,辅助寻址,保证自动化工作的完成)

1.间接寻址寄存器R0

  只作为间接寻址用。任何对 RO 进行操作的指令,实际上是存取由 RAM 选择寄存器 R4 所指定的
  RAM 内容。

1 ;在间接寻址模式里,Bit0-5 用来选择寄存器(地址:00-06、OF-3F) 
2 ;例如:
3 MOV A,@0x10 
4 MOV R4,A 
5 MOV A, @0x11 
6 MOV R0, A ; R10=11H 
7 ;其结果是将 16 进制的“11”值送入由 R4 指的“10”单元中。 

 

2.定时/计数寄存器R1(TCC)
  此寄存器为 8 位定时/计数器,可由程序进行读/写操作。它用于对外加在 TCC 脚上的脉冲进行计数,或对内部时钟计数。

3.程序计数器PC(R2

  ·在复位情况下,R2 被清零,地址指向 OOOH
  ·对 R2 进行写操作的指令一定需要二个指令周期,其它有关 R2 和堆栈的内容§2.4 中所述.

 

所有寄存器地址及初值

4.系统状态寄存器R3

如下表所示,R3 包括 ALU 运算标志、页面标志、复位状态等

Bit0(C) :进位标志
Bit1(DC):辅助进位标志
Bit2(Z) :零标志,当一算术或逻辑运算结果为“0”时,则置该位为“1”
Bit3(P) :掉电模式位。当系统上电时或执行“WDTC”指令后,置该位为“1”;当执行“SLEP”指令后,该位被置“0”。
Bit4(T) :超时位,当系统上电或执行“SLEP”和“WDTC”指令时,置位为“1”;当 WDT 溢出时置位为“0”
Bit5(PSO)页面选择低位
Bit6(PS1)页面选择高位

GP:一般用途的读/写位


通过P、T位来判断复位产生的原因如表2.4所示:

5.内存间接寻址寄存器R4

RAM 选择寄存器(RSR)
在间接寻址模式里,Bit0-5 用来选择寄存器(地址:00-06、OF-3F)
例如 MOV A,@0x10
MOV R4,A
MOV A, @0x11
MOV R0, A ; R10=11H
其结果是将 16 进制的“11”值送入由 R4 指的“10”单元中。

·Bit6~7 未使用
·未作间接寻址时,R4 可作 6 位宽度的可读/写通用寄存器.

 

6. IO输入输出寄存器R5、R6

  EM78 将 I/O 映射为寄存器来操作,R6 为 8 位,R5 仅有低 4  位有效。

7. 终端状态寄存器RF

Bit3~7:未使用

·“1”表明有中断请求,“0”表明没有中断请求
Bit0 (TCIF):TCC 计数器 1 溢出中断标志位;当 TCC 计数器 1 溢出时置“1”,可由软件清零。
Bit1 (ICIF):IO口 6 输入变化中断标志位,当口 6 输入变化时置“1”,可由软件清零。
Bit2 (EXIF):外部中断标志位。当 INT 脚有下降沿触发时置“1”,可用软件清零。

·RF 可用软件清零,但不能被置“1”
·IOCF 为中断屏蔽寄存器,通过指令读取 RF 值,此时结果值为 RF 和 IOCF 相与的结果

8.一般通用寄存器:R10~R3F
·R10~R3F 为 48X8 位一般通用寄存器。

 

特殊功能寄存器

(中断、IO配置选择、分频、看门狗、时序。各个功能模块的 配置)

EM78X56 的特殊功能寄存器主要包括累加器.控制寄存器和 WDT 预分频器。
1. 累加器 A
  内部数据传输或指令运算单元,属不可寻址单元。
2. 控制寄存器   

;控制寄存器是用来控制 I/O 的工作状态、中断控制、看门狗控制等,它们的寄存器地址如图 
;2.4,其读写只能采用指令 I0R R 或 IOW R 来完成。

(1) CONT(控制寄存器)

Bit0(PSR0)~Bit2(PSR2) TCC/WDT 预分频系数位

Bit3(PAB)预分频器分配位
0:分配给 TCC
1:分配给 WDT
Bit4(TE)TCC 信号触发源位
0:TCC 脚信号低到高触发
1:TCC 脚信号高到低触发
Bit5(TS) TCC 信号源
0:内部指令周期时钟
1:TCC 脚输入的外部信号
Bit6(INT) 中断使能标志位
0:由 DISI 或硬件中断产生时屏蔽中断
1:ENI 或 RETI 指令开中断
Bit7 没有使用
·CONT 寄存器是可读可写的
(注:当将 IOCF 相应的控制位置“1”、则相应的中断允许,使用“ENI”指令时所有中断被开放,而使用“DISI”指令,则所有中断被
关闭。)

 

(2) IOC5~IOC6(I/6 口控制寄存器)
IOC5、IOC6 分别为口 5、口 6 控制寄存器,按位将 IOC5、IOC6 设为“1”时表示该脚没设
为输入(高阻抗)、设为“0”时表示该脚为输出。
IOC5 只有低四位可用。IOC5、ICO6 为:可读可写的。


(3)IOCB(下拉控制寄存器)

0:使能内部下拉电阻功能
1:关闭内部下拉电阻功能

Bit0(/PD0):使能 P50 引脚的下拉电阻控制位
Bit1(/PD1):使能 P51 引脚的下拉电阻控制位
Bit2(/PD2):使能 P52 引脚的下拉电阻控制位
Bit3:未使用
Bit4(/PD4):使能 P60 引脚的下拉电阻控制位
Bit5(/PD5):使能 P61 引脚的下拉电阻控制位
Bit6(/PD6):使能 P62 引脚的下拉电阻控制位

Bit7(/PD7):使能 P63 引脚的下拉电阻控制位

(4)IOCD 上拉控制寄存器

0:允许内部上拉
1:禁止内部上拉

Bit0(PH0)使能 P60 脚内部上拉电阻控制位
Bit1~Bit7(/PH1~/PH7)分别使能 P61~P67 脚内部上拉电阻控制器
IOCD 为可读写寄存器

 

(5)IOCC(集电极开路控制寄存器)

0:关闭集电极开路功能
1:使能集电极开路功能

Bit0(0D0) 使能 P60 脚集电极开路控制位
Bit1~ Bit7 (0D1~0D7):分别使能 P61~P67 脚集电极开路功能。
IOCC 为可读写寄存器

 

(6)IOCE WTD 控制寄存器

Bit7(WDTE)使能看门狗定时器控制位
0:关闭 WDT
1:使能 WDT
WDTE 为可读写位
Bit6(EIS) P60 脚功能选择位
0:P60 为一般双向 I/0 口
1:P60 为外部中断输入脚.此时 P60 必须设为输入(IOC6.0=1)
Bit4(ROC)使能 R-option 功能位(P50~P51)
0:关闭 R-option 功能
1:使能 R-option 功能
当使用 R-option 的功能时,可在 P50 或 P51 脚对地接 430K 电阻,若有接电阻,则 P50 或 P51 被读成“0”,若不接电阻,则 P50
或 P51 读成“1”。ROC 为读写位
Bit0~3,5 未使用。

(7)IOCF(中断屏蔽寄存器)

0:屏蔽中断
1:允许中断

Bit0(TCIE) TCIF 中断屏蔽位(TCC 溢出中断)
Bit1(ICIE) ICIF 中断屏蔽位(P6 口输入变化中断)
Bit2(EXIE) EXIF 中断屏蔽位(外部中断 P60/INT)

Bit3~7 未使用
当将 IOCF 相应的控制位置“1”、则相应的中断允许,使用“ENI”指令时所有中断被开放,而使用“DISI”指令,则所有中断被
关闭。IOCF 为可读写寄存器。

 

第三章 IO系统

EM78 把 I/O(口 5、口 6)作为一般工作寄存器 R5、R6 来操作,它们为双向、三态输入/输出口,可通过控制寄存器来设置以下功
能,如表 2.6 所示:

 

 

当使用 R-option 功能时,往往地 P0~51 定义为输出脚使用,这样在读取 R-option 功能时
先把 P50、P51 设为输入并使能 R-option 功能,读取后,再关闭 R-option 功能,并把 P50、P51 设回输出,并不影响P50、P51 的 I/O
使用。若外部电阻连接到 P50(P51)作为 R-option 功能,将消耗一些电流,请特别注意。

 

第四章 复位

4.1产生复位原因

EM78X56 的复位由以下情况产生:
·电源上电复位或电压检测器复位(若有电压检测器)
·RESET 脚输入低电平 
·WDT 溢出(当 WDT 使用时) 
复位状态
当单片机检测到复位信号后会持续 18ms 的复位状态。一旦复位产生,芯片将处于下列状态:
·振荡器继续动作或起动 
·程序计数器 PC(R2)被清零,转向复位地址 000H  
·所有 I/O 口脚均被设置为输入模式(高阻态) 
·看门狗定时器和预置分频器被清零 
·当上电时,状态寄存器的高三位被清零(RAM 选 BANKO) 
·除 Bit6(INT 中断使能标志位)外,CONT 寄存器全设为“1” 
·下拉控制寄存器 IOCB 全设为“1”(下拉功能禁止) 
·集电极开路控寄存器 IOCC 全设为“0”(开路功能禁止) 
·上拉控制寄存器 IOCD 全设为“1”(上拉功能禁止) 
·WDT 控制寄存器 IOCE Bit7 设为“1”,Bit1 和 Bit4 设为“0”,即开 WDT,置 P60 为 I/O 口,取消 R-option 功能 
·中断标志寄存器 RF 中的标志位全部清零(Bit0~2) 
·中断屏幕寄存器 IOCF 的中断屏幕位清零(Bit0~2) 
寄存器初始化值汇总表如下: (见参考文档)

 

4.2 外部复位电路

通常有下列几种情况需要加外部复位中路。
1. 当电源上升时间比较长时,通过 RC 电路来保证 VDD 达到最小工作电压时 RESET 脚保持复位状态

其中器件功能及值选择原则:
①R<40K(由于 RESET 吸入电流约 50μA,为保证 RESET 端电压不大于 0.2V) 
②二极管 D 将使电容 C 在 VDD 掉电时能快速彻底放电
③R1 取 100~1K,为限流电阻,用来限制大的放电电流或静电 ESD 对 RESET 的冲击 

2.残存电压保护电路(二种)
有些应用中,例如供电电池在几秒钟内松动后又恢复,此时将可能会在复位脚出现一个小于 Vdd 最小值又不为 0 的残存电压,因而
便复位不正常,以下两种电路将解决此问题,

 

第五章 休眠状态和唤醒


EM78X56 单片机除了正常工作状态外,还有一种休眠状态(或为掉电模式)。通过执行“SLEP”指令,即可进入休眠模式。单片机
的休眠模式可被下列情况唤醒:
①由 RESET 产生的复位信号
②WDT 超时溢出复位(若 WDT 启动)
③Port6 输入变化(若使能 Port6 变化中断)
前两种情况会产生单片机复位,状态寄存器 R3 的 P 和 T 标志可以用来判别是何种复位唤醒。第三种情况要考虑总的中断开启与否
(执行 ENI 或 DISI 指令)决定单片机在唤醒之后是否跳到中断向量,若在执行“SLEP”指令之前:
a.若开中断(ENI),则唤醒后程序跳到中断向量 OO8H 位置
b.若关中断(DISI)则唤醒后程序从“SLEP”指令的下一条指令执行。 
同时进入休眠模式之前,只有②③两种之一可由软件使能。如果: 
(a) Port6 输入变化中断在“SLEP”指令之前使能,则 WDT 必须关闭。因此单片机只能在①③情况下唤醒 
(b) WDT 在“SLEP”指令之前使能,Port6 输入变化中断必须关闭,因此单片机只能在①或②的情况下唤醒。

休眠状态和唤醒
EM78X56 单片机除了正常工作状态外,还有一种休眠状态(或为掉电模式)。通过执行“SLEP”指令,即可进入休眠模式。单片机
的休眠模式可被下列情况唤醒:
①由 RESET 产生的复位信号
②WDT 超时溢出复位(若 WDT 启动)
③Port6 输入变化(若使能 Port6 变化中断)
前两种情况会产生单片机复位,状态寄存器 R3 的 P 和 T 标志可以用来判别是何种复位唤醒。第三种情况要考虑总的中断开启与否
(执行 ENI 或 DISI 指令)决定单片机在唤醒之后是否跳到中断向量,若在执行“SLEP”指令之前:
a.若开中断(ENI),则唤醒后程序跳到中断向量 OO8H 位置
b.若关中断(DISI)则唤醒后程序从“SLEP”指令的下一条指令执行。 
同时进入休眠模式之前,只有②③两种之一可由软件使能。如果: 
(a) Port6 输入变化中断在“SLEP”指令之前使能,则 WDT 必须关闭。因此单片机只能在①③情况下唤醒 
(b) WDT 在“SLEP”指令之前使能,Port6 输入变化中断必须关闭,因此单片机只能在①或②的情况下唤醒。

 1 在上述 a 种情况下,用 Port6 输入变化中断来唤醒单片机,
 2 ; 则下述指令必须在“SLEP”之前执行: 
 3 MOV A , XX000110b ;选择内部 TCC 时钟  
 4 CONTW   
 5 CLR R1 ;清除 TCC 和预分频器  
 6 MOV A, XXXX1110b ;选择 WDT 预分频系数  
 7 CONTW 
 8 WDTC ;清 WDT   
 9 MOV A,OXXXXXXXb ;关 WDT   
10 IOW RE 
11 MOV R6,R6 ;读取 Port6   
12 MOV A,00000X1Xb ;使能 Port6 输入中断  
13 IOW RF   
14 ENT (或 DISI) ;使能(或关闭)总中断  
15 SLEP 
16 NOP17 ;在使能 Port6 输入变化中断之前,必须先读取 Port6(MOVR6,R6),因为输入的变化是通
18 ;过目前的输入和原来 R6 中的内容比较而得出(如上例)。Port6 除了被设为输出状态的引脚
19 ;外,都有因电平改变而中断的特性。 

特别注意:从休眠模式唤醒后,WDT 将被使能,因此,唤醒后的 WDT 工作情况要重新设定.

第六章 中断功能

硬件中断 

EM78X56 系列有下列三种下降沿触发的硬件中断 
①TCC 定时器溢出中断 
②Port6 输入变化中断 
③外部中断(P60/INT 引脚)
中断的控制通过中断屏蔽寄存器 IOC、总中断开启指令 ENI 和关闭指令 DISI 来控制。当有中断产生时,程序指针将指向中断向量
地址 008H,并将当前 PC 压栈,进入中断服务程序,可由 RF 寄存器来查询是何中断源,在离开中断服务程序及使能中断之前,必须清
除 RF 中的中断标志位以免重复中断。同时,中断服务程序中应保护原程序的环境(如:A 内容、标志位等),返回中断时也应恢复原环
境的内容,并开启中断。 
除了 RF 的 ICIF 位外,RF 中的其它位当有中断时标志位都置“1”,而不管中断屏蔽寄存器 IOCF 中相关的屏蔽位状态和 ENI 指令

是否执行。注意:读 RF 结果是 RF 与 IOCF 相与的结果。如图 2.17 所示,为中断产生电路。“RETI”指令是从中断返回并开中断(等于
执行 ENI 指令) 

图 2.17 中断产生电路

软件中断

执行“INT”指令,将产生一个软中断,其中断向量为 001H(地址 002H~007H 预留,必须为 NOP)如下:

 1 ORG 0OOH 
 2 JMP RESET        ;复位地址(000H) 
 3 JMP INT1        ;软中断入口地址(001H) 
 4 NOP           ;(002H)
 5 NOP           ;(003H)
 6 NOP           ;(004H) 
 7 NOP           ;(005H)  
 8 NOP           ;(006H)  
 9 NOP           ;(007H) 
10 JMP INT2         ;硬件中断入口地址(008H)

 

第七章 时钟分频系统

EM78 内置 8 位定时/计数器 TCC 和看门狗定时器、如下图 2.5 所示:

TCC 的时钟可以是内部指令周期时钟 CLK(Fosc/2 或 Fosc/4)或通过 TCC 脚输入的外部脉冲,其计数采用递增方式,从 O0开始计,
当不使用预分频器时,每隔一个指令周期或者有一个外部脉冲时 TCC 会加 1(TCC 响应延时时间为 2 个机器周期),当 TCC 计数至 FFH
(16 进制)时,在下一个计数发生时,将自动清零,并置 TCC 计数器溢出中断位 TCIF 如此往复。当 TCC 使用预分频器时,则外部或
内部信号经过预分频器分频后再输出给 TCC。
Tcc 输入波形图(CLKS=”0”)(见图 2.7)

 

TCC 和预分频器的控制主要由控制寄存器 CONT(Bit0~5)来完成,预分频器的分频系数由 PSR0~PSR2 决定;预分频器是分配给

TCC 或 WDT 使用可由 PAB 位来决定,同一时间预分频器只能给 TCC 或 WDT 其中之一使用。
注意二点;
(1)预分频器分配给 TCC 使用时(PAB=0),所有写入 TCC 的指令都将清除预分频器
(2)当预分频器分配给 WDT 使用时(PAB=1),WDT 和预分频器可被 WDTC 和 SLEP 指令清零。
看门狗定时器 WDT 是一片内自振荡式 RC 振荡器,即使外部振荡器被关闭(即工作在休眠模式),WDT 也一直在计数。当 WDT 被使
能,无论是在工作模式或休眠模式,若 WDT 超时,都将导致单片机复位,因此 WDT 主要用来防止单片机系统失控,一般 WDT 基本溢出周
期约 18ms(PAB=“0”),最大溢出周期约 2.3S(PAB=“1”)。在正常情况下,当 WDT 溢出之前,须通过 WDTC 指令来对 WDT 清零以防产
生复位。WDT 的工作状态由寄存器 CONT 中的 PAB、PSR2~PSRO 位,IOCE 的 WDTE 位(IOCE.7)、OTP 型 EM78X56 的结构选择寄存器 ENWDTB
位来控制(烧写芯片时设定)!

TIPS:『对于精简型的IC,很多功能是不能够动态改变的,所以烧写芯片时的配置很重要』

posted @ 2014-06-09 23:28  sunnycs  阅读(7681)  评论(0编辑  收藏  举报