




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及接口技术(实验教程)动力装置电控所 编哈尔滨工程大学前言单片机是一款功能强大的实用工具,其本身的性质就决定了学习单片机最为有效的途径实践。而实践的缺乏同时也是造成大多数人学习单片机比较困难的主要原因。本实验课程设置的目的旨在部分解决上述问题,为同学们提供相关实验设备,通过实践的方式解决理论学习中存在的疑惑,以期达到整个课程设置的目的:帮助同学们完成单片机入门知识的学习。实验预习及实验步骤请参考第一章实验手册实验课程分数分配请参考第二章考核方式相关软件以及驱动安装请参考第三章实验箱使用说明第一章 实验手册实验一 单片机通用输入输出端口应用实验(一)实验目的1、熟悉实验箱的组成与使用。2、掌握程序的下载与调试的基本流程。3、了解单片机通用端口工作的基本原理。(二)实验器材主机 试验箱组件 接插线(三)实验说明本实验旨在通过使用gpio(通用输入输出端口)检测拨码开关状态和点亮led小灯的形式使学生了解单片机工作的基本原理。(四)实验原理1、led原理如下图所示,8个led(d1d8)一端接vcc5,另一端接三极管(rq1rq8)的集电结。三极管发射结接地,基区经电阻(rd1rd8)接插孔d-jk。16个插孔每两个一组,分别对应8个led,同组的两个插孔等价。由三极管的工作原理可知。将插孔,即三极管的基区电压接低。使得三极管集电节反相偏置,led正向导通后点亮。图1-1 led原理图2、拨码开关原理如图所示四个拨码开关(k1k4),“1”脚接地,“3”脚悬空,“2”脚一方面经1k电阻与vcc-input连接,另一方面与插孔k-jk相连。通过拨动拨码开关改变插孔k-jk的输出电平。当“2”脚与“1”脚连接时,插孔k-jk被拉低。当“2”脚与“3”脚连接时,插孔k-jk被置高。图1-2 拨码开关原理图(五)实验步骤1、安装codewarrior5.0(上课前务必安装好)。2、由实验指导老师介绍实验原理,注意事项。3、连接下载器与主机,参考本教程第三章第二节的步骤3、4安装下载器的相关驱动。5、将子版上pb端口的8个插针分别与8个调试小灯(d-jk)相连,将拨码开关k4与子板上pa的第0端口相连。图1-3 实物连线图5、连接烧写器与目标板。7、经指导老师检测无误后上电。8、在codewarrior开发环境中打开实验资料/程序/codewarrior5.0编写/project01gpio,并将编译无误的程序烧写到目标板中。9、点击全速运行按钮后拨动拨码开关,观察led灯亮灭变化。12、修改代码改变led灯的点亮逻辑,诸如左边四个与右边四个交替点亮,或是8个灯交叉点亮。10、关掉电源,从子板上拔掉下载器。11、重新上电,拨动拨码开关,再次观察实验现象。(六)程序流程图图1-5 程序流程图(七)源程序代码void main(void) /* put your own code here */ byte k=0, temp=0; int i=0, j=0; /变量声明 /配置端口方向寄存器 ddrb = 0xff; /portb全为输出 ddra = 0xfe; /porta的第0端口为输入 enableinterrupts; for(;) if(porta & 0x01) 0)/如果porta的第0端口为高 for(i=0; i1000; i+) for(j=0; j1000; j+);/软件延时 portb = portb; /将portb端口数据寄存器值按位取反 else/如果porta的第0端口为低 for(k=0; k8;k+) temp = 0x01 k;/逻辑左移k位 portb = temp; /赋值portb端口数据寄存器 for(i=0; i1000; i+) for(j=0; j500; j+);/软件延时 /* wait forever */ /* please make sure that you never leave this function */实验二 输入捕捉和pwm输出模块编程实验(一)实验目的1、了解tim(ect)与pwm模块的基本工作原理。2、熟悉并掌握对输入捕捉模块的控制与使用。3、能够进行输入捕捉技术的c语言编程。(二)实验器材主机 试验箱组件 接插线(三)实验说明本实验完成pwm模块和输入捕捉模块的使用,在程序中使用pwm模块产生矩形波,其中pwmper0寄存器用于设置pwm的周期,pwmdty0寄存器用于设置pwm的占空比,pwm模块的运行频率是总线时钟16分频,即1mhz,如果pwmper0=200,相当于pwm模块输出波形的周期为pwm模块运行周期的200倍,周期为200s。将pwm模块的输出与输入捕捉模块相连,输入捕捉用于pwm周期检测,程序中设置的输入捕捉进行下降沿捕捉,由于输入捕捉模块的运行频率(即自由定时器频率)为总线频率(16mhz),那么捕获周期为200s波形,捕获值应该为200*16。所以程序中输入捕捉捕捉到的值(periodtim)应该为pwmper0的16倍。修改pwmper0的值(不能太小,建议大于50,同时修改相应的pwmdty0,保证pwmdty0小于pwmper0),检查periodtim是否是pwmper0的16倍。(四)实验原理1、pwm输出方波原理图2-1 pwm原理图pwm模块的计时频率为f1=1mhz。如上图所示,通过寄存器pwmper0设置方波的周期t= pwmper0*(1/ f1)。通过寄存器pwmdty0设置方波的高电平维持的时间th = pwmdty0*(1/ f1),以此来输出周期与占空比可调的方波。2、ect输入捕捉原理图2-2 ect输入捕捉原理图主定时器按照预先设定的频率f2=16mhz循环计数(065535)。所谓输入捕捉就是在触发条件到来时(预先设定的触发边沿)记录当前主定时器的值。如上图所示,在某连续的两个上升沿记录的主定时器值分别为timeex和timenow。因此,通过ect输入捕捉计算方波的周期为:periodtim= timenow-timeex (2.1)t = periodtim *(1/f2) (2.2)由pwm输出方波的原理可知:t= pwmper0*(1/ f1)。因此有:pwmper0*(1/ f1)= periodtim *(1/f2) (2.3)即 periodtim =pwmper0*16 (2.4)所以,pwm和ect各自模块的计数频率一旦设定。通过ect输入捕捉所计算的periodtim值总是pwmper0得16倍。即改变pwmper0的值,通过在线观测到的periodtim一定是pwmper0的16倍。3、ect输入捕捉溢出计算原理图2-3 ect捕捉溢出原理图原理2中,为说明方便特意将连续的两次捕捉放在主定时器的某一循环内。然而实际情况不止如此,倘若pwm输出方波的周期很大,ect两次连续的捕捉将跨越一次甚至多次主定时器的溢出。此时计算连续的两次捕捉之间的主定时器计数值就要考虑溢出次数的影响:periodtim= timenow+65536* flownum timeex (2.4)(五)实验步骤1、检测实验箱电源开关是否为关,请务必保证开关处于关的位置。2、由实验指导老师介绍实验原理。3、连接主机、烧写器与目标板。4、将实验箱核心板上pp端口的0端口(pwm的0通道)与核心板上pt的0端口(tim的0通道)相连。图2-4 实物连线图5、经实验指导老师确认连线无误后方可上电。5、在codewarrior开发环境中打开实验资料/程序/codewarrior5.0编写/ project02ect_pwm,并将编译无误的程序烧写到目标板中。6、运行目标板,在线观察periodtim是否为pwmper0的16倍,7、修改pwmper0的值(不能太小,建议大于50,同时修改相应的pwmdty0,保证pwmdty0小于pwmper0),并重新下载程序,再次观察。(六)程序流程图图2-5 溢出中断(左)与输入捕捉中断(右)流程图图2-4 主程序流程图(七)源程序代码/*头文件*/#include #include derivative.h /*全局变量*/unsigned int timeex=0; /前一次下降沿时定时器计数值unsigned int timenow=0; /当前下降沿定时器计数值long int periodtim=0; /计算得到的周期值long int flownum=0; /记载自由运行定时器溢出次数/*总线时钟设置:外部晶振16mhz,单片机总线时钟也设置为16mhz*/void busclock_init(void) clksel = 0x00; /将pll锁相环脱离系统从而进行配置 pllctl_pllon = 1; /打开pll锁相环 synr = 0x00; refdv = 0xc0; postdiv = 0x00; while(!(crgflg_lock=1);/等待pll锁相环稳定 clksel_pllsel = 1; /在系统中使用pll锁相环 /*tim初始化*/void tim_init(void) /*配置自由运行定时器的分频系数*/ tscr2_toi = 1; /定时器溢出中断使能 tscr2 = tscr2&0xf8; /预分频系数为1,即定时器频率为总/线频率 tscr1_ten = 1; /开启自由运行定时器 /*输入捕捉相关寄存器设置*/ tios_ios0 = 0; /通道0设置为输入捕捉功能 tctl4 = tctl4&0xfc|0x02; /通道0下降沿捕捉 tie_c0i = 1; /通道0输入捕捉/输出比较中断允许 /*pwm初始化*/void pwm_init(void) pwmpol = 0x01; /通道0先输出高电平 pwmclk_pclk0 = 0; /0通道使用a时钟源 pwmprclk = 0x04; /a时钟频率为总线时钟16分频 pwmcae = 0x00; /左对齐输出 pwmctl = 0x00; /各通道8位pwm输出 pwmper0 = 200; /pwm0周期 pwmdty0 = 100; /pwm0占空比 pwmsdn = 0x00; pwme_pwme0 = 0; /0通道禁止/*主程序*/void main(void) busclock_init(); /调用总线时钟设置函数 tim_init(); /调用tim初始化函数 pwm_init(); /调用pwm初始化函数 pwmdty0 = 100; / pwm0周期 pwmper0 = 250; / pwm0占空比 enableinterrupts; /全局中断使能 pwme_pwme0 = 1; /pwm的0通道使能 for(;); /永久循环/*中断服务程序*/#pragma code_seg non_banked/*自由运行定时器溢出中断服务程序进行溢出次数计算*/void interrupt 16 timovfisr(void)/tim自由定时器计时溢出中断向/量号为16 flownum+; tflg2_tof = 1;/*通道0输入捕捉中断服务程序完成周期的计算*/void interrupt 8 timch0isr(void) /输入捕捉通道0的中断向量号/为8timenow = tc0; periodtim = timenow +flownum*65536-timeex; timeex = timenow;flownum = 0; /每计算一次周期后需要将flownum清零tflg1_c0f = 1; /清除中断标识位实验三 单片机串行通信实验(一)实验目的1、了解串口通信的基本工作原理。2、熟悉并掌握对sci模块的控制与使用。3、能够进行sci串口通信的c语言编程。(二)实验器材主机 试验箱组件 接插线 usb转串口线(三)实验说明本实验通过rs232串口通信实现电脑和单片机的通信,其中单片机部分通过sci模块进行数据传输。本实验程序完成如下功能:初始化单片机后,单片机向电脑发送字符串“ok”,在电脑端通过串口通信助手向单片机发送字符,单片机会将接收到的字符回发给电脑。 (四)实验步骤1、检测实验箱电源开关是否为关,请务必保证开关处于关的位置。2、由实验指导老师介绍实验原理。3、连接主机、烧写器与目标板。4、通过usb转串口线(或串口线)将实验箱中“串口通信”部分的db9端口与计算机相连。图3-1 usb转串口线图3-2 实物连线图5、在codewarrior开发环境中打开实验资料/程序/codewarrior5.0编写/ project03sci,并将编译无误的程序烧写到目标板中。6、在电脑上打开串口调试工具(试验资料/串口调试工具),选择正在使用的串口号,方法是右击我的电脑/管理/设备管理器/端口(com和lpt),并将串口调试工具的波特率设置为9600。7、运行程序,串口调试工具中的接收区将会收到字符串“ok”,在串口调试工具的发送区输入字符或字符串,按下“手动发送”按钮发送字符或字符串,目标板接收到字符后会将字符再回发给电脑,在串口调试工具的接收区显示。(五)程序流程图图3-3 程序流程图(六)源程序代码/*头文件*/#include #include derivative.h/*总线时钟设置,设置为16mhz*/ void busclock_init(void) clksel=0x00; /将pll锁相环脱离系统从而进行配置 pllctl_pllon=1; /打开pll锁相环 synr=0x00; refdv=0xc0; postdiv = 0x00; while(!(crgflg_lock=1); /等待pll锁相环稳定 clksel_pllsel =1; /在系统中使用pll锁相环 /*sci模块的初始化*/void sci_init(void)sci0bd = 104; /设置波特率,波特率为:16000000/(16*104),/约9600bit/s sci0cr1 = 0x00; /普通操作模式;sci在等待模式下使能; 1 /位起始位 8位数据位, 1位停止位;pe=0,/禁止奇偶校验sci0cr2 = 0x0c; /发送器和接收器使能,相关中断禁止/*单片机发送一个字节*/void sci_char_send (unsigned char ch) while(!(sci0sr1&0x80) ; /等待发送数据寄存器空,为空跳出循/进行数据发送 sci0drl=ch;/*单片机接收一个字节*/unsigned char sci_char_get(void) return sci0drl;/*主程序*/void main(void) char getchar = 0; /用于保存接收到的字符 busclock_init(); /调用时钟总线初始化函数sci_init(); /调用sci初始化函disableinterrupts; /全局中断禁止sci_char_send (o); sci_char_send (k);sci_char_send (n); /发送换行符 for(;) /进入大循环 if(sci0sr1&0x20) /rdrf置位,即接收数据寄存器满 getchar = sci_char_get(); /读取接收到的数据sci_char_send (getchar); /将接收到的数据发送给pc机 sci_char_send (/); /每个字符之间用/隔开 实验四 模/数转换实验(一)实验目的1、了解ad转换的原理。2、熟悉并掌握对模数转换(ad)模块的使用。3、能够进行模数转换模块的c语言编程。(二)实验器材主机 试验箱组件 接插线(三)实验说明本实验完成ad模块的数据采集,将变阻器的一端与单片机的ad模块的0端口相连,旋转变阻器即改变输入到单片机引脚的电压,ad模块采集电压值,并将其转化为8位数字值,再通过8个led显示数字值的二进制值,灯亮代表1,灯灭代表0,旋转变阻器,可以看见8个led相应变化。(四)实验原理ad转换原理请参考教材或其他资料,在此简单说明电位器原理。图4-1 电位器原理图如上图所示,电位器实际上就是滑动电阻,v1的3脚接5v(vcc-input),1脚接地。旋转电位器改变1-2和2-3之间的电阻值,从而改变2端口的输出电压。2端口与三个插孔(adv1-jk)相连。三个插孔等价,v2同v1。(五)实验步骤1、检测实验箱电源开关是否为关,请务必保证开关处于关的位置。2、由实验指导老师介绍实验原理。3、连接主机、烧写器与目标板。4、将子版上pb端口的8个插针分别与8个调试小灯(d-jk)相连,将变阻器adv1-jk或adv2-jk的任意一个接口与子板上pad的第0端口相连。图4-2 实物连线图2、在codewarrior开发环境中打开实验资料/程序/codewarrior5.0编写/ project04ad,并将编译无误的程序烧写到目标板中。3、运行目标板,旋转变阻器,观察变量adresult 以及led的显示。4、改变采样精度,重新编译并下载程序。旋转变阻器,观察ad转换结果。(六)程序流程图图4-3 ad转换流程图(七)源程序代码/*头文件*/#include #include derivative.h /*ad模块0初始化*/void atd0_init(void) atd0ctl1 = 0x00; /8位采样精度atd0ctl2 = 0x40; /ad模块上电,标志快速清除,禁止外部触发atd0ctl3 = 0x88; /每个转换序列完成1次转换,非先入先出模式atd0ctl4 = 0x87; /采样时间为2个ad时钟,ad时钟为总线时/钟16分频atd0ctl5 = 0x20; /对通道0单通道连续采样,转换结果右对齐/无符号数/*ptb端口初始化函数*/void portb_init(void)ddrb = 0xff; /定义portb端口为输出口portb = 0xff; /关闭所有led灯/*主程序*/void main(void)unsigned char adresult=0; /定义变量,存储a/d转换结果atd0_init(); /调用ad模块初始化函数portb_init(); /调用ptb端口初始化函数disableinterrupts; /全局中断禁止for(;)while(!atd0stat2_ccf0); /等待a/d转换结束 adresult=atd0dr0l; portb = adresult;第二章 考核方式实验课程占整个课程的20分,考核方式分为基础分数和附加分数两部分,而实验课总成绩并不等于两者之和,具体详述如下。一、基础部分(必做)该部分包括出勤、实验过程、实验报告、课程反馈四部分内容:项目分值次数共计备注出勤144特殊情况者可调至其他班级上课实验过程14实验报告28课程反馈212相关说明如下:实验过程 按照实验手册实验步骤,能观察到实验现象。实验报告实验报告包括两部分内容:抄写源程序(0.8分);关键词叙述(1.2分)。1) 抄写(手写)每次实验的源程序(包括程序注释)。2) 每次实验课后由助教给出备选关键词,要求每位同学就其中的至少一个关键词的相关知识进行搜集、总结、理解并用自己的语言予以表述。当然也可以自己查找与单片机软硬件相关的任何关键词予以描述。3) 纸张要求a4纸,实验报告封皮由学委统一发放,实验指导老师填写理论课授课老师名字。每做完一个实验后,下次上实验课时由学委收集交于助教处。除以上要求外无任何排版格式、字体以及书写方式的要求。课程反馈该项目设置的目的旨在完善我们的单片机教学课程,就课程相关的所有方面都可以提出自己的意见或是存在的问题。大致包括以下内容:1) 教学相关教材、课件、实验手册的编排;课程的考核方式;教师的授课方式等。2) 知识点相关教材以及实验遗漏的知识点;教材以及实验错误讲解的知识点;反复思考不得其解的难点;对某一内容有自己更为深入的理解以及叙述方式的知识点;教材及实验手册存在的错别字以及标点符号等。3) 其他相关课程反馈的内容不局限于以上两者,凡是旨在完善课程的所有意见及问题都可以进行反馈。每反馈一条意见给予0.5分,凡提出4条意见及以上者给予课程反馈部分满分分值(2分)。二、附加部分(选做)该部分内容具有一定的难度,可依据个人兴趣选做。表现杰出者在保证四次实验课出勤以及完成四份实验报告的前提下将直接获得18-20分的实验课程分(不管基础部分分值是多少)。具体内容包括以下两个选项:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 今年中考道法试题及答案
- 2024广告设计师新媒体策略试题及答案
- 2024助理广告师考试特训课程试题及答案
- 新成员笔试题目及答案
- 竞赛模式数学试题及答案
- 广告设计中的信息选择与传达试题及答案
- 2024年纺织品设计师的文化设计思路试题及答案
- 检测报告的数据分析与解读试题及答案
- 2024年纺织行业法规解读试题及答案
- 未来市场的设计师资格证书考试试题及答案
- LED制程与工艺介绍
- 《马克思主义中国化思想通史》导读-南京林业大学中国大学mooc课后章节答案期末考试题库2023年
- 北京中考语文词语表
- 水资源利用智慧树知到答案章节测试2023年西安理工大学
- 水质对干豆腐品质的影响机制及调控技术
- LY/T 2676-2016半干旱地区灌木林平茬与复壮技术规范
- 装配式混凝土结构的构件安装分项工程(验收批)质量验收记录表
- 作业许可检查表
- 农产品集中交易市场等级技术规范-编制说明
- 张京16分钟中英文对照翻译稿
- 武汉绿地中心项目技术管理策划书(48页)
评论
0/150
提交评论