单片机实验报告七

来源:工作范文网 时间: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