嵌入式实时操作系统(第14课时)

上传人:第*** 文档编号:49487790 上传时间:2018-07-29 格式:PPT 页数:20 大小:461KB
返回 下载 相关 举报
嵌入式实时操作系统(第14课时)_第1页
第1页 / 共20页
嵌入式实时操作系统(第14课时)_第2页
第2页 / 共20页
嵌入式实时操作系统(第14课时)_第3页
第3页 / 共20页
嵌入式实时操作系统(第14课时)_第4页
第4页 / 共20页
嵌入式实时操作系统(第14课时)_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《嵌入式实时操作系统(第14课时)》由会员分享,可在线阅读,更多相关《嵌入式实时操作系统(第14课时)(20页珍藏版)》请在金锄头文库上搜索。

1、嵌入式实时操作系统第七章 在51单片机上移植 c/os-II7.3 应用举例7.3.1 LED数码显示器的驱动程序 LED显示以其简单、使用、价格低廉等优点,使它是单片机应用中经常使用的一 种显示方式。其中一种方案的硬件电路如图7-3所示。PB.0 PB.1 PB.2 PB.3 PB.4 PB.5 PB.6 PB.7PA.7 PA.6 PA.5 PA.4 PA.3 PA.2 PA.1 PA.0AD7AD0 ALE IO/M CE WR RDP0端口ALE P2.0 P2.7 WR RD8031EA5V段选信号a bc d e f gdp位选信号7407图7-3 LED显示硬件原理图在图7-3中

2、,8位8段LED显示器为共阴极接法,采用并行接口8155通过驱动器 7407来进行驱动。该方案中使用8155的PA端口进行显示器的位选择(低电平 有效);使用PB端口进行显示器的字段选择(高电平有效)。 已知8155命令字端口地址为7F00H,PA端口地址为7F01H,PB端口地址为 7F02H,显示器的段选码存放在单片机内部RAM中从标号地址TABLE开始的 连续16个单元中。 #include INT8U xdata * DspBuffer; /定义显示缓冲区指针 INT8U code * Tbl; /定义段码表指针 INT8U xdata * Cmd; /定义8155命令字寄存器指针 I

3、NT8U xdata * Pa; /定义8155的PA端口指针 INT8U xdata * Pb; /定义8155的PB端口指针 INT8U bitCtl; /定义位控信号字 INT8U I; void TaskLEDDsp(void *ppdata) reentrant; OS_STK TaskLEDDspStk64; /任务堆栈void main(void) OSInit( );InitTimer0( );OSTaskCreate(TaskLEDDsp,(void *)0,OSStart( ); void TaskLEDDsp(void *ppdata) reentrant ppdata=

4、ppdata;Cmd=0x7F00; /Cmd指向8155命令字寄存器Pa=0x7F01; /Pa指向8155的PA端口Pb=0x7F02; /Pb指向8155的PB端口*Cmd=0x03; /传送8155命令字DspBuffer=DSPB; /显示缓冲区首地址Tbl=TABLE; /段码表首地址for( ; ; )bitCtl=0x7F; /位控信号赋初值for(i=0;i1; /位控字左移1位bitCtl=bitCtl|0x80; /位控字高位补1 7.3.2 51单片机串行接口的应用1、51单片机的串行接口 51系列单片机的内部有一个可编程的全双工异步串行通信接口,它主要由2个共 用端口

5、(SBUF)的串行数据缓冲器和1个波特率发生器构成,片外有一根串行 数据接收线RXD(P3.0)和一根串行数据发送线TXD(P3.1)。51系列单片机串行 数据接口的结构如图7-4所示。51单片机ACCSBUF发送缓冲器接收缓冲器波特率发生器发送引脚TXD接收引脚TXDP3.1P3.0图7-4 51单片机串行接口的构成串行数据接口有如表7-1所列的4种工作方式可供选择。表7-1 51单片机串行数据接口的工作方式工作方式SM0 SM1说 明波特率工作方式0工作方式1工作方式2工作方式300111100移位寄存器(用于I/O扩展)10位异步收发11位异步收发11位异步收发fosc/12波特率可变,

6、由T1控制fosc/64或fosc/32波特率可变,由T1控制可以使用SCON和PCON这两个控制字来设置51单片机的串行数据接口的工作方 式。这两个控制字的格式分别如图7-5和图7-6所示。SM0 SM1 SM2 REN TB8 RB8TIRID7D6D5D4D3D2D1D0 SCON (98H) 接收中断标志 发送中断标志 接收数据第9位 发送数据第9位 接收控制:1允许;0禁止 多机通信:1允许;0禁止 工作方式选择图7-5 串行接口SCON控制字格式SM0 SM1 SM2 REN TB8 RB8TIRID7D6D5D4D3D2D1D0 PCON (87H)波特率选择位图7-6 PCON

7、控制字格式当采用工作方式0时:当采用工作方式2时:当采用工作方式1和方式3时:式中:X定时器T1定时预置初值;K定时器的位数(8、13或16)。2、应用程序 下面的应用程序中设置了3个任务,每个任务通过串行接口滚动输出一个字符串 /* / 串口应用程序清单 /* #include void Task1(void *ppdata) reentrant; /定义任务1 void Task2(void *ppdata) reentrant; /定义任务2 void Task3(void *ppdata) reentrant; /定义任务3 OS_STK Task1Stk64; /定义任务1堆栈 OS

8、_STK Task1Stk64; /定义任务1堆栈/主函数- void main(void) OSInit( );InitTimer( ); /初始化系统时钟InitSerial( ); /串口初始化InitSerialBuffer( ); OSTaskCreate(Task1,(void *)0,OSTaskCreate(Task2,(void *)0,OSTaskCreate(Task3,(void *)0,OSStart( ); /任务1- void Task1(void *ppdata) reentrant ppdata=ppdata;ET0=1;clrscr( );PrintStr(

9、“ntt*n”);PrintStr(“tt* Hello!The world. *n”);PrintStr(“tt*nnn”);for( ; ; )PrintStr(“ttt This is Task1.n”);OSTimeDly(OS_TICKS_PER_SEC); /任务2- void Task2(void *ppdata) reentrant ppdata=ppdata;for( ; ; ) PrintStr(“tttt This is Task2.n”);OSTimeDly(3*OS_TICKS_PER_SEC); /任务3- void Task3(void *ppdata) reen

10、trant ppdata=ppdata;for( ; ; ) PrintStr(“tttt This is Task3.n”);OSTimeDly(6*OS_TICKS_PER_SEC); /* / serial.h文件 /* void InitSerial( ) reentrant; /串口初始化 void InitSerialBuffer(void) reentrant; /串口缓冲区初始化 void PrintChar(unsigned char ch) reentrant; /显示字符 void PrintStr(unsigned char *str) reentrant; /显示字符串 void clrscr( ) reentrant; /清屏 void serial(void) reentrant; /串口中断服务子程序 /收发数据缓冲区长度 #define LenTxBuf 2000 #define LenRxBuf 50 #define MaxLenStr 100/* / serial.c文件 /* INT8U xdata TxBufLenTxBuf,RxBufLenRxBuf; /收发缓冲区实体 INT8U xdata *inTxBuf, *outTxBuf, *inRxBuf, *outRx

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号