版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/little_white__/article/details/67083075
keil4中debug信号函数的简单使用
最近学习51单片机 , 通过keil的软件仿真功能来验证程序的正确性。
首先最可靠的信息来源是keil的帮助文件:如下图 signal functions
信号函数就是在debug的时候给你的程序输入一个信号的函数。
信号函数受到如下约束:
- 函数以关键字signal开头
- 函数的返回值类型必须为void
- 函数最多只能有8个参数。
- 信号函数之间不能相互调用。
- 信号函数可以被用户函数调用。
- 信号函数必须调用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_() ;
}
}
}
本人也是初学者,欢迎指教。