当前位置:文档之家› 《Freescale8位单片机入门与实践》 第五章_codewarrior应用综述

《Freescale8位单片机入门与实践》 第五章_codewarrior应用综述

第五章CodeWarrior应用综述(在线调试、VisualTools的使用、专家系统可选学)修改图形编号5.1 在线编程注意:实验电路板电源开关断开。

JP2的3、4两个端子短接。

1、确立目标在“True-Time Simulator & Real-Time Debug”工具界面,点击:Component->Set Target 在Processor栏,选择HC08,在Target栏,选择P&E Target Interface,然后点击OK,如图5-1所示图5-1 确立目标最后关闭“True-Time Simulator & Real-Time Debug”工具界面,在主界面中重新按下“Debug”,进入“True-Time Simulator & Real-Time Debug”调试。

2、在线调试重新进入后,PEDebug->Mode:Full Chip Simulation->In-Circuit ……如图5-2所示。

图5-2 调试界面系统将自动弹出如下的界面,如图5-3所示。

图5-3 连接界面点击Close Port。

出现界面如图5-4。

图5-4 关闭串口界面闭合目标板电源开关,给目标板供电,最后点击Contact target with these settings…。

出现图5-5界面,最后点击YES,程序就下载到实验板上了。

注:如果此时不出现图5-19,断开目标板电源,再次点击图5-18中Refresh List,然后再给目标板供电。

图5-5 查询是否擦除、下载程序然后在DEBUG界面上进行调试,如图5-6所示。

图5-6 DEBUG界面点击上图所示:运行(run)程序;单步运行(single step)程序;单步运行(step into)程序;跳出运行(step out)函数;跟踪(trace)程序;程序停止(halt)运行;目标板复位(reset target)。

可以通过图5-7中的界面随时检查寄存器、RAM中的内容,便于检查出程序中的错误。

图5-7调试界面5.2 利用Visualizationtool进行脱机仿真注意:在进行脱机仿真之前,一定要修改中断矢量地址。

在线编程调试或实时运行状态参考表2-3转向矢量表,表中详细地写出了每个中断的地址。

仿真运行状态参考表2-2中断矢量表。

比如在线编程调试或实时运行状态使用复位向量定义如下:ORG $FDFD ;复位向量地址JMP Entry当使用脱机仿真时,必须把上面两句作如下修改:ORG $FFFE ;复位向量地址DC.W Entry其他中断向量参考该修改进行。

在进行在线调试和脱机仿真相结合的时候,不同调试状态下中断进行上面的交替修改。

程序编译通过之后,系统将自动进入Debug调试界面(如图5-8所示),在这个界面里面我们既可以直接写入程序调试,也可以利用单步运行随时检查寄存器的内容,便于寻找程序中的错误,还可以利用Visualizationtool进行脱机仿真。

下边将重点讲述利用Visualizationtool进行脱机仿真。

图5-8 DEBUG界面在“True-Time Simulator & Real-Time Debug”工具界面,点击:Component->Set Target 在Processor栏,选择HC08,在Target栏,选择Simulator Target Interface,然后点击OK,如图5-9所示。

图5-9确立目标界面设置完成,关闭“True-Time Simulator & Real-Time Debug”工具,在主界面中重新按下“Debug”,进入“True-Time Simulator & Real-Time Debug”调试界面,点击Simulater->Reset,如图5-10。

图5-10 仿真状态复位选择Component->Open…,如图5-11。

图5-11将会出现如下的界面,如图5-12所示图5-12 选择Visualizationtool界面点击OK,进入Visualizationtool界面,如图5-13所示。

图5-13 Visualizationtool界面如上图所示在空白处点击右键,选择要添加的元件。

由于该示例事要做一个跑马灯的演示实验,所以选择“7 Segment Display”。

在空白处点击右键,选择Properties,如图5-14所示。

设置:Refresh Mode : PeriodicalRefresh Time (100ms):1或者选择:CPU cycles。

设置完成,关闭窗口。

图5-14Visualizationtool属性界面双击7 Segment Display,如图5-15所示设置:Kind of Port : MemoryPort to Display : 0x01设置完毕,关闭窗口。

图5-15 七段数码管属性界面点击右键,取消选择Edit Mode,在“True-Time Simulator & Real-Time Debug”调试界面,按下Sart/Continue,运行程序,在本示例中,用7 Segment Display来演示跑马灯实验,可以看到七段数码的每一段在交替闪烁,如图5-16。

