keil4中debug信号函数的简单使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/little_white__/article/details/67083075

keil4中debug信号函数的简单使用

最近学习51单片机 , 通过keil的软件仿真功能来验证程序的正确性。
首先最可靠的信息来源是keil的帮助文件:如下图 signal functions
这里写图片描述
信号函数就是在debug的时候给你的程序输入一个信号的函数。
信号函数受到如下约束:

  1. 函数以关键字signal开头
  2. 函数的返回值类型必须为void
  3. 函数最多只能有8个参数。
  4. 信号函数之间不能相互调用。
  5. 信号函数可以被用户函数调用。
  6. 信号函数必须调用twatch(也可以是swatch)至少一次。如果信号函数从不调用twatch,则目标程序将得不到时间执行。而且由于不能使用Ctrl+C中断信号函数,在这种情况下µVision4将进入死循环。

下面通过一个例子说明使用方法:

     用信号函数产生一个下降沿输入P0^0,程序在检测到下降沿时,读取PORT1的值。

1.建立一个51的工程
2.打开工程设置,debug选项,选中use simulator(软件仿真),
这里写图片描述
3.编写信号函数。
<1>可以在debug的时候,现场编写
这里写图片描述

<2>也可以先写好一个信号函数文件,然后将其添加到工程的初始化文件中。这样就不用每次编写了。

这里写图片描述

信号函数如下:

signal void test(void)  
{  
    while(1)  
    {  
        port0 = 0xff ;
        swatch(0.02);//延时20ms

        //in = 0x23 ;
        port0 = 0xfe ;      
        swatch(0.1) ;

        port0 = 0xff ;
        swatch(0.02);

        _break_ = 1 ; //_break_是系统指令,当等于1时停止函数运行。    
    }  
} 

4.编写主程序,然后debug,打开logic analyzer(用来看波形),command window

这里写图片描述

在logic analyzer中写入你要看波形的端口,我写的port0.0。
然后运行程序,在command window中输入你的信号函数的名字,回车。

这里写图片描述
然后可以看到输入的波形这里写图片描述

最后是整个主程序

#include "intrins.h"
#include <reg51.h>

sfr in = 0x90 ;//输入口
sfr out = 0xA0 ;
sbit my_signal = P0^0 ;

void delay_ms(unsigned ) ;

void main()
{
      unsigned int i ;
      //my_signal = 1 ;
      while(1)
      {  
        if(my_signal == 1)
        {
            delay_ms(10) ;
            if(my_signal == 0)
            {
                out = in ;
            }
        } 
      }
}

void delay_ms(unsigned ms)
{
    unsigned int i , j ;
    for(i = 0 ; i < ms ; i++)
    {
         for(j = 0 ; j < 333 ; j++)
         {
            _nop_() ;
         }
    }
}

本人也是初学者,欢迎指教。


猜你喜欢

转载自blog.csdn.net/little_white__/article/details/67083075