单片机课程实验报告和程序.doc

上传人:爱问知识人 文档编号:5019180 上传时间:2020-01-29 格式:DOC 页数:44 大小:478.50KB
返回 下载 相关 举报
单片机课程实验报告和程序.doc_第1页
第1页 / 共44页
单片机课程实验报告和程序.doc_第2页
第2页 / 共44页
单片机课程实验报告和程序.doc_第3页
第3页 / 共44页
单片机课程实验报告和程序.doc_第4页
第4页 / 共44页
单片机课程实验报告和程序.doc_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《单片机课程实验报告和程序.doc》由会员分享,可在线阅读,更多相关《单片机课程实验报告和程序.doc(44页珍藏版)》请在三一文库上搜索。

1、单片机实验报告 华南师范大学姓 名: 学 号: 专 业: 通 信 工 程 班 级: 09通信8班 数字量输入输出实验一、 实验目的1 熟悉教学板电路及其结构。2 掌握利用Vision C51 软件编辑、调试(包括仿真调试、单步调试)、运行单片机程序的步骤和方法,掌握利用STC-ISP V39软件和下载线将程序写入单片机的方法 。3 通过实验熟悉51单片机的并行I/O口,并掌握它们的应用。4 掌握矩阵键盘、LED动态显示的工作原理。二、 实验设备PC机一台、实验教学板一块。三、 实验准备1 阅读实验讲义附录一、 实验教学板电路图和附录二、Vision软件使用说明2 按实验题目要求设计好硬件电路,

2、画出电路原理图,设计出相应程序,并给程序加上较详细的注释。四、 实验内容 1.实验线路如附图所示,51单片机的P0口输出接8个发光二极管的阴极,P2.4经NPN三极管9011控制发光管的阳极。P3口支持一个8位行列式键盘,其中P3.4P3.7供键盘扫描输出, P3.2、P3.3作键盘扫描输入。 实验要求:编程实现键盘对发光二极管的控制,每按一个按键,使对应的二极管点亮。 251单片机P0口输出同时接4个数码管的阴极,P2.0P2.3,经NPN三极管9011接数码管的阳极,该端口用于分别控制相应数码管的导通。实验要求:编程实现对任意按键动作的次数进行计数(最大99次),同时将计数值实时显示。五、

3、实验步骤1. 将实验板与PC机通过COM口连接。启动PC机,进入Vision软件环境,选择建立新工程文件,即可开始输入源程序。 2完成汇编、编译、连接,若有错误,则修改源程序,直至编译、连接通过为止。3接上实验板上的电源。3 运行“STC-ISP V39.EXE”,将程序代码下载到实验板的单片机中。操作的顺序是:1)选择单片机(MCU TYPE)型号。如:“STC89C51RC”要与实验板上所装单片机的型号一至。2)打开文件(Open File)。 即把要下载到单片机的程序文件(已通过编译了的机器码文件二进制(.Bin)或十六进制(.Hex)的)调到“文件缓冲区”,这时可看到右边的“文件缓冲区

4、” 有数字变化。3)选择串行通信口。 选对时,软件上的小灯会变绿。否则小灯是灰色。且在左下窗口提示“出错信息”。4)下载:按“Download/下载”按键下载。5)把实验板上的供电的直流电源拔掉或关掉3秒钟再插入或打开电源(为单片机上电复位)。 4观察单片机运行情况,验证程序是否能完成题目给出的控制要求,若不能达到要求,分析原因、查找错误,修改源程序,再次汇编、连接,重新下载、运行,直至达到题目的控制要求。六、 参考程序流程图实验内容1流程图 实验内容2流程图 键盘处理程序流程图七、 相应的程序1.按键点亮对应相应的二极管。ORG0000HMAIN:MOV P2,#10H/二极管一段高电平,点

5、亮准备STA:MOV A,#11101111B /按键测试MOV R7,#05H STA1:MOV P3,ADJNZ R7,NEXTSJMP STA/为0时则跳回.NEXT:RL APRESS0:JBP3.3,PRESS1/无按键等待LCALLDELAY30MS/去抖动JBP3.3,PRESS0/测试是哪一行接通了!JNBP3.3,$SJMP PRE_P33PRESS1:JBP3.2,STA1/无按键等待,如果P3.2为1时,则说明木有按过.LCALLDELAY30MS /去抖动JBP3.2,PRESS1JNBP3.2,$SJMP PRE_P32PRE_P33:DEC R7/点亮对应的LED灯

