还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
一般性实验实验一普通I/O口操作实验实验目的
1、熟悉SDIDE__环境,熟悉GP32基本程序结构
2、理解FreescaleMCU的编程框架
3、熟悉编程调试环境编译、调试、下载运行第一个程序
4、掌握I/O的基本编程方法范例程序:
①A01_简单IO及程序框架\Frm__in.A__
②C01_简单IO及程序框架\纯C\prgframe.prj
③C01_简单IO及程序框架\CA__混编\prgframe.prj实验要求
1、参看教材
6.4节,熟悉实验板结构
2、理解并运行下列关于I/O口操作的LED灯控制程序/*-----------------------------------------------------**工程名:Prgframe.prj**硬件连接:PTA.1接指示灯**程序描述:指示灯PTA.1闪烁**目的:第一个freescaleMotorolaHC08系列MCU程序框架**说明:提供MotorolaMCU的编程框架,供教学入门使用**注意:如果延时不够长的话,会发觉灯不会闪烁,而是一**直亮,这是由于人的视觉的引起的**--------《嵌入式应用技术基础教程》教学实例-----------*//*[头文件]*/#includeGP32C.h//映像寄存器地址头文件/*[指示灯所接引脚定义]*/#defineLight_PPTA//灯Light接在PTA口#defineLight_DDDRA//相应的方向寄存器#defineLight_Pin1//灯所在的引脚/*[全局变量声明]*/unsignedcharI1;/*[延时子函数声明]*/voidDelay1000void;/*[主函数]*/void__in{//[I/O初始化]Light_D|=1Light_Pin;//令指示灯引脚为输出Light_P|=1Light_Pin;//初始时,指示灯暗//[程序总循环入口]while1{//指示灯Light“亮”Light_P=~1Light_Pin;//延时forI1=0;I1=250;I1++Delay1000;//指示灯Light暗”Light_P|=1Light_Pin;//延时forI1=0;I1=250;I1++Delay1000;}}/*[内部子程序存放处]/*Delay1000:延时1000个时钟周期-------------------------**功能:延时函数约1000个时钟周期**参数:无**返回:无**-----------------------------------------------------*/voidDelay1000void{unsignedcharu;foru=0;u=110;u++;}
3、在理解上述程序的基础上,按下列要求新建一程序根据PC口低2位PTC1和PTC0的状态输出四种不同的LED显示效果,要求用最简洁的语句实现以下各效果1PTC1=0,PTC0=0时,效果为8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒(效果1)2PTC1=0,PTC0=1时,效果为8个LED中只有两个连在一起的灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒(效果2)3PTC1=1,PTC0=0时,效果为8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒(效果3)4PTC1=1,PTC0=1时,效果自定(效果4)实验二串行通信实验实验目的
1、理解串行通信基本原理掌握MCU串行通信基本编程方法
2、理解串行通信的查询方式和中断方式原理及其编程范例程序:
1、C02_1串行通信查询方式\H08SCI_
1.prj
2、C02_2串行通信中断方式\H08SCI_
2.prj
3、A02_1串行通信查询方式\SCI__in
1.a__
4、A02_2串行通信中断方式\SCI__in
2.a__
5、以上四目录都有VB_SCI目录,该目录是对应VisualBasic
6.0程序,运行在PC方,用来接收和发送数据实验要求
1、理解下列范例程序,使用PC机程序与单片机进行通信了解程序流图__in.c文件/*-----------------------------------------------------**工程名:H08SCI_1**硬件连接:无**程序描述:把收到的数据发送回去**目的:初步掌握利用查询方式进行串行通信的基本知识**-------《嵌入式应用技术基础教程》教学实例------------*///头文件#includeGP32C.H//包含头文件#includeSCI.h//串行通信子程序头文件//函数声明externvoidSCIInitvoid;//串行口初始化子程序//内存变量声明unsignedcharSerialBuff[];//存放接收数据的数组//主程序void__in{unsignedchari;SCIInit;//调串行口初始化子程序while1{i=SCIReN1SerialBuff;//等待接收1个数据ifi==0SCISendN1SerialBuff;//发送接到的数据}}SCIinit.c文件#includeGP32C.HvoidSCIInitvoid{//总线频率fBUS=
2.4576MHz,定义波特率Bt=9600SCBR=0b00000010;//设置允许SCI,正常码输出、8位数据、无校验SCC1=0b0_____00;//设置允许发送、允许接收,查询方式收发SCC2=0b00001100;}SCI.c文件/*-----------------------------------------------------**文件描述:本文件包含了串行通信的4子程序分别为:**1SCISend1:串行发送1字节**2SCISendN:串行发送n字节**3SCIRe1:串行接收1字节**4SCIReN:串行接收n字节**-------------《嵌入式应用技术基础教程》--------------*///[以下为子程序源代码]//[包含头文件]#includeSCI.h/*SCISend1:串行发送1个字节-----------------------------**功能:串行发送1个字节**参数:要发送的数据**返回:无**-----------------------------------------------------*/voidSCISend1unsignedcharo{//判断ReStatusR的第SendTestBit位是否为1是1可以发送while1ifReSendStatusR1SendTestBit!=0{ReSendDataR=o;break;}}/*SCISendN:串行发送N个字节-----------------------------**功能:发送数组中的N个字节数据**参数:待发送的数据字节数及其要存放的数组首地址**返回:无**-----------------------------------------------------*/voidSCISendNunsignedcharnunsignedcharch[]{inti;fori=0;in;i++SCISend1ch[i];}/*SCIRe1:串行收一个字节数据----------------------------**功能:从串行口接收1个字节的数据**参数:标志指针p**返回:接收到的数据(若接收失败,返回0xff)**说明:参数*p带回接收标志=0收到数据=1未收到数据**-----------------------------------------------------*/unsignedcharSCIRe1unsignedchar*p{unsignedintk;unsignedchari;//ReStatusR第ReTestBit位为1表示可接收数据fork=0;k0xfbbb;k++ifReSendStatusR1ReTestBit!=0{i=ReSendDataR;*p=0x00;break;}ifk=0xfbbb{i=0xff;*p=0x01;}returni;//返回接收到的数据}/*SCIReN:HC08串行接收N个字节---------------------------**功能:接收N个字节数据并存放在ch数组中**参数:待接收的数据字节数及其存放的数组首地址**返回:接收标志=0收到数据=1未收到数据**-----------------------------------------------------*/unsignedcharSCIReNunsignedcharnunsignedcharch[]{intm;unsignedcharfp;m=0;whilemn{ch[m]=SCIRe1fp;iffp==1return1;m++;}return0;}
2、运行上述程序前,请做好如下准备工作:
(1)将实验箱配的9针串口线连接到计算机的串口1
(2)在计算机上单击“开始”—“程序”—“附件”—“通讯”—“超级终端”,弹出如下窗口在“名称”栏内随意输入一个名称,如“cm1”然后单击“确定”弹出如下窗口在上图“连接时使用”栏中选择“COM1”,然后单击“确定”按钮弹出如下窗口确保此窗口各栏中参数都如上图所示设置好提示只要单击“还原为默认值”,即可设置为上述参数然后单击“确定”接下来就可在超级终端的窗口中输入数据,所有输入的数据将通过计算机串口发送给单片机,计算机串口收到的数据也将在此超级终端窗口中显示注意此时,用户在超级终端中输入的数据不会显示出来,而是直接通过串口发送出去了如果要显示用户输入的数据,需要更改设置单击“超级终端”菜单“文件”—“属性”,在弹出的窗口单击“设置”选项卡—“ASCII码设置”,在“本地回显键入的字符”前打“√”,然后确定,这样设置完后才能在超级终端中显示用户输入的字符
3、运行上述范例程序,查看并分析程序执行效果
4、在理解上述程序基础上,按下列要求新建一程序
①将从串行口收到的数据原样发送到串行口
②根据从串行口收到的数据控制四种不同的LED显示效果,收到字符’1’:LED灯的效果为实验一中的效果1,并向串行口发送字符串“LED效果1”;收到字符’2’:LED灯的效果为实验一中的效果2,并向串行口发送字符串“LED效果2”;收到字符’3’:LED灯的效果为实验一中的效果3,并向串行口发送字符串“LED效果3”;收到字符’4’:LED灯的效果为实验一中的效果4,并向串行口发送字符串“LED效果4”;收到其他字符LED灯全部一起闪烁(同时亮同时熄,周期1秒)并向串行口发送字符串“输入错误!”实验三键盘中断实验实验目的
1、理解键盘扫描的基本原理掌握键盘电路基本接法与键值计算方法
2、编制键盘查询、键盘中断、键值识别程序范例程序:
1、C03_键盘中断编程\keyboard.a__
2、C03_键盘中断编程\keyboard.prj实验要求
1、理解如下范例程序__in.c文件/*-------------------键盘实验--------------------------**文件名:Keyboard.c**硬件连接:PTA.7-4接键盘4根列线PTA.3-0接键盘4根行线**程序描述:按下键盘按键串口发送对应的键值**目的:键盘扫描,键盘中断,键值识别,键盘编码**注意:如果键盘插在实验板上排插孔无须连线若插在下**排插孔需手工接线**-------《嵌入式应用技术基础教程》教学实例------------*//*[头文件]*/#includeGP32C.H#includeKB.h//键盘中断头文件/*[主程序]*/void__in{a__SEI;//关总中断KB_Init;INTKBSCR=~1IntBit;//开放键盘中断I__SKk=1a__CLI;//开总中断//主循环while1;}KBsub.c文件/*-----------------------------------------------------**文件描述:本文件包含了H08C键盘中断子函数分别为:**1KB_Init:键盘初始化函数**voidKB_Initvoid**2KB_Scan:扫描读取键值函数**unsignedcharKB_Scanvoid**3KB_Def:键值转为定义值函数**unsignedcharKB_DefunsignedcharKB_valve**-----------------------------------------------------*//*[以下为子程序源代码]*//*[头文件]*/#includeGP32C.H#includeKB.h/*KB_Init:键盘初始化函数-------------------------------**功能:初始化键盘中断的引脚,但未开放键盘中断**参数:无**返回:无**-----------------------------------------------------*/voidKB_Initvoid{KB_P=0x00;//复位KB_PKB_D=0b00001111;//定定义7-4为输入3-0为输出KB_PUE=0b111_____;//定义输入引脚有内部上拉电阻INTKBSCR|=1IntBit;//屏蔽键盘中断I__SKk=1INTKBIER=0b111_____;//允许输入引脚的中断可进入INTKBSCR|=1ACKKBit;//清键盘中断请求ACKK=1}/*KB_Scan:扫描读取键值函数-----------------------------**功能:扫描一次4*4键盘上的按键,读取键值-*p**若无按键,*p为0xff**参数:无**返回:扫描到的键值**-----------------------------------------------------*/unsignedcharKB_Scanvoid{unsignedcharlineitmp;line=0b11111110;//使第一根行线为0低电平fori=1;i=4;i++//将扫描4根行线{tmp=KB_P;//取KB_P-tmptmp|=0b00001111;//KB_P.7-4保留KB_P.3-0为1KB_P=tmpline;//令KB_P.n=0n=
0、
1、
2、3a__NOP;//等待,消除按键抖动a__NOP;tmp=KB_P;tmp=0b111_____;//看第n行是否有键按下iftmp!=0xf0//本行有键按下{tmp=KB_P;break;}else//本行无键按下扫描下一行line=line1|0x01;}ifi==5tmp=0xff;returntmp;}/*KB_Def:键值转为定义值函数----------------------------**功能:键值转为定义值**参数:键值**返回:键定义值**-----------------------------------------------------*///键盘定义表constunsignedcharKB_Table[]={0xEE10xDE20xBE30x7EA0xED40xDD50xBD60x7DB0xEB70xDB80xBB90x7BC0xE7*0xD700xB7#0x77D0x00};unsignedcharKB_DefunsignedcharKB_valve{unsignedcharKeyPress;unsignedchari;unsignedcharj;i=0;while1{j=KB_Table[i];//与0定义表结束标志相比较ifj==0//=0即表中无次定义值{KeyPress=0xff;break;}//返回0xffelse//与键值相比较ifj==KB_valve//找到{KeyPress=KB_Table[i+1];break;}//取键定义值elsei+=2;//指向下一个键值继续判断};returnKeyPress;}Vectors
08.c文件/*-----------------------------------------------------**文件名:vectors
08.c**功能:用于定义中断矢量表**-----------------------------------------------------*//*[头文件]*/#includeGP32C.H#includeKB.h#includeSCI.h/*键盘中断处理函数------------------------------------*/#prag__interrupt_handlerisrKBIvoidisrKBIvoid{unsignedcharKB_valve;a__SEI;//关总中断INTKBSCR|=1IntBit;//屏蔽键盘中断I__SKK=1KB_valve=KB_Scan;//扫描键值SCISend1KB_valve;KB_valve=KB_DefKB_valve;//键值转化为定义值SCISend1KB_valve;KB_Init;//重新初始化键盘INTKBSCR=~1IntBit;//打开键盘中断I__SKK=0a__CLI;//开总中断}//未定义的中断处理函数本函数不能删除#prag__interrupt_handlerisrDummyvoidisrDummyvoid{}//中断矢量表,需定义中断函数,可修改下表中的相应项目//interruptservi__routine,isr中断处理程序#prag__abs_address:0xffdc//中断向量表起始地址void*const_vectab[]void={isrDummy//时基中断isrDummy//AD转换中断isrKBI//键盘中断isrDummy//SCITC/TEisrDummy//SCIRF/IDLEisrDummy//SCIPE/FE/NF/ORisrDummy//SPITEisrDummy//SPIMOD/OVR/RFisrDummy//TIM2溢出中断isrDummy//TIM2通道1isrDummy//TIM2通道0isrDummy//TIM1溢出中断isrDummy//TIM1通道1isrDummy//TIM1通道0isrDummy//CGMisrDummy//IRQisrDummy//SWI//RESET也是中断,定义在crt
08.o中};#prag__end_abs_address
2、在实验箱上4×4行列式键盘的位置有上下两排插座,如果将键盘插在上排插座,则电路如下所示如果将键盘搬在下排插座,则连接键盘所需的8根线可以自定义连接方法本实验中,先将键盘插在上排插座
3、打开实验源程序目录下的“VB_KB“子目录,运行keyboard.exe文件,运行窗口如下此窗口将显示单片机实验箱上当前按下的键的键号和键值
4、运行范例程序,观察并分析实验结果
5、在理解上述程序基础上,更改4×4键盘与单片机的电路连接,使键盘的符号定义不变,将键盘的行线和列线对换,即单片机的PTA0-PTA3做列线,PTA4-PTA7做行线,重新进行硬件接线、键值计算、程序设计并算出各字符对应键的键值提示需在第2步中将键盘插在下排插座实验四A/D转换实验实验目的
1、握MC68HC908GP32的A/D转换编程方法
2、学会基本的综合应用,串行和A/D转换的综合应用范例程序:
1、A04_AD模数转换\AD___in.a__
2、C04_AD模数转换\AD.prj
3、VisualBasic
6.0程序:VB_Sci目录下SCI_AD工程实验要求
1、理解如下范例程序__in.c文件/*-----------------------------------------------------**工程名:AD.prj**硬件连接:PTB0/AD0接模拟量输入端**程序描述:获取1路A/D转换结果并滤波通过串口发送出去**目的:掌握AD转换的基本编程方法**注意:用SD-1实验板测试时把液晶拔出否则可能影响结果**----------《嵌入式应用技术基础教程》教学实例---------*//*[头文件]*/#includeGP32C.H/*[函数声明]*/externvoidSCIInitvoid;//串行口函数声明externvoidSCISend1unsignedcharo;//有关A/D转换函数声明externunsignedcharad__eunsignedcharnunsignedcharchannel;externunsignedcharadvalueunsignedcharchannel;externunsignedcharadmidunsignedcharchannel;/*[主程序]*/void__invoid{SCIInit;//串行口初始化ADCLK=0b001_____;//A/D用内部总线时钟2分频while1SCISend1ad__e200;//采集、滤波并发送}ADsub.c文件/*-----------------------------------------------------**文件描述:本文件包含了A/D转换的3个子函数分别为:**1advalue:获取1路A/D转换结果**unsignedcharadvalueunsignedcharchannel**2admid:获取中值滤波后的A/D转换结果**unsignedcharadmidunsignedcharchannel**3ad__e:获取均值滤波后的A/D转换结果**unsignedcharad__eunsignedcharn**unsignedcharchannel**-------------《嵌入式应用技术基础教程》--------------*///[以下为子程序源代码]//[包含头文件]#includeGP32C.H#defineCOCOBit7//转换完成标志位/*advalue:1路A/D转换函数-------------------------------**功能:获取通道channel的A/D转换结果**参数:channel=通道号**返回:该通道的A/D转换结果**-----------------------------------------------------*/unsignedcharadvalueunsignedcharchannel{//选取通道号ADCH4-ADCH0=00000-00111unsignedchartmp;channel=0b00011111;tmp=ADSCR0b11_____0;tmp=tmp|channel;ADSCR=tmp;//取A/D转换结果while1ifADSCR1COCOBit!=0{tmp=ADR;break;}returntmp;}/*admid:1路A/D转换函数中值滤波-----------------------**功能:获取通道channel中值滤波后的A/D转换结果**参数:channel=通道号**返回:该通道中值滤波后的A/D转换结果**-----------------------------------------------------*/unsignedcharadmidunsignedcharchannel{unsignedcharijktmp;//取三次A/D转换结果i=advaluechannel;j=advaluechannel;k=advaluechannel;//从三次A/D转换结果中取中值ifij{tmp=i;i=j;j=tmp;}ifk=jtmp=j;elseifk=itmp=k;elsetmp=i;returntmp;}/*ad__e:1路A/D转换函数均值滤波-----------------------**功能:对通道channel的A/D转换结果求n次平均值**参数:n=平均次数,channel=通道号**返回:该通道均值滤波后的A/D转换结果**-----------------------------------------------------*/unsignedcharad__eunsignedcharnunsignedcharchannel{//求n次A/D转换的平均值unsignedchari;unsignedintj;j=0;fori=0;in;i++j+=admidchannel;j=j/n;returnunsignedcharj;}
2、将实验箱上单片机PTB0引脚连接到蓝色的电位器,旋转电位器上的旋钮,即可调节PTB0引脚的输入电压
3、打开源程序目录下的VB_SCI目录,运行SCI_3show.exe文件,运行窗口如下利用此窗口接收并显示单片机的A/D转换结果可以同时以字符显示、十六进制显示和十进制显示三种显示形式
4、运行范例程序,慢慢调节电位器的旋钮,观察并分析实验结果
5、在理解上述程序基础上,新建程序完成如下功能单片机轮流采集通道0和通道1的模拟电压,把转换得到的数值转换成对应的电压值发送到串口显示出来,比如本次采得通道1的值为0x80,0x80代表的电压值为0x80/0xff*5=
2.51伏(保留两位小数),则应在PC机超级终端收到数据“通道1电压值
2.51伏”,单片机每
0.5秒发送一次采集结果设计性实验实验
一、计算器设计实现普通十进制计算器的功能,按键采用实验箱上的4×4键盘,显示采用实验箱上16×2点阵式字符LCD,键盘符号定义如下123+456-789*-0=/左下角的“-”表示退格,即删除键,按一次删除LCD的最后一个数字LCD的第一行显示运算式,第二行显示运算结果比如要计算机12+34,在键盘上按下相应键后,LCD的第一行显示“12+34”,按下“=”号后,LCD的第二行显示“=46”其他功能同普通计算器相同(只实现加减乘除四则运算功能)实验
二、电子琴设计在实验箱上实现功能电子琴的功能键盘符号定义如下1234567LH=按下1-7,实验箱上的蜂鸣器发出对应的音调(中音),当同时按下L和1-7时是,蜂鸣器发出低音,同时按下H和1-7时,蜂鸣器发高音只要按键没松开,蜂鸣器一直发声,直到松到按键蜂鸣器的电路见书本103页图6-7按键L+12345671234567H+1234567音符低中高123456712345671234567频率值2622943303493924404945235586606987848809881046117513181397156817601976实验
三、电子时钟及闹钟设计基本功能LCD的第一行显示日期,第二行显示时间是比如当时时期是2006年5月11日,时间是22点01分02秒则在LCD第一行显示“
2006.
05.11”,第二行显示“22:01:02”要求时间误差如下1小时误差不大于2秒(1天误差不大于48秒)当然,误差越小越好附加功能
(1)可以通过实验箱键盘设定时间键盘功能自己定义
(2)可通过键盘设置闹钟和整点报时功能。