Archive for 七月, 2009

30

作者:魏永红 张勉 赵捷 来源:单片机与嵌入式系统应

摘要:介绍美国Cygnal公司生产的C8051F02X系列单片机的外部存储器接口、I/O端口配置方法和有关注意的问题;在此基础上列举两个关于EMIF、I/O的配置应用。

关键词:C8051F02X EMIF I/O 交叉开关

美国Cygnal公司C8051F02X系列单片机是集成在一起芯片上的混合信号系统级单片机。该单片机具有32/64位数字I/O端口(引脚)、25MIPS高速流水线式8051微控制器内核、64KB在系统可编程Flash存储器、 64KB地址的外部存储器接口、4352(4096+256)B片内RAM、各自独立的SPI、SMBUS/I2C和两个UART串行接口等特点。其最突出的优点就是,通过设置交叉开关寄存器控制片内数字资源映射到外部I/O引脚,这就允许用户根据自己的特定应用,选择通用I/O端口和所需要数字资源。当然,在设置数字交叉开关寄存器时,应该首先考虑EMIF的配置问题。其配置不同,将导致单片机通过不同的端口(低或高)访问片外存储器和存储器映像的 I/O部件,以及数字交叉开关是否分配外部设备给P0.7(WR)、P0.6(RD)、P0.5(ALE)引脚。(如图EMIF设置为多路器模式。)

1 EMIF和I/O配置方法

1.1 外部存储器接口(EMIF)配置

C8051F02X系列MCU有4KB的RAM可以只映射在片内,也可以映射在64KB外部数据存储器地址空间,还可以同时映射到片内和片外(4KB地址以内在片内存储器空间访问,4KB以上经过EMIF访问)三种方式。对于后两种存储器工作模式,需通过外部存储器接口使用MOVX和DPTR或MOVX和R0(R1)指令访问外部数据存储器和存储器映像的I/O设备。但是对于高8位地址,必须由外部存储器接口寄存器(EMI0CN)提供;而EMIF可将外部数据存储器接口映射到低端口(P0~P3)(F020/2/3系列)或高端口(P4~P7)(F020/2系列),以及配置为复用模式或非复用模式等。配置外部存储器接口的步骤下:

*设置EMIF为低端口或高端口;

*设置EMIF为复用模式或非复用模式;

*选择存储器模式(片内方式、无块选择分片方式、带块选择分片方式、片外方式);

*设置片外存储器或片外设备时基;

*选择相关I/O端口(寄存器PnMOUT、P74OUT)的输出模式。

外部存储器接口(EMI)映射为低端口(P0~P3)即PRTSEL位(EMIOCH.5)置为0,如PRTSEL位置为1,EMI映射为高端口(P4~P7)(适用于P020/2系列)。此时如果EMIFLE位(XBR2.5)被设置为逻辑1,那么,数字交叉开关将不分配外部设备给P0.7(WR)、P0.6(RD)、P0.5(ALE)引脚(如果EMI设置为多中模式);如果EMIFLE位设为0,那么P0.7、P0.6、P0.5引脚的功能将由交叉开关寄存器或端口锁存器来决定。外部存储器接口只有执行片外 MOVX指令期间使用相关的端口引脚,一旦MOVX指令执行完毕,端口锁存器或交叉开关寄存器又重新恢复对端口引脚的控制。

1.2 I/O端口配置

数字交叉开关译码器按照被使用设备的优先权顺序将端口P0~P7的引脚分配给外部数字外设。端口引脚的分配是从P0.0开始,没有被使用的引脚可作为一般通用的I/O引脚,通过读写相应的端口数据寄存器访问。在数字交叉开关寄存器XBR0、 XBR1、XBR2中将相应的内部数字资源使能位置1,数字资源就映射到I/O端口引脚。例如:将UART0EN位(XBR0.2)置为1,那么,TX0 和RX0引脚被分别映射到P0.0和P0.1。因为UART0具有最高的优先权,故在它的使能位置1时,TX0和RX0引脚总是被映射到P0.0和 P0.1。如果一个数字外设的使能位没有置1,它的端口的I/O引脚上是不能被访问的。数字交叉开关寄存器被正确配置以后,通过置XBARE (XBR2.4)位1来使能交叉开关。在交叉开关使能后。P0~P3(F020/1/2/3系列)或P0~P7(F020/2系列)输出驱动自动被禁止,从而避免了交叉开关寄存器和其它寄存器写入时在端口引脚上产生的冲突。注意:对于由交叉开关分配的输入引脚(如T0、INT0、RX0等),其输出驱动自动被禁止,因此,端口数据寄存器和PnMDOUT寄存器的值对这些引脚的状态没有影响。

