历史上的今天
今天是:2024年12月17日(星期二)
2018年12月17日 | keil4中debug信号函数的简单使用
2018-12-17 来源:eefocus
最近学习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
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_() ;
}
}
}
史海拾趣
|
Keil C51开发系统基本知识 1. 第一节 系统概述Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会 ...… 查看全部问答> |
|
replyreload += \',\' + 370082; 一、透明衬底技术 InGaAlP LED通常是在GaAs衬底上外延生长InGaAlP发光区GaP窗口区制备而成。与InGaAlP相比,GaAs材料具有小得多的禁带宽度,因此,当短波长的光从发光区与窗口表面射入GaAs衬底时,将被悉数吸 ...… 查看全部问答> |
|
出错:i2cwrite error:1460 麻烦高手指点一二 12c init iic irq mapping :[irq:27->sysIRQ:21]. OEMIoControl:Unspported Code 0x10100b4-device 0x0101 func 52 OEMIoControl:Unspported Code 0x10100b4-device 0x0101 func 62 CamCLOCKOn=1 syncist:IO_Abandoned I2CWrite error :1460 ...… 查看全部问答> |
|
实习要做一个固定电话来电防火墙(识别来电号码,屏蔽骚扰电话),目前我的思路有两条: 1,采用专用的来电信号处理芯片; 2,使用单片机实现 现在这两中方法都碰到了一个问题 1,不知道该用什么芯片 2,需要解析电话线传输协议,但是不知道用 ...… 查看全部问答> |
|
密集调用 etherOutput 发送以太网帧时,返回ERROR,说是 out of mbufs,怎么解决? 密集调用 etherOutput 发送以太网帧时,返回ERROR,说是 out of mbufs,怎么解决?… 查看全部问答> |
|
我有一个PNG图像文件 myfile.png ,需要显示到窗口上 在win xp下有 CImage类可以处理PNG图像,以及CDC的TransparentBlt函数处理透明绘制 但是,在WIN CE下,相关函数都不存在,怎么办?… 查看全部问答> |
|
看来了几个例子,还是不明白输出PWM时TIM_period的值怎么设置 参考书上说:由于TIM1计数器的时钟频率为72MHz,希望通道输出频率为17.57KHz,可得到TIM1预分频器的值TIM1_period为0xFFFF,这个值是怎么计算出来的? 请知道的朋友详细指点一下 ...… 查看全部问答> |
|
http://item.taobao.com/item.htm?id=13632011554&spm=undefined13632011554SIM300 6。02 SST芯片模块,可以提供三种原厂程序版本,含彩信协议!批量要者单独洽谈!大部分产品可以代替SIM300 7。02 7。03的模块,有需要者请联系店主 ...… 查看全部问答> |




