目录
1设计任务 ...................................................................................................................................... 1
1.1 基础项目 ........................................................................................................................... 1 1.2 提高项目 ........................................................................................................................... 1 2设计思路 ...................................................................................................................................... 1
2.1基础项目设计思路 ............................................................................................................ 1 2.2 提高项目设计思路 ........................................................................................................... 2 3 原理图 ......................................................................................................................................... 2
3.1 基础项目与提高项目原理图 ........................................................................................... 2 4.1 最小系统所需器件 ........................................................................................................... 3 4.2 外围电路所需器件 ........................................................................................................... 3 5 PCB图 .......................................................................................................................................... 4
5.1基础项目与提高项目的PCB图 ...................................................................................... 4 6 程序流程图 ................................................................................................................................. 4
6.1基础项目程序流程图 ........................................................................................................ 4 6.2 提高项目程序流程图 ....................................................................................................... 7 7 程序代码 ..................................................................................................................................... 8
7.1基础项目程序代码 ............................................................................................................ 8 7.2 提高项目程序代码 ......................................................................................................... 11 8总结 ............................................................................................................................................ 14
生产实习
生产实习报告
班 级: 通信10=2 姓 名: 王佩 学 号: 1006030219 成 绩:
电子与信息工程学院 信息与通信工程系
生产实习报告
1设计任务
1.1 基础项目
单片机最小系统及简单得外围电路制作与编程
目的:熟悉简单的单片机外围电路的原理与设计;通过汇编或C 语言编写简单的单片机程序。
实验任务:按照给定电路原理图,进行单片机最小系统的焊接:包括单片机、开关、插排、复位电路和晶振电路,正确焊接后,电路可以进行程序的下载。
1.2 提高项目
与上位机串口通信
功能描述:通过串口与上位PC机进行双向通信。
2设计思路
2.1基础项目设计思路
焊接最小系统电路,并在其基础上焊接简单得外围电路,包括:LED与独立按键、蜂鸣器、双位数码管。通过汇编或者C语言编写简单得单片机程序烧写至芯片中,并且能够实现指定的功能。LED 跑马灯、双位数码管对应计数,发光二极管有两个工作方式并且可以手动控制切换。
方式一:八个发光二极管始终沿着一个方向轮流点亮。 方式二:八个发光二极管轮流点亮但左右循环。
可准确确定周期T。每次第一个LED 亮起的时候蜂鸣器响一声(t 秒)提示 1.按键控制:一共三个按键分别实现以下功能
2.暂停:检测该按键有效按下后,LED 和数码管暂停,再次检测按键按下后,继续执
1
行当前循环
3.复位:检测该按键有效按下后,LED 和数码管归零重新开始以当前模式循环模式转换:正常运行状态,检测该按键有效按下后,数码管显示不变,LED 显示从当前方式转换成另一方式继续执行。
2.2 提高项目设计思路
程序实现的功能:实现下位机接收变长数据,ok为数据的帧尾。
1.向上位机发送字符串wok 下位机第一个灯亮,蜂鸣器响,并返给上位机com1 ok。 2.向上位机发送字符串wcok 下位机第二个灯亮,蜂鸣器关,并返给上位机com2 ok。 3.向上位机发送字符串wcyok 下位机第三个灯亮,且蜂鸣器响50毫秒。并返给上位机com3 ok。
3 原理图
3.1 基础项目与提高项目原理图
图3-1 电路图
2
4 器件清单
4.1 最小系统所需器件
表4-1 最小系统器件表
4.2 外围电路所需器件
表4-2 外围电路器件表
3
5 PCB图
5.1基础项目与提高项目的PCB图
图5-1 PCB图
6 程序流程图
6.1基础项目程序流程图
4
数码管扫描程序:主程序:开始开始开始数码管赋值定义变量定义变量调用按键扫描设初值,开中断赋值显示数码管加延时10ms定义中断方式结束重新赋值调用中断函数延时10ms结束图6-1 程序流程图
图6-2 按键扫描流程图
5
图6-3 蜂鸣器程序流程图
6
提高项目程序流程图
开始定义函数,初始化开始接收接收三个N接收四个N接收五个字符字符字符YYY接收wok接收wcok接收wcyck返回上位机com/ok返回上位机com2ok返回上位机com3ok点亮第一个点亮第二个LEDLED蜂鸣器关点亮第三个闭LED蜂鸣器响50ms蜂鸣器响接收完成接收完成接收完成结束图6-4 主程序流程图
7
6.2
开始开始设置定时器0为方式2NRI==1帧尾是okN设初值和中断控制位YY存储上位机发送的数据接收完成设置8位异号通信方式停止接收结束结束
图6-5 串口初始化及接受中断流程图
7 程序代码
7.1基础项目程序代码
#include 8 { int i,j; for(i=500;i>0;i--) for(j=100;j>0;j--); } void delayms(uint ms) { int i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } void keyscan() { if(key1==1) { delayms(10); if(key1==1) { while(key1) ; TR0=!TR0; } } if(key2==0) { delayms(10); if(key2==0) { while(!key2) ; flag=!flag; } } if(key3==0) { delayms(10); if(key3==0) { while(!key3); count=0; P0=0xfe; } } } void init() { P0=0xfe; //延时ms毫秒 //flag=1为默认模式1,为0为模式2 9 key1=0; key2=1; key3=1; le1=0; le2=0; feng=0; TMOD=0x01; //设置定时器1工作模式 TH0=(65536-45872)/256; //给定时器装入初值 TL0=(65536-45872)%256; EA=1; ET0=1; TR0=0; } void display(uint shi,uint ge) { uint i,j; i=shi; j=ge; le1=0; le2=0; P1=table[i]; le1=1; delayms(10); le1=0; P1=table[j]; le2=1; delayms(10); } int main() { init(); while(1) { shi1=count/10; ge1=count%10; keyscan(); display(shi1,ge1); } } void timer() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; ti++; //打开中断 //打开定时器中断 //数码管扫描 10 if(ti==10) //每累加到10的时间为0.5秒 { ti=0; //ti标志置0 count++; if(count==100) count=0; if(flag==1) { k=count%8; P0=leds1[k]; if(P0==0xfe) {feng=1; delay(); feng=0;} else feng=0; } else { k=count%14; P0=leds2[k]; if(P0==0xfe) { feng=1; delay(); feng=0;} else feng=0; } } } 7.2 提高项目程序代码 #include #define uint8_t unsigned char #define uint16_t unsigned int void UART_Intial(void);//串口初始化 void UART_Send_char(uint8_t SendData);//串口发送字节函数 void UART_Send_string(uint8_t *StringData);//串口发送字符串函数 uint8_t LedData[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED查表数据uint8_t rbuff[10],rcount=0,receive_ok=0; sbit feng=P3^7; void delay() //延时固定时间 { int i,j; for(i=500;i>0;i--) for(j=100;j>0;j--); 11 } void main(void)//主函数 { P0=0xff; feng=0; UART_Intial(); while(1) { if(receive_ok==1) { if(rcount==3)//接收3个字符 { if(rbuff[rcount-3]=='w') { P0 = LedData[0];////点亮第一个led feng=1; UART_Send_string(\"com1 ok \");//返回上位机com1 ok rcount =0; receive_ok=0; } } else if(rcount==4)//接收的为4个字符 { if((rbuff[rcount-4]=='w')&&(rbuff[rcount-3]=='c')) { P0 = LedData[1];//点亮第二个led feng=0; UART_Send_string(\"com2 ok \");////返回上位机com2 ok rcount =0; receive_ok=0; } } else if(rcount==5)//接收的为5个字符 { if((rbuff[rcount-5]=='w')&&(rbuff[rcount-4]=='c')&&(rbuff[rcount-3]=='y')) { P0 = LedData[2];//点亮第三个led feng=1; delay(); feng=0; UART_Send_string(\"com3 ok \");//返回上位机com3 ok rcount =0; receive_ok=0; } 12 } else { rcount =0; receive_ok=0; } } } } void UART_Intial(void)//串口初始化 { TMOD=0x20;//定时器0为方式2自动重装 TH1=0xfd;//前提晶振是11.0592mhz TL1=0xfd; EA=1; ES=1;//串口中断允许位 TR1=1; REN=1;//串口接受端 SM0=0;//串口通信方式为8位异步通信 SM1=1; } void UART_Send_char(uint8_t SendData)//串口发送字节函数 { SBUF = SendData; while(!TI); TI = 0; } void UART_Send_string(uint8_t *StringData)//串口发送字符串函数 { while(*StringData) { UART_Send_char(*StringData); StringData++; } } void UART()interrupt 4//串口接收中断函数 { // ES = 0; if(RI) { rbuff[rcount++]=SBUF;//存储上位机发送的数据 13 RI = 0;//清中断标志位 } if((rbuff[rcount-1]=='k')&&(rbuff[rcount-2]=='o'))//判断帧尾是不是ok { receive_ok=1;//接受完成 } if(rcount>10) rcount =0; //ES = 1; } 8总结 本次生产实习持续两周时间,主要完成两个项目,一个是基础项目,基础项目又分成两个小部分,第一小部分是最小系统的焊接,主要是熟悉简单的布线,元器件的辨认,焊接。并且完成单片机开发环境的安装与使用。第二个小部分是简单的外围电路的设计与编程,焊接完成后,编写相应的程序烧写到芯片中实现指定的功能。另一个则是提高项目,我选择的是与上位机串口通信,这个项目有优点也有缺点,优点则是不需要再焊接其他的元件,只要在基础项目电路的基础上编写正确的程序就能实现与上位机的串口通信。但缺点就是程序的编写对我们来说有点困难,毕竟我们的编程能力真的是有限。在基础项目的过程中,我熟练的掌握了焊接技术,在编写程序的过程中充分锻炼了我的编程思维,同时在完成原理图和PCB绘制的过程里,使我学会了对protel软件基本使用方法。在提高项目的设计过程中我们算是充分的发挥了合作精神,我们分工明确,基本上算是有条不紊的完成了提高项目,提高项目让我意识到,独立思考很重要,但团结的力量真的是无法想象,我们组的三个人就像组成了一个铁三角,无论缺水我们三个只能中的任何一个人,提高项目都不可能被完成,虽然在这次生产实习的过程中我有过特别倦怠的情绪,在感觉自己能力无法完成时也有过放弃的念头,但最后在同组的同学的共同努力以及向编程厉害的同学请教,终于还是圆满完成这次的生产实习。总体来说,这次的生产实习让我学到了很多,无论知识还是能力,还有从同组同学身上学到的品质,都是一笔宝贵的经验。 14 因篇幅问题不能全部显示,请点此查看更多更全内容