UCOSE期末大作业.docx
《UCOSE期末大作业.docx》由会员分享,可在线阅读,更多相关《UCOSE期末大作业.docx(12页珍藏版)》请在冰豆网上搜索。
UCOSE期末大作业
NANCHANGUNIVERSITY
UCOSII期末报告
题目:
UCOSII期末作业报告
学院:
软件学院
专业:
计算机软件
班级:
计算机软件121班
姓名:
李俊楠
学号:
8000612030
起讫日期:
2014.11.30——2014.12.30
完成时间:
2014年12月29日
填表日期:
2014年12月29日
一、课题设计内容
综合设计题及功能的选定,根据课本作者附ucosiic51移植版本(任哲光盘中)及教师设计的proteus智能交通电路仿真图进行设计编程。
所有选题功能必须满足如下要求:
1、输出信息要有LED资源的运用。
2、必须要有中断的运用,并尽可能多的使用。
3、用UART与上位机通信,并使两个(或以上)任务共享一个UART与上位机通信。
4、两路A/D转换采集数据要做简单的比较性计算,然后输出
其他资源运用为可选。
设计文档规范:
1、功能需求分析说明;
2、解决方案和ucos实现算法;
3、实现代码;
4、出现的问题及解决、体会总结。
软件体系架构基于实时操作系统UC/OSII。
大作业以纸质和电子两种形式提交。
电子文档中应包括完成的设计题的keiluvision3工程项目形式工程管理文件及源代码。
硬件开发平台proteus智能交通电路仿真图。
要求源代码应按规范注释。
一、实验项目名
基于51单片机的ucosII实时车流数据采集智能交通灯
二、实验目的
通过滑动变阻器模拟车流量,两路A/D转换采集数据要做简单的比较性计算,然后输出,实现对交通灯的控制,数码管显示对应交通灯的时间。
三、实验要求
1.熟悉51单片机的应用,比如串口通信,AD转换,中断等。
2.51单片机的ucosII系统移植。
(keil大模式)
3.UcosII实时系统的应用(任务的创建,调度等,用来实现前后台)
作业内容要求:
4.输出信息要有LED资源的运用。
5.必须要有中断的运用,并尽可能多的使用。
6.用UART与上位机通信,并使两个(或以上)任务共享一个UART与上位机通信。
7.两路A/D转换采集数据要做简单的比较性计算,然后输出
8.其他资源运用为可选。
四、主要仪器设备、软件及耗材
PC,keil,protues。
五、实验步骤
一.声明的变量
1)根据仿真图设定的通道0,1和交通灯的扩展口地址。
#defineAD0XBYTE[0x8ff8]
#defineAD1XBYTE[0x8ff9]
#defineJTLXBYTE[0xAFF8]//交通灯扩展口地址
#definePLXBYTE[0xCFF8]
2)定义中断AD采集到的缓冲数据区和交通灯的时间
INT16ULED1,LED2,LED3,ad0_int,ad1_int,led_stu;//保存中断采集AD0、AD1值缓冲数据区
INT16Usecond=10,nextsecond=10,total=40,count=0;//用来确定交通灯的的时间
3)定义AD0,AD1信号量
OS_EVENT*sem_adc,*sem_adc1;
4)函数(包括任务函数的声明)声明
5)堆栈大小,串口打印字符数组,数码管段码数组声明
二.函数和需要修改的中断向量表。
1).采用定时器中断方式实现任务的转换,注意关中断来消除中断嵌套。
OSInit();
InitTimer0();//定时器初始化
OSStart();
2).创建4个任务,通道0和1通过信号量还实现同步和互斥
OSTaskCreate(Task1,(void*)0,&Task1Stk[0],2);//秒数减1
OSTaskCreate(Task2,(void*)0,&Task2Stk[0],5);//显示秒数
OSTaskCreate(Task3,(void*)0,&Task3Stk[0],3);//通道0采集数据
OSTaskCreate(Task4,(void*)0,&Task4Stk[0],4);//通道1采集数据
3).设定信号量,来控制AD转换通道0和1
sem_adc=OSSemCreate(0);//是否开始采集数据的信号量
sem_adc1=OSSemCreate(0);
4).显示数码管内容
voiddisplay(unsignedinti,unsignedintj)reentrant//显示数码管设置
{
LED1=i%10;//求个位上的数字
LED2=(i/10)%10;//求十位上的数字
P2=0xff;
if(j==1)//显示0,1数码管
{
delay
(2);
PL=led_segment[LED1];//向数码管个位上段码
led1=0;
delay(50);
led1=1;
if(LED2==0)//如果十位和百位上的数字都为0,则十位上
LED2=10;//的数码管不显示
PL=led_segment[LED2];
led2=0;
delay(50);
led2=1;
}
else//显示2,3数码管
{
delay
(2);
PL=led_segment[LED1];//向数码管个位上段码
led3=0;
delay(50);
led3=1;
if(LED2==0)//如果十位和百位上的数字都为0,则十位上
LED2=10;//的数码管不显示
PL=led_segment[LED2];
led4=0;
delay(50);
led4=1;
}
}
5).添加外部中断0的中断服务函数,用来判断AD0808的AD转换是否结束。
voidextern0()reentrant
{
EX0=0;
{
OSSemPost(sem_adc1);
}
EX0=1;
}
6).在OS_CPU_A.ASM启动代码添加外部中断0。
CSEGAT0003H;ext
LJMPextern0;使用外部中断
RSEG?
PR?
_?
extern0?
OS_CPU_A
extern0:
USING0
CLREA;先关中断,以防中断嵌套。
PUSHALL
LCALL_?
OSIntEnter;监视中断嵌套
LCALL_?
extern0;调用c码中的中断处理函数
LCALL_?
OSIntExit
POPALL
RETI
7).根据实时车流智能显示交通灯的时间
voidsetsecond(void)reentrant//设置时间函数
{
if(led_stu==0x21)//当东西路上上车多时,将绿灯时间延长,反之缩短
{
JTL=0x11;//东西红,南北黄
delay(10000);
JTL=0x0c;//东西绿,南北红
led_stu=0x0c;
second=nextsecond;
}
elseif(led_stu=0x0c)//当东西路由绿灯转红灯时,且车流量较多时,红灯时间减少,反之缩短
{
JTL=0x0a;//东西黄,南北绿
delay(10000);
JTL=0x21;//东西红南北绿
led_stu=0x21;
second=total-nextsecond;
}
}
8).串口输出
voidprint_port(void)reentrant
{
PrintStr("\n\t\t****************************************\n");
PrintStr("\t\t*Realtimetrafficlights-cuipeinan*\n");
PrintStr("\t\t****************************************\n\n\n");
PrintStr("\t\t\t\tThecarofwtoeis");
adc(ad0_int);
PrintStr("\n");
PrintStr("\t\t\t\tThecarofstonis");
adc(ad1_int);
PrintStr("\n");
nextsecond=ad0_int*50/(ad0_int+ad1_int);
PrintStr("\t\t\t\tThenexttimesis");
adc(nextsecond);
PrintStr("\n");
}
9).AD采集数据计算后串口输出
voidadc(unsignedinti)reentrant//将通道0和通道1采集到的数据以及经计算的出的下一次的秒数输出到串口上。
{
PrintChar(print_pdata[(i/100)]);//百位
PrintChar(print_pdata[((i/10)%10)]);//十位
PrintChar(print_pdata[(i%10)]);//个位
Protues仿真图
6、调试过程及处理结果
七、思考讨论题或体会或对改进实验的建议
通过这次课程设计懂得了很多,我自己去图书馆,上网查资料然后自己询问了很多同学完成的,原以为会很简单的,但无论在制作与写作过程中我都遇到了理论课上所不曾遇到的问题,第一是综合性太强,这次制作与论文不仅涉及到我们以前所学到的单片机,高等数学等课程的知识还涉及到很多我们的选修及课外的知识。
第二是理论联系实际性太强,把所学的搜集到得知识运用的实际中不是一件容易的事,不仅由元件从课本上的符号到实物的认识还是理论的测量结果与实际值的误差。
课程设计是对我所学知识理论的检验与总结,能够培养和提高设计者独立分析和解决问题的能力;课程设计提高了我的理论联系实际的能力更在知识的巩固与实际的操作上的衔接提高了我的能力,课程设计中遇到的困难与挫折以及解决这些问题的思路与方法更增加了我对以后工作中遇到困难克服解决的信心,也让我积累了经验,为以后的工作打下了良好的基础,同时也培养了我在遇到突发状况要稳定冷静的精神,也培养了我认真查资料与虚心和他人提问的态度。
这次课程设计业也让我懂得了分析问题,才能解决问题的道理,通过了这次更增加了我以后能够干好自己工作的信心。
八、参考资料
《嵌入式操作系统基础》