在给单片机内部数字资源分配了相应的I/O引脚后,还应设置其输出方式:推挽和漏极开路。 PnMDOUT寄存器各位决定P0~P7端口引脚的输出方式,某一位置1,则该位为推挽输出方式;置0,为漏极开路输出方式。PnMDOUT寄存器控制端口引脚的输出方式,而与交叉开关是否把端口引脚分配给数字外设无关。注意:对于由交叉开关分配的输入引脚(如:SDA、SCL、RX0、RX1等)自动配置为漏极开路方式,而与相应的端口配置寄存器的设置无关。但对于一般的I/O引脚配置为输入时,与这一引脚相关的PnMDOUT设置为漏极开路,同时端口配置寄存器位必须清0。

尽管在C8051F021/3中P4、P5、P6和P7没有对应的引脚,但端口数据寄存器仍然存在,并可为软件所用。由于数字输入通路保持活动状态,所以建议不要将这些引脚处于“悬空”状态,避免因输入浮空为无效逻辑电平而导致不必要的功率消耗。下面的三种方法可以防止这种情况的发生:

①通过将WEAKPUD(XBR2.7)设置为逻辑0来使能弱上拉部件;

②通过写P74OUT=0xFF,将P4、P5、P6和P7的输出方式配置为推挽方式;

③通过向端口数据寄存器写0,将P4、P5、P6和P7的输出状态强制为逻辑0,即P4=0×00、P5=0×00、P6=0×00、P7=0×00。

2 EMIF和I/O端口配置应用

下面应用基于C8051F021/3单片机,也适应于C8051F020/2单片机。

*假设有一应用需要配置UART0、SMBus、UART1、INT0和INT1(8位),存储器的工作模式为片内方式;另外,P1端口作为4×4键盘的接口,P2、P3口作为通用的I/O端口。该应用的EMIF和I/O端口配置如下:

①设EMI的配置寄存器FMI0CF=0×00,因为本应用无扩展存储器和存储器映像的I/O设备,即存储器工作模式为片内方式;同时,将EMIFLE(XBR2.5)设置为0,这样P0.7、P0.5的引脚将由交叉开关寄存器或端口锁存器来决定,不被交叉开关跳过。

②按UART0EN=1、UART1EN=1、SMB0EN=1、INT0E=1、INT1E=1和EMIFLE=0,设置XBR0、XBR1、XBR2为XBR0=0×05、XBR1=0×14、XBR2=0×04。

③配置P1端口为数字输入模式,即P1MDIN=0xFF;P1端口低四位为键盘输出,高四位为输入,即P1MDOUT=0×0FH(P1.0~P1.3为推挽方式,P1.4~P1.7为漏极开路方式),P1|=0xF0。

④使能交叉开关,即XBARE=1、XBR2=0×44。

因为EMIFLE=0,交叉开关译码器将不跳过P0.7、P0.6、P0.5引脚,所以按优先极交叉开关译码表进行分配。UART0具有最高优先极,故P0.0分配给TX0,P0.1分配给RX0;SMBus的SDA、SCL分别分配在 P0.2、P0.3引脚;UART1的TX1、RX1分别分配在P0.4、P0.5引脚;INT0分配在P0.6引脚;INT1分配在P0.7引脚。

⑤设置UART0的TX0引脚(TX0、P0.0)、UART1的TX1引脚(TX1,P0.4)为推挽输出方式,即P0MDOUT=0×11。RX0、SDA、SCL、RX1、INT0和INT1是由交叉开关分配输入的,因此与其端口配置寄存器的值无关。

⑥P2、P3作为一般I/O端口初始化为输入状态,即P2MDOUT=0×00、P2=0xFF和P3MDOUT=0×00、P3=0xFF。

引脚功能如表1所列。
表1

tab1

*设现有一应用需要UART0、SMBus、UART1、INT0和INT1共8位。另外,存储器工作方式为带块选择的分片方式,EMIF为复用模式、低端口,并配置P1.2、P1.3、P1.4为模拟输入模式,通过这三个引脚利用ADC1 来测量输入电压。具体配置步骤如下:

①配置EMI为复用模式和工作在低端口,即PRTSEL=0,EMD2=0;存储器模式为带块选择的分片方式,即EMD1~0=10;ALE时基设为2个SYSCLK周期,即EALE1~0=01。

②按UART0EN=1、UART1EN=1、SYB0EN=1、INT0E=1、INT1E和EMIFLE=1,设置XBR0、XBR1、XBR2为XBR0=0×05、XBR1=0×14、XBR2=0×42。

③配置P1端口的P1.2、P1.3、P1.4为模拟输入模式,这些引脚对应的位在P1MDIN寄存器中置为0,即P1MDIN=0xE3。

④使能交叉开关,即XBARE=1、XBR2=0×46。

UART0具有最高优先权,故P0.0分配给TX0,P0.1分配给RX0;依次按照优先极分配表,SMBus的SDA、SCL分配在P0.2、P0.3引脚;UART1的TX1、RX1分配在P0.4、P1.0引脚。因为EMI工作在低端口且为复用模式,交叉开关译码器将不分配内部数字资源给P0.7(WR)、P0.6(RD)、P0.5(ALE),所以,RX1按次序分配在P1.0引脚, INT0分配在P1.1引脚。由于P1.2、P1.3、P1.4被配置为模拟输入,交叉开关跳过这些引脚,故INT1分配在P1.5引脚。在执行片外 MOVX指令时,EMI将驱动P2和P3端口。

⑤配置UART0的TX0引脚(TX0,P0.0)、UART1的TX1引脚(TX1,P0.4)、P0.7(WR)、P03.6(RD)、P0.5(ALE)为推挽输出方式,即P0MDOUT=0xF1。

⑥配置EMIF的端口(P2、P3)输出为推挽方式,即P2MDOUT=0xFF和P3MDOUT=0xFF。

⑦通过设置P1MDOUT=0×00(输出为开漏极)和P1=0xFF(P1为高阻状态)来禁止P1.2、P1.3、P1.4三个模拟输入引脚的输出驱动器。

引脚功能如表2所列。
表2

tab2

3 总结

C8051F02X具有低功耗(3V工作电压)、大容量存储器、高速度、高集成度等特点,广泛应用于工业控制、测量系统、报警系统。该单片机具有双串行口,更适合于定位和报警系统的前端,从而提高移动终端集成度和降低功耗。

Category : 8051f020 | Blog
29

有的人用文章名做固定链接(%postname%),但是汉字标题出来后,地址栏的链接就变为一长串符号了,减少了可读性。经过多方取经,终于知道了不用插件只需简单的修改两句代码就可以支持汉字链接了。

打开wp-includes文件夹,找到classes.php,修改其中的两行,如下。
下面是截取第152行到159行(WordPress 2.8.2版本,其他版本可能位置不同,可用Ctrl+F查找$pathinfo = $_SERVER['PATH_INFO']来确定位置),其中改变的是153行、158行。

152
153
154
155
156
157
158
159
if ( isset($_SERVER['PATH_INFO']) )
	$pathinfo = $_SERVER['PATH_INFO'];
else
	$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = $_SERVER['REQUEST_URI'];
$req_uri_array = explode('?', $req_uri);

修改为:

152
153
154
155
156
157
158
159
if ( isset($_SERVER['PATH_INFO']) )
	$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'],"UTF-8","GBK");
else
	$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'],"UTF-8","GBK");
$req_uri_array = explode('?', $req_uri);

修改后,保存,上传。OK!已经可以支持汉字链接了。

Category : WordPress | Blog
29

共用一个WordPress
可以共用同一个数据库
以建两个为例

1.域名要求

域名domain1.com和domain2.com都指向到WordPress的主机空间。

