单片机实验报告七
时间:2020-09-27 08:43:51 来源:工作范文网 本文已影响 人
南昌大学实验报告
学生姓名: 曾华兆 学号: 6110116078 专业班级: 电子163班
实验类型:? 验证 ? 综合 ?设计 ? 创新 实验日期: 2018.6.1 实验成绩:
实验七 单片机串口通信实验
(一)实验目的
掌握单片机双机或多机通信工作原理,熟练掌握单片机通信编程。
掌握单片机定时器的初始化和定时模式编程。
(二)设计要求
串口全双工中断方式收发通讯。串口设置为:115200/8/n/1。通过单片机(或者是PC)向单片机发送数据,单片机收到后通过串口把收到的数据原样返回。
(三)实验原理
MCS-51 串行口的结构、原理及各种工作方式参阅教材相关内容。本实验使用串行口工作方式 1,通过定时器 1(T1)产生波特率时钟,通过查询串行口收发中断标志 RI 和 TI 来判断单片机串行口数据收发的状态。
(四)实验设备
STC高性能单片机实验箱、电脑(软件:Keil?uVision5、stc-isp-15xx-v6.86J)
实验结果
(六)结果讨论与心得体会
本次实验中解决了如何判断数据是发送还是接收的问题和如何判断数据是否发送或接受完成的问题,通过实验中的讨论和研究书.上关于串行口的内容,我们通过中断标志位和循环很好的解决了这个问题。这个实验让我认识到单片机中中断的巨大作用,它不仅可以省去很多繁琐的设计步骤,还可以帮助我们解决许多设计上的问题。另外,我觉得这是一次较为综合性的实验,按键,消抖,数码管显示,定时,串行口中断,串行口数据的收发这些内容都在本次实验中体现出来了,也算是让我们进行了一个小复习,让我们站在一个更高的平台上去编写程序。
(七)附录:实验源代码
AUXREQU08EH?
P1M0 EQU 91H
P1M1? EQU?92H
P4 DATA?0C0H
P5 DATA?0C8H
P_HC595_SER BIT?P4.0 ;
P_HC595_RCLK BIT?P5.4 ;
P_HC595_SRCLK? BIT?P4.3 ;
LED8 DATA 30H ;
display_ index DATA 38H ;
?ORG? 0000H
?AJMP? MAIN
?ORG? 000BH
?LJMP Timer0_Interrupt
?ORG? 0023H
?LJMP? Serial_ ISR
?ORG? 0100H
MAIN:LCALL LED_INIT
?MOV display_ index,?#7
?MOV TL0,#0BFH
?MOV?TH0,#0FFH
?MOV?SCON,#50H
?//ANL?AUXR,#0BFH
?MOV?AUXR,#00H
?MOV?TMOD,#00H
?MOV?TL1,#0FEH
?MOV?TH1,#0FFH
?CLR?ET1
?SETB?ET0
?SETB?TR0
?SETB?TR1
?SETB ES
?SETB EA
?CLR TI
?CLR RI
KEY_UP:
?LCALL? KS
?JNZ? S1
?AJMP? KEY_UP
?S1:?LCALL? DELAY_10MS
LCALL? KS
?JNZ? S2
?AJMP? KEY_UP
?S2:?MOV? R2,#0FEH
? ?MOV? R4,#00H
?S3:?MOV? P0,R2
? ?JB P0.4,L1
?MOV A,#0
?AJMP LK
?L1:?JB P0.5,L2
MOV A,#4
?AJMPLK
?L2:?JB P0.6,L3
? ?MOV A,#8
?AJMP LK
?L3:?JB P0.7,NEXT
? ?MOV A,#12
?LK:?ADD? A,R4
MOV SBUF,A
?MOV B,?#10
?DIV AB
?MOV LED8+6,?A ;?
?MOV LED8+7,?B
NEXT:INC R4
?MOV A,R2
?JNB ACC.3,S4
?RL A
?MOV R2,A
?AJMP S3
S4:LCALL? KS
? ?JNZ S4
?AJMP? KEY_UP
?KS:MOV P0,#0F0H
?MOV A,P0
?XRL A,#0F0H
RET
DELAY_10MS:
?MOV?R5,#2
DELAY10MS1:
?MOV?R6,#250
?DJNZ?R6,$
?DJNZ?R5,DELAY10MS1
?RET
T_ Display:
DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH
?T_COM:
DB 001H,002H,004H,008H,010H,020H,040H,080H
F_Send_595:
MOV R2,?#8
L_Send_595_Loop:
CLR C
RLC A
MOV P_HC595_SER,C
SETB P_HC595_SRCLK
CLR P_HC595_SRCLK
DJNZ R2,?L_Send_595_Loop
RET
PTR,?#T_COM
MOV A,F_ DisplayScan:
MOV D?display_ index
MOVC A,?@A+DPTR
CPL A
LCALL F_Send_595
MOV DPTR,?#T_ Display
MOV A,?display_ index
ADD A,?#LED8
MOV R0,?A
MOV A,?@R0
MOVC A,?@A+DPTR
LCALL F_Send_595
SETB P_HC595_RCLK
CLR P_HC595_RCLK
?DEC display_ index
MOV A, display_ index
CJNE?A,#5,F_DisplayScan?
MOV display_ index,?#7;
RET
LED_INIT: MOV?LED8,#0
MOV?LED8+1,#0
MOV?LED8+2,#0
MOV?LED8+3,#0
MOV?LED8+4,#0
MOV?LED8+5,#0
MOV?LED8+6,#0
MOV?LED8+7,#0
RET
Serial_ ISR: JB RI,R_DATA
JB TI,T_DATA
SJMP?ISR_OUT
T_DATA:?CLR TI
SJMP ISR_OUT
R_DATA:?CLR RI
MOV A,SBUF
PUSH?ACC
MOV B,#16
DIV AB
MOV LED8+6,?A
MOV LED8+7,?B
POP ACC
MOV?SBUF,A
ISR_OUT:?RETI
Timer0_Interrupt:
PUSH PSW
PUSH ACC
LCALL F_ DisplayScan
POP ACC
POP PSW
RETI