6、MOV A,R7MOV DPTR,#TABLE MOVC A,A+DPTRMOV P0,ASJMP STAPRE_P32:DEC R7MOV A,R7MOV DPTR,#TABLE1 MOVC A,A+DPTRMOV P0,ASJMP STADELAY30MS:MOVR4,#55DELAY:MOVR3,#250DJNZR3,$ /1.085us(指令周期)*2*250+2=547.5usDJNZR4,DELAYRETTABLE: DB 0F7H,0FBH,0FDH,0FEH /第一行按键,对应LED左边的4个灯TABLE1: DB 7FH,0BFH,0DFH,0EFH /第二行按键,对应LED

7、右边的4个灯END2.按键让数码管从00-99计数。ORG 0000HSTA:MOV DPTR,#TABLEMOV P2,#0H /关闭数码管选通MOV P3,#0FFHMOV R0,#0H /R0作为计数KEY:MOV A,#0EFH /按键扫描初始化第一列 MOV R1,#4HKEYB:MOV P3,A JNB P3.2,KEYC JNB P3.3,KEYC JMP MUY /该列无按键按下,进入下一列扫描KEYC:LCALL DELAY20 JNB P3.2,KEYCC JNB P3.3,KEYCC JMP MUYKEYCC:JNB P3.2,$ JNB P3.3,$ INC R0 /按

8、一次,增加R0的值MUY:RL A DJNZ R1,KEYB /一轮扫描结束后 MOV A,R0 CJNE A,#100,DIS /判断是否达到100,不是,转到显示区 MOV A,#0 /是,重新给A赋值0 MOV R0,#0DIS:MOV B,#10DIV AB /把A/10的商给A,余数给BMOVC A,A+DPTR MOV P0,A MOV P2,#4 / 十位显示LCALL DELAY1MOV A,BMOVC A,A+DPTRMOV P0,AMOV P2,#8 /个位显示LCALL DELAY1JMP KEYDELAY1:MOV R6,#2 DE11:MOV R5,#248 DJNZ

9、 R5,$ DJNZ R6,DE11 RETDELAY20:MOV R7,#10 DJNZ R7,DELAY1 RETTABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END八、 思考题1.按键程序为什么要有去抖动功能,如何去抖动?答:按键由于机械弹性的作用,键在闭合与断开的瞬间均有抖动过程,所以需要去抖动功能,去抖动有软件和硬件的方法,比如采用滤波电路防抖等硬件方法,软件去抖是检测到有键按下,执行一个10-20ms的延时程序,再确认该键是否仍保持闭合状态,若仍闭合则确认为此键按下,消除抖动影响。2.在显示时,为什么要延时1ms,这个

10、时间过长或过短,会出现什么现象? 答:因为人眼看事物有一个暂留效果,如果延时过短的话,可能看不到led灯或者数码管的变化,如果延时太长,则一直保持那原来的效果,没有变化。交通灯控制实验一、实验目的通过实验熟悉51单片机的并行I/O口,并掌握它们的应用。二、实验内容及原理模拟实现一个路口交通灯管理 在路口当中,一条为“干线”,另一条为“支线”。两个方向上各设有红、黄、绿3盏交通灯。 一般情况下(初始状态),干线亮绿灯,支线亮红灯。当支线上有三辆车到达路口(用按键按下模拟一辆车到达),则6秒后,干线亮黄灯,持续3秒后,转为干线亮红灯,支线亮绿灯,过24秒后,支线转黄灯亮,3秒后,回到初始状态。交通

11、灯实验 程序ORG0000HSTA:MOVP0,#11011011B /干线亮绿灯,支线亮红灯MOVP2,#0001000B /选通LEDMOVP3,#11101111B /K1列线置0MOVR7,#3STA1:JBP3.3,$ /无按键等待LCALLDELAY30MS /去抖动JBP3.3,STA1JNBP3.3,$ /等键释放DJNZR7,STA1MOVR6,#200STA2:LCALLDELAY30MS /延时30MSDJNZR6,STA2 /延时6秒MOVP0,#10111011B /干线亮黄灯,支线亮红灯MoVR6,#100STA3:LCALLDELAY30MSDJNZR6,STA3

