MCUsystem 介绍
默认路径:
D:\MCU51\
Version:MS1.01-2003.7.17
修改:增加ASCII.C的一个ASCI码(7F),用于虚拟按键用
Version:MS1.10-2003.9.14
更改系统结构,便于打包
Version:MS1.11-2003.9.15
统一标准风格。
Version:MS1.21-2003.9.29
修改UART串口的命令解析程序,修改RTC的pcf8563中断部分。
Version:MS1.22-2003.10.4
精简IIC和smart_timer代码,添加define.h的宏定义。
Version:MS1.23-2003.10.7
修改system.c里的消息堆栈的宏定义
Version:MS1.24-2003.11.5
增加ii.c函数,支持对eeprom的打包
Version:MS1.25-2004.3.7
增加由PLD或者GPIO输出的模拟UART,在6个CLOCK下速度为57.6K
Version:MS1.26-2004.12.13
增加消息的优先级功能,消息类型的前4位为消息的优先级,后4位为消息的类型
说明文档
1: 中断响应问题,当在中断关闭时有一个中断过来,则系统会将它保存在中断
标记位上,当中断开启时才开始执行这个保存在标记位上的中断,所以中断
系统只能保持一个中断, EA跟各个独立的中断控制位在这个问题上的功能
是一样的.例子程序为:
EA=0; //Time=0
ES=0;
have Uart interrupt //Time=1;
don't execute Uart interrupt;
EA=1; //Time=2;
ES=1;
execute Uart interrupt; //Time=3;
2: 串行口的函数调用问题.在用printf函数时,TI必须为1,但本系统为了能用中断
接收Uart,ES=1,这样必然会跟TI=1产生冲突,也就是不停的中断响应,所以要用
printf函数,必须得TI=1,ES=0才行.
3: pdata 似乎不能用于外部声明的变量,data和xdata可以,这个有待于进一步验证
4: 串口通讯问题: 开机时UART会接收到一个不定的数据,这个主要是uart_init引
起的,要先TI=0,RI=0后REN=1,这个有待进一步的考证.
本人说明:
本人在中科院半导体所工作半年,在手机设计公司工作两年至今,以前是软件公司师,
现在为硬件工程师,主要的工作都在底层的硬件设计及手机的多媒体应用。两年前在
从周立功公司购买了DP51单片机开发板,感觉这个板子挺不错的,并且结合自己在这
个行业的实际情况,基于DP51编写了这套软件。之后用这套软件为公司,也为很多朋
友做了一些项目,包括指纹门禁系统,激光器测试系统,激光器老化系统,,轮胎生
产自动化控制系统。在这些开发过程中,同时教会了他们怎样使用这套系统,一般的
讲,具有一些C语言基础的,只要1,2天就可以直接上手使用,之后他们自己可以直
接调试。
很多朋友都感到这套系统简单易学,性能不错,尤其是它舍弃了对于单片机51来讲是
华而不实的RTOS,而又不是采用一般大家平常的大循环设计,并且他引入了手机设计中非
常重要的平台的概念(DP51为其硬件平台),系统的内核类似于RTOS,内部又有消息
机制,特别灵活,并且支持消息的优先级。
他们希望我把他推广,今天本人做了一些修改后把他介绍给大家。
McuSystem介绍:
现在这段时间RTOS非常热,可很多人往往为了用RTOS而用RTOS,其实很多很多的项目
一般的设计都已经可以了的,RTOS显得有些画蛇添足。对于一般的设计思路,往往要
做很多的工作,甚至整个软件的结构不知道怎么搭建,McuSystem主要就是解决以上的
问题提出的,真正为实用服务的一个系统,它全部用C语言编写,结构非常清晰,核心
是它的消息机制,解决很多普通设计中的一些问题,包括并发事件问题。并且这个消息
还支持优先级。我相信只要具有一般C语言水平的都能很快的看懂。
系统用Source Insight做编辑,keil为编译,DPFLASH下载,这个成了标准配置,目录
建在D:\MCU51\。这个程序是让大家去修改,以适合自己的平台用。
现在简单的说一下文件的构成:boot.c是入口程序,define.h是一些宏定义,system.c
是系统内核,包括节拍,消息都在这个里面,routine.c为例行程序,如键盘,数码管
显示都在这个里面控制,键盘是采用扫描的。
McuSystem面向对象:
中等规模的系统,代码一般在2,30K,
初学单片机并且想更上一层楼的,或者有些基础,想减少工作量的。
作者:王绍伟。
2004/12/14
https://download.csdn.net/download/wowocpp/10741545
移植开始
P89C51RX
https://wenku.baidu.com/view/6b52f7d650e2524de5187e5d.html
https://pdf1.alldatasheet.com/datasheet-pdf/view/82131/PHILIPS/P89C51RA2BA/01.html
SETBIT(CKCON, 0); — 设置 CKCON 的第0 位为1
RESETBIT(CKCON, 0); —设置 CKCON 的第0 位为0
static void InterruptInit(void)
{
EX0 = 0; /外部中断0/
ET0 = 0; /*定时器中断0*/
EX1 = 0; /*外部中断1*/
ET1 = 0; /*定时器中断1*/
ES = 0; /*串行口中断*/
ET2 = 0; /*定时器中断2*/
EA = 0; /*全部定时器关闭*/
}
中断优先级:设置为 1 表示高优先级 ,设置为0 表示低级优先级
中断服务优先级设定
在P89C51RX 中 ,高优先级别的中断,可以中断低优先级的中断服务程序。
ARM CM0 中 ,关于 中断优先级是,是怎么设置的呢?
按照这个设置来。
extern void interrupt_priority(void)
{
//UART
PS = 1;
SETBIT(IPH, 4); /*PSH=1*/ // 第4位 设置为1
//TIMER2
PT2 = 0;
SETBIT(IPH, 5); /*PT2H=1*/ // 第5位 设置为1
//TIMER1
PT1 = 0;
RESETBIT(IPH, 3); /*PT1H=0*/ // 第3位 设置为0
//INT1
PX1 = 0;
RESETBIT(IPH, 2); /*PX1H=0*/ // 第2位 设置为0
//TIMER0
PT0 = 0;
RESETBIT(IPH, 1); /*PT0H=0*/
//INT0
PX0 = 0;
RESETBIT(IPH, 0); /*PX0H=0*/
}
对应的板子是什么样子的?周立功的DP51开发板
本人2004年在21ic上发表了“实用单片机系统”,也叫McuSystem,基于周立功的DP51开发板编写的,很多初学朋友觉得还不错,现在在网上发表了他的第三版本,MS3,这个版本在消息机制上有改进,采用16位结构,适合一些采集系统,同时采用循环消息队列,软件定时器上有了比较大的改进,采用回调函数形式,并且支持中断内回调和中断外回调,这样可以实现伪任务的概念。第三个改进是去掉了很多具体的应用,留下一个内核可以适用于一个最小系统,具体应用请各位自己扩充,本人自己建了一些库,要应用的时候直接加上就可以了,第四个改进是应用了比较多的函数指针,这个可能对一般的单片机开发人员有点难度,但应用更加灵活了。
本程序可以直接在keil的debug模式下执行,适合对单片机有一定理解的朋友。
不足之处请多多指出
地址21ic的FTP:
File.21ic.comMCU实用单片机系统第三版(带SI).rar
内附SourceInsight3.5,一个非常好的C语言编辑器,内带程序注析自动生成实用说明,这个非常可以自动生成函数,文件头的注析。MS1,MS2:MS2比较简单,适合入门,MS1可以了解历史
有点问题
串口通信如何测试
LCD如何显示
程序 还有问题,暂时 保存。
E:\Nu_LB_Nuc140\work\Nu_LB_NUC140_GPIO_McuSystem
Version:MS1.26
书中推荐的版本 是:
msOS_V0.11_20150807.pdf
下载 MS2 :
http://www.pudn.com/Download/item/id/951727.html