2.修改wp-config.php文件,添加一个条件判断
下面只是修改的数据库部分,其他的不变

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
if($_SERVER["HTTP_HOST"]=="www.domain1.com" || $_SERVER["HTTP_HOST"]=="domain1.com"){
 
// ** MySQL设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'WoodFeed_db');
 
/** MySQL数据库用户名 */
define('DB_USER', 'WoodFeed_user');
 
/** MySQL数据库密码 */
define('DB_PASSWORD', 'blog.woodfeed.com');
 
/** MySQL主机名 ,如果和空间主机不同,要修改主机名*/
define('DB_HOST', 'mysql.woodfeed.com');
 
/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');
 
/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');
 
/**#@+ * 身份密匙设定。 * * 您可以随意写一些字符 * 或者直接访问 {@link https://api.wordpress.org/secret-key/1.1/ WordPress.org Secret-key页面将自动为您生成,任何修改都会导致cookies失效,所以用户必须重新登录} * * @since 2.6.0 */
define('AUTH_KEY', '替换该字符串');
define('SECURE_AUTH_KEY', '替换该字符串');
define('LOGGED_IN_KEY', '替换该字符串');
define('NONCE_KEY', '替换该字符串');
 
/**#@-*/ /** * WordPress数据表前缀。 * * 如果您有在同一数据库内安装多个 WordPress 的需求,请为每个 WordPress 设置不同的数据表前缀。 * 前缀名只能为数字、字母加下划线。 */
$table_prefix = 'wp_';
 
/** * WordPress语言设置。默认为英语。 * * 本项设定能够让 WordPress 显示您需要的语言。wp-content/languages 内应放置同名的 .mo 语言文件。 * 要使用 WordPress 简体中文界面,只需填入 zh_CN。 */
define ('WPLANG', 'zh_CN');
 
}else if($_SERVER["HTTP_HOST"]=="www.domain2.com" || $_SERVER["HTTP_HOST"]=="domain2.com"){
 
define('DB_NAME', 'woodfeed_db');
define('DB_USER', 'woodfeed_user');
define('DB_PASSWORD', 'woodfeed.com');
define('DB_HOST', 'mysql.woodfeed.com');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('AUTH_KEY', '替换该字符串');
define('SECURE_AUTH_KEY', '替换该字符串');
define('LOGGED_IN_KEY', '替换该字符串');
define('NONCE_KEY', '替换该字符串');
 
/** 如果要在一个数据库中建立多个WordPress,要修改表头,如下 */
$table_prefix = 'wb_';
 
/**默认为English,不填为English */
define ('WPLANG', '');
}

ps:
1.使用同一个数据库要修改 $table_prefix
2.将上面MySQL主机名该为由主机提供的,和主机一样使用 localhost
3.分别使用domain1.com和domain2.com安装WordPress
4.安装成功以后,需要在 设置->杂项 中设置两个站点所上传文件保存的目录,否则两个站点上传的文件将默认存放在wp-content/uploads中。

Category : WordPress | Blog
23

本简易智能电动车跷跷板分为电动车智能行驶和跷跷板两个主要部分,都以单片机为控制核心,根据位置反馈传感器、红外对射、反射传感器、光电传感器以及金属探测传感器来探测信号。电动车采用前轮转动方向控制,后轮正向逆向行驶。整机使用双电源分别给电机部分、传感器和芯片部分供电。

其中电动车智能行驶部分可以进行自动循迹,变速行驶,记忆状态,车辆弯道寻迹运行,绕过障碍物行驶,准确进入车库并停车,实时探测金属薄片存储相关信息并发出声光信号,以及测量全程时间、全程路程等功能。采用液晶显示板实时显示金属薄片相关信息以及全程时间和全程路程等,大幅度降低了功耗。

电动车跷跷板部分可以循迹上翘翘板和沿板行使,并找到跷跷板的水平位置。当跷跷板一端放有配重时,小车能自动行驶到与之相对的平衡位置,并随配重的移动中心调解重心。并能采用液晶显示或采用语音播报所测量的行程时间和距离。电动车具备前进、倒车、停车和刹车功能。

Category : 电子设计 | Blog
22

2007全国电子设计大赛F题

电动车跷跷板(F题)

一、任务

image001

设计并制作一个电动车跷跷板,在跷跷板起始端A一侧装有可移动的配重。配重的位置可以在从始端开始的200mm~600mm范围内调整,调整步长不大于50mm;配重可拆卸。电动车从起始端A出发,可以自动在跷跷板上行驶。电动车跷跷板起始状态和平衡状态示意图分别如图1和图2所示。

image002

二、要求

1.基本要求

在不加配重的情况下,电动车完成以下运动:

(1)电动车从起始端A出发,在30秒钟内行驶到中心点C附近;

(2)60秒钟之内,电动车在中心点C附近使跷跷板处于平衡状态,保持平衡5秒钟,并给出明显的平衡指示;

