资源描述
单片机系统配置实验总体说明
本实验给出了一个51单片机。
一、 实验目的
了解单片机的原理及其应用,掌握单片机的最小系统设计,掌握一门单片机的语言(汇编语言或单片机的C语言)。
二、 实验设备
单片机综合仿真实验箱一台,PC机一台。
三、 实验方法
2人一组,自己进行资料查询以及程序的编写,调试可以在各自的教研室进行,如果没有条件,也可以在实验提供的机器和仿真器上进行调试,调试的时间可约定,调试地点在飞行器制造系楼4层407室。
实验从10月10日开始做,具体时间请在表格上确认。调试通过的时间最晚不能超过10月28日。
四、 实验报告
每人交一份实验报告,交实验报告的时间最晚不能超过11月15日。
实验报告的内容包括统一的封面(在公共邮箱内)、实验目的、实验原理(实验原理图)、实验相关资料的简要说明、实现的源代码、对实验的意见及建议。手写、打印均可。实验报告交到新主楼A317。
在实验结束时,可能要问1-2个与实验相关的问题,请大家认真做。
五、 联系方法 13693127687 A317 陈友东(实验相关资料可以从网上下载)
助教:谷平平 13811582176
公共邮箱:mcu706@ 密码:mcu706
六、 实验地点 飞行器制造系楼4层407室
c51单片机基础知识、I2C总线基础知识、C51语言编程
c51单片机基础知识
51系列单片机是现在比较常用的单片机,主要用于工业控制、仪器仪表等。现在也推出了其他的单片机:ARM、PIC、AVR等。但51系列是低速级,应用的领域和场合不同,现在也有高速的开发出来了,C8051F系列等。
说明:
1)P1口为用户口,用于模拟通信协议,通用的I/O口输入输出等。
P1口的内部结构如图:
P1口是准双向口,若要准确地读回引脚上的状态,在读入前需写入1,否则会有错误。
2)RST脚。上电复位电路如下图所示:
按键复位时,人按键的时间一般在100ms以上,完全可以满足要求。
电容两端的电压是不能突变的。RST脚上电时的电压变化如图所示:
只要高电平的有效的持续时间大于24个振荡周期,即可复位。若时钟频率为6MHz,则复位信号至少应持续4微秒以上,才可以使单片机复位。
3)RXD、TXD:串行口(串行中断)。
4种通信方式:方式0:同步移位寄存器
方式1:10位异步收发
方式2:11位异步收发
方式3:11位异步收发
4)INT0、INT1:外部中断(电平中断/沿中断)
5)T0、T1:定时计数器中断。
方式0:13位定时器/计数器
方式1:16位定时器/计数器
方式2:常数自动装入的8位定时器/计数器
方式3:仅适用于T/C0,两个8位定时器/计数器
6)WR、RD:读写线,在INTEL中,片选、读、写扩展线是单独的。
在MOTOROLA中,用一根线来区别读写线。
7)XTAL2、XTAL1:时钟。几个概念:时钟周期(s),振荡周期(s/2),指令周期(1-4(6s)),机器周期(6s)。
8)21-28脚:P2口,并行地址扩展的高8位选择线。
9)29脚,PSEN:寻址空间,ROM64K,RAM64K
程序存储器的内外部选择,片外程序存储器选通信号,低电平有效。
10)30脚,ALE:地址锁存用,用于P0口的地址和数据的区分。
11)31脚:EA/VP:使用片内程序存储器接高,片外程序存储器接地。
12)32-39脚,P0口:数据口,地址线,8(可驱动8个TTL电平)
I2C总线系统扩展
串行扩展:连线简单、协议复杂
并行扩展:373,573接RAM等例子。
总线(BUS):在不同层次上都有应用。
1) 片内总线:6个DSP,2个CPU,继承度,模块化程度高。
2) 芯片与芯片之间的总线/板内总线:I2C,SPI,MICROWIRE,ONE-WIRE等。
3) 板间总线:ISA,PCI(133M),AGP(显卡)
4) 系统内总线:CAN总线,串行总线(285等)。
I2C总线:芯片类型地址(4位),数字引脚地址(3位),读/写地址(1位)
以8574为例:SLAW=0X40;SLAR=0X41.
其中的0100是器件地址,000是数字引脚地址,最后是写(0)/读(1)位。
写操作:
S
SLAW
A
Data1
A
Data2
A
…
Datan-1
A
Datan
A/
P
读操作:
S
SLAR
A
Data1
A
Data2
A
…
Datan-1
A
Datan
P
读写操作:
S
SLAW/R
A
Data1
A
…
Datan
A/
Sr
SLAR/W
A
基本遵循上述原则,更详细的可以查看相关的芯片资料。
I2c软件包总结出的子程序:
wrnbyt():写n个字节
rdnbyt():读n个字节
sta():开始
stop():结束
mack():发送应答位
mnack():发送非应答位
cack():判断应答位
C51语言编程
单片机的c语言与标准C语言相比,库文件有很多不同。
#include<reg51.h>
在reg51.h中定义了P0、P1、P2、P3口地址以及与单片机资源相关的SFR的地址。
SFR P0=0X80
SFR P1=0X90
SFR P2=0XA0
SFR P3=0XB0
在<Intrins.h>中,定义了nop,左移,右移,循环移动等函数。
在<String.h>中,定义了内存拷贝,字符串拷贝等函数
在< Math.h >中定义了exp,asin,cos等函数
在< stdio.h >中定义了打印函数等。
#pragma db cd(调试用与仿真器有关)
#include<reg51.h>
#include< stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P1^7;
sbit SCL=P1^6;
uchar SLAW=0X40;
uchar SLAR=0X41;
/*子函数的声明*/
void init();
void sta(void);
void stop(void);
void cack(void);
void mack(void);
………
void main()
{
init();//初始化
for(;;)
{
…….
}
}
void init()
{
……..
}
展开阅读全文