软件的设计与调试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4 软件的设计与调试
软件部分主要是用所编写的语言程序来配合相应的硬件电路,控制所设计
电路实现所预期功能的部分。C8051F120单片机的程序可以使用C语言,也可以使用汇编语言,或者是两者的结合,本设计使用C 语言编写程序实现拖拉机工况油耗仪功能。
软件部分分成几大模块来实现单片机的功能。程序主函数的设计,由于设
计中使用了相应的芯片,所以必须首先对相应的芯片进行初始化并对通讯串口芯片进行初始化、中断向量的设计以及开中断、循环等待等准备。程序的详细如附录中的程序部分所示。
4.1 初始化程序
对所有模块进行初始化,例如单片机的初始化、LED数码管显示的初始化等。程序如附录中所示。初始化是为了让系统正常工作,而给一些变量参数赋
以初值的程序。初始化程序主要任务是清屏幕。初始化模块,如图
4.1所
示。
系
统加电后进行初始化,测量系统进入起始状态,等待控制面板输入。系统检测控制面板输入,根据控制面板输入进入相应测量程序。
SFRPAGE = CONFIG_PAGE;
WDTCN = 0xde; // Disable watchdog timer
WDTCN = 0xad;
OSCILLATOR_Init (); // Initialize oscillator
PORT_Init_UART0 (); // Initialize crossbar and
GPIO
PORT_Init_UART1 (); // Initialize crossbar and
GPI1
UART0_Init (); // Initialize UART0
UART1_Init (); // Initialize UART1
其中串口uart0 初始化如下
void UART0 {
char SFRPA _Init (void) //uart0 初始化GE_SAVE;
SFRPAGE_ SAVE = SFRPAGE; // Preserve SFRPAGE SFRPAGE = TMR2_PAGE;
TMR2CN = 0x00; // Timer in 16-bit auto-reload
up timer
// mode
TMR2CF = 0x08; // SYSCLK is time base; no
output; // up count only RCAP2 = - ((long) SYSCLK/BAUDRATE/16);
TMR2 = RCAP2;
TR2= 1;
SFRPAGE = UART0_PAGE; SCON0 = 0x50; // Start Timer2
SSTA0 = 0x15;
TI0 = 1;
SFRPAGE = SFRPAGE_SAVE; }
// 8-bit variable baud rate; // 9th bit ignored; RX enabled // clear all flags
// Clear all flags; enable baud rate
// doubler (not relevant for these
// timers);
// Use Timer2 asRX andTX baud rate
// source;
// Indicate TX0 ready
// Restore SFRPAGE
开始
图4.1主程序初始化流程图
拖拉机工况油耗仪的应用软件根据系统功能要求而设计,以可靠地实现系统功能。设计时,将单片机的数据处理模块设计成主程序模块,其他模块在该模块的控制下进行。应用的子程序实行标志化管理,即在需调用的程序模块之前,都设置了程序实现的功能名称,调用时可直接转向该模块程序,这样既便
于调试、链接,又便于移植、修改:程序的调试工作是采用仿真器检验在计算
机上编写的程序运行是否正常、有无语法错误等,查看运行结果是否符合设计
目的,再通过仿真器挂接硬件电路,模拟现场测试,检查硬件的电路连接和软
件程序流程。在测试中由于存在干扰,软件程序设计中需要编写抗干扰程序,
以提高采集数据的准确度。
4.2 串口通讯程序设计串口通讯程序是通过软件程序的编写,过对软件的查询和中断服务程序的检测来实现数据的接受与传送。对UART的控制和访问是通过相关的特殊功能寄存器即串行控制寄存器(SCON)和串行数据缓冲器(SBUF)来实现的。一个SBUF地址可以访问发送寄存器和接收寄存器。读操作将自动访问接收寄存器,而写操作自动访问发送寄存器。
UART 可以工作在查询或中断方式。UART 有两个中断源:一个发送中断标志
TI (SCON )(数据字节发送结束时置位)和一个接收中断标志RI(SCON )(接收完一个数据字节后置位)。当CPU转向中断服务程序时硬件不清除UART中断标志,中断标志必须用软件清除。这就允许软件查询UART 中断的原因(发送完成或接收完成)。
使用双串口,必须用两个独立的波特率发生器,可以用两个时钟,UART0 用时钟2产生波特率,UART1 用时钟1 产生波特率。
判断串口发送标志位TI是否为1,若TI为1,则把数据从单片机发给PC机,并把TI清零,中断子程序返回;若TI 为0,表明RI=0, 则把串口接收标志位RI 清零,把串口接收缓冲器SBUF 中的数据写入串口接收数据单元RECDATA, 再把该数据送到串口发送缓冲器SBUF 中,传给PC 机,置串口成功接收数据标志位RECOKBIT 为1,表明串口成功接收发送数