新闻  |   论坛  |   博客  |   在线研讨会
基于单片机rtx tiny51
a181633697 | 2009-07-31 22:16:33    阅读:4601   发布文章

——实时操作系统的编程
                                  作者:彭晓林
      今天晚上是星期六,我没想到我这么早就能睡觉。由于在家里写的红外解码程序没拷贝过来,到了学校自己不得不从新写。昨天把大部分解码程序的调试工作都完成了,结果在下载软件的时候中毒了,很是郁闷从新的做了一下系统又什么也没有了。痛恨病毒!
     前些天看了一些rtx tiny51的一些东西。今天晚上想起来了,想就基于rtx tiny 51 操作系统写程序。一下是我对tiny 51 的直接感受。
     结合以前编程的经验,和习惯觉得用tiny 51 在多任务实时操作系统编程是用起来还是很方便的。个人感觉特别是信号传递,和信号接受功能函数的运用觉得这个比自己通过经验编写程序方多了。但是在我在对,用这个系统对数码动态扫描的时候,出现了不明的闪动,在按下键盘的时候也有不明的闪动,如果哪位高手做过这方面的东西,我们可以交流一下(196568501qq)。我觉网上对tiny 51 的资料还是很少的,我去图书馆看了大部分的51单片机书几乎也都不讲解这个系统,我个人觉得这是一个遗憾,用这个系统会大大的减少编程的时间,用这个系统和不用这个系统的区别和用汇编和用C语言的区别差不多的。就是也有鱼和熊掌不可兼得的地方。
    以下是我今天晚上完成的部分红外解码子程序调试的部分:
#include <rtx51tny.h>
#include <at89x52.h>
unsigned char i_1 = 0;
unsigned char i_2 = 0;
unsigned char i_3 = 0;
unsigned char number_flag = 0;
bit down_flag = 0;
bit   up_flag = 0;
bit  key_flag = 0;
unsigned char get_number[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
unsigned char key_number[] = {0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3  数码管显示码
      0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
void delay( unsigned char d_time );
void num_scan( unsigned char i_number1,i_number2,i_number3);
/***********任务的初始化工作*********/
job0 () _task_ 0  
{
  os_create_task (1);  //直控键盘扫描任务
  os_create_task (2);
  os_delete_task (0);
        
}
/********直控键盘扫描任务*********/
job1 () _task_ 1
{
    while ( 1 )  
  {
        num_scan(get_number[number_flag],get_number[number_flag+1],get_number[number_flag+2]);
  if( P1_7 == 0 )
  {
    delay(20);
    if( P1_7 == 0)
    {
        down_flag = 1;
    }
  }
  if( down_flag & P1_7 )
  {
     key_flag = 1;
   down_flag = 0;
   up_flag = 0;
  }
  if( key_flag && P1_7 )
  {
      key_flag = 0;
   os_send_signal(2);
  }                      
  }
}job2 () _task_ 2  
{
  while ( 1 )  
  {  
        os_wait (K_SIG,0,0);
  number_flag++;
  if(number_flag == 18)
  {
     number_flag = 0;
  }
  os_clear_signal (1);
        num_scan(key_number[0],key_number[1],key_number[2]);
                        
  }
}
/*************外部调用函数************/
void delay( unsigned char d_time )
{
    unsigned char  i;
    while( d_time-- )
{
    for( i=50;i>0;i-- );
}
}
void num_scan(unsigned char i_number1,i_number2,i_number3 )
{
    
    P2_7 = 0; P0 = key_number[ i_number3%10 ]; delay( 1 ); P0 = 0xff; P2_7 = 1;
P2_6 = 0; P0 = key_number[ i_number3/10 ]; delay( 1 ); P0 = 0xff; P2_6 = 1;
    P2_5 = 0; P0 = 0xbf;delay( 1 ); P0 = 0xff; P2_5=1;
    P2_4 = 0; P0 = key_number[ i_number2%10 ]; delay( 1 ); P0 = 0xff; P2_4 = 1;
    P2_3 = 0; P0 = key_number[ i_number2/10 ]; delay( 1 ); P0 = 0xff; P2_3 = 1;
    P2_2 = 0; P0 = 0xbf;delay( 1 ); P0 = 0xff; P2_2=1;
    P2_1 = 0; P0 = key_number[ i_number1%10 ]; delay( 1 ); P0 = 0xff; P2_1 = 1;
    P2_0 = 0; P0 = key_number[ i_number1/10 ]; delay( 1 ); P0 = 0xff; P2_0 = 1;
}
以上程序都编译通过了的。
     今天晚上我我去了arm 公司的官方网站发现了有新的keil版本 usion 4.0出来。这个最新版本比较以前的版本界面有了很明显的美化,对中文的支持也很好在编程的窗口里面显示出来的字的字体和颜色有了很大的改进。有兴趣的兄弟可以去下载。对了顺便说一句,要用tiny 51 还必须安装才可以,具体方法由于时间关系,我实在是困就不想讲了,有兴趣的兄弟可以q我。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客