



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本文格式为word版,下载可任意编辑单片机串行通信实验报告(实验要求、原理、仿真图和例程) 嵌入式系统原理与试验 试验 指导 试验三 调度器设计基础 一、 试验目得与要求 1. 娴熟使用 kei c5 de 集成开发环境,娴熟使用roteus 软件。 2. 把握 kil 与 prteus 得联调技巧。 3. 把握串行通信在单片机系统中得使用。 4. 把握调度器设计得基础学问:函数指针。 二、 试验设备 1. pc 机 一套 2. k c1 开发系统 一套 3. protes 仿真系统 套一三、 试验内容 1. 甲机通过串口掌握乙机 ed 闪耀 (1) 要求 a. 甲单片机得1 按键可通过串口分
2、别掌握乙单片机得 led1 闪耀,le2 闪耀,led1 与d2同时闪耀,关闭全部得 led。 b. 两片051 得串口都工作在模式 1,甲机对乙机完成以下 4 项掌握。 i. 甲机发送"a',掌握乙机 ld1 闪耀。 ii. 甲机发送"',掌握乙机 led2 闪耀。 iii. 甲机发送"',掌握乙机 ld1,led2 闪耀。 iv. 甲机发送"c,掌握乙机 ld1,le2 停止闪耀。 c. 甲机负责发送与停止掌握命令,乙机负责接收掌握命令并完成掌握e得动作。两机得程序要分别编写。 d. 两个单片机都工作在串口模式 1 下,程序要
3、先进行初始化,详细步骤如下: i. 设置串口模式(so) ii. 设置定时器 1 得工作模式(tm) iii. 计算定时器得初值 iv. 启动定时器 v. 假如串口工作在中断方式,还必需设置e 与 es,并编写中断服务程序。 (2) 电路原理图 figur 1 甲机通过串口掌握乙机 led 闪耀 得原理图 (3) 程序设计提示 a. 模式 1 下波特率由定时器掌握,波特率计算公式参考: b. 可以不用使用中断方式,使用查询方式实现发送与接收,通过查询i 与 ri 标志位完成。 2. 单片机与 pc 串口通讯及函数指针得使用 (1) 要求: a. 编写用单片机求取整数平方得函数. b. 单片机把
4、计算结果向 pc 机发送字符串。 c. c 机接收计算结果并显示出来。 d. 可以调用 c1 stio、h 中得rinf 来实现字符串得发送. e. 单片机得数码港显示发送得次数,每次清零。 (2) 参考电路原理图 figure 2 单片机与 p p 串口通讯及函数指针得使用 原理图 (3) 程序设计要求 a. 编写求平方函数时,采纳函数指针来编写。 b. 参考头文件模式,完善设计项目文件结构. 四、 思索题 1. 假如试验 1 如何使用试验 2 得成果来改写? 2. 请结合实例说明什么就是函数指针及如何使用函数指针。 五、 试验报告要求 1. 简述编写 c 程序,并联合调试程序得过程。 2.
5、 解释编写得试验程序得代码,描述试验结果。 3. 解答思索题。 4. 简述试验得心得。 嵌入式系统原理及试验试验报告 la 3 3 调度器设计基础 一、 甲机通过串口掌握乙机 ed 闪耀 (一) 实现原理 1. 总体思路 发要得化始初上机甲在将,fub器存寄冲缓收接及以,ub器存寄冲缓送发过通送得数据,"b,"c,"存入一个数组,通过超级循环内设定得一个按键掌握函数,依次发送给乙机,由乙机接收并让相应得 led 灯闪耀。 2. 硬件设计 上图所示得就是单击lay 以后开头仿真,此时没有按键按下,甲机乙机均处于等待状态之下. * 上图所示按键第一次按下,甲机发送字符
6、"a,灯闪耀,乙机接收字符a,并显示相应与甲机 d灯位置对应得2 灯闪耀。 * 以上两幅图就是在一起得,或许就是ed 灯启动以及延迟还有甲、乙机发送接收数据时间差等各方面得差异,甲机得 d3 灯与乙机得 d4 灯亮不到一块去,它们交替着闪耀,此闪彼灭。 总 之,以上两幅图所呈现得,就是当按键其次次按下,甲机发送字符b",并闪耀 d3 灯,乙机接收字符b,并闪耀相应得4 灯。 * 上图所示按键第三次按下,掌握甲机发送字符c",并同时闪耀 d1 与3 灯,与此同时,乙机接收甲机发来得字符c,并同时闪耀 d2、4 灯.图中所示得就是 le灯一闪一灭时得亮状态,灭状态得截
7、图此处省去. * 上图所示按键第四次按下,甲机向乙机发送字符"d",同时使得 d1、d3 灯灭掉,乙机接收完字符d之后,也使得其掌握得 d、d4 灯停止闪耀。 3. 软件设计 流程图: 始开 就是否有按键按下? 否 就是 第几次按下按键? 1 3 2 甲机发送字符:a "b" c d 灭全del1de 1l del 1del 闪耀 闪耀 e3 烁闪都 乙机接收相应字符 a b "c" "d led2 ld4 le2 led2ed4 全灭 烁闪 烁闪 led4 都闪耀 关键代码段+解释: 甲机代码段 /* /按键掌握函数 vo
8、id buton(vid)/按键掌握函数 数函抖消用调/;)(gnicnuoed i(n=1) 据数个第送发/;idns=fus while(ti0);/查询等待发送就是否完成 0 清件软由 it,成完送发/;=it ;0=n )i(hctiw case : while(boin()=0)d1d1;elay_ms(15);reak;/甲机d3 灯灭状态,d灯不断闪耀,直到有新得按键按下为止 se : d=1;hle()3=d3;dela_s(0);if(deouncig()break;bek;/甲机1 灯灭状态,3 灯不断闪耀,直到有新得按键按下为止 case : d3=1;e(1)1d1;d
9、3;eayms(150);if(duncing())brk;reak;/甲机 d1、d灯一起不断闪耀,直到有新得按键按下为止 cas 3: =;d3=1;brak;甲机1、d3 灯均处于灭状态 ; :tuad +; i(i=4)/使掌握功能能循环反复地执行 i=0;/使掌握功能能循环反复地执行 * /* /甲机相关初始化 to0x;/定时器 t工作于方式 2 t1=0x4;/波特率为 2400ps th=xf4; t1=; con=0x40;/定义串行口工作于方式 1 * 乙机代码段 /* /乙机接收显示函数 void disp(void)/乙机接收显示函数 rn;/允许接收 whie(i0)
10、;/查询等待接收标志为,表示接收到数据 buffei=;/接收数据 0 清件软由r/;ir swith(i) 状灭灯 4机乙;kerb;)01(myld;d=2)r!(ew :0 esac态,d2 灯不断闪耀,直到乙机接收到新传来得数据为止 ase 1: d21;hile(1)d4;delay_s(50);i(ri)break;brea;/乙机 d灯灭状态,d灯不断闪耀,直到乙机接收到新传来得数据为止 )(i;)01(sm_yad;d4;d2d)(elihw;4d :2 esacreak;rak;/甲机 d、d4 灯一起不断闪耀,直到乙机接收到新传来得数据为止 态状灭于处均灯d、2d 机乙/;
11、kaeb;=4;1=2d : es default: ; i+; if(i=4)/使掌握功能能循环反复地执行 行执地复反环循能能功制控使/;0i * */ 化始初关相机乙 md=020;/定时器 t1 工作于方式 2 t1=0x;/波特率为 240bs t=0xf; t=1; on=040;/定义串行口工作于方式 */ (二) 调试 1. 调试得方式 软件仿真 调试现象: 单击 play 以后开头仿真,此时没有按键按下,甲机乙机均处于等待状态之下。 p1、0 口按键第一次按下以后,甲机 d1 灯闪耀,同时乙机 d2 灯也闪耀。 当按键其次次按下,甲机闪耀 d灯,乙机闪耀 d4 灯。 按键第三次
12、按下时,甲机同时闪耀 d1 与 d灯,与此同时,乙机同时闪耀 d、d灯。 按键第四次按下,甲机得 d1、灯同时灭掉,乙机掌握得 d2、4 灯也都停止闪耀。 若接下来还有按键按下,那将回到,如此循环执行下去。 (三) 试验再思索 1. 进一步改进得设想 。现实来序程务服断中口行串用以可2. 试验得收获 信通口行串机双了会学3. 试验中尚不能解决得疑问 得确有个疑问: 若就是我把程序中得任何一个 switch 语句改成如下形式: switc ( ( ) buf) sac cas "" : ; brea ; ca " b": ; ; break; ac ca
13、e "c : ; bre ; ; case d: ; brea ; def u u t: ; ; 得样这 这样得 w c c 语句无论消失在甲机还就是乙机得程序里面, , 都无法实现相应得任何掌握功能了f .sbuf 存储数据得状况详细就是怎样得呢 ?switch 语句不能够引用u u 吗? 二、 单片机与c c 串口通讯及函数指针得使用 (一) 实现原理 1. 总体思路 按键接得就是 p3、复用口,于就是就想到用外部中断 0 掌握。所以,将数码管显示程序以及串口通讯程序都一起放入外部中断 int0 服务程序当中,就可以实现试验要求。 序程 15c 在,外另编写当中还应当特殊留意以下
14、几点: ;3f=1ht /格严常非 置设率特波,值初器时定,spb0042 为率特波口行串置设/;3f0=1lt 就要是设置错了,在发送与接收得时候,就会消失莫名其妙得符号,比如说:xxxx 诸如此类、o_o 能使断中口串闭关该应前之tnrp 用调 e=0;/禁止串行口中断 ti=1;/必需置高 ti,ri i=; printf(%dd=',n,n,c); ;)n(rahcup ;)i!(lh/等待 printf 语句执行完毕 毕完行执句语 ftirp 待等;)!(elihw2. 硬件设计 上图所示有关串口 pi得相关参数设置应当留意得地方 * 上图所示虚拟终端相关参数设置应当留意得地
15、方,虚拟终端相关参数设置应当与串口得相关参数设置全都,也应当与1 编程中串口初始化时设定得波特率得数值全都,即都应当就是 240ps。 留意,虚拟终端得d 应当与串口第 3 脚d(即发送端)连接,否则仿真时无法虚拟终端调试窗口无法显示rintf 语句内容。 * 上图所示得就是单击 pla以后开头仿真,此时没有按键按下,数码管静止在显示得状态当中,此时没有任何得数据发送与接收. * 上图所示当第一次按下按键时,触发外部中断,单片机调用函数指针指向得求取整数平方得函数,并将计算结果发送给机,此时虚拟终端显示:12=1; 即=; (好像虚拟终端显示框要显示得文字在这个截图里面有点小,瞧不太清晰),数
16、码管此时显示发送次数为 1. * 上图所示当第 5 次按键按下,数码管显示发送次数为 5,此时也可以清晰地观看到虚拟终端调试窗口得显示: 1=1* 2*2= 52=5*5 61=4 9=33 * 数码管显示每次清零,求整数平方数也就是 09 循环, 上图所示虚拟终端显示结果有特别状况。到目前为止, , 我改写过多种 rint 语句形式, , 可就是还就是解决不了上图所示得特别显示问题。 为什么会显示成: 6 ; 36;1 1 9 9 ; 82=64; q 2= ; ( ( o o ) ) 呢? ? 奇怪怪! ! ? * 改我算就,示所图上如了 printf 语句形式,也还就是会有同样得问题消失
17、。 * 行执再后然,零清次 9 每管码数是就示所图上到 3 得状况,从虚拟终端调试窗口可见求平方已经循环执行到了其次轮得 3。 3. 软件设计 流程图: 开头 初始化定时器 1、串口、外部中断 0 断中待等 就是否有外部中断?否 就是 转入外部中断 0 中断服务程序 按键消抖 函数指针调用求整数平方函数 在数码管上显示发送次数 发送求取结果 查询等待发送就是否完成 发送完成,ti 由软件清 在虚拟终端上显示求平方结果 中断返回 关键代码段解释: */ 化始初口串 ;fx0=1ht tl1=0xf3;/设置串行口波特率为 2400ps,定时器初值,波特率设置特别严格 /要就是设置错了,在发送与接
18、收得时候,就会消失莫名其妙得符号,比如说:xxx 诸如此类、_o 1 式方口行串:0000,101/;05x0=ncs n=允许接收,8 位异步通信方式,8-bit art,t 0; r=0 =doms/;00x=nocp e=1;/开总中断允许位 断中口行串开/;1se*/ * /求取整数平方函数 uit ow2(uint x)/求取整数平方函数 ; tniu q=x*; 果结数方平回返 nruter/; nruter */ /*/ 示显端终拟虚void virt(ui n,nt c)/虚拟终端显示 断中口行串止禁/;0=se 能使'不"断中,节字充填送发 1=,ir,t
19、高置须必;1=it ;1 pif(%d*%d=d',n,c);/、* 使断中口串闭关该应前之tnip 用调能 ;)"n"(rctup 毕完行执句语tnirp 待等/;)it!(iw 毕完行执句语 ftnirp 待等/;)r!(ei e=1; ti=; ;0i */ * /外部中断 in0 中断服务程序 o ntsv(oid) nterrupt /外部中断 int0 debonig();/调用消抖函数 数函方平数整取求用调式形针指数函用/;)n()p*(c dp();/在数码管上显示发送次数 果结取求送发/;c=fus whil(=);/查询等待发送就是否完成 ti=
20、0;/发送完成,i 由软件清 0 r_ter(,c);/在虚拟终端上显示求平方结果 */ (二) 调试 1. 调试得方式 软件仿真 调试现象: 单击 pla以后开头仿真,此时没有按键按下,数码管静止在显示 0 得状态当中,此时没有任何得数据发送与接收。 p3、2 口按键第一次按下以后,触发外部中断,单片机调用函数指针指向得求取整数平方得函数,并将计算结果发送给c 机,此时虚拟终端显示:12; 即=1; 不端按下按键触发外部中断,当外部中断一到来,单片机就执行调用函数指针指向得求取整数平方数得函数,并将求取结果发送给串口.单片机 09 不断循环求取整数平方数,并也循环显示在虚拟终端调试窗口上,数
21、码管显示求取整数平方数结果发送次数,每 9 次清零。 2. 遇到问题得处理 窗试调端终拟虚法无时真仿则否,接连)端送发即(dt 脚 3 第口串与当应 dxr 得端终拟虚口无法显示rint语句内容。 化始初口串中程编5c 与该应也,致一置设数参关相得口串与该应置设数参关相端终拟虚时设定得波特率得数值全都,在此次试验报告中即都应当就是40bp。 在编写 c1 程序时,th=x3;tl=0xf;/设置串行口波特率为 240bps。波特率得设置特别严格,要就是设置错了,在发送与接收得时候,就会消失莫名其妙得符号,比如说:xxxxxxx 诸如此类、o_o (三) 试验再思索 1. 进一步改进得设想 目前
22、还没有设计得出外部中断服务程序与串行口中断服务程序同时一起用得 c51 程序,遇到许多问题。盼望老师今后能指导我们关于双重中断程序得编写,我自己捣鼓了好久还没捣鼓出来。 2. 试验得收获 收获当然许多,诸如:虚拟终端得x应当与串口第脚 txd(即发送端)连接等等都就是我对单片机新得熟悉,新得收获。 ;)0=t(elhw 果结取求送发/;us :有还/查询等待发送就是否完成 清件软由t,成完送发/;0=tes=0;/禁止串行口中断 ti1;必需置高 t,ri,i=1 发送填充字节,中断"不使能 ri=1; 使断中口串闭关该应前之 fnip 用调/;)c,n,n,'d%=%*d%
23、'(tnp能 ;)""(rahcupwhile(!i);/等待 pi语句执行完毕 行执句语tnip 待等/;)ir!(ei完毕 以上语句应当熟记,就是使能虚拟终端得常用语句。 3. 试验中尚不能解决得疑问 上图所示便就是最大得疑问! ! ! ( ( 四) ) 附录 (粘贴完整代码) 机乙制控口串过通机甲 甲机通过串口掌握乙机 l l 闪耀 甲机完整代码 rt 1 -source g f、c f、h +mai、c /、h/ indereg5、h define uca unsiged chr dfie in unigned in sbit 1 = p00; bit d
24、= p03; sbi p1_0 p10; uit dbouncin(void); void buton(vo); void dlyms(uin xm); /f、c/ icluef、h' uin n=0; uch i=0; ten uchar end4;/声明全局变量 oid dela_ms(unt xm)/级延时函数 uin x,; fr(xms;x0;) r(y130;y;y-); uit deboncng(oid)/debncing:消退抖动得意思,按键消抖函数:若的确有按键按下,函数返回值为 1;否则返回值为 0 f(p_0=)/有键按下吗? dela_ms(10); /延时消抖
25、 i(p10=0)/的确就是有键按下 ;1= 开松键按待等/;)0=01p(eliw 1 为值回返数函,下按键按有若/; nre 0 为值回返数函,下按键按无若/; nrter esle ese rern 0;/若无按键按下,函数返回值为 vd buton(id)/按键掌握函数 debunng();/调用消抖函数 )1=(fi 据数个 i 第送发/;idesus wile(ti=0);/查询等待发送就是否完成 i=0;/发送完成,i 由软件清 0 n=0; swtc() case : whie(ebounci()=0)1=1;elay_m(10);brea;/甲机 d3 灯灭状态,d灯不断闪耀
26、,直到有新得按键按下为止 )(gicnube(;)05(sm_yae;3=3d)1(elih;1=d :1 esacbreak;brea;/甲机 d1 灯灭状态,d3 灯不断闪耀,直到有新得按键按下为止 cas 2: d3=1;il(1)d11;d3=d3;day_m(150);if(debouncing()reak;rek;/甲机 d1、d3 灯一起不断闪耀,直到有新得按键按下为止 ce 3: d11;d3=1;break;/甲机 d1、d灯均处于灭状态 efult: ; i; if(i=4)/使掌握功能能循环反复地执行 i=0;/使掌握功能能循环反复地执行 main 、 / / / / /
27、 / / / / / / / / / / / / / / / / incuef、h' oid main() uchr send=,"b,"c,"/定义要发送得数据 tmod0x2;/定时器1 工作于方式 2 sb042 为率特波;4fx=1t t1=0f; tr1=1; sn040;/定义串行口工作于方式 1 灭熄为态状灯 1化始初/;1=d 灭熄为态状灯d 化始初/;1=d while(1) tton();/调用按键掌握函数 乙机完整代码 target 1 -rce grou m、h +m、 mai、 /m、h/ #ncludeg1、h #fne cha
28、 unigne car die uit unigned nt sbi d2 = 00; t d4 = 0; vod initld(vod); oid flashled(void); void disp(vd); vi dlayms(uit ms); /m、c/ #includem、 ucha i=0; uhar bfe0x00,0x0,0x0,x0;/定义接收数据缓冲区 void disp(vi)/乙机接收显示函数 ren1;/允许接收 while(r=);/查询等待接收标志为 1,表示接收到数据 buffrisuf;/接收数据 r=0;/i 由软件清 0 swth(i) cae : whil
29、e(!ri)d2=d2;ey_s(150);brek;乙机 d灯灭状态,d2 灯不断闪耀,直到乙机接收到新传来得数据为止 cae 1: d2=1;while(1)d4d4;lay_m(15);if(ri)brk;rek;/乙机2 灯灭状态,d4 灯不断闪耀,直到乙机接收到新传来得数据为止 e : d41;while(1)d2=d2;4=d4;ela_ms(10);if(ri)ea;brak;/甲机 d2、d4 灯一起不断闪耀,直到乙机接收到新传来得数据为止 ase : d2=1;4=1;brek;/乙机 d2、d4 灯均处于灭状态 defult: ; +; if(i=4)/使掌握功能能循环反复
30、地执行 i=;/使掌握功能能循环反复地执行 vid da_ms(uint xms)/级延时函数 uit x,y; )-;;smx=x(rof for(=30;y0;-); /main 、 / / / / / / / / / / / / / / / / / / / / / / / / inludem、' oi mai() tmod=0x0;定时器工作于方式 2 tl1=;/波特率为 200bps ;4f0h r1=; 1 式方于作工口行串义定/;04x0nocs 灭熄为态状灯 2d 化始初/;1=2d d4;/初始化 d4 灯状态为熄灭 whl(1) isp();/调用 led 灯显示函
31、数 单片机与 p p 串口通讯及函数指针得使用 -trget 1 ce gru +n、 +pc、c pc、 /pc、/ #inlude reg1、h #incle stdi、 #die ucha usigned char ene int unsgned it #defne n 9 bi p3_2=p2; un pow2(uint x); vid dis(un i); vd vir_ter(u i,ut c); void deboucig(void); vod dlay_m(ui xms); / pc、c/ #incld c、h' uchr led10x3f,0x06,0x5b,xf,0x6,0x6d,0x7d,x,0x7f,x6f; uint =0; uit po2(unt x)/求取整数平方函数 uit q; q=x*x; 果结数方平回返ruer/;q utr vo dis(ui i)/发送次数数码管显示函数 p0ledi;/数值显示码送至掌握口 p0 vo irter(unt n,uint )/虚拟终端显示 0;/禁止串行口中断 能使'不"断中,节字充填送发 1=t,i,i高置须必/;1=t r=1; 能使断中口串闭关该应前之trp 用调、 /;),n,n,'
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论