图5-16 仿真界面点击保存,可以将这个Visualizationtool的工程保存下来,下次运行的时候只要用Display Mode,然后运行程序就可以了。

保存配置:File\Save Configuration,如图5-17所示。

图5-17 保存配置界面运行程序,可以按照图5-6中运行或单步执行程序,可以看到仿真状态下程序运行情况。

5.3 Processor Expert应用5.3.1创建工程本工程使用一个电位器和一个数码显示管,电位器用于表示模拟信号,如:罐里的液面位置、温度等,数码显用于显示其值。

下面我们将一步一步演示创建工程的过程。

启动CodeWarrior :Start > Programs > Metrowerks CodeWarrior > CW08 V3.0 > CodeWarrior IDE在CodeWarrior界面中,选择菜单File>New,如图5-18所示。

图5-18 开始创建在Project栏里选择HC(S)08 New Project WizardProject Name中填入:MyQY4如果需要更改存入目录请点Location栏的Set按钮按下确定,进入一下步,如图5-19所示图5-19新建工程选择CPU类型,找到MC68HC908QY4,点击选取,按“下一步”,如图5-20所示。

图5-20 选择芯片类型选择以C语言为开发语言,如图5-21所示。

图5-21 选择C语言使用Processor Expert,如图5-22所示。

图5-22 使用Processor Expert 不使用PC-Lint™,如图5-23所示。

图5-23 不使用PC-Lint™ 选择标准启动代码,如图5-24所示。

图5-24 选择标准启动代码不需要浮点支持,如图5-25所示。

图5-25不需要浮点支持内存使用模式选择Tiny,如图5-26所示图5-26 选择内存使用模式连接方式,使用缺省值,如图5-27所示。

图5-27 选择连接方式点击“完成”,如图5-28所示。

图5-28 创建完成界面在左边的导航栏里选择Processor Expert选择Beans,点右键,选择“Add Bean(s)…”,如图5-29所示。

图5-29 内核选择选取并双击ADC,Processor Expert导航栏里Beans中增加了AD1:ADC选取并双击BitsIO,Processor Expert导航栏里Beans中增加了Bits1:BitsIO 选取并双击BitIO,Processor Expert导航栏里Beans中增加了Bit1:BitIO选取并双击BitIO,Processor Expert导航栏里Beans中增加了Bit2:BitIO编辑AD1的属性,如图5-30Interrupt service:disabledConversion Time 21.25 uS图5-31AD1属性编辑设置Measure和GetValue为generatecode.其它均为don’t generate code.如图5-31所示编辑Bits1的属性,如图5-32。

图5-30 AD1属性编辑Bean name:DispNumPins:7Pin0:PTB0Pin1:PTB1Pin2:PTB2Pin3:PTB3Pin4:PTB4Pin5:PTB5Pin6:PTB6图5-32 Bits1属性编辑Pull resistor:No Pull resistorDirection:Output编辑Bit1的属性:Bean name:BitPta4Pin for IO:PTA4_OSC2_AD2_KBI4Pull resistor:No Pull resistorDirection:Output编辑Bit2的属性:Bean name:BitPtb7Pin for IO:PTB7Pull resistor:No Pull resistorDirection:Output图5-33 Bits1属性编辑分别进入其Methods页设置PutVal generate code.其它均为don’t generate code.如图5-33所示选择菜单Project>Make产生所需文件,如图5-34所示打开“MyQY6.c”可以看到主程序:Main()函数void main(void){PE_low_level_init();for(;;){ }}打开“MyQY6.c”可以看到主程序:Main()函数void main(void){PE_low_level_init(); 图5-34 编译界面for(;;){ }}现在我们编写应用程序代码:Const char decode0_9[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; char disp[4];char disp_bit;static byte myValues[1]; /* Number of channels */void display(char dbit) {char i;DispNum_PutVal(0);BitPtb7_PutVal(dbit/2);BitPta4_PutVal(dbit&1);DispNum_PutVal(disp[dbit]);for(i=255;i=0;i--);}void main(void){byte err;PE_low_level_init();for(;;){disp_bit++;disp_bit&=3;display(disp_bit);err = AD1_Measure(TRUE);err = AD1_GetValue((byte *)myValues);disp[3]=decode0_9[myValues[0] % 10];disp[2]=decode0_9[(myValues[0]/10) % 10];disp[1]=decode0_9[myValues[0]/100];}}5.3.2编译调试接下来,点“Make”编译。

相关主题