(PCB印制电路板)proteus单片机pcbarm实验报告精品

上传人:精****库 文档编号:137912079 上传时间:2020-07-12 格式:DOC 页数:35 大小:1.81MB
返回 下载 相关 举报
(PCB印制电路板)proteus单片机pcbarm实验报告精品_第1页
第1页 / 共35页
(PCB印制电路板)proteus单片机pcbarm实验报告精品_第2页
第2页 / 共35页
(PCB印制电路板)proteus单片机pcbarm实验报告精品_第3页
第3页 / 共35页
(PCB印制电路板)proteus单片机pcbarm实验报告精品_第4页
第4页 / 共35页
(PCB印制电路板)proteus单片机pcbarm实验报告精品_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《(PCB印制电路板)proteus单片机pcbarm实验报告精品》由会员分享,可在线阅读,更多相关《(PCB印制电路板)proteus单片机pcbarm实验报告精品(35页珍藏版)》请在金锄头文库上搜索。

1、 目录实验一、单片机间的多机通信0实验二、I2C总线应用技术8实验三、层次原理图设计12实验四、元件封装的创建15实验五、自动布局17实验六、开关控制LED21实验七、中断计数器24实验八、UART29实验一、单片机间的多机通信(1) 实验题目采用C语言实现单片机间的多机通信。实现内容:三个51单片机进行多机通信。一个单片机用于温度的采集(可采用可变电阻模拟温度值),一个单片机用于控制8个LED灯循环显示,显示的时间间隔从主机中获得,主机用于发送温度的大小值及循环显示的时间给从机。(2) 实验目的l 掌握proteus和软件环境keilC的联机调试过程l 掌握基于ARM c编程基础(3) 实验

2、设备1.Proteus 8 Professional 仿真开发环境;2.Keil uVision4(4) 实验步骤 1.1打开Proteus 8,选择isis绘制电路图,点击p添加元件AT89C51, BUTTON, CAP, CAP-ELEC, CRYSTAL, RES.1.2绘制电路图如图所示:2.1打开Keil uVision5,new project和new file 2.2编写代码:(c语言)/*实验一*主机*发送循环显示时间和温度值给从机*/#include#include#define _SUCC_ 0x0f/数据传送成功#define _ERR_0xf0/数据传送失败#defi

3、ne uchar unsigned char#define uint unsigned 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-)for(y=110;y0;y-);/串口初始化函数void serial_init() TMOD=0x20; /定时器1工作于方式2 TH1=0xfd; TL1=0xfd; /波特率为9600

4、PCON=0; SCON=0xd0;/串口工作于方式3 TR1=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)uchar temp=0xff; while(temp!=addr) /主机等待从机返回其地址作为应答信号 TI=0;/发送从机地

5、址TB8=1;/发送地址帧SBUF=addr;while(!TI);TI=0; RI=0;while(!RI);temp=SBUF;RI=0; SEND_data(Buff); /main函数void main() serial_init(); while(1) if(KEY1=0) delay_1ms(5); if(KEY1=0) while(!KEY1);ADDR_data(0x01,Time); if(KEY2=0) delay_1ms(5); if(KEY2=0) while(!KEY2);ADDR_data(0x02,T); /*实验一*从机1*接收主机发送的温度值*/#includ

6、e#include#include#define addr 0x02/从机2的地址#define _SUCC_ 0x0f/数据传送成功#define _ERR_ 0xf0/数据传送失败#define uint unsigned int #define uchar unsigned charunsigned char Buff20;/数据缓冲区uchar flag = 0; /请求标志sbit cs = P10;sbit clk = P11;sbit dio = P12;/串口初始化函数void serial_init() TMOD=0x20; /定时器1工作于方式2 TH1=0xfd; TL1

7、=0xfd; /波特率为9600 PCON=0; SCON=0xd0; /串口工作于方式3 TR1=1; /开启定时器 TI=0; RI=0;/-/延时/-void delay(uint x )uint i;while(x-) for(i = 0;i 120; i+);/-/得到ad转结果/-uchar get_ad_result() uchar i,dat1 = 0,dat2 = 0;cs = 0;clk=0;dio = 1;_nop_();_nop_();clk = 1;_nop_();_nop_();clk = 0;dio = 1;_nop_();_nop_();clk = 1;_nop

8、_();_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;_nop_();_nop_();clk=0;_nop_();_nop_();dat1 = dat11|dio;for(i= 0;i8;i+)dat2 = dat2 |(uchar)(dio)i); clk=1;_nop_();_nop_();clk=0;_nop_();_nop_();cs =1;return (dat1 = dat2)? dat

9、1:0;/-/主函数/-void main()uint i = 0 ,j=0;uchar temp = 0,temp2 = 0;uchar aa = 0xff; serial_init(); while(1) SM2 = 1; /接收地址帧 aa = 0xff; while(aa!=addr) /从机等待主机请求自己的地址 RI=0; while(!RI)temp = get_ad_result();/温度采集结果if(temp != temp2)P2 = temp;temp2 = temp; aa=SBUF; RI=0; TI=0; /一旦被请求,从机返回自己地址作为应答,等待接收数据 TB

10、8=0; SBUF=addr; while(!TI); TI=0; SM2=0; /接收数据帧RI=0; while(!RI); Buffi=SBUF; /数据帧 RI=0; P2 = Buffi;/查看接收到的数据/*实验一*从机2*接收主机发送的循环显示时间*/#include#include#include#define addr 0x01/从机2的地址#define _SUCC_ 0x0f/数据传送成功#define _ERR_ 0xf0/数据传送失败#define uint unsigned int #define uchar unsigned charuint code sTabl

11、e=0,10,20,40,60,80,100,150;uint Buff20;/数据缓冲区uchar light = 0x00;uint speed = 0;uint tcount = 0;/串口初始化函数void serial_init() TMOD=0x20; /定时器1工作于方式2 TH1=0xfd; TL1=0xfd; /波特率为9600 PCON=0; SCON=0xd0; /串口工作于方式3 TR1=1; /开启定时器 TI=0; RI=0;/-/延时/-void T0_INT() interrupt 1 if(tcount+ speed) return;tcount = 0;P1 = light;light = _crol_(light , 1);/-/主函数/-void main() uint i = 0 ,j=0;uint m; uchar aa = 0xff;serial_init(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号