12、 /延时3秒MOVP0,#01111110B /干线亮红灯,支线亮绿灯MOVR5,#4STA4:MOVR6,#200STA5:LCALLDELAY30MSDJNZR6,STA5DJNZR5,STA4 /延时24秒MOVP0,#01111101B /干线亮绿灯,支线亮黄灯MOVR6,#100STA6:LCALLDELAY30MSDJNZR6,STA6 /延时3秒LJMPSTADELAY30MS:MOVR4,#55DELAY:MOVR3,#250DJNZR3,$ /1.085us(指令周期)*2*250+2=547.5usDJNZR4,DELAYRET 定时与中断实验一、实验目的1通过实验掌握51

13、单片机的定时/计数器的应用。2掌握51单片机的中断原理及应用。3. 进一步学习系统应用程序的设计和调试方法二、实验设备PC机一台 、 实验教学板一块。 图2-1三、实验内容 实验线路如图2-1, 通过定时器的定时,产生一定频率的波形信号,经P2.5输出,驱动蜂鸣器,便可发出某一频率的音调,若按乐曲的音调连续发出,并使其按节拍变化,便可演奏一首乐曲。实验要求:编程实现演奏一首乐曲C调常用音频及其对应频率如下表: 音符频率 T值 音符频率 T值 SI494 646035 So 784649481 DO523646546 La880650122 Re587647517 Si987650693 Mi6

14、5964837 DO 1046650954 Fa69864875 RE 117465143定时器初值计算方法:由于软件是通过定时器溢出后对P2.5取反产生方波,故定时器溢出时间为1/2f,则计数器计数初值为:X = 65536 n = 65536 (1/2f)/12/fosc = 65536 fosc/24f 电路板上的晶振频率为 11.0593MHZ,根据不同音调的频率值,就可以计算出上表的初值。用乐曲最短的1/4拍为一个基本节拍时间,定为0.5秒,基本节拍时间由另一个定时器产生,设此定时器定时时间为50ms,定时时间常数(计数器初值)= 65536 (50000*12/11.0593)=0

15、2C13H,可以分别通过该定时中断10、20、40、80次满足1/4拍、1/2拍、1拍、2拍的定时要求。软件编程时,要先将乐谱转换成包含有音符和音长信息的代码,然后,以查表方式通过乐谱代码控制喇叭演奏出乐曲。具体方法如下:(1) 乐谱代码用字节结构,字节高4位代表音符,从SI到RE分别用0到9表示;字节低4位代表该音符的节拍,用1、2、3、8分别表示1/4拍、1/2拍、1拍、4拍,按照这样的规则,将整段音乐变换成相应的代码数据表,最后一个字节内容为00H,代表数据表的结束。(2) 在程序执行时按顺序查表,从字节数据中取出音符代码和节拍代码,查频率表得该音符对应频率的定时初值,再根据节拍代码控制

16、音长,启动两个定时器后,即可发出要求的音,这样就控制演奏出完整的乐曲。四、实验汇编主程序: ORG 0000HRESET: AJMP MAIN ORG 000BH /定时器0中断入口 AJMP TT0P ORG 001BH /定时器1中断入口 AJMP TT1P ORG 0030HMAIN: MOV SP,#70H /设堆栈区 CLR P2.5 /关声音 MOV IE,#8AH /开中断 AJMP KEY /调用键盘程序段KEY: MOV P3,#0F0H MOV A,P3 ACALL DELAY CJNE A,P3,SI /不相等时,跳到SI AJMP KEY /相等时,循环SI: MOV

