专栏中心

EEPW首页 > 专栏 > 基于单片机rtx tiny51

基于单片机rtx tiny51

发布人:a181633697 时间:2009-07-31 来源:工程师 发布文章
——实时操作系统的编程
                                  作者:彭晓林
      今天晚上是星期六,我没想到我这么早就能睡觉。由于在家里写的红外解码程序没拷贝过来,到了学校自己不得不从新写。昨天把大部分解码程序的调试工作都完成了,结果在下载软件的时候中毒了,很是郁闷从新的做了一下系统又什么也没有了。痛恨病毒!
     前些天看了一些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我。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

XMOS和客户多点燃爆CES 2026:GenSoC、新一代音频DSP、嵌入式视觉及机器人等多款落地产品席卷而来

英飞凌推出首款100V车规级晶体管,推动汽车领域氮化镓(GaN)技术创新

DAC Harmonic Anylazer  数模转换器频波分析仪

ADISim DDS在线设计工具

视频 2012-06-18

在低压应用中借助两相单芯片升压转换器实现更高功率

PLD实验练习1

丰田以其全混合动力2026款RAV4系列专注于个性

ADI在线研讨会:应对电机控制嵌入式设计挑战

视频 2012-06-18

Que - Special Edition Using Linux 4th Edition.part2.rar

放大器工具 - ADISim OpAmp

视频 2012-06-18

Que - Special Edition Using Linux 4th Edition.part1.rar

PLD数字显示频率计的设计1

精确监测电池:现代电动汽车高效运行的“基石”

纳芯微携手联合动力打造新一代汽车电驱平台芯片方案

精通IC-CPD设计:关于线缆内置控制与保护器件的软硬件基本指南

Microchip发布专为NVIDIA DGX Spark而设计的MEC1723嵌入式控制器定制固件

Que - Special Edition Using Linux 4th Edition.part3.rar

以数字之翼,重塑苍穹——2026航空航天行业展望

英飞凌推出业界首款针对物联网的Wi-Fi 7 IoT 20 MHz三频无线设备

ADISim Power™-精确,快捷,易用的电源设计工具

更多 培训课堂
更多 焦点
更多 视频

技术专区