课程设计(论文)-基于飞思卡尔的数字时钟.doc_第1页
课程设计(论文)-基于飞思卡尔的数字时钟.doc_第2页
课程设计(论文)-基于飞思卡尔的数字时钟.doc_第3页
课程设计(论文)-基于飞思卡尔的数字时钟.doc_第4页
课程设计(论文)-基于飞思卡尔的数字时钟.doc_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

各专业全套优秀毕业设计图纸 课课 程程 设设 计计 报报 告告 课程设计名称:课程设计名称: 数字时钟数字时钟 系系 别:别: 三系三系 姓姓 名:名: 班班 级:级: 11 电子(电子(1) 学学 号:号:_ _ _ 成成 绩:绩: _ 指指 导导 教教 师师 : 开开 课课 时时 间间 : 2013-20142013-2014 学年学年 下下 学期学期 目录目录 第一章第一章 系统概要系统概要2 2 1.1 系统背景 2 1.2 系统功能 2 第二章第二章 系统硬件设计系统硬件设计3 3 2.1 系统原理图 3 2.2 单片机(mcu)模块 .4 2.2.1 mc9s08aw60 单片机性能概述4 2.2.2 内部结构简图 4 2.3 串行通信模块 5 2.3.1 max232 引脚图5 2.3.2 串行通信的电路原理 6 2.4 液晶显示模块 7 第三章第三章 系统软件设计系统软件设计9 9 3.1 mcu 方(c)程序9 3.1.1 主程序(main.c).9 3.1.2 中断子程序(isr.c) 10 3.1.3 lcd 子程序(lcd.c).12 3.1.4 定时器(timer.c).15 3.1.5 串行通信子程序(sci.c)17 3.1.6 基本输入输出出子程序(goio.c).21 3.1.7 总头文件(includes.h).22 3.1.8 中断处理头文件(isr.h)23 第四章第四章 系统测试系统测试2424 4.1 试验箱连线图 .24 4.2 运行界面调试: .24 4.3 运行结果图: .26 第五章第五章 总结展望总结展望2828 参考文献参考文献2828 1 一设计题目 数字时钟 二主要内容 利用定时器设计一个电子钟,并定义一个启动键。当按下该键时电子时钟 从当前设定值开始走时。按秒刷新,要求在 lcd 屏上显示。 三具体要求 在课程设计时,1 人一组,设计报告由学生独立完成,不得互相抄袭。教 师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问 题和按设计进度进行阶段审查。学生必须发挥自身学习的主动性和能动性,主 动思考问题、分析问题和解决问题,而不应处处被动地依赖指导老师。 学生在设计中可以引用所需的参考资料,避免重复工作,加快设计进程, 但必须和题目的要求相符合,保证设计的正确。学生学会掌握和使用各种已有 的技术资料,不能盲目地、机械地抄袭资料,必须具体分析,使设计质量和设 计能力都获得提高。学生要在老师的指导下制定好自己各环节的详细设计进程 计划,按给定的时间计划保质保量的完成个阶段的设计任务。设计中可边设计, 边修改,软件设计与硬件设计可交替进行,问题答疑与调试和方案修改相结合, 提高设计的效率,保证按时完成设计工作并交出合格的设计报告。 四进度安排 五成绩评定 考核方法:现场验收(占 50%),课程设计报告(占 50%)。 考核内容:学习态度(出勤情况,平时表现等)、方案合理性、程序编制 质量、演示效果、设计报告质量。 成绩评定:优,良,中,及格,不及格。 特别说明:如发现抄袭,按照不及格处理。 周四周五周一周二周三 讲课设内容,安 排任务 查资料,确定硬 件电路方案 画出程序流程图, 写出程序清单 画出程序流程图, 写出程序清单 写总结报告 2 第一章第一章 系统概要系统概要 1.11.1 系统背景系统背景 这些年,人们对数字时钟的要求也越来越高,传统的时钟已不能够满足人 们的需求。多功能数字钟不管在性能还是在样式上都发生了质的变化,有了电 子闹钟,数字闹钟等等。单片机在多功能数字钟中的应用已是非常普遍的,人 们对数字钟的功能及工作顺序都非常的熟悉。由单片机作为数字钟的核心控制 器,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经单片机输 出,利用显示器显示出来。通过键盘可以进行定时,校时功能。输出设备显示 器可以用液晶显示技术和数码管显示技术。 随着科学技术的发展电子技术产业结构调整,单片机开始迅速发展,由于 家用电器逐渐普及,市场对于智能时钟控制系统的需求也越来越大。 数字时钟, 就是以数字显示取代模拟表盘的钟表,在显示上它用数字反应此时的时间,它还 能同时显示时,分,秒,而且能对时,分,秒准确校时,这是普通钟所不及的。 单片机的应用领域已从面向工业控制,通讯,交通,智能仪表等迅速发展到家 用消费产品,办公自动化,汽车电子,pc 机外围以及网络通讯等广大领域。 单片机系统座位一种典型的嵌入式系统,其系统设计包括硬件设计和软件 设计编程设计两个方面,其调试过程一般分为软件调试,硬件调试,系统调试。 1.21.2 系统功能系统功能 本次课程设计的主要任务是设计一个时钟计数器,也就是要做一个秒表, 能够计数,并且按照我们平时的时间计数格式显示,当我们按下某个计数按键 时候,这个计数系统就一秒一秒的计数,当计数到 59 秒就进位,显示分钟的部 分加 1,当计数分钟的数字显示到 59,同样要进位,这时候时钟部分加 1,如 此循环下去。当我们再次按下此按键时候,计数器暂停计数,此时显示器也就 暂停在那个时候不再计数了,并且显示当前计数时间。lcd 显示器要求每显示 一次就刷新一次,或者刷新频率更高些。 3 第二章第二章 系统硬件设计系统硬件设计 2.12.1 系统原理图系统原理图 表 2.1 定时器显示控制系统的硬件构件划分 构建中文名称构建英文名称构建功能类型 aw60 最小系 统 aw60- minsys aw60 mcu 的最小系统,包含 bdm 电 路 核心构建 电源power将+24v 电压转换为+3.3v 电压中间构建 液晶显示lcd采用串行输入模式显示数据终端构建 图 2.1 原理图 上图 2.1 中 aw60 是主要模块,所有的信号都是经过 aw60 模块进行处理, 各个功能模块在 aw60 模块的连接下才能够协调运行起来。图中,左边一块是各 4 异晶振和两个电容连接,用来产生标准的时钟脉冲,在 aw60 上面连接的是 lcd 液晶显示器,用来动态显示当前所计数的秒数,右边一个模块是接地使用,最 下面的是一个开关模块,用来在程序加载后由此开关控制何时开始计数,何时 暂停计数,以及一些复位等操作。 2.22.2 单片机(单片机(mcumcu)模块)模块 2.2.12.2.1 mc9s08aw60mc9s08aw60 单片机性能概述单片机性能概述 s80 是单芯片 8 位微控制器解决法案。mc9s08aw60/aw60/aw48/aw32/aw16 是低成本高性能的 8 位微处理器单元(mcu)s08 家族中的成员。家族中有的 mcu 使用增强型 s08s 核,且使用不同的模块,存储空间,存储器类型与封装类 型。 aw60 系列主要常规模块和特点: (1)最高达 40mhz 的 cpu 工作频率和 20mhz 的内部总线工作频率;时钟源 选项包括晶振,谐振器,外部时钟或,内部产生的时钟。 (2)相比 hc08cpu 指令集,s08cpu 增加了 bgnd 指令。 (3)单线后台调试模式接口:增强的断点能力,允许单一的断点设置在线 调试(在片内调试模块增加了多于两个的断点) 。 (4)内含 32 个中断/复位源;内含 2kb 的片内 ram;内含 60kb 的片内在 线可编程的 flash 存储器,带有 块保护和安全选项。 (5)可选的计算机正常操作(cop)复位;低电压检测与复位或中断;非 法操作码检测与复位;非法地址检测与复位。 (6)adc:多达 16 个通道,10 个 a/d 转换器与动动比较功能;两个串行 通信接口 sci 模块与可选的 13 位中断;一个串行外设接口 spi 模块;集成电路 互联总线 iic 模块运行高达 100kbps 的最高总线负载;8 引脚键盘中断 kbi 模 块。 (7)timers:1 个 2 通道和一个 6 通道 16 位定时器/脉冲宽度调制器模块。 既有输入捕获,输出比较,脉宽调制功能。aw 子系列 mcu 的 4 种封装形式只是 引脚数量和形式有所区别,其他方面是一致的。 5 2.2.22.2.2 内部结构简图内部结构简图 图 2.2 aw60 mcu 内部结构框图 图 2.2 给出了 sw60 内部结构框图,它对于我们理解和应用 aw60 mcu 有重 要作用,在学习了基本方法后,应再反过来熟悉这个内部结构图,以便好好地 理解 aw60 mcu 的基本原理。从内部结构框图可以看出,aw60 主要有以下部件: s08 cpu,存储器,定时器接口模块,定时器模块,看门狗模块,通用 i/o 模块, 串行通信模块(sci),串行外设接口模块(spi),i2c(iic)模块,a/d 转换模块, 键盘中断模块,时钟发生器模块,复位与中断模块等。 2.32.3 串行通信模块串行通信模块 2.3.12.3.1 max232max232 引脚图引脚图 在 mcu 中,若用 rs-232 总线进行串行通信,则需外界电路实现电平转换, 在发送端需要用驱动电平将 ttl 电平转换成 rs-232 电平;在接收端,需要用接 收电路将 rs-232 电平转换为 ttl 电平。电平转换器不仅可以由晶振管分立元件 构成,也可以直接使用集成电路。目前使用 max232 芯片比较多,该芯片使用单 一+5v 电源供电实现电平转换,上图的引脚说明: 6 (1)vcc(16 脚):正电源端,一般为+5v; (2)gnd(15 脚):接地; (3)vs+(2 脚):vs+=2vcc-1.5v=8.5v; (4)vs-(6 脚):vs-=-2vcc-1.5v=-11.5v; (5)c2+,c2-(4,5 脚):一般接 1uf 的电解电容; (6)c1+,c2-(1,3 脚):一般接 1uf 的电解电容。 图 2.3 max232 引脚 2.3.22.3.2 串行通信的电路原理串行通信的电路原理 1、焊接到 pcb 板上的 msx232 芯片检测方法 正常情况下, (1)t1in=5v,则 t1out=-9v;t1in=0v;则 t1out=9v。 (2) 将 r1in 与 t1out 相连,令 t1in=5v,则 r1out=5v;令 t1in=0v,则 t1out=0v。 具有串行通信接口的 mcu,一般具有发送引脚(txd)与接受引脚(rxd) , 不同公司或不同系列的 mcu,使用的引脚缩写名可能不一致,但含义相同。串 行通信接口的外围硬件电路,主要目的是:将 mcu 的发送引脚 txd 与接收端引 脚 rxd 的 ttl 电平,通过 rs-232 电平转换器芯片转换成 rs-232 电平,上图就 是基本串行通信的电平转换电路。 2、 max232 芯片进行电平转换的基本原理 发送过程:mcu 的 txd(ttl 电平)经过 max232 的 11 脚(t1in)送到 max232 内部,在内部 ttl 电平被“提升”为 232 电平,通过 14 脚 (t1out)发送出去。 接收过程:外部 232 电平经过 max232 的 13 脚(r1in)送入到 max232 的内部,在内部的电平被“降低”为 ttl 电平,经过 12 脚(r1out)送到 mcu 的 rxd,进入 mcu 内部。 进行 mcu 的串行通信接口编程时,只针对 mcu 的发送与接收引脚,与 max232 无关,max232 只是起到电平转换作用。输入输出引脚分两组,基本 含义如表 2.2 所示。在实际使用时,若只需要一路串行通信接口,可以使用其 中任何一组。 7 表 2.2 max232 芯片输入输出引脚分类与基本接法 组 别 ttl 电平 引脚 方向典型接口232 电 平引脚 方向典型接口 111 12 输入 输出 接mcu的txd 接 mcu 的 rxd 13 14 输入 输出 连接到接口,与其它 设备通过 232 相接 210 9 输入 输出 接mcu的txd 接 mcu 的 rxd 8 7 输入 输出 连接到接口,与其它 设备通过 232 相接 图 2.4 sci 连接图 2.42.4 液晶显示模块液晶显示模块 2.4.1.2.4.1.点阵字符型点阵字符型 lcdlcd 基本特点:基本特点: lcd 作为电子信息产品的主要显示器件,相对于其他类型的显示器件来说 有其自身的特点,主要包括: (1)低电压,低功耗; (2)平板型结构; (3)使用寿命长; (4)被动显示; (5)显示信息量大且易于彩色化; (6)无电磁辐射。 8 点阵字符型 lcd 是专门用于显示数字,字母,图形符号及少量自定义符号 的液晶显示器。这类显示器把 lcd 控制器,点阵驱动器,字符存储器,显示体 及少量的阻容元件等集成一个液晶显示模板。鉴于字符型液晶显示模块目前在 国际上已经规范化,其电特性及接口特性是统一的,只要设计出一种型号的接 口电路,在指令上稍加修改即可使用各种规格的字符型液晶显示器模块。 点阵字符型液晶显示器模块的控制器大多数为日立公司生产的 hd44780 及 其兼容的控制电路,如:sed1278(seikoepson);ks0066(samsung); nju6408(ner japanradio)等。 2.4.22.4.2 字符型液晶显示器模块的特点如下:字符型液晶显示器模块的特点如下: (1)液晶显示屏是以若干 5*8 或 5*11 点阵块等组成的显示字符群。每个点 阵块块为一个字符位,字符间距和行间距都是一个点的宽度。 (2)主控制电路为 hd44780(hitachi 及其他公司的兼容电路。从程序员的 角度来看 lcd 显示接口与编程是面向 hd44780 的,只要了解 hd44780 的编程结 构即可进行 lcd 的显示编程。 (3)内部具有字符发生器 rom,可显示 192 种字符。 (4)具有 64 字节的字符发生器 ram,可以定义 8 个 5*8 点阵字符或 4 个 5*11 的点阵字符。 (5)具有 64 字节的数据显示 ram,供显示器编程使用。 (6)标准接口特性,与 mc9s08 系列的 mcu 容易接口。 (7)模块结构紧凑,轻巧,装配容易。 (8)单+5v 电源供电(宽温型需要加-7v 驱动电源) 。 (9)低功耗,高可靠性。 9 图 2.5 mcu 控制液晶显示接口连线图 第三章第三章 系统软件设计系统软件设计 3.13.1 mcumcu 方(方(c c)程序)程序 3.1.13.1.1 主程序主程序(main.c)(main.c) /-* /工 程 名: timer /硬件连接: mcu 的串口与 pc 方的串口相连 /程序描述: / (1)打开程序目录中的 timer1.exe,用串口发生给 mcu 表示时间的 3 字节数据 / (2)利用定时器溢出中断修改时间,并发送新时间 /目 的: 学习定时器基本功能 /说 明: 无 /-苏州大学飞思卡尔嵌入式系统实验室 2010 年-* /总头文件 #include “includes.h“ /在此添加全局变量定义 uint8 time6; /记录时间的数组 void main(void) uint8 i=0; uint8 lcdbuff = “ “;/32 个空格,显示屏初始字符 uint8 remember; /记录当前秒数的变量 /1 关总中断 disableinterrupt(); /禁止总中断 /2 芯片初始化 mcuinit(); /3 模块初始化 tpminit(1); /(1)定时器 1 初始化 sciinit(1,system_clock,9600); /(2)串行口初始化 /4 内存初始化 time0 = 23; /(1) “时分秒“缓存初始化(00:00:00) time1 = 59; time2 = 55; time3 = 31; /(1) “缓存初始化(00:00:00) time4 = 7; time5 = 14; remember = time2; /(2) 临时变量 remember 初始化 lcdshow(lcdbuff); /显示初始字符 /5 开放中断 enablescireint(); /(1)开放串口接受中断 10 enabletimerint(1); /(2)开放定时器 1 溢出中断 enableinterrupt(); /(3)开放总中断 /6 主循环 while (1) if(gpio_get(lcd_run_port,0)=lcd_run) enabletimerint(1); if (time2 != remember) scisendn(1, 6, time); lcdbuff4=time5/10+0; lcdbuff5=time5%10+0; lcdbuff6=/; lcdbuff7=time4/10+0; lcdbuff8=time4%10+0; lcdbuff9=/; lcdbuff10=time3/10+0; lcdbuff11=time3%10+0; lcdbuff20=time0/10+0; lcdbuff21=time0%10+0; lcdbuff22=:; lcdbuff23=time1/10+0; lcdbuff24=time1%10+0; lcdbuff25=:; lcdbuff26=time2/10+0; lcdbuff27=time2%10+0; lcdshow(lcdbuff) ; remember=time2; if(gpio_get(lcd_run_port,0)!=lcd_run) disabletimerint(1); 3.1.23.1.2 中断子程序中断子程序(isr.c)(isr.c) /-* /文件名: isr.c / 说 明: 中断处理函数文件 /-* /头文件 #include “isr.h“ /此处为用户新定义中断处理函数的存放处 /-* /函数名: isrt1out /功 能: 定时器 1 溢出中断处理函数,以秒为最小单位计时,并清定时器 1 溢出标志位 * 11 /参 数: 无 /返 回: 无 /说 明: 调用 secadd1 函数 /-* interrupt void isrt1out(void) uint8 temp; disableinterrupt(); /禁止总中断 secadd1(time); /1s 到,递增时,分,秒缓冲区的值 /清定时器 1 溢出标志 temp = tpm_cstr(1); /读取定时器 1 状态和控制寄存器 tpm1sc tpm_cstr(1) /向定时器溢出标志位 tof 写 0 enableinterrupt(); /开放总中断 /-* /函数名: isrscire /功 能: sci 接收中断处理函数,接收 3 个字节数据作为基准时分秒的值,放入 / time0-2 /参 数: 无 /返 回: 无 /说 明: 调用了 sciren 函数 /-* interrupt void isrscire(void) uint8 temp; disableinterrupt(); /禁止总中断 temp=sciren(1, 6,time); /接收 6 个字节,放入 time 数组 enableinterrupt(); /开放总中断 /未定义的中断处理函数,本函数不能删除 interrupt void isrdummy(void) /中断处理子程序类型定义 typedef void(*isr_func_t)(void); /中断矢量表,如果需要定义其它中断函数,请修改下表中的相应项目 const isr_func_t isr_vectors 0xffcc = isrdummy, / 0xffcc /rti (periodic interrupt) vector isrdummy, / 0xffce /iic vector isrdummy, / 0xffd0 /analog to digital conversion vector isrdummy, / 0xffd2 /keyboard vector isrdummy, / 0xffd4 /sci2 transmit vector isrdummy, / 0xffd6 /sci2 receive vector isrdummy, / 0xffd8 /sci2 error vector isrdummy, / 0xffda /sci1 transmit vector isrscire, / 0xffdc /sci1 receive vector 12 isrdummy, / 0xffde /sci1 error vector isrdummy, / 0xffe0 /spi vector isrdummy, / 0xffe2 /tpm2 overflow vector isrdummy, / 0xffe4 /tpm2 channel 1 vector isrdummy, / 0xffe6 /tpm2 channel 0 vector isrt1out, / 0xffe8 /tpm1 overflow vector isrdummy, / 0xffea /tpm1 channel 5 vector isrdummy, / 0xffec /tpm1 channel 4 vector isrdummy, / 0xffee /tpm1 channel 3 vector isrdummy, / 0xfff0 /tpm1 channel 2 vector isrdummy, / 0xfff2 /tpm1 channel 1 vector isrdummy, / 0xfff4 /tpm1 channel 0 vector isrdummy, / 0xfff6 /icg vector isrdummy, / 0xfff8 /low voltage detect vector isrdummy, / 0xfffa /irq pin vector isrdummy / 0xfffc /swi vector / reset defined in project.prm ; 3.1.33.1.3 lcdlcd 子程序子程序(lcd.c)(lcd.c) /-* / 文件名: lcd.c / 说 明: lcd 驱动 /-* #include “lcd.h“ /该头文件包含寄存器及相关位定义 /-* /函数名: lcdinit /功 能: 初始化 lcd(hd44780),设置显示方式,输入方式,并清屏 /参 数: 无 /返 回: 无 /说 明: 调用了 lcdcommand 函数 /-* void lcdinit(void) uint16 i; /定义数据口(pta0-7)为输出 lcddatad = 0b11111111; / | / |+-pta0 / |+-pta1 / |+-pta2 / |+-pta3 / |+-pta4 / |+-pta5 / |+-pta6 13 / +-pta7 /定义控制口(ptc4,ptc6)为输出 lcdctrld1 |=(1 1.6ms for(i = 0; i 40us for(i = 0; i 40us for(i = 0; i 2) tpmno=2; else if(tpmno= 60) /秒溢出 *(p+2) = 0; /清秒 *(p+1) += 1; /分加 1 if (*(p+1) = 60) /分溢出 *(p+1) = 0; /清分 *p += 1; /时加 1 if (*p = 24) /时溢出 *p = 0; /清时 *(p+3)+= 1; if (*(p+4)=1|(*(p+4)=3|(*(p+4)=5|(*(p+4)=7|(*(p+4)=8|(*(p+4)=10|(*(p+4)=12) if(*(p+3)31) *(p+3)=1; *(p+4)+=1; if (*(p+4) 12) *(p+4)=1; *(p+5)+=1; else if (*(p+4)=4|(*(p+4)=6|(*(p+4)=9|(*(p+4)=11) if(*(p+3)30) *(p+3)=1; *(p+4)+=1; 17 if (*(p+4) 12) *(p+4)=1; *(p+5)+=1; else if (*(p+4)=2) if(*(p+5)%4=0) if(*(p+3)29) *(p+3)=1; *(p+4)+=1; else if (*(p+3)28) *(p+3)=1; *(p+4)+=1; 3.1.53.1.5 串行通信子程序(串行通信子程序(sci.c)sci.c) /-* /文件名: sci.c /说 明: sci 构件函数源文件 /-* /头文件 #include “sci.h“ /该头文件包含 sci 相关寄存器及标志位宏定义 /-* /函数名: sciinit /功 能: 初始化 scix 模块。x 代表 1,2 /参 数: uint8 scino: 第 scino 个 sci 模块。其中 scino 取值为 1,2 / 如果 scino 大于 2,则认为是 2 / uint8 sysclk: 系统总线时钟,以 mhz 为单位 / uint16 baud: 波特率,如 4800,9600,19200,38400 / 一般来说,速度慢一点,通信会更稳定 /返 回: 无 /说 明: scino=1 表示使用 sci1 模块,依此类推。 /-* void sciinit(uint8 scino, uint8 sysclk, uint16 baud) uint16 ubgs; ubgs=0; 18 if(scino 2) scino = 2; /若传进的通道号大于 2,则按照 2 来接收 /1.计算波特率并设置:ubgs = fsys/(波特率*16)(其中 fsys=sysclk*1000000) ubgs = sysclk*(10000/(baud/100)/16; /理解参考上一行,此处便于 cpu 运算 sci_bdh(scino) = (uint8)(ubgs sci_bdl(scino) = (uint8)(ubgs /无校验,正常模式(开始信号 + 8 位数据(先发最低位) + 停止信号) sci_c1(scino) = 0b00000000; /sci 控制寄存器 1 / | / |+-pt -奇偶校验类型,在 pe=1 时游泳 / |+-pe -奇偶校验使能, / |+-ilt -闲置线路类型选择 / |+-wakei-接受长期唤醒方式选择 / |+-m -9 位或 8 位数据选择 / |+-rsrc -接收器源选择 / |+-sciswai 等待模式中 sci 停止 / +-loops-循环模式选择 /允许发送,允许接收,中断方式收发 sci_c2(scino) = 0b00001100; /sci 控制寄存器 2 / | / |+-sbk -发送中止字符 / |+-rwu -接收器唤醒控制 / |+-re -接收器使能 / |+-te -发送器使能 / |+-ilie -闲置线路中断使能 / |+-rie -接收器中断使能 / |+-tcie -发送完成中断使能 / +-tie -发送中断使能 /-* /函数名: scisend1 /功 能: 串行发送 1 个字节 /参 数: uint8 scino: 第 scino 个 sci 模块,其中 scino 取值为 1,2 / uint8 ch: 要发送的字节 /返 回: 无 /说 明: scino=1 表示使用 sci1 模块,依此类推 /-* void scisend1(uint8 scino, uint8 ch) if(scino 2) scino = 2; /若传进的通道号大于 2,则按照 2 来接收 while(!(sci_s1(scino) /判断发送缓冲区是否为空 sci_d(scino) = ch; 19 /-* /函数名: scisendn /功 能: 串行发送 n 个字节 /参 数: uint8 scino: 第 scino 个 sci 模块,其中 scino 取值为 1,2 / uint16 n: 发送的字节数 / uint8 ch: 待发送的数据 /返 回: 无 /说 明: scino=1 表示使用 sci1 模块,依此类推 / 调用了 scisend1 函数 /-* void scisendn(uint8 scino, uint16 n, uint8 ch) uint16 i; if(scino 2) scino = 2; /若传进的通道号大于 2,则按照 2 来接收 for (i = 0; i 2) scino = 2; /若传进的通道号大于 2,则按照 2 来接收 for (k = 0; k = 0xfbbb) /接受失败 i = 0xff; *p = 0x01; 20 return i; /-* /函数名: sciren /功 能: 从串口接收 n 个字节的数据 /参 数: uint8 scino: 第 scino 个 sci 模块,其中 scino 取值为 1,2 / uint16 n: 要接收的字节数 / uint8 ch: 存放接收数据的数组 /返 回: 接收标志= 0 接收成功,= 1 接收失败 /说 明: scino=1 表示使用 sci1 模块,依此类推 / 调用了 scire1 函数 /-* uint8 sciren(uint8 scino, uint16 n, uint8 ch) uint16 m; uint8 fp; /接收标志 m = 0; if(scino 2) scino = 2; /若传进的通道号大于 2,则按照 2 来接收 while (m 2) scino = 2; /若传进的通道号大于 2,则按照 2 来接收 if(p = 0) return; 21 for(k = 0; pk != 0; +k) scisend1(scino,pk); 3.1.63.1.6 基本输入输出出子程序(基本输入输出出子程序(goio.c)goio.c) /-* / 文件名: gpio.c / 说 明: gpio 驱动程序文件 /-* #include “gpio.h“ /包含 gpio 头文件 /-* /函数名: gpio_init /功 能: 初始化 gpio /参 数: port:端口名 / pin:指定端口引脚 / direction:引脚方向,0=输入,1=输出 / state:初始状态,0=低电平,1=高电平 /返 回: 无 /说

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论