图4-2 选择目标CPU
点击“Project->NewProject…”菜单,出现一个对话框,要求给将要建立的工程起一个名字,你可以在编缉框中输入一个名字(设为exam1),不需要扩展名。点击“保存”按钮,出现第二个对话框,如图4-3所示,这个对话框要求选择目标CPU(即你所用芯片的型号),Keil支持的CPU很多,我们选择Atmel公司的89C51芯片。点击ATMEL前面的“+”号,展开该层,点击其中的89C51,然后再点击“确定”按钮,回到主界面,此时,在工程窗口的文件页中,出现了“Target1”,前面有“+”号,点击“+”号展开,可以看到下一层的“Source Group1”,这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source Group1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图3所示。选中其中的“Add file to Group”Source Group1”,出现一个对话框,要求寻找源文件,注意,该对话框下面的“文件类型”默认为C source file(*.c),也就是以C为扩展名的文件,而我们的文件是以asm为扩展名的,所以在列表框中找不到exam1.asm,要将文件类型改掉,点击对话框中“文件类型”后的下拉列表,找到并选中“Asm Source File(*.a51,*.asm),这样,在列表框中就可以找到exam1.asm文件了。双击exam1.asm文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,但初学时常会误认为操作没有成功而再次双击同一文件,这时会出现如图4所示的对话框,提示你所选文件已在列表中,此时应点击“确定”,返回前一对话框,然后点击“Close”即可返回主界面,返回后,点击“Source Group 1”前的加号,会发现exam1.asm文件已在其中。双击文件名,即打开该源程序。
图4-3 加入文件
系统程序设计时采用1ms定时中断采集,每次中断到来时采集传感器信号。当所得传感器信号满足指定条件,则将有效数据保留,查表计算,得出目标位置,将目标位置与所设定条件进行对比,找到满足条件的目标位置,将目标位置转化为步进电机步数,发出步进脉冲信号,带动步进电机转动到相应位置。汽车弯道自适应前照灯系统能够在±15°的角度之内摆动,以帮助驾驶员更好的适应弯道状况。主程序流程图如图4-4所示:
25
图4-4 主程序流程图
4.3系统软件流程设计
本设计的程序的子函数主要包含延时、中断、端口扫描等。流程如图所示:
26
图4-5 子函数流程图
4.4延时子程序
延时子函数的主要是为了延长时间需要,或者是为了使单片机的某个动作保持一段时间。程序如下
/* 延迟函数开始,延迟x 0.5ms */
void delay(int x) // 延迟函数开始 { int i,j; // 声明整数变量i,j
for (i=0;i 4.5 消抖子程序 不管是按钮开关还是闸刀开关,在操作时,并不是想想中的那么理想。实际上,操作开关时会有不确定状态,也就是噪声。即存在抖动或者弹跳现象。 如何避免抖动想想,可使用一个切换开关及互锁电路,组成一个去抖动电路,如图所示: 27 图4-6 抖动电路 虽然这个电路可降低抖动所产生的噪声,但所需的元件较多,所占的电路面积较大,增加了成本与电路的复杂度,已很少使用了,其实也可利用一个简单的RC电路来抑制抖动电压, 我们通过按键抖动的波形可以分析出,可以通过产生20MS的延迟,即可消去抖动。 即为: /* 防弹跳函数函数,延迟约20ms */ void debouncer(void) // 防弹跳函数开始 { int i; // 声明整数变数i for(i=0;i<2400;i++); // 计数2400次,延迟约20ms } // 防弹跳函数结束 4.6中断子程序 当CPU正在执行程序时,外部发生了某一随机事件请求CPU迅速处理。CPU暂时中止执行的程序,转去处理所发生的事件,中断处理完毕,再回到原来被中止的断点继续执行原程序,这个过程叫中断。 图4-7 中断子程序流程图 设置中断: ? 提高CPU工作效率; ? 具有实时处理功能; 在实时控制中,现场的各种参数、信息均随时间和现场而变化。这些外界变量可根据要求随时向CPU发出中断申请,请求CPU及时处理中断请求。如中断条件满足,CPU马上就会响应,进行相应的处理,从而实现实时处理。 ? 具有故障处理功能; 针对难以预料的情况或故障,如掉电、存储出错、运算溢出等,可通过中断系统由故障源向CPU发出中断请求,再由CPU转到相应的故障处理程序进行处理。 28
相关推荐: