单片机应用课程设计.doc

上传人:椰子壳 文档编号:5019094 上传时间:2020-01-29 格式:DOC 页数:27 大小:347.50KB
返回 下载 相关 举报
单片机应用课程设计.doc_第1页
第1页 / 共27页
单片机应用课程设计.doc_第2页
第2页 / 共27页
单片机应用课程设计.doc_第3页
第3页 / 共27页
单片机应用课程设计.doc_第4页
第4页 / 共27页
单片机应用课程设计.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《单片机应用课程设计.doc》由会员分享,可在线阅读,更多相关《单片机应用课程设计.doc(27页珍藏版)》请在三一文库上搜索。

1、 单片机应用课程设计报告 院系:电子工程系班级:07级自动化2班姓名:李靖雯学号:01207212东南大学成贤学院2010.925目 录第一章 单片机开发系统控制板电路说明1一、控制系统硬件组成1二、芯片介绍4第二章 单片机应用课程设计内容8一、1号单片机测试8二、1号单片机与串口10三、2号单片机与串口12四、2号单片机与键盘12五、键盘与串口14六、存储设计18第三章 总 结.24参考文献25第一章 单片机开发系统控制板电路说明一、控制系统硬件组成1、1号单片机硬件图图1-1该1号单片机为目前最常用的AT89S52,它带有8K储存空间,它主要实现单片机当中的最小系统,其中设置了看门狗MAX

2、813来对单片机进行监控。另外,还加入了一个24C02的2*8K的串行E2PROM的芯片, 同时配以ISP下载接口,来实现单片机掉电以后的数据存储。2、2号单片机硬件图图1-2 该2号单片机也是目前最常用的AT89S52,带有8K的储存空间,主要实现单片机当中的最小系统,其中设置了看门狗MAX813来对单片机进行监控。它也配有ISP下载接口, 但2号单片机的P0口与锁存器74HC573相连接以便直接控制按键模块,同样RS232通信模块也直接与2号单片机模块相连接。具体连接方式见具体各模块的原理图。3、 5V电源稳压模块电路图图1-3这个模块主要实现了为1号两块单片机和2号两块单片机提供5V工作

3、电压的功能。4、按键电路图图1-4电路图中的8个按键用与非门再加非门的形式连接到单片机中的断口,通过编不同的程序,并且在编程中加入合理的消抖和延时等待,使得按键以后单片机等待中断的来临,从而做程序中相应的操作。 5、RS232通信模块图1-5这个模块主要实现了2号单片机与上位机之间的串口通信,可以利用串口调试助手发送和接受单片机中的数据。二、芯片介绍1、AT89S52 a.功能特性描述AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另

4、外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。b.AT89S52芯片如下: 图1-6P0 口:P0口是一个8位漏极开路的双向I/O口P1 口:P1 口是一个有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高

5、,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。2、74HC573 a.功能特性描述 SL74HC573 跟LS/AL573 的管脚一样,器件的输入是和标准CMOS 输出兼容的,加上拉电阻,它们能和LS/ALSTTL 输出兼容。当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。它的输出能直接接到CMOS,NMOS 和TTL 接口上,操作电压范围为2.0V6.0V,低输入电流为1.0uA。这个器件还带有保护电路,以免被高的静态电压或电场损坏。但是对于高阻抗电路,VIN 和VOU

6、T应该被控制在GND(VIN 或VOUT)VCC的范围内。不用的输入管腿必须连接到一个适合的逻辑电压电平,不用的输出管腿必须悬空。b.74HC573芯片如下:图1-7c.功能表:表1-13、MAX813L芯片及工作原理a.各引脚功能及工作原理(1)手动复位输入端():该端输入低电平时保持140 ms以上,MAX813L就输出复位信号.输入端的最小输入脉宽要求可以有效地消除开关的抖动。与TTL/CMOS兼容。(2)工作电源端(VCC):接+5V电源。(3)电源接地端(GND):接0 V参考电平。(4)电源故障输入端(PFI):该端输入电压低于125 V时,5号引脚输出端的信号由高电平变为低电平。

7、(5)电源故障输出端():电源正常时,保持高电平,电源电压变低或掉电时,输出由高电平变为低电平。(6)看门狗信号输入端(WDI):程序正常运行时,必须在小于16 s的时间间隔内向该输入端发送一个脉冲信号,以清除芯片内部的看门狗定时器。若超过16 s该输入端收不到脉冲信号,则内部定时器溢出,8号引脚由高电平变为低电平。(7)复位信号输出端(RST):上电时,自动产生200 ms的复位脉冲,手动复位端输入低电平时,该端也产生复位信号输出。(8)看门狗信号输出端():正常工作时输出保持高电平,看门狗输出时,该端输出信号由高电平变为低电平。b.MAX813L的引脚图1-84、24c02 24c02是一

8、个1K/2K/4K/8K/16K位串行CMOS E2PROM,内部含有128/256/512/1024/2048 个8 位字节,CATALYST 公司的先进CMOS 技术实质上减少了器件的功耗. CAT24WC01 有一个8 字节页写缓冲器,24c01/24c02有一个16 字节页写缓冲器.该器件通过I2C 总线接口进行操作有一个专门的写保护功能。图1-9第二章 单片机应用课程设计内容一、1号单片机测试1、实验目的通过该实验熟悉keilC环境熟悉编程和下载程序的方法,并通过简单的测试程序检测12V5V电源转换模块以及1号单片机是否能够正常工作 2、实验要求要求学会检测硬件系统,熟悉单片机编程、

9、汇编和下载的过程3、实验设备 电路板两块,电脑一台,万用表一块,下载线一根,导线少许,锡丝少许,电烙铁一把,烙铁架一个4、实验内容a、程序设计流程图给P1口全部置1将0255依次赋值给P1口使P1.1口实现闪烁P1.0口持续一段时间置0P1.7口持续一段时间置0循环图2-1b、程序清单和程序说明sfr P1 = 0x90; sbit P1_0 = P1 0; sbit P1_7 = 0x90 7; sbit P1_1 = 0x91; void main(void)unsigned int a;unsigned char b;dofor (a=0;a50000;a+)P1_0 = 0; for

10、(a=0;a50000;a+)P1_7 = 0;for (b=0;b255;b+)for (a=0;a10000;a+)P1 = b; /用b的值来做跑马灯的花样P1 = 255; for (b=0;b255;b+)for (a=0;a10000;a+) /P1_1闪烁P1_1 = 0;for (a=0;a10000;a+)P1_1 = 1; while(1);c、调试中遇到的问题及其解决方法问题1:用Easy 51Pro下载程序时,发现程序不能正常烧入单片机。解决方法:经同学指导,原来是编程器下载线设置项应选为Altera ByteBlaster才能将程序正常烧入单片机。 问题2:电源单独测

11、试的时侯输出的三个电压幅值是正常的,但是连接大板子的时侯电源上的+15V,+12V,-15V都不正常。;解决方法:给大板子利用导线直接上5V,用万用表测试大板子的+5V与GND,发现是短路的,在老师的帮助下,经过反复观察、测试,发现是因为大板子背面一块贴片电容由于焊的时候不注意锡连在一起而造成整个板子短路了,把那个电容正确重新焊好并且经过严密的检测,重新上电以后,再次用万用表测试电源上的+15V,+12V,-15V是正常的。问题3:大板子和小板子连接,并上电以后,大板子上1号单片机上的5V电源出不来。解决方法:经过检测和严密的分析,这个情况是由于74HC573被焊反了,以致于5V电源出不来,并

12、且导致有些芯片过热而烧坏,重新焊好74HC573,再次上电之后发现5V电源可以出来。问题4:用万用表测试单片机时,管脚电平没反应。解决方法:用万用表检测发现一些虚焊问题,通过重新焊接并检测,单片机能测出正确的电平;二、1号单片机与串口1、实验目的 测试控制板的单片机1号与串口是否能正确工作,为存储设计打下基础。2、实验要求熟悉单片机串口通讯的使用和编程的设计思路。3、实验设备电路板两块,电脑一台,万用表一块,下载线一根,导线少许,锡丝少许,电烙铁一把,烙铁架一个4、实验内容a、程序设计思路和流程图开始给单片机上电,并烧入程序,单片机处于初始化状态等待串口中断是否到来在串口调试助手输入栏输入相应

13、的值,输出显示出字符ASC码+1之后的字符是串口处于之前状态否循环图2-2b、程序清单和程序说明#include void main (void)SCON = 0x50;TMOD |= 0x20; TH1 = 0xFD; TR1 = 1; EA = 1; ES = 1; while (1) void UART_SER (void) interrupt 4unsigned char Temp; if(RI) RI=0; Temp=SBUF; P1=Temp; SBUF=Temp; if(TI) TI=0; 向单片机中烧入程序后,打开串口调试助手,在手动发送窗口写入相应的字母,则会显示相应的字符A

14、SC码+1之后的字符。 图2-3c、调试中遇到的问题及其解决方法问题:在调试1号单片系统中的串口通信模块时发现,不论写入怎样的程序,串口调试助手都无法显示出相应的字符。解决方法:经检查发现,我们的MAX232芯片7、8两脚未与串口接口两脚连接,且短路线没有割断。当用导线连接好两个脚并割断短路线后,1号单片机与串口可以工作正常,串口调试助手可以正常显示出相应的字符。三、2号单片机与串口与1号单片机的调试方法相同四、2号单片机与键盘1、实验目的 通过按键来控制2号单片机与键盘的连接工作情况,从而检测硬件电路和软件程序的正确性。2、实验要求单片机与按键相连接的使用和编程的设计思路,学会软件与硬件相结

15、合。3、实验设备电路板两块,电脑一台,万用表一块,下载线一根,导线少许,锡丝少许,电烙铁一把,烙铁架一个4、实验内容a、程序设计思路和流程图开始给单片机上电,并烧入程序,单片机处于初始化状态按下8个按键中任意一个是按键的输入口都是高电平否循环外部中断是否来临单片机处于之前状态否P1口得到相应的值否图2-4b、程序清单和程序说明#include#includesbit keyb=P27 ;sbit int2b=P32;sbit rdb=P37; void main(void) P1=0xff; P0=0xff;while(1)/循环if(int2b=0)/外部中断是否来临keyb=0;rdb=0

16、;/573芯片输出使能端置低电平P1=P0;/P0口值赋给P1;用万用表测试P1口的电平,检测全部为高电平。依次按下8个按键,相应的P1口的8个引脚依次由高变低,并有锁存功能。c、调试中遇到的问题及其解决方法问题:在调试过程中发现无论有没有按下按键,经万用表测试,单片机2管脚的0.0-0.7脚都是低电平。解决方法:通过老师检测,发现是有两个该连接的地方没有连接,导致中断不能正常进入,连接好后,单片机和键盘都可以正常工作,实现了单片机与键盘的连接功能。五、键盘与串口1、实验目的 实现单片机,串口及按键三方面的连接,进一步测试其软件和硬件的正确性2、实验要求熟悉单片机与外部硬件的通信,并在串口中检

17、测其正确性3、实验设备电路板两块,电脑一台,万用表一块,下载线一根,导线少许,锡丝少许,电烙铁一把,烙铁架一个4、实验内容a、程序设计思路和流程图给单片机上电,并烧入程序,单片机处于初始化状态P1口得到相应的值单片机处于之前状态循环是否开 始按下8个按键中任意一个外部中断是否来临按键的输入口都为高电平是否等待串口中断是否来临根据按键,显示相应字符串口处于之前状态是否图2-5b、程序清单和程序说明#include#include#define uchar unsigned char#define uint unsigned intsbit keyb=P27;sbit int2b=P32;sbit

18、 rdb=P37; void delay(int i) int j; for(j=0;ji;j+); /延时void init() TMOD=0x20;SCON=0x50;TH1=0xfA; TL1=0xfA;PCON=0x80;TR1=1; EA=1;ES=0;RI=0;TI=0; /串口初始化void display(uchar i) SBUF=i;while(!TI);delay(15000);TI=0; 串口显示函数 void key() uchar a;P0=0xff;keyb=1; if(int2b=0)/外部中断是否来临delay(1);if(int2b=0)keyb=0;rdb

19、=0;a=P0;switch(a)case 0xfe:display(a);keyb=1;break;case 0xfd:display(b);keyb=1;break;case 0xfb:display(c);keyb=1;break;case 0xf7:display(d);keyb=1;break;case 0xef:display(e);keyb=1;break;case 0xdf:display(f);keyb=1;break;case 0xbf:display(g);keyb=1;break;case 0x7f:display(h);keyb=1;break; /按键函数并送到缓冲

20、区void main() init();display(x); while(1)/循环 key();c、调试中遇到的问题及其解决方法问题:测试的时候,按下按键相应的字符出不来。解决方法:经检查,用导线连接的两个口断开,重新焊接以后,再次测验是正确的。 六、存储设计1、实验目的 实现24C02芯片的失电后再上电复位存储读写功能2、实验要求熟悉单片机与外部存储芯片之间相连接时的使用3、实验设备电路板两块,电脑一台,万用表一块,下载线一根,导线少许,锡丝少许,电烙铁一把,烙铁架一个4、实验内容a、程序设计思路和流程图开始发出停止条件以初始化写循环程序传送开始传送控制字节设备是否应答?No存入4个数值

21、分别为0x11,0x22,0x33,0x44清除当前数据调用存储数据传送数据到串口在上位机上显示图2-6b、程序清单和程序说明#include /包含头文件,头文件包含特殊功能寄存器的定义 #include /包含NOP空指令函数_nop_(); #define AddWr 0xa0 /写数据地址,需要参考24c02芯片文档 #define AddRd 0xa1 /读数据地址 sbit Sda=P12; /定义总线连接端口 sbit Scl=P13;void mDelay(unsigned char j) unsigned int i; for(;j0;j-) for(i=0;i125;i+)

22、 ; /*启动IIC总线*/ void Start(void) Sda=1; _nop_();_nop_(); Scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); Sda=0; _nop_();_nop_();_nop_();_nop_();_nop_(); Scl=0; /*停止IIC总线*/ void Stop(void) Sda=0; _nop_(); Scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); Sda=1; _nop_();_nop_();_nop_();_nop_();_nop_(); S

23、cl=0; void Ack(void) Sda=0;_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=0;_nop_();_nop_();void NoAck(void) Sda=1; _nop_();_nop_();_nop_(); Scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); Scl=0; _nop_();_nop_(); /*发送一个字节*/ void Send(unsigned char Data) unsigned char BitCo

24、unter=8; unsigned char temp; do temp=Data; Scl=0; _nop_();_nop_();_nop_();_nop_();_nop_(); if(temp&0x80)=0x80) Sda=1; else Sda=0;Scl=1;temp=Data1;Data=temp;BitCounter-; while(BitCounter); Scl=0; /*读入一个字节并返回*/ unsigned char Read(void) unsigned char temp=0; unsigned char temp1=0; unsigned char BitCoun

25、ter=8; Sda=1; do Scl=0; _nop_();_nop_();_nop_();_nop_();_nop_(); Scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) temp1=temp1; temp=temp1; BitCounter-; while(BitCounter);return(temp); /*写入数据*/ void WrToROM(unsigned char Data,unsigned char

26、Address,unsigned char Num) unsigned char i; unsigned char *PData; PData=Data; for(i=0;iNum;i+) Start(); Send(AddWr); /写入芯片地址 Ack(); Send(Address+i);/写入存储地址 Ack(); Send(*(PData+i);/写数据 Ack(); Stop(); mDelay(20); /*读出数据*/ void RdFromROM(unsigned char Data,unsigned char Address,unsigned char Num) unsig

27、ned char i; unsigned char *PData; PData=Data; for(i=0;iNum;i+) Start(); /写入芯片地址 Send(AddWr); Ack(); Send(Address+i);/写入存储地址 Ack(); Start(); Send(AddRd); /读入地址 Ack(); *(PData+i)=Read();/读数据 Scl=0; NoAck(); Stop(); void init() TMOD=0x20;SCON=0x50;TH1=0xfA;TL1=0xfA; PCON=0x80;TR1=1;EA=1;ES=0;RI=0;TI=0;

28、 void display(unsigned char i) SBUF=i; while(!TI); TI=0; /*主程序*/void main() unsigned char Number4=0x02,0x04,0x06,0x08;/ 显示码值WrToROM(Number,4,4); /写入24c02 mDelay(200); Number0=0; /清除当前数据 Number1=0; Number2=0; Number3=0; RdFromROM(Number,4,4); /调用存储数据 while(1) int i; for(i=0;i4;i+) init(); P2=Numberi;

29、 display(Numberi);mDelay(200);mDelay(200);if(i=4)break; c、调试中遇到的问题及其解决方法问题1:在调试一号单片机系统的24C02存储芯片时,发现无法读取信息。解决方法:在检查硬件电路无错的情况下,调试软件。软件程序发生错误,要先写入24C02,再进行读写。问题2:程序改过之后,调试发现仍然无法读取信息。解决方法:经检查发现导线连的是2号单片机,应该连1号单片机,经改正以后再次上电调试,可以得到预知结果。第三章 总 结在短学期这次课程设计中,我们对单片机的开发系统控制板有了进一步的学习和运用。主要是学习怎么把软件和硬件联系起来,能够将之前学

30、过的电路,微机和C语言相结合,实现一些我们所需的功能。在这个过程中我们要学会怎么调通程序,学会在电路板的调试过程中如果遇到问题要怎么一步步地去解决才能达到预知的效果。在这次课程设计中,我们首先对1号和2号单片机进行检测,看5v电源是否可以正常供电,并且单片机上的5v是否能出来,在单片机检测正确以后才可以进行下面的实验。在对单片机、串口、按键、存储等模块的实际使用中,每个组都遇到了各种不同的问题,我们尤其多。其实后来回想,也是因为自己一开始检测的时候没有很仔细和全面的去检查我们的板子,以为肯定没有问题,因为一直没有出过问题,只能说很马虎,不谨慎,导致一开始有些芯片烧坏,电源发热,还好在老师的帮助

31、下,发现了问题。一开始别人都在不停地做实验而我们却在无休止地检查板子哪里出了问题,心里确实有点急的,这也算是个教训了,以后凡事还是得脚踏实地、认认真真、仔仔细细的去完成才能保质保量。还有就是最后的考试,我们组是要求用定时器实现单片机的2.6、2.7管脚输出相互反向的PWM波形。我们在程序设计中先后尝试了用不同的频率与周期来实现,发现示波器只能在特定的周期下才能清晰显示。经过反复对比,最后采用了周期10ms、占空比25%的设定,此时波形非常清晰且无闪烁。但是两个管脚显示的反向pwm波形出现了较为明显的相位移动,且在周期两倍的情况下,相移也出现了两倍的变化。请教了老师之后分析可能是由于模拟示波器内部相移造成的结果。 总之,这次的课程设计我们学到了很多,不仅把我们以前学过的课本当中的知识运用到了实际操作中,加深了我们的理解,而且在这样的一个过程中也磨练了我们的耐心,锻炼了我们的观察能力。参考文献【1】 田立,田清,代方震:51单片机c语言程序设计快速入门,北京:人民邮电出版社 2007年版;【2】 白延敏:51单片典型系统开发电子大学出版社,1996;【3】 夏继强.:单片机实验与实践教程 北京:北京航空航天大学出版社, 2001;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1