17、R4,P3 ACALL DELAY MOV 51H,R4 CJNE A,51H,COUNTKEY AJMP KEYCOUNTKEY: MOV A,P3 ANL A,#0F0H MOV R3,A MOV P3,#0CH MOV A,P3 ANL A,#0CH ADD A,R3 MOV 52H,A MOV DPTR,#KEYZHI MOV R1,#00HSUAN: MOV A,R1 MOVC A,A+DPTR CJNE A,52H,JIN CJNE A,#78H,TT0PCS /按键8 播音乐 AJMP BOYIN /转到播音乐程序 AJMP TT0PCSJIN: INC R1 AJMP SUAN

18、TT0PCS: MOV IE,#8AH MOV TMOD,#11H MOV DPTR,#TABL2 MOV A ,R1 RL A MOV R2, A MOVC A,A+DPTR MOV TH0,A MOV 41H,A MOV A,R2 INC A MOVC A,A+DPTR MOV TL0,A MOV 40H,A SETB TR0 HERE: MOV A,P3 ANL A,#0FH CJNE A,#0FH,HERE CLR P2.5 CLR TR0 AJMP MAIN/按键释放,关声音关定时器,转到主程序BOYIN: MOV IE,#8AH /开中断 MOV R1,#0H /乐谱数据偏移量 A

19、CALL PTOM /调乐曲输出子程序 CLR TR0 CLR TR1 CLR P2.5HERR: AJMP HERR /程序结束PTOM: MOV TMOD,#11H /设定定时器的工作方式PTOM1: MOV DPTR,#MUCI /乐谱的首地址送DPTR MOV A,R1 MOVC A,A+DPTR /取乐谱数据 JNZ PTOM2 /如果数据为00H,则结束 RETPTOM2: MOV R2,A /在R2中暂存 ANL A,#0F0H /取得音符数据 SWAP A /把A的高四位和低四位对调 RL A /因为音符是字类型,需要两个字节,所以要乘2 MOV R3,A MOV DPTR,#

20、TABL /频率表 MOVC A,A+DPTR /取得频率表的高8位 MOV TH0,A MOV 41H,A MOV A,R3 INC A MOVC A,A+DPTR /取得频率表的低8位 MOV TL0,A MOV 40H,A MOV A,R2 ANL A,#0FH /保留节拍数据 MOV B,#5 /乘8得定时的中断次数 MUL AB MOV R0,A MOV TH1,#4CH /50MS定时的初值 MOV TL1,#00H SETB TR1 /启动定时器 SETB TR0HERE2: CJNE R0,#0H,HERE2 /判断当前节拍是否已完成 INC R1 /如果完成则取下一个数据 A

21、JMP PTOM1TT0P: PUSH Acc /定时器0中断服务程序 PUSH PSW CPL P2.5 MOV TL0,40H MOV TH0,41H POP PSW POP Acc RETITT1P: MOV TH1,#4cH /定时器1中断服务程序,50MS定时的初值 MOV TL1,#00H DEC R0 RETIDELAY:MOV R7,#10 /延时程序段D1: MOV R6,#50 DJNZ R6,$ DJNZ R7,D1 RETTABL2:DW 64654,64751,64837,64875,64948,65012,65069,65095TABL:DW 64603,64654

22、,64751,64837,64875,64948,65012,65069,65095,65143KEYZHI:DB 0E4H,0D4H,0B4H,74H,0E8H,0D8H,0B8H,78HMUCI: DB 54H,32H,52H,88H,64H,82H,62H,58H,54H,12H,22H,34H DB 22H,12H,2CH,54H,32H,52H,86H,72H,64H,84H,58H,54H DB 22H,32H,46H,02H,1CH,64H,84H,88H,74H,62H,72H,88H DB 62H,72H,82H,62H,62H,52H,32H,12H,28H,28H,54H

23、,32H DB 52H,84H,72H,64H,86H,58H,54H,22H,32H,46H,02H,1CH DB 00H END 串行通信实验一、实验目的1了解51单片机串行口的结构、串行通讯的原理。2掌握51单片机与PC机之间通讯的方法。3. 学习系统应用程序的设计和调试二、实验设备PC机一台 、 实验教学板一块。三、实验原理51单片机的串行接口是全双工的,它能做异步接收器/发送器(UART),也能做同步移位寄存器使用。在做UART使用时,相关的寄存器有SBUF、SCON、和PCON中的波特率倍增位SMOD。SBUF是数据发送缓冲器和接收缓冲器,逻辑上用同一个地址,物理上是分开的,用读写

24、操作来选择。SCON是串行口控制寄存器,用于设定串行口的工作方式;保存方式2和方式3的第9位数据;存放发送、接收的中断标志。在串行通讯的方式1和方式3中,通信的波特率是可以设置的,满足下式: PC机的串行通讯口是借助通用异步接收发送器8250(或16C550等)实现的,可使用comdebug.exe等提供了有关串行口的收、发操作窗口的软件实现通讯。PC机的串行通讯采用RS232电平,因此要求单片机的实验板也要配置RS232接口,解决逻辑电平的配接。如果通讯距离较远,则要配接调制解调器。四、实验内容1, 自发自收用一根短路线,将实验板中RS232插口的RXD和TXD两个插孔短路。然后编程设定串行

25、口为工作方式1,传送55H和0AAH两个数据。实验要求:程序采用查询方式。每传送、接收一个数据,做一次检查,看是否正确,若两次都正确,则在显示器上显示“GOOD”,若不正确,则不显示,并要重新传送。2, 单片机与PC机的通信先使用通讯电缆将单片机的RS232接口与PC机的COM1口连接,PC机起动并运行comdebug.exe软件,窗口上设置波特率为1200,8位数据、一个停止位。单片机端也采用工作方式1,波特率为1200,完成单片机与PC机的通信。实验要求:编程实现先由单片机发送8个数据,01、02、03、04、05、0ABH、0CDH、0EFH。然后进入接收状态,在PC机发送窗口上设置发送

26、数据,点击发送按钮,单片机接收数据后将数据显示在显示器上。五 、程序参考流程图 (a)自发自收程序流程图 (b)与PC机通讯程序流程图六、汇编程序 1. 自发自收 ORG 0000H MOV TMOD,#20H /设置计时器工作于方式2 MOV TL1,#0E8H /波特率为1200 MOV TH1,#0E8H SETB TR1 MOV SCON,#50H MOV P2,#0FH MOVP3,#11101111B /设置按键1START:KEY1: LCALL KEY_STATE /调用按键程序TX_1: MOV A,#55H MOV SBUF,AWAIT1: JBC TI,REX_YES1

27、/TI为1时,转移,并清零 SJMP WAIT1REX_YES1: JBC RI,NEXT1 /测试接收中断RI是否为1, SJMP REX_YES1NEXT1: MOV A,SBUF /把SBUF的值送给A CJNE A,#55H,KEY1 /判断是否相等,不相等的话就悲剧了. MOV P0,#92H /相等的话,数码管显示“5555”KEY2: LCALL KEY_STATE /同上TX_2: MOV A,#0AAH /同上 MOV SBUF, AWAIT2: JBC TI,REX_YES2 SJMP WAIT2REX_YES2: JBC RI,NEXT2 SJMP REX_YES2NEX

28、T2: MOV A,SBUF CJNE A,#0AAH,KEY2 /判断是否相等 MOV P0,#88H /相等的话,数码管显示“AAAA” JMP STARTDELAY30MS:MOV R4,#55 DELAY: MOV R3,#250DJNZ R3,$ /1.085us(指令周期)*2*250+2=547.5usDJNZ R4,DELAYRET KEY_STATE:JB P3.3,$ /无按键等待 LCALLDELAY30MS /去抖动 JB P3.3,KEY_STATE /JB等于1转移 JNB P3.3,$ /等键释放 RET END2单片机与PC机的通信 ORG 0000H MOV

29、TMOD,#20H /设置计时器工作于方式2 MOV TL1,#0E8H /波特率为1200 MOV TH1,#0E8H SETB TR1 /设置为1 MOV SCON,#50H MOV DPTR,#TABLE MOV 30H,#00H /存储数码管码型 MOV R0,#08H MOV P2,#08H /选通一个数码管 LCALL TX_DATA /发送到电脑端START: LCALL RX_YES MOV P0,30H /数码管显示 JMP STARTTX_DATA: CLR A/清零,这个是依次把TABLE的8个数字发到电脑端 MOVC A,A+DPTR /把.对应位置的数给A MOV S

30、BUF,A JNB TI,$ /测试TI,等待TI为1 CLR TI /清零 INC DPTR/.的位置+1 DJNZ R0, TX_DATA /RO减0后不等于0,跳回去 RET /RO=0时,返回RX_YES: JBC RI,NEXT1 /RI中断信号,为1时,调到XXX SJMP RX_YESNEXT1: MOV A,SBUF/把值给A, LCALL SHU_MA_GUAM_MA_XING RETSHU_MA_GUAM_MA_XING:/这个是依次判断A是那个值? 并送相应的码型给数码管显示SHUMA_0: CJNE A,#30H,SHUMA_1 MOV 30H,#0C0HSHUMA_1

31、: CJNE A,#31H,SHUMA_2 MOV 30H,#0F9HSHUMA_2: CJNE A,#32H,SHUMA_3 MOV 30H,#0A4HSHUMA_3: CJNE A,#33H,SHUMA_4 MOV 30H,#0B0HSHUMA_4: CJNE A,#34H,SHUMA_5 MOV 30H,#99HSHUMA_5: CJNE A,#35H,SHUMA_6 MOV 30H,#92HSHUMA_6: CJNE A,#36H,SHUMA_7 MOV 30H,#82HSHUMA_7: CJNE A,#37H,SHUMA_8 MOV 30H,#0F8HSHUMA_8: CJNE A,

32、#38H,SHUMA_9 MOV 30H,#80HSHUMA_9: CJNE A,#39H,SHUMA_OTHER MOV 30H,#90HSHUMA_OTHER: RETTABLE:DB 01H,02H,03H,04H,05H,0ABH,0CDH,0EFH END七、思考题 1波特率能否置为1000,为什么? 答:如实验原理提供的波特率计算公式可知,波特率可以置为1000,但是这样一来速度太低了,会影响单片机的通信能力。 2数据传输时,若要加奇偶校验,单片机和PC机要怎样做?答:带奇偶校验位的,要用方式2或方式3,当51单片机用位数据方式进行串行通信的时候,TB8和RB8的作用如下:51单片

33、机在发送的时候,先发送位数据,然后发送TB8中的内容;在接收的时候,先接收位数据,然后接收校验位,存到RB8中。接收方会把收到的位数送到SBUF,第位数,送到RB8,然后自动设立RI = 1。之后,就可以用RB8中的内容,对刚才收到的位数进行正确性检验。实验六 人体视觉暂留特性测试实验一、 实验目的1进一步熟悉利用 Kei l C51 软件编辑、调试(包括仿真调试、单步调试)和运行单片机程序的步骤和方法。2 学习运用单片机完成一个较为简单的一应用系统的设计 二、实验设备PC机一台 、 实验教学板一块。三、实验内容及原理编程从一个I/O口输出一扫频信号,驱动一支LED灯闪动,频率范围为10HZ9

34、9HZ,扫描时间为30秒,在LED闪动期间观察,一旦发现无法识别LED灯闪动时,按下按键K1,立即停止输出,并将此时的信号频率显示在数码管上,该信号的周期为测试者的视觉暂留时间。 四、实验要求1按实验题目要求设计好硬件电路,画出电路原理图。2. 要求画出主程序、子程序、中断服务程序流程图,设计出相应程序并给程序加上较详细的注释。3. 在Keil C51编译环境下完成程序编译。4. 通过下载线和下载软件STC-ISP V39将编译后的程序下载到单片机。5. 运行程序,用实验结果验证程序的正确性。若不能达到要求,分析原因、查找错误,修改源程序,再次汇编、连接,重新下载、运行,直至达到题目的要求。 五、思考题 1、实验中频率数据是怎样计算出来的? 2、总结数码管动态显示方法。程序流程图主程序 输出波形 输出频率与定时器初值关系表 偏移地址定时器初值频率值TABL+0TH4CH 10HZTL00HTABL+2TH5CH 11HZTL5DHTABL+4TH6AH 12HZTL00HTABL+6TH75H 13HZTL89HTABL+8TH7FH 14HZTL6DHTABL+194THEDH 97HZTL71HTABL+196THEDH 98HZTLA1HTABL+198THEDH 99HZTLD1H五、程序清

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

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


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