|
|
| | -文章搜索 - 最新文章 - | |
keil 使用笔记 |
| 发布时间:2005年6月14日 点击次数:5704 |
| 来源: 作者: |
debug~perfermance analyzer加入要察看的模块名称,然后view~perfermance analyzer window 可以察看各个模块运行时间 ①Display address_type:address B:Bit address C:Code Memory Bx:Code Bank D D:80H 命令可以查看特殊寄存器 data D I:0 命令可以查看内部RAM数据iData; D X:0 命令可以查看外部RAM数据xData; ②R1 ~R1 R1 = R7 R1 = --R7 R1 = 0x20 ③main d main ④向RAM.ROM中写数据 Enter data_type address_type:address expr,expr.... data_type:int char double float long E char data:0x20 1,2,3,4 //向data区0x20开始的地址写1,2,3,4 变量放在RAM的30H,要把定义放在main前面!另外特别注意,内部RAM通常供C程序存放中 间变量等,所以一定要看看编译后的程序中是否存在存储单元冲突的情况,比如如果程序中 使用了别的寄存器组的话,08-1FH单元就不能用了 unsigned long data i _at_ 0x30 如何用Keil的uVision2仿真外部中断? 方法一:调试状态下,打开PeriPherals->I/O PORTS->P3 用鼠标将相应的端口变高或低即 可产生中断 方法二:在命令窗口中输入DEFINE BUTTON "INTERUPT","P3=0XFE" 然后打开TOOLBOX,即可以看见按钮INTERUPT,按下按钮即可 Define Button "button_label","command" 注意:Define Button "show R5 Register","printf(\"R5=%04xh\\n\")" kill button x 方法三:用调试函数,可参考uv2\hlp\gs51.pdf第五和第六章 信号函数写在一个ini文件中,调试主程序时用debug-Function Editor调入, 会有一个框出现,可在里面修改,然后complie。也可以在debug状态下include 可以用kill命令结束。 functiong definition可以是以下几种: ㈠系统预定功能 printf getin等 ㈡用户定义功能 即用户自己写的函数,如FUNC void MyStatus(void) ㈢信号函数。用户程序运行时后台运行,模拟外部的信号输入,可同时有64个。 dir bfunc dir ufunc //察看所有用户功能user dir singal //察看所有信号函数singal dir func //看所有的 ㈠系统预定功能 printf getin等 void exec (“command_string”) //在用户和信号函数里面调用keil的调试命令 如:exec (“BS timer0”) double getdbl(“prompt_string”) //跳出一窗口提示输入数,返回,如无则返回0 int getint(“prompt_string”) long getlong(“prompt_string”) 如:age = getint(“Enter your age”) void memset(start_address,ulong length,uchar value) //用指定的数填充一段内存 如memset(0x2000,0x1000,’a’) void printf(“format_string”,value) //从serial窗口输 出 如:printf(“%s for %d”,uvision2,51) //输出uvision2 for 51 int rand(int seed) //产 生随机数,seed为0时还原 void twatch(long states) //等待n个clock,只能被 singal函数调用 void swatch(float seconds) //如swatch(0.5) void rwatch(address) //rwatch(X:0x1234) 一直等待直到X:0x1234被读 void wwatch(address) //一直等待直到X:0x1234被写 如 twatch (200000); // 200000 Cycles Time-Break twatch(CLOCK); //wait for 1 seconds _wbyte(address,uchar value) //向指定的内存写数据 _wbyte (0x2000,0x55) _wword(address,uint value) _wdword(address,ulong value) _wfloat(address,float value) _wdouble(address,double value) ㈡用户定义功能 即用户自己写的函数,不能调用singal函数和twatch(),可用KILL FUNC function_name杀之 FUNC return_type function_name(parameter_list) { statments } /*-------------------------------------------*/ /* Function MyRegs() shows Registers R0...R3 */ /*-------------------------------------------*/ FUNC void MyRegs (void) { printf ("---------- MyRegs() ----------\n"); printf (" R0 R1 R2 R3\n"); printf (" %02X %02X %02X %02X\n",R0,R1,R2,R3); printf ("------------------------------\n"); } ㈢信号函数。用户程序运行时后台运行,模拟外部的信号输入,可同时有64个。 当调用twatch()时进入idle状态,一个signal函数返回值必须是void,最多8个参数,能够 调用predefine和user函数,但不能调用其它信号函数,能被uesr函数调用,至少调用 twatch一次,用ctrl+c终止它。 Signal state Signal kill signal_name Singal void func_name(para_list) { statements } 例子1:singal void stuffsin(void) { while(1) { sin = ‘A’; twatch(100000);//每隔100000个cpu states就输出 个’A’ } } 例子2: signal void check_p20(void) //一个没有调用twatch()的信 号函数用法 { if(PORT2 & 1) { printf("Led is on\n"); } else { printf("led is off\n"); } } 然后设置断点: bs write PORT2,1,"check_p20()" signal函数。 这里注意write和read 例如:unsinged int data value; value = P1; P2 = value; 此时bs read PORT1,1,"PORT1 = getint(\"input value\")" bs write PORT3,1,"printf(\"port3 value=%x\\n\",port3)" 执行后会跳出窗口让你输入p1的值,然后输出p3的值。 如何仿真串口输入:ASSIGN WIN2 有第二个串口,否则WIN2也都是NUL,如果选择的单片机类型没有第二串口,是没有S1IN和 S1OUT这两个虚拟寄存器的,你可以通过dir vtreg命令查看当前的定义了的虚拟寄存器值) peripherals->serial channel中令SBUF = 0x55是指发送即时数给发送寄存 器,若要从串行口读入数据,在命令行中输入sin=你的数据即可向串行口送入数据.窗口中 SBUF中的数据是发送寄存器中的数据,不是接收寄存器中的数据! 单片机串口指向到了PC机的串口上,这样就可以在pc机的环境下模拟单片机对外部设备的操 作了,此时把pc串口和外设连接,此时pc的串口 = 你单片机的串口。注意:模拟单片机运行 时,单片机串口速率是由MODE命令来指定的,和C程序中对SMOD,TH1的值无关(但是在烧写到 单片机上时,smod,th1要设定好)。Serial#1上面的是单片机发出的数据。 Command_line上输入sin=value,value是模拟外设传过来的数据。s printf是从串口输出的(当然也可以改写putchar函数),可以用根串口线链接计算机的 COM1,COM2,这是针对有两个串口接口的计算机,然后在DEBUG模式的命令行加下两句: MODE COM1 19200,0,8,1 ASSIGN COM1 然后打开一个串口调试的软件,对应串口COM2,19200,0.就可以看到结果了 mode com2 9600,0,8,1 assign com2 stime = 0 Assign win 和#2上(在serial window里输入字符,就是模拟对单片机串口输入数据) |
|
|
|
|
[单片机] 相关文章: 能产生模拟输出信号的微处理器简介:
无刷直流电动机需要多种电压电平来控制转速:0V 使电动机停转,5V 使电动机以最大转速运转,而在0V和5V之间的电压则使电动机以较低的转速运转。当你在受微处理器监控的系统中使用这种电动机时,微控制器应该产生所有这些电压。但微处理器属于数字器件,通常没有模拟输出。现在有几种方法可以克服这一缺陷。例如,你可以使用一个DAC、一个数字可编程电位器,或者连接到电阻分压器的一些模拟开关。然而,当你只需几种中间电压电平时,能找到某种利用微控制器软件的方法就更好。本设计实例是基于如下事实:你可以对用作输入端或输出端的微控制器I/O引脚进行编程。当你对用作输出端的一根引脚...... 内嵌51MCU的射频收发芯片CC1010及其应用
如何用C51编AD程序
上海贝岭电能计量芯片顺利通过鉴定
C51的一些误区和注意事项
C51 怎样将1个子程序段定位在1个固定的地址位置?
如何正确使用内存
用计算机并口模拟SPI通讯的C源程序
CRC16-STANDARD的快速算法,51汇编
IIC总线模拟程序 |
|
|
|