桂林电子科技大学信息科技学院嵌入式实训Word下载.doc
《桂林电子科技大学信息科技学院嵌入式实训Word下载.doc》由会员分享,可在线阅读,更多相关《桂林电子科技大学信息科技学院嵌入式实训Word下载.doc(12页珍藏版)》请在冰豆网上搜索。
![桂林电子科技大学信息科技学院嵌入式实训Word下载.doc](https://file1.bdocx.com/fileroot1/2022-10/2/05cfff35-d79e-4156-8b00-bb9d9181dd6d/05cfff35-d79e-4156-8b00-bb9d9181dd6d1.gif)
接收串口发来的命令进行输出显示,当按键按下后将按键信息通过串口发送出去。
实验箱模块功能:
实现相应的计算和控制功能。
扩展多位数码管,实现多位显示(动态扫描)
加入了蜂鸣器,可作声音报警使用。
1.2设计思路及设计框图
1.2.1设计思路
(1)串行通信基本通信方式:
通信双方要正确的进行数据传输,需要解决何时开始传输、何时结束传输,以及数据传输速率等问题,这就是数据传输中的同步问题。
通常,实现数据同步有两种方式:
异步通信和同步通信。
1.异步通信:
数据一帧一帧地传送。
发送端和接收端可以由各自的时钟控制数据的发送和接收,两个时钟源彼此独立,互不同步。
数据的一帧:
由一个字符代码组成。
:
RS-232C接口采用双极性信号、公共地线和负逻辑;
不能和TTL电平直接相连,使用时必须进行电平转换,否则将使TTL电路烧坏,实际应用时必须注意!
在实际应用时,必须通过专用电平转换芯片进行电平转换。
电平转换芯片MC1488、MC1489、MAX232MC1488可实现TTL→RS-232的电平转换;
MC1489可实现RS-232→TTL的电平转换。
MAX232芯片可完成TTL到EIA双向电平的转换。
通过使用一对max232(自己做的板子上一个,实验箱上一个)完成电平转换,将单片机的SBUF和s2410芯片的串行通信寄存器完成数据传送从而达到远距离通信的目的。
1.2.2总体设计框图
2各个模块程序的设计
3调试过程
4功能测试
4.3误差分析
5实训心得体会
附录
附录1:
程序清单
1、嵌入式
AREAmb,CODE,READONLY
ENTRY
EXTERNMain
BMain
B.
END
#defineGPHCON(*(volatileunsigned*)0x56000070)
#defineULCON0(*(volatileunsigned*)0x50000000)
#defineUCON0(*(volatileunsigned*)0x50000004)
#defineUBRDIV0(*(volatileunsigned*)0x50000028)
#definerUTXH0(*(volatileunsigned*)0x50000020)//发送缓冲寄存器
#definerUTRSTAT0(*(volatileunsigned*)0x50000010)
#definerURXH0(*(volatileunsigned*)0x50000024)//接收缓冲寄存器
#defineucharunsignedchar
ucharrevBuf;
//接收到的数据
intm=99,ms=99;
intM=20;
/*****************************************
发送
*****************************************/
voidsend(ucharm,ucharms,ucharled,ucharspeak)
{
while(!
(rUTRSTAT0&
0x02));
rUTXH0=0xBB;
rUTXH0=ms+led*128;
rUTXH0=m+speak*128;
}
/******************************************
秒表复位:
复位后LED灯点亮,蜂鸣器不响
数码管置为M.ms
******************************************/
voidreset()
m=M;
ms=0;
send(m,ms,1,1);
延时
延时0.01s
0.01/1/202.8MHz
voiddelay()
inti=0;
for(i=0;
i<
0x00002000;
i++);
ms每10ms自减一次
voidrun_stop()
inti;
while
(1)
{
if(rUTRSTAT0&
0X1)
{
revBuf=rURXH0;
if(revBuf==0x01)
{
break;
}
}
if(ms==-1&
&
m==0)
for(i=0;
10;
i++)
{
if(i%2==0)
send(0,0,0,1);
else
send(0,0,1,1);
}
break;
}
if(ms==-1)
{ms=99;
m--;
}
send(m,ms,0,1);
delay();
ms--;
}
voidadd()
if(M<
99)
M++;
m=M;
send(M,0,0,0);
voidsub()//
if(M>
0)//
M--;
//
voidMain()
GPHCON=0xa<
<
2*2;
ULCON0=0x3;
UCON0=0x5;
UBRDIV0=329;
{
0X1)//接收是否完毕
{
revBuf=rURXH0;
switch(revBuf)//
case0x01:
run_stop();
break;
case0x02:
add();
case0x03:
sub();
case0x04:
reset();
default:
2、单片机
#include<
AT89X51.h>
#defineuintunsignedint
unsignedcharcnt;
//区分数码管显示位
unsignedcharKEY=0;
//按键锁定
unsignedcharspeak=0;
//蜂鸣器不响
unsignedcharled=0;
//指示灯不亮
intmg=99,ms=99;
//数码管整数位(0~99)小数位(0~99)初始化显示数字
unsignedchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//数码管0-9断码表
voiduart_isr()interrupt4 //中断方式4,串行口I/O中断
/*******************************************
接收模块
0xBB表示接下来要接收两个数码管数据
单片机串行口数据缓冲器SBUF
*******************************************/
if(RI) //接收中断标志位RI
{RI=0;
if(SBUF==0xBB)
while(!
RI);
RI=0;
ms=SBUF;
ms=SBUF&
0x7f;
led=SBUF/128;
mg=SBUF;
mg=SBUF&
speak=!
(SBUF/128);
}
}
voidCom_Init(void) //计数器初始化
TMOD=0x20;
//T1计时器
PCON=0x00;
//波特率不倍增,在方式1、2、3中0表示不倍增,1表示倍增
SCON=0x50;
//串行口控制器配置
TH1=0xFD;
//T1高8位
TL1=0xFD;
//T1地8位
TR1=1;
ES=1;
voidTimer_Init(void) //配置定时器
TMOD|=0x01;
TH0=0xFC;
TL0=0x18;
TR0=1;
EA=1;
ET0=1;
voidShow_Init()//按键、蜂鸣器初始状态
P2_0=1;