(3)电动车从(2)中的平衡点出发,30秒钟内行驶到跷跷板末端B处(车头距跷跷板末端B不大于50mm);

(4)电动车在B点停止5秒后,1分钟内倒退回起始端A,完成整个行程;

(5)在整个行驶过程中,电动车始终在跷跷板上,并分阶段实时显示电动车行驶所用的时间。

2.发挥部分

将配重固定在可调整范围内任一指定位置,电动车完成以下运动:

image003

 

 

(1)将电动车放置在地面距离跷跷板起始端A点 300mm以外、90°扇形区域内某一指定位置(车头朝向跷跷板),电动车能够自动驶上跷跷板,如图3所示:

(2)电动车在跷跷板上取得平衡,给出明显的平衡指示,保持平衡5秒钟以上;

(3)将另一块质量为电动车质量10%~20%的块状配重放置在A至C间指定的位置,电动车能够重新取得平衡,给出明显的平衡指示,保持平衡5秒钟以上;

(4)电动车在3分钟之内完成(1)~(3)全过程。

(5)其他。

三、说明

(1)跷跷板长1600mm、宽300mm,为便于携带也可将跷跷板制成折叠形式。

(2)跷跷板中心固定在直径不大于50mm的半圆轴上,轴两端支撑在支架上,并保证与支架圆滑接触,能灵活转动。

(3)测试中,使用参赛队自制的跷跷板装置。

(4)允许在跷跷板和地面上采取引导措施,但不得影响跷跷板面和地面平整。

(5)电动车(含加在车体上的其它装置)外形尺寸规定为:长≤300mm,宽≤200mm。

(6)平衡的定义为A、B两端与地面的距离差d=∣dA-dB∣不大于40mm。

(7)整个行程约为1600mm减去车长。

(8)测试过程中不允许人为控制电动车运动。

(9)基本要求(2)不能完成时,可以跳过,但不能得分;发挥部分(1)不能完成时,可以直接从(2)项开始,但是(1)项不得分。

四、评分标准

 

 

image

Category : 电子设计 | Blog
22

为什么不一样呢?因为天明了,又黑了,然后又亮了!——日全食。

传说中五百年一次的日全食出现了。这是本世纪持续时间最长的一次日全食,全食带长1万多公里,平均宽度250公里,全食时间最长的达6分钟。

54a4b12a752db38fd52b11e93b940856 19452581

6175dc080f7512db6ba36158b793b80c

日食,又作日蚀,是一种天文现象,只在月球运行至太阳与地球之间时发生。这时,对地球上的部分地区来说,月球位于地球前方,因此来自太阳的部分或全部光线被挡住,因此看起来好像是太阳的一部分或全部消失了。日食只在朔,即月球与太阳呈现合的状态时发生。
日食是相当罕见的现象,在四种日食(日偏食,日环食,全环食,日全食)中较罕见的是日全食,因为唯有在月球的本影投影在地球表面时,在该区域的人才能够观测到日食。日全食是一种相当壮丽的自然景象,所以时常吸引许多游客特地到海外去观赏日全食的景象。例如,在1999年发生在欧洲的日全食,吸引了非常多观光客特地前去观赏,也有旅行社推出专门为这些游客设计的行程。
古时,人类缺乏天文学知识,以为日食是肇因于天狗食日,或象征灾难的降临,而在日食时举行仪式。但在现代社会中,日食的这层意义已逐渐为人们所抛弃。
这次日全食发生于2009年7月22日,而下一次的日全食将会于2039年发生。

然而昆明地区没能看到日全食的一幕,只能看到日偏食了。

Category : 生活随记 | Blog
21

        哎,终于发现了网民的力量是多么的强大啊!想N多域名,都被注册了!至到WoodFeed的时候,终于发现没被注册。赶紧先注册了再说,管他好坏呢!

        注册了,想个中文网站名吧!

        想来想去,找来找去,就木客网吧!为什么选木客网呢?

        据《异物志》记载:“木客鸟,大如鹊,数千百头为群,飞集有度,不与众鸟相厕,人俗云‘木客’。”故木客是一鸟。
        又有明‧邝露《赤雅》︰“予家罗浮有鸟,各为一色,五色毕集,必兆嘉客,鸟名木客。”故木客代表着将有嘉客到来。

        故根据其意境,取木客作为网站名。

Category : 生活随记 | Blog