隐形的翅膀――有感于一封客户来信56481877
前几天,公司邮箱里一封客户来信,在公司上下引起了很大震动,在同事的推荐下,我抽空仔细拜读了此文,阅后,心生感动,赞叹之余,似乎无从表达我愉悦的心绪,伯牙遇子期,绝非易事,这么多年来,我终于遇到了知音!遇到了一位真正懂得L结构单片机好处的优秀工程师!
也许有网友会拍砖,说他是我请来的枪手或是托儿,在这儿我可以很负责任地告诉朋友们,不是这样的!他的文章,完全是使用LSx051芯片后发自内心的一些感想,所以我很坦然,套用一句流行语吧:人可以不高尚,但不能无耻。
其实,LSx051确实是一款全球首款“双核”单片机,由于担心客户不敢冒风险使用新体系结构的新产品,所以,在营销策略上,我没有提出这个概念,可真的没想到,由
LSx051的双核,是她的两只翅膀,使她能够在单片机的天空上,傲视群雄,展翅飞翔,由于没人能看到、用到,现在这还只是两只隐形的翅膀,我相信,是金子总会发光的,随着时间的推移,会有更多的象许先生这样的真正懂LSx051芯片的人出现,到那时,LSx051一定会实现我的梦想:中国人,用“中国芯”!
我期待着那一天,胜利的那一天!
最后,感谢各位网友的关心,LSx051在上市后仅半年多的时间里,有了一定的销售量,而且早已突破了月销售万片,但这还远远不够。我盼望着能有更多的国人、更多的国内企业使用,我会继续努力的!
对网友们的支持、关注与厚爱,再次表示衷心的感谢!
怀着倍感亲切与欣慰的心情,现全文转载许先生的来信,如下:
价格不到3元!国产“双核”51单片机—LS2051,闪亮登场!
作者:许意义 2008.6.28
一次偶然的机会,看到一款国产的“双核”51单片机—LS2051,价格不到3元!
厂商样本上介绍其指令系统与MCS-51 兼容,内部功能、引脚功能、引脚排列以及引脚的电气特性与AT89C2051 全兼容,可直接替换AT89C2051 以及与其兼容的芯片。
LS2051 还支持独立或关联的两道程序(类拟双核)同时运行。执行第1 道程序的性能是AT89C2051 的1.27 倍,第1 道和第2 道程序同时运行时的处理能力最高可达到AT89C2051 的2.55 倍。
经向生产厂商申请了LS2051 样片和下载器,收到后烧录程序,上机试用,性能稳定,未发现不兼容现象。
产品应用成功后,怀着好奇的心理,重点研究其特有的“双核”特点,两道程序同时运行?有点不可思异。在网上搜索后,发现这方面的资料几乎是空白,于是自己编了点应用程序,下载后测试其性能,以下是一些使用总结。
1、好多中高挡的单片机硬件自带XXX 功能,LS2051 不带这些功能,这些功能用单片机大多都能模拟,但有些功能费时,有些功能不能分时操作,故一般单片机软件难于胜任某些功能,只能靠硬件来解决,LS2051 特有的“双核”特性,两道程序可同时运行。各管各的,互不干涉,可用其中的一道程序来模拟某些硬件功能,有些功能只有高挡单片机才有,如正交编码信号输入,16位ADC 模数转换等等。
2、调试时用Keil C51,但厂商未提供第二道程序使用的头文件及库函数,为方便使用,我自已编了一个。当主程序为C语言时,头文件为ls4051.h,二道程序使用的库函数文件原型为astart_c.a51(未编译),可直接调用。当主程序为汇编语言时,头文件为ls4051_asm.inc。
3、第二道处理引擎设置独立的ACC、B、DPTR、PSW、R0~R7 和SP 特殊功能寄存器(这些特殊功能寄存器初始化值全部为0),但第1 道所属的通用寄存器为32 个(分为4个区域),而第2 道所属的通用寄存器为8 个(只有一个区域)。堆栈级数为8 级硬件堆栈(SP初始化值为0),因此,在第2 道程序的设计中要考虑不能过多的压栈。
4、由于LS2051 特有的第2 道处理引擎,使芯片的中断处理比AT89C2051 更加灵活和高效。若第1 道的中断使能EA 打开,而第2 道的中断使能AEA 未打开,那么,中断由第1 道处理;若第1 道和第2 道中断使能都打开,且第2 道应用程序未启动或没有第2 道应用程序,那么,两道都可以执行中断处理,这由硬件自动完成,不需用户考虑;若第1 道中断使能关闭,而第2 道中断使能打开,且第2 道应用程序未启动或没有第2 道应用程序,那么,由第2 道处理引擎执行中断处理,这由硬件自动完成,不需用户考虑。
5、第2 道程序一旦被启动,则不能被任何事件打断。
6、若同时使用两道程序(含中断程序使用第二道程序),特别要注意的是,由于二道程序处理引擎分别设置独立的ACC、B、DPTR、PSW、R0~R7 和SP 特殊寄存器,在传递参数时,不能使用这些特殊寄存器来传递,否则结果可能为不可预知的,应使用其他的公共资源来传递,同时要考虑使用公共资源时可能发生的冲突问题。
7、与第2 道处理引擎相关的跳转指令,指令及跳转地址必须全部为第一页(000H-0FFH),在C语言中,编译程序自动安排程序地址,不需用户考虑。但用汇编编写程序时,可适当调整程序前后位置,满足上述要求。
8、P1 和P3 口在大于40KHz 的应用时,需在外部接4.7K 左右的上拉电阻。这是目前版本硬件上和AT89C2051 有点区别的地方,听厂商说,下批生产时改进。
9、第2 道处理引擎增加的相关指令,为方便使用,特编写了宏定义和库函数,定义如下(第2 道指令全部以A开头):
厂商样本上介绍其指令系统与MCS-51 兼容,内部功能、引脚功能、引脚排列以及引脚的电气特性与AT89C2051 全兼容,可直接替换AT89C2051 以及与其兼容的芯片。
LS2051 还支持独立或关联的两道程序(类拟双核)同时运行。执行第1 道程序的性能是AT89C2051 的1.27 倍,第1 道和第2 道程序同时运行时的处理能力最高可达到AT89C2051 的2.55 倍。
经向生产厂商申请了LS2051 样片和下载器,收到后烧录程序,上机试用,性能稳定,未发现不兼容现象。
产品应用成功后,怀着好奇的心理,重点研究其特有的“双核”特点,两道程序同时运行?有点不可思异。在网上搜索后,发现这方面的资料几乎是空白,于是自己编了点应用程序,下载后测试其性能,以下是一些使用总结。
1、好多中高挡的单片机硬件自带XXX 功能,LS2051 不带这些功能,这些功能用单片机大多都能模拟,但有些功能费时,有些功能不能分时操作,故一般单片机软件难于胜任某些功能,只能靠硬件来解决,LS2051 特有的“双核”特性,两道程序可同时运行。各管各的,互不干涉,可用其中的一道程序来模拟某些硬件功能,有些功能只有高挡单片机才有,如正交编码信号输入,16位ADC 模数转换等等。
2、调试时用Keil C51,但厂商未提供第二道程序使用的头文件及库函数,为方便使用,我自已编了一个。当主程序为C语言时,头文件为ls4051.h,二道程序使用的库函数文件原型为astart_c.a51(未编译),可直接调用。当主程序为汇编语言时,头文件为ls4051_asm.inc。
3、第二道处理引擎设置独立的ACC、B、DPTR、PSW、R0~R7 和SP 特殊功能寄存器(这些特殊功能寄存器初始化值全部为0),但第1 道所属的通用寄存器为32 个(分为4个区域),而第2 道所属的通用寄存器为8 个(只有一个区域)。堆栈级数为8 级硬件堆栈(SP初始化值为0),因此,在第2 道程序的设计中要考虑不能过多的压栈。
4、由于LS2051 特有的第2 道处理引擎,使芯片的中断处理比AT89C2051 更加灵活和高效。若第1 道的中断使能EA 打开,而第2 道的中断使能AEA 未打开,那么,中断由第1 道处理;若第1 道和第2 道中断使能都打开,且第2 道应用程序未启动或没有第2 道应用程序,那么,两道都可以执行中断处理,这由硬件自动完成,不需用户考虑;若第1 道中断使能关闭,而第2 道中断使能打开,且第2 道应用程序未启动或没有第2 道应用程序,那么,由第2 道处理引擎执行中断处理,这由硬件自动完成,不需用户考虑。
5、第2 道程序一旦被启动,则不能被任何事件打断。
6、若同时使用两道程序(含中断程序使用第二道程序),特别要注意的是,由于二道程序处理引擎分别设置独立的ACC、B、DPTR、PSW、R0~R7 和SP 特殊寄存器,在传递参数时,不能使用这些特殊寄存器来传递,否则结果可能为不可预知的,应使用其他的公共资源来传递,同时要考虑使用公共资源时可能发生的冲突问题。
7、与第2 道处理引擎相关的跳转指令,指令及跳转地址必须全部为第一页(000H-0FFH),在C语言中,编译程序自动安排程序地址,不需用户考虑。但用汇编编写程序时,可适当调整程序前后位置,满足上述要求。
8、P1 和P3 口在大于40KHz 的应用时,需在外部接4.7K 左右的上拉电阻。这是目前版本硬件上和AT89C2051 有点区别的地方,听厂商说,下批生产时改进。
9、第2 道处理引擎增加的相关指令,为方便使用,特编写了宏定义和库函数,定义如下(第2 道指令全部以A开头):
在C语言中使用的宏定义和库函数
/*------------------------------------------------
与并发程序相关的子程序及宏定义
------------------------------------------------*/
sbit AEA = 0xAE; /* 第2 道中断总使能 */
void astart(void); // 启动并发程序,amain() 为并发程序(第二道程序)的入口地址
void aend(void); // 并发程序(第二道程序)结束
void anmwiat(void); // 若同步标志为0,则等待,否则清同步标志M为0,继续运行程序
void amwiat(void); // 若同步标志为1,则等待,否则置同步标志M为1,继续运行程序
void aclrm(void); // 清同步标志M为0
#define asetbm() A_M = 1; // 置同步标志M为1
/*------------------------------------------------
位传送补丁程序,用于某位赋值给另一位,替代 y=x;目前版本存在的bug,听厂商说,下批生产时改进。
------------------------------------------------*/
#define bmov(y,x) if ( ##x == 1) {##y = 1;} else {##y = 0;} // 位传送补丁程序 y=x;
/*------------------------------------------------
与并发程序相关的子程序及宏定义
------------------------------------------------*/
sbit AEA = 0xAE; /* 第2 道中断总使能 */
void astart(void); // 启动并发程序,amain() 为并发程序(第二道程序)的入口地址
void aend(void); // 并发程序(第二道程序)结束
void anmwiat(void); // 若同步标志为0,则等待,否则清同步标志M为0,继续运行程序
void amwiat(void); // 若同步标志为1,则等待,否则置同步标志M为1,继续运行程序
void aclrm(void); // 清同步标志M为0
#define asetbm() A_M = 1; // 置同步标志M为1
/*------------------------------------------------
位传送补丁程序,用于某位赋值给另一位,替代 y=x;目前版本存在的bug,听厂商说,下批生产时改进。
------------------------------------------------*/
#define bmov(y,x) if ( ##x == 1) {##y = 1;} else {##y = 0;} // 位传送补丁程序 y=x;
在汇编语言中使用的宏定义和宏指令
sbit AEA = 0AEH ; 第2 道中断总使能
ASTART addr8 ; 启动并发程序,addr8 为并发程序(第二道程序)的入口地址。
AJNMCM addr8 ; 若同步标志为1,则清同步标志为0,PC=PC+1;否则PC= addr8。
AJMSM addr8 ; 若同步标志为0,则置同步标志为1,PC=PC+1;否则PC= addr8。
ASETBM ; 表示同步标志置1。
ACLRM ; 表示同步标志清0。
AEND ; 并发程序(第二道程序)结束。
BMOV bit_out,C ; 宏操作指令(补丁程序,目前版本存在的bug,替代 MOV bit_out,C 指令)
sbit AEA = 0AEH ; 第2 道中断总使能
ASTART addr8 ; 启动并发程序,addr8 为并发程序(第二道程序)的入口地址。
AJNMCM addr8 ; 若同步标志为1,则清同步标志为0,PC=PC+1;否则PC= addr8。
AJMSM addr8 ; 若同步标志为0,则置同步标志为1,PC=PC+1;否则PC= addr8。
ASETBM ; 表示同步标志置1。
ACLRM ; 表示同步标志清0。
AEND ; 并发程序(第二道程序)结束。
BMOV bit_out,C ; 宏操作指令(补丁程序,目前版本存在的bug,替代 MOV bit_out,C 指令)
下面为一些使用第2 道处理引擎编写的实用子程序
aie_c文件夹: 两道同时执行中断处理,C语言实例
arun_c文件夹: 同时执行两道程序,C语言实例
abs文件夹: 正交编码信号输入(4线分),混合编程实例
adc文件夹: 8位ADC模数转换,混合编程实例
adc16文件夹: 高精度16位ADC模数转换,混合编程实例
exp_io文件夹: 扩展8位输入口P4,8位输出口P5,混合编程实例
key_aio文件夹: 单根I/O口扩展多个键盘,混合编程实例
key_int文件夹: 扩展8路键盘中断,混合编程实例
wdt文件夹: 看门狗,混合编程实例
pwm_a51文件夹: 8位PWM,汇编语言实例
hpwm_a51文件夹:高精度8位PWM,汇编语言实例
aie_c文件夹: 两道同时执行中断处理,C语言实例
arun_c文件夹: 同时执行两道程序,C语言实例
abs文件夹: 正交编码信号输入(4线分),混合编程实例
adc文件夹: 8位ADC模数转换,混合编程实例
adc16文件夹: 高精度16位ADC模数转换,混合编程实例
exp_io文件夹: 扩展8位输入口P4,8位输出口P5,混合编程实例
key_aio文件夹: 单根I/O口扩展多个键盘,混合编程实例
key_int文件夹: 扩展8路键盘中断,混合编程实例
wdt文件夹: 看门狗,混合编程实例
pwm_a51文件夹: 8位PWM,汇编语言实例
hpwm_a51文件夹:高精度8位PWM,汇编语言实例
LS2051 的生产厂商是湖南华芯公司,其他资料可到他们网站上下载,网址:www.hochips.com
欢迎交流使用心得,作者的e-mail:shyl888@126.com
数据正在载入中..
