(PCB印制电路板]单片机实验报告.pdf
《(PCB印制电路板]单片机实验报告.pdf》由会员分享,可在线阅读,更多相关《(PCB印制电路板]单片机实验报告.pdf(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、(PCBPCB 印制电路板)单片印制电路板)单片机实验报告机实验报告目录实验一、单片机间的多机通信.0实验二、I2C 总线应用技术.8实验三、层次原理图设计.12实验四、元件封装的创建.15实验五、自动布局.17实验六、开关控制 LED.21实验七、中断计数器.24实验八、UART.29实验一、单片机间的多机通信实验一、单片机间的多机通信(1 1)实验题目实验题目采用 C 语言实现单片机间的多机通信。实现内容:三个 51 单片机进行多机通信。一个单片机用于温度的采集(可采用可变电阻模拟温度值),一个单片机用于控制8 个 LED 灯循环显示,显示的时间间隔从主机中获得,主机用于发送温度的大小值及
2、循环显示的时间给从机。(2 2)实验目的实验目的掌握 proteus 和软件环境keilC 的联机调试过程掌握基于 ARMc 编程基础(3 3)实验设备实验设备1.Proteus 8 Professional 仿真开发环境;2.Keil uVision4(4 4)实验步骤实验步骤1.1打开Proteus 8,选择isis绘制电路图,点击p添加元件AT89C51,BUTTON,CAP,CAP-ELEC,CRYSTAL,RES.1.2 绘制电路图如图所示:2.1 打开 Keil uVision5,new project 和 new file2.2 编写代码:(c 语言)/*实验一*主机*发送循环显
3、示时间和温度值给从机*/#include#include#define _SUCC_ 0 x0f/数据传送成功#define _ERR_0 xf0/数据传送失败#define uchar unsigned char#define uintunsigned intuint Time=0,1,2,3,4,5,6,7;/循环显示时间间隔(s)uint T=22,33,66,77,88,99;sbit KEY1=P33;sbit KEY2=P35;uchar count=0;/延时 1ms 函数void delay_1ms(uint t)uint y;while(t-)/串口初始化函数void ser
4、ial_init()TMOD=0 x20;/定时器 1 工作于方式 2TH1=0 xfd;TL1=0 xfd;/波特率为 9600for(y=110;y0;y-);PCON=0;SCON=0 xd0;/串口工作于方式 3TR1=1;TI=0;RI=0;/发送数据函数void SEND_data(uint*Buff)TI=0;TB8=0;/发送数据长度/发送数据帧/开启定时器P2=Buffcount;SBUF=Buffcount;while(!TI);TI=0;count+;count=count%5;/向指定从机地址发送数据void ADDR_data(uchar addr,uint*Buff
5、)uchar temp=0 xff;while(temp!=addr)/主机等待从机返回其地址作为应答信号SEND_data(Buff);TI=0;/发送从机地址/发送地址帧TB8=1;SBUF=addr;while(!TI);TI=0;RI=0;while(!RI);temp=SBUF;RI=0;/main 函数void main()serial_init();while(1)if(KEY1=0)delay_1ms(5);if(KEY1=0)if(KEY2=0)delay_1ms(5);if(KEY2=0)while(!KEY2);ADDR_data(0 x02,T);while(!KEY1
6、);ADDR_data(0 x01,Time);/*实验一*从机 1*接收主机发送的温度值*/#include#include#include#define addr0 x02/从机 2 的地址#define _SUCC_0 x0f/数据传送成功#define _ERR_0 xf0/数据传送失败#define uint unsigned int#define uchar unsigned charunsigned char Buff20;/数据缓冲区uchar flag=0;/请求标志sbit cs=P10;sbit clk=P11;sbit dio=P12;/串口初始化函数void seri
7、al_init()TMOD=0 x20;/定时器 1 工作于方式 2TH1=0 xfd;TL1=0 xfd;/波特率为 9600PCON=0;SCON=0 xd0;/串口工作于方式 3TR1=1;/开启定时器TI=0;RI=0;/-/延时/-void delay(uint x)/-/得到 ad 转结果/-uchar get_ad_result()uchar i,dat1=0,dat2=0;cs=0;uint i;while(x-)for(i=0;i 120;i+);clk=0;dio=1;_nop_();_nop_();clk=1;_nop_();_nop_();clk=0;dio=1;_no
8、p_();_nop_();clk=1;_nop_();_nop_();clk=0;dio=0;_nop_();_nop_();clk=1;dio=1;_nop_();_nop_();clk=0;dio=1;_nop_();_nop_();for(i=0;i8;i+)clk=1;for(i=0;i8;i+)dat2=dat2|(uchar)(dio)i);_nop_();_nop_();_nop_();_nop_();clk=0;_nop_();_nop_();dat1=dat11|dio;clk=1;clk=0;_nop_();_nop_();cs=1;return(dat1=dat2)?da
9、t1:0;/-/主函数/-void main()uint i=0,j=0;uchar temp=0,temp2=0;uchar aa=0 xff;serial_init();while(1)SM2=1;/接收地址帧aa=0 xff;while(aa!=addr)/从机等待主机请求自己的地址RI=0;while(!RI)temp=get_ad_result();/温度采集结果if(temp!=temp2)P2=temp;temp2=temp;aa=SBUF;RI=0;TI=0;/一旦被请求,从机返回自己地址作为应答,等待接收数据TB8=0;SBUF=addr;while(!TI);TI=0;SM
10、2=0;/接收数据帧RI=0;while(!RI);Buffi=SBUF;/数据帧RI=0;/*实验一P2=Buffi;/查看接收到的数据*从机 2*接收主机发送的循环显示时间*/#include#include#include#define addr0 x01/从机 2 的地址#define _SUCC_0 x0f/数据传送成功#define _ERR_0 xf0/数据传送失败#define uint unsigned int#define uchar unsigned charuint code sTable=0,10,20,40,60,80,100,150;uint Buff20;/数据
11、缓冲区uchar light=0 x00;uint speed=0;uint tcount=0;/串口初始化函数void serial_init()TMOD=0 x20;/定时器 1 工作于方式 2TH1=0 xfd;TL1=0 xfd;/波特率为 9600PCON=0;SCON=0 xd0;/串口工作于方式 3TR1=1;/开启定时器TI=0;RI=0;/-/延时/-void T0_INT()interrupt 1if(tcount+speed)return;/-/主函数/-void main()tcount=0;P1=light;light=_crol_(light,1);uint i=0
12、,j=0;uchar aa=0 xff;serial_init();IE=0X82;TR0=1;uint m;while(1)SM2=1;/接收地址帧aa=0 xff;while(aa!=addr)/从机等待主机请求自己的地址RI=0;while(!RI);aa=SBUF;RI=0;TI=0;/一旦被请求,从机返回自己地址作为应答,等待接收数据TB8=0;SBUF=addr;while(!TI);TI=0;SM2=0;/接收数据帧RI=0;while(!RI);m=SBUF;/数据帧RI=0;speed=sTablem;P2=m;/查看接收到的数据2.3 compile file,生成.HEX
13、 文件light=0 x01;(5 5)实验小结实验小结本次实验,实验二、实验二、I2CI2C 总线应用技术总线应用技术(1)(1)实验题目实验题目实验题目:采用 C 语言完成 I2C 的通信。实现内容:放置两个 I2C 芯片,一个是 24C01 存储器,一个是 24C02,分别向两个芯片中写入 016,1733。然后读出相加并将值写入单片机相关单元。(2)(2)实验目的实验目的掌握 proteus 和软件环境keilC 的联机调试过程(3)(3)实验设备实验设备1.Proteus 8 Professional 仿真开发环境;2.Keil uVision5(4)(4)实验步骤实验步骤1.1打开
14、Proteus 8,选择isis绘制电路图,点击p添加元件AT89C51,BUTTON,CAP,CAP-ELEC,CRYSTAL,RES.1.2 绘制电路图如图所示:2.1 打开 Keil uVision5,new project 和 new file2.2 编写代码:(c 语言)/-/-/实验二、实验二、I2CI2C 总线应用技术总线应用技术/采用采用 C C 语言完成语言完成 I2CI2C 的通信。的通信。/实现内容:放置两个实现内容:放置两个 I2CI2C 芯片,一个是芯片,一个是 24C0124C01 存储器,一个是存储器,一个是 24C0224C02,/分别向两个芯片中写入分别向两个
15、芯片中写入 0 01616,17173333。然后读出相加并将值写入单片机相关单元。然后读出相加并将值写入单片机相关单元。/-/-#include#include#include#include#define uchar unsigned char#define uchar unsigned char#define uint unsigned int#define uint unsigned int#define NOP4()_nop_();_nop_();_nop_();_nop_();#define NOP4()_nop_();_nop_();_nop_();_nop_();sbit SC
16、L=P30;sbit SCL=P30;sbit SDA=P31;sbit SDA=P31;uchar*ptr=0 x30;uchar*ptr=0 x30;/保存相加结果的地址保存相加结果的地址/-/-/延时函数延时函数/-/-void delayms(uint x)void delayms(uint x)/-/-/开始开始/-/-void start()void start()SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0;SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0;/-/-/停止停止/-/-void stop()void stop(
17、)SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;/-/-/写完等待从器件应答写完等待从器件应答/-/-bit ACK(void)bit ACK(void)uchar i;SCL=1;NOP4();i=SDA;SCL=1;NOP4();SCLuchar i;SCL=1;NOP4();i=SDA;SCL=1;NOP4();SCL=0;=0;if(i=1)return 0;if(i=1)return 0;else return 1;else return 1;/-/-/读完发送停止读的信号读完发
18、送停止读的信号/-/-void NO_ACK()void NO_ACK()SDA=1;SCL=1;SDA=1;SCL=1;NOP4();SCL=0;SDA=0;NOP4();SCL=0;SDA=0;/-/-/写字节写字节/-/-void I2C_writebyte(uchar d)void I2C_writebyte(uchar d)uchar i;uchar i;while(x-)for(i=0;i120;i+);while(x-)for(i=0;i120;i+);uint i;uint i;for(i=0;i8;i+)for(i=0;i8;i+)d=1;SDA=CY;_nop_();SCL
19、=1;NOP4();SCL=0;d=1;SDA=CY;_nop_();SCL=1;NOP4();SCL=0;/-/-/读字节读字节/-/-uchar I2C_readbyte()uchar I2C_readbyte()uchar i,d;uchar i,d;for(i=0;i8;i+)for(i=0;i8;i+)SCL=1;d=1;d|=SDA;SCL=0;SCL=1;d=1;d|=SDA;SCL=0;/-/-/写地址及数据写地址及数据/-/-void I2C_write_addr(uchar sl,uchar addr,uchar dat)void I2C_write_addr(uchar
20、sl,uchar addr,uchar dat)start();start();/-/-/读当前地址的数据读当前地址的数据/-/-uchar I2C_read_current(uchar s)uchar I2C_read_current(uchar s)/-/-/读指定地址的数据读指定地址的数据/-/-uchar d;uchar d;I2C_writebyte(s+0 x01);I2C_writebyte(s+0 x01);d=I2C_readbyte();d=I2C_readbyte();NO_ACK();NO_ACK();stop();stop();return d;return d;st
21、art();start();I2C_writebyte(sl);I2C_writebyte(sl);I2C_writebyte(addr);I2C_writebyte(addr);I2C_writebyte(dat);I2C_writebyte(dat);stop();stop();delayms(10);delayms(10);return d;return d;ACK();ACK();uchar I2C_read_random(uchar sl,uchar addr)uchar I2C_read_random(uchar sl,uchar addr)/-/-/主函数主函数/-/-void
22、main()void main()uchar i;uchar i;uint dat1=0;uint dat1=0;uint dat2=17;uint dat2=17;uchar sl=0 xa0,0 xaE;uchar sl=0 xa0,0 xaE;for(i=0;i 16;i+)for(i=0;i 16;i+)dat1=I2C_read_random(sl0,i);dat1=I2C_read_random(sl0,i);dat2=I2C_read_random(sl1,i);dat2=I2C_read_random(sl1,i);dat2=dat2+dat1;dat2=dat2+dat1;*
23、ptr=dat2;*ptr=dat2;P2=P2=dat2;dat2;delayms(100);delayms(100);ptr+;ptr+;for(i=0;i 16;i+)for(i=0;i 16;i+)I2C_write_addr(sl0,i,dat1);I2C_write_addr(sl0,i,dat1);I2C_write_addr(sl1,i,dat2);I2C_write_addr(sl1,i,dat2);dat1+;dat1+;dat2+;dat2+;uchar d;uchar d;I2C_writebyte(sl);I2C_writebyte(sl);I2C_writebyte
24、(addr);I2C_writebyte(addr);d=I2C_read_current(sl);d=I2C_read_current(sl);return d;return d;start();start();while(1);while(1);2.3 compile file,生成.HEX 文件2.4proteus 下运行仿真,暂停,查看 cpu 内存:(6 6)实验小结实验小结本次实验目的:掌握 I2C 总线应用技术,用单片机通过总线控制2 块 I2C 芯片。难点是通过程序模拟 I2C 的时序,开始、应答、传送字节。但一条总线挂了多个 I2C 芯片时,需要设定每个芯片的地址,主机在发送
25、的帧中包含地址信息(A2A1A0).实验三、层次原理图设计实验三、层次原理图设计(1 1)实验题目实验题目完成 P126 的电路图设计。要求采用层次电路图的方式进行设计,并进行电气规则检查,生成元件报表、网络表。(2 2)实验目的实验目的掌握 proteus 层次原理图设计(3 3)实验设备实验设备1.Proteus 8 Professional 仿真开发环境;(4 4)实验步骤实验步骤原电路原理图1.创建子电路经过分析,决定对选取其中的一部分电路作为子电路进行层次设计。使用子电路工具建立层次图。2.将光标放置在子图上,点右键,并选择菜 单命令“Goto Child Sheet”(默认组合键为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PCB 印制 电路板 单片机 实验 报告
限制150内