51单片机原理、接口技术与汇编语言实验及代码分享

本篇文章为本人于单片机实验课的汇编程序项目代码整理,如有错误欢迎批评指正。

实验一:花样灯及蜂鸣器实验

实验目的:

        1、理解单片机综合训练平台上的发光二极管和蜂鸣器原理图;

        2、熟悉并理解发光二极管和蜂鸣器原理,并实现对发光二极管和蜂鸣器的编程控制;

        3、编程实现对发光二极管和蜂鸣器的控制。

实现功能:

        实现了五种方式的花样灯(具体如下),每次花样灯结束后蜂鸣器发出不同的滴滴提示音:

        1、方式一:单个LED灯由左至右亮灭,循环两个周期,结束后蜂鸣器短响一次;

        2、方式二:单个LED灯由右至左亮灭,循环两个周期,结束后蜂鸣器短响两次;

        3、方式三:LED灯由左至右逐渐全部点亮,循环两个周期,结束后蜂鸣器长响一次;

        4、方式四:LED灯由左至右逐渐全部熄灭,循环两个周期,结束后蜂鸣器长响两次;

        5、方式一:奇偶位LED交替闪烁,结束后蜂鸣器短响三次后长响一次。

具体代码:

ORG 0000H
AJMP MAIN;
ORG 0030H;
MAIN: 
	MOV P2,#0A0H;									;关闭蜂鸣器
	MOV P0,#00H;
	MOV P2,#00H;
	
LOOP1BE:
	MOV R4, #10H 									;设置计数器的初始值
	MOV A,#0FEH										;设置LED初始亮位
LOOP1:												;花样灯方式一
    MOV P2, #80H									;选择LED功能
    MOV P0, A										;LED位赋值
    ACALL DELAY 									;调用延时子程序
    MOV P2, #00H									;初始化P2端口
    RL A											;左移一位
    DJNZ R4, LOOP1 									;计数器递减,如果不为零则继续循环 
BEEP1:												;蜂鸣器方式一:短响一次
	MOV P2, #0A0H
	SETB P0.6										;打开蜂鸣器
    ACALL DELAY 									;调用延时子程序
    CLR P0.6 										;关闭蜂鸣器

LOOP2BE:
	MOV R4, #10H 									;设置计数器的初始值
	MOV A,#7FH										;设置LED初始亮位
LOOP2:												;花样灯方式二
	MOV P2, #80H
	MOV P0, A
	ACALL DELAY 									
    MOV P2, #00H
    RR A											;右移一位
    DJNZ R4, LOOP2 									;计数器递减,如果不为零则继续循环
	BEEP2:											;蜂鸣器方式二:短响两次
	MOV P2, #0A0H
	SETB P0.6
    ACALL DELAY 									
    CLR P0.6
	ACALL DELAY 									
	SETB P0.6
    ACALL DELAY 									
    CLR P0.6
	
LOOP3BE:
	MOV R4, #10H 									;设置计数器的初始值
	MOV DPTR,#TAB1
LOOP3:												;花样灯方式三
	MOV P2, #80H
	MOVC A,@A+DPTR									;顺序读取码表
	MOV P0, A
	ACALL DELAY 									
    MOV P2, #00H
	INC DPTR
	CLR A											;初始化寄存器A
    DJNZ R4, LOOP3 									;计数器递减,如果不为零则继续循环
	BEEP3:											;蜂鸣器方式三:长响一次
	MOV P2, #0A0H
	SETB P0.6
    ACALL DELAY 									
	ACALL DELAY 									
	ACALL DELAY 									
    CLR P0.6
	
LOOP4BE:
	MOV R4, #10H 									;设置计数器的初始值
	MOV DPTR,#TAB2
LOOP4:												;花样灯方式四
	MOV P2, #80H
	MOVC A,@A+DPTR									;顺序读取码表
	MOV P0, A
	ACALL DELAY 									
    MOV P2, #00H
    INC DPTR
	CLR A											;初始化寄存器A
    DJNZ R4, LOOP4 									;计数器递减,如果不为零则继续循环
BEEP4:												;蜂鸣器方式四:长响两次
	MOV P2, #0A0H
	SETB P0.6
    ACALL DELAY 									;调用延时子程序使蜂鸣器长响
	ACALL DELAY 					
	ACALL DELAY 
    CLR P0.6
	ACALL DELAY 
	SETB P0.6
    ACALL DELAY 
	ACALL DELAY 
	ACALL DELAY 
    CLR P0.6
	
LOOP5BE:
	MOV R4, #10H 									;设置计数器的初始值
	MOV A,#0AAH;
LOOP5:												;花样灯方式五
	MOV P2, #80H
	MOV P0, A
	ACALL DELAY 
    MOV P2, #00H
    RR A
    DJNZ R4, LOOP5 									;计数器递减,如果不为零则继续循环
    JMP BEEP5
BEEP5:												;蜂鸣器方式五:短响三次后长响一次
	MOV P2, #0A0H
	SETB P0.6
    ACALL DELAY 
    CLR P0.6
	ACALL DELAY 
	SETB P0.6
    ACALL DELAY 
    CLR P0.6
	ACALL DELAY 
	SETB P0.6
    ACALL DELAY 
    CLR P0.6
	ACALL DELAY 
	SETB P0.6
    ACALL DELAY 
	ACALL DELAY 
	ACALL DELAY 
    CLR P0.6
	AJMP LOOP1BE
	
;码表一,循环至全亮功能
TAB1:DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H
;码表二,循环至全灭功能
TAB2:DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFH

DELAY: MOV R5,#04H                                 ;将立即数传给寄存器 R5
F3: MOV R6,#0FFH
F2: MOV R7,#0FFH
F1: DJNZ R7,F1                                     ;若为 0 程序向下执行,若不为 0 程序跳转到
	DJNZ R6,F2
	DJNZ R5,F3
	RET
	END

实验二:数码管实验

实验目的:

        1、 熟悉数码管原理图,掌握数码管段码与显示之间的关系;

        2、掌握共阳数码管的控制方式,能编程实现数码管段选和位选;

        3、编程实现数码管的静态显示和动态显示。

实现功能:

        1、在数码管1~8位上显示0~7数字。

具体代码:

ORG 0000H
LJMP MAIN;
ORG 0030H;
MAIN:
	MOV P2,#0A0H					;关闭蜂鸣器和LED
	MOV P0,#00H
    MOV P2,#80H
	MOV P0,#0FFH
LOOP:
	MOV P2,#0C0H
	MOV P0,#01H						;数码管第1位
	MOV P2,#0E0H
	MOV P0,#0C0H					;显示0
	ACALL DELAY						;调用延时程序
	
	MOV P2,#0C0H
	MOV P0,#02H						;数码管第2位
	MOV P2,#0E0H
	MOV P0,#0F9H					;显示1
	ACALL DELAY
	
	MOV P2,#0C0H
	MOV P0,#04H						;数码管第3位
	MOV P2,#0E0H
	MOV P0,#0A4H					;显示2
	ACALL DELAY
	
	MOV P2,#0C0H
	MOV P0,#08H						;数码管第4位
	MOV P2,#0E0H
	MOV P0,#0B0H					;显示3
	ACALL DELAY
	
	MOV P2,#0C0H
	MOV P0,#10H						;数码管第5位
	MOV P2,#0E0H
	MOV P0,#99H						;显示4
	ACALL DELAY
	
	MOV P2,#0C0H
	MOV P0,#20H						;数码管第6位
	MOV P2,#0E0H
	MOV P0,#92H						;显示5	
	ACALL DELAY
	
	MOV P2,#0C0H
	MOV P0,#40H						;数码管第7位
	MOV P2,#0E0H
	MOV P0,#82H						;显示6
	ACALL DELAY
	
	MOV P2,#0C0H
	MOV P0,#80H						;数码管第8位
	MOV P2,#0E0H
	MOV P0,#0F8H					;显示7
	ACALL DELAY
	
	AJMP LOOP						;循环显示
	
DELAY:	MOV R5,#01H	    			;延时功能
F3:	MOV R6,#0FH
F2:	MOV R7,#0FH
F1:	DJNZ R7,F1	       				;若为0程序向下执行,若不为0程序跳转到
	DJNZ R6,F2
	DJNZ R5,F3
	RET  
END

实验三:按键实验

实验目的:

        1、熟悉按键原理图;

        2、在理解按键原理图的基础上,汇编编程实现按键控制发光二极管、蜂鸣器和数码管的功能。

实现功能:

        1、按键S7按下,LED1点亮;

        2、按键S6按下,计数加一,并将计数值显示在数码管首位;

        3、按键S5按下,蜂鸣器响起;

        4、按键S4按下,实现一个周期的流水灯。

具体代码:

ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: 
	MOV P2, #80H										;初始化LED
	MOV P0, #0FFH
	MOV P2, #0A0H										;初始化蜂鸣器
	MOV P0, #00H
	MOV P2, #00H
	MOV R4, #00H										;初始化计数器
	MOV R3,	#00H
	
LOOP1:
	MOV P2, #80H
	MOV P0, #0FFH
	JB P3.0, LOOP2										;判断S7按键是否按下,若按下则顺序执行,否则跳转
		MOV P2, #80H									;实现功能:LED1亮
		MOV P0, #0FEH
		
LOOP2:
	MOV P2, #80H
	MOV P0, #0FFH
	JB P3.1, LOOP3   									;判断S6按键是否按下,若按下则顺序执行,否则跳转
		INC R4											;计数器R4加一
		AJMP FUNC1
FUNC1: 
	CJNE R4, #0AH, FUNC2								;判断R4寄存器中的数是否等于10,若相等则跳转,不相等则顺序执行
		MOV R4, #00H									;计数器R4清零
FUNC2: 
	MOV P2, #0C0H
	MOV P0, #80H										;选通数码管第一位
	MOV DPTR, #TAB										;读码表
	MOV A, R4											;计数值移入寄存器A
	MOVC A, @A+DPTR
	MOV P2, #0E0H										;数码管段选
	MOV P0, A											;移入数值
	JB P3.1, LOOP3
		AJMP FUNC2
		
LOOP3:
	MOV P2, #80H										;初始化LED
	MOV P0, #0FFH
	JB P3.2, LOOP4   									;判断S5按键是否按下,若按下则顺序执行,否则跳转
		MOV P2,#0A0H									;打开蜂鸣器
		SETB P0.6

LOOP4:
	JB P3.3, LOOP1   									;判断S4按键是否按下,若按下则顺序执行,否则跳转
		MOV R3,#08H										;计数器R3填入初值
		MOV A,#0FEH
		AJMP LOOP5

LOOP5:													;实现一次流水灯功能
	MOV P2, #80H
	MOV P0, A
	ACALL DELAY 
	ACALL DELAY 
	MOV P0, #00H
	RL A
	DJNZ R3, LOOP5										
		JMP LOOP1
		
TAB: DB	0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H	;共阳码表0~9位
DELAY: MOV R5,#04H 										;延时功能
F3: MOV R6,#0FFH
F2: MOV R7,#0FFH
F1: DJNZ R7,F1 											;若为 0 程序向下执行,若不为 0 程序跳转到
	DJNZ R6,F2
	DJNZ R5,F3
	RET

实验四:外部中断实验

实验目的:

        1、熟悉外部中断原理;

        2、设计并实现中断的控制以及中断程序的编写。

实现功能:

        1、主程序为数码管三段横杆循环亮灭;

        2、按下S5跳入外部中断0程序,实现功能:LED流水灯,循环两次;

        3、按下S4跳入外部中断1程序,实现功能:数码管段循环点亮,循环两次。

具体代码:

ORG 0000H
AJMP MAIN
ORG 0003H									;外部中断0入口地址
AJMP OUT0
ORG 0013H									;外部中断1入口地址
AJMP OUT1
ORG 0030H
	
MAIN:
	MOV P2,#0A0H							;关闭蜂鸣器
	CLR P0.6
	MOV P2,#80H								;关闭LED
	MOV P0,#0FFH
	MOV P2,#00H								;初始化P2口
	SETB EA									;允许总中断
	SETB EX0								;允许外部中断0
	SETB EX1								;允许外部中断1
	SETB IT0								;设置外部中断0边沿触发方式
	SETB IT1								;设置外部中断1边沿触发方式
	SETB IP.0								;设置外部中断0优先级控制
	MOV A,#07H
LOOP: 										;主程序
	MOV R0,#00H								;初始化计数器
	MOV R2,#10H
	MOV P2,#0C0H							;数码管位选
	MOV P0,A
	MOV P2,#0E0H							;数码管段选
	MOV P0,#0BFH							;显示一条横杆
	ACALL DELAY
	ACALL DELAY
	MOV P2,#0C0H							;数码管位选清零
	MOV P0,#00H
	RL A									;左移一位
	AJMP LOOP

OUT0: 
	MOV R4,#03H								;设置循环次数
MARK1:
	DJNZ R4,LOOP1
	RETI									;中断返回
LOOP1:
	MOV P2,#80H								;实现功能:LED流水灯
	MOV P0,#0FEH
	ACALL DELAY
	MOV P0,#0FDH
	ACALL DELAY
	MOV P0,#0FBH
	ACALL DELAY
	MOV P0,#0F7H
	ACALL DELAY
	MOV P0,#0EFH
	ACALL DELAY
	MOV P0,#0DFH
	ACALL DELAY
	MOV P0,#0BFH
	ACALL DELAY
	MOV P0,#7FH
	ACALL DELAY
	AJMP MARK1								;跳转回标志一
		
OUT1:
	MOV R4,#03H								;设置循环次数
MARK2:
	DJNZ R4,LOOP2
	RETI
LOOP2:
	MOV P2,#0C0H							;实现功能:数码管段循环点亮
	MOV P0,#0FFH
	MOV P2,#0E0H
	MOV P0,#0FEH
	ACALL DELAY
	MOV P0,#0FDH
	ACALL DELAY
	MOV P0,#0FBH
	ACALL DELAY
	MOV P0,#0F7H
	ACALL DELAY
	MOV P0,#0EFH
	ACALL DELAY
	MOV P0,#0DFH
	ACALL DELAY
	AJMP MARK2								;跳转回标志二

DELAY:MOV R5,#05H 							;延时功能
F3: MOV R6,#0FFH
F2: MOV R7,#0FFH
F1: DJNZ R7,F1 
	DJNZ R6,F2
	DJNZ R5,F3
	RET
	END

实验五:定时器实验

实验目的:

        1、熟悉定时器工作以及中断原理;

        2、实现定时控制,定时溢出引发定时中断控制蜂鸣器、发光二极管或数码管等功能。

实现功能:

        实现简单的秒表功能,具体如下:

        1、数码管由左至右依次显示:横杠、空位、秒表十位、秒表个位(带小数点)、秒表100ms位、秒表10ms位(只显示5和0);

        2、按键S7按下,开始计时;

        3、按键S6按下,暂停计时;

        4、按键S5按下,秒表清零。

具体代码:

	ORG 0000H
	AJMP MAIN
	ORG 001BH
	AJMP SER													;中断程序
	ORG 0060H
MAIN:
	MOV R1,#00H													;初始化计数器R1,作秒表个位,下面同理
	MOV R2,#00H													;秒表十位
	MOV R3,#00H													;秒表10ms位,只显示5和0
	MOV R4,#00H													;秒表100ms位
	MOV TMOD,#10H												;定时器工作模式一
	MOV TH1,#3CH												;赋初始值
	MOV TL1,#0B0H
	SETB EA														;打开总中断
	SETB ET1													;打开定时器1

LOOP:
	MOV P2,#0C0H												;打开数码管选位端
	MOV P0,#01H													;数码管位一
	MOV P2,#0E0H												;数码管显数端
	MOV P0,#0BFH												;显示一条横杠“-”
	ACALL DELAY													;调用延时功能
	MOV P0,#00H
	MOV P2,#00H
	
	MOV P2,#0C0H
	MOV P0,#04H													;数码管位三
	MOV A,R2													;将十位数值赋值到累加器A
	MOV DPTR,#TAB1												;读取码表TAB1
	MOVC A,@A+DPTR
	MOV P2,#0E0H
	MOV P0,A
	ACALL DELAY
	MOV P2,#00H
	
	MOV P2,#0C0H
	MOV P0,#08H													;数码管位四
	MOV A,R1													;将个位数值赋值到累加器A
	MOV DPTR,#TAB2												;读取码表TAB2
	MOVC A,@A+DPTR
	MOV P2,#0E0H
	MOV P0,A
	ACALL DELAY
	MOV P2,#00H
	
	MOV P2,#0C0H
	MOV P0,#10H													;数码管位五
	MOV A,R4													;将100ms位的数值赋值到累加器A
	MOV DPTR,#TAB1
	MOVC A,@A+DPTR
	MOV P2,#0E0H
	MOV P0,A
	ACALL DELAY
	MOV P2,#00H
	
	MOV P2,#0C0H
	MOV P0,#20H													;数码管位六
	MOV A,R3													;将10ms位的数值赋值到累加器A
	MOV DPTR,#TAB3
	MOVC A,@A+DPTR
	MOV P2,#0E0H
	MOV P0,A
	ACALL DELAY
	MOV P2,#00H
	
	MOV P2,#0C0H
	MOV P0,#80H													;数码管位八
	MOV P2,#0E0H
	MOV P0,#0BFH												;显示一条横杠“-”
	ACALL DELAY
	MOV P0,#00H													;清零P0口
	MOV P2,#00H													;清零P2口
	
	JNB P3.0,BIN1												;扫描独立按键
	JNB P3.1,BIN2
	JNB P3.2,BIN3

	AJMP LOOP
	
SER:
	INC R3														;每跳入一次中断,过了50ms,增加一次R3
	CJNE R3,#02H,F												;若R3等于2,即过100ms,则清零R3并增加R4
	MOV R3,#00H
	INC R4
	CJNE R4,#0AH,F												;若R4等于10,即过了1s,则清零R4并增加R1
	MOV R4,#00H
	INC R1
	CJNE R1,#0AH,F												;若R1等于10,即过了10s,则清零R1并增加R2
	MOV R1,#00H
	INC R2
	CJNE R2,#0AH,F												;若R2等于10,即过了100s,则清零R2
	MOV R2,#00H
F:
	MOV TH1,#3CH												;重新赋值
	MOV TL1,#0B0H
	RETI;中断返回
	
BIN1:
	SETB TR1													;打开定时器
	AJMP LOOP
BIN2:
	CLR TR1														;停止定时器
	AJMP LOOP
BIN3:
	MOV R1,#00H													;按键功能:计时清零
	MOV R2,#00H
	MOV R3,#00H
	MOV R4,#00H
	AJMP LOOP
	
TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H			;数码管0~9
TAB2:DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H					;数码管0~9带小数点位
TAB3:DB 0C0H,92H												;数码管0,5
	
DELAY:	MOV R5,#01H												;延时功能
F3:	MOV R6,#0FH
F2:	MOV R7,#0FH
F1:	DJNZ R7,F1	       
	DJNZ R6,F2
	DJNZ R5,F3
	RET
	END	

实验六:串口通信实验

实验目的:

        1、熟悉串行通信原理;

        2、实现串行发送、串行接收,并将发送或接收的内容通过发光二极管或数码管。

6.1 串口发送

实现功能:

        1、在20H~2AH存入数据"HELLO-WORLD"的字母数码管段显数据;

        2、在数码管上显示出HELLO-WORLD,具体方式为:

                数码管状态1:【HELLO-WO】;

                数码管状态2:【ELLO-WOR】;

                数码管状态3:【LLO-WORL】;

                数码管状态4:【LO-WORLD】;

        上述4个状态循环。并使用串口发送实现。

具体代码:

ORG 0000H     	
AJMP START     
ORG 0023H					;串口中断入口地址
AJMP INTER
ORG 0060H         			;主程序起始地址
AUXR EQU 8EH				;AUXR伪指令部分
START:
	MOV P2,#0A0H 			;选通控制蜂鸣器与继电器
	MOV P0,#00H 			;关闭蜂鸣器与继电器
	MOV P2,#00H		
	MOV P0,#00H 
	MOV TMOD,#20H			;0010 0000 M1 M2 = 1 0 选择定时器T1为方式2 自动重装8位
	MOV TH1,#0E8H			;定时器赋初值
	MOV TL1,#0E8H			;设置波特率为1200Baud
	SETB TR1				;打开定时器T1
	MOV AUXR,#00H			;定时器1时钟为Fosc/12,即12T
	MOV PCON,#00H			;令SMOD=0
	MOV SCON,#40H			;0100 0000 SM0 SM1 = 0 1 串行口为方式1
	SETB EA					;打开总中断
	SETB ES					;打开串口中断
	
	MOV 20H,#89H			;存入数据HELLO-WORLD
	MOV 21H,#86H
	MOV 22H,#0C7H
	MOV 23H,#0C7H
	MOV 24H,#0C0H
	MOV 25H,#0BFH
	MOV 26H,#81H
	MOV 27H,#0C0H
	MOV 28H,#88H
	MOV 29H,#0C7H
	MOV 2AH,#0C0H
	
	MOV A,@R0;				;(A)=R0
	MOV SBUF,A;				;发送数据
	
	SJMP $					;等待中断
	
INTER:
Send:	
	MOV P2,#0C0H
	MOV P0,#01H				;数码管第1位
	MOV P2,#0E0H
	MOV A,@R0
	MOV SBUF,A				;发送数据
	MOV P0,A				;数码管显示字母
	ACALL DELAY
	INC R0					;R0加1
	
	MOV P2,#0C0H
	MOV P0,#02H				;数码管第2位
	MOV P2,#0E0H
	MOV A,@R0
	MOV SBUF,A
	MOV P0,A
	ACALL DELAY
	INC R0
	
	MOV P2,#0C0H
	MOV P0,#04H				;数码管第3位
	MOV P2,#0E0H
	MOV A,@R0
	MOV SBUF,A
	MOV P0,A
	ACALL DELAY
	INC R0
	
	MOV P2,#0C0H
	MOV P0,#08H				;数码管第4位
	MOV P2,#0E0H
	MOV A,@R0
	MOV SBUF,A
	MOV P0,A
	ACALL DELAY
	INC R0
	
	MOV P2,#0C0H
	MOV P0,#10H				;数码管第5位
	MOV P2,#0E0H
	MOV A,@R0
	MOV SBUF,A
	MOV P0,A
	ACALL DELAY
	INC R0
	
	MOV P2,#0C0H
	MOV P0,#20H				;数码管第6位
	MOV P2,#0E0H
	MOV A,@R0
	MOV SBUF,A
	MOV P0,A
	ACALL DELAY
	INC R0
	
	MOV P2,#0C0H
	MOV P0,#40H				;数码管第7位
	MOV P2,#0E0H
	MOV A,@R0
	MOV SBUF,A
	MOV P0,A
	ACALL DELAY
	INC R0
	
	MOV P2,#0C0H
	MOV P0,#80H				;数码管第8位
	MOV P2,#0E0H
	MOV A,@R0
	MOV SBUF,A
	MOV P0,A
	ACALL DELAY
	
	INC R3
	
JU1:CJNE R3,#040H,JU2		;跳入串口中断4次后跳转,否则顺序执行
		INC R4				;R4加1
		MOV R3,#00H			;清零R3
JU2:CJNE R4,#00H,JU3		;R4为0时顺序执行,否则跳转
		MOV R0,#20H			;从20H开始发送
JU3:CJNE R4,#01H,JU4		;R4为1时顺序执行,否则跳转
		MOV R0,#21H			;从21H开始发送
JU4:CJNE R4,#02H,JU5		;R4为2时顺序执行,否则跳转
		MOV R0,#22H			;从22H开始发送
JU5:CJNE R4,#03H,JU6		;R4为3时顺序执行,否则跳转
		MOV R0,#23H			;从23H开始发送
JU6:CJNE R4,#04H,J			;R4为4时顺序执行,否则跳转
		MOV R0,#00H			;清零R0和R4
		MOV R4,#00H
J:	RETI					;中断返回

DELAY:	
	MOV R5,#01H	    		;延时功能
F3:	MOV R6,#0FH
F2:	MOV R7,#0FFH
F1:	DJNZ R7,F1	    		;若为0程序向下执行,若不为0程序跳转到
	DJNZ R6,F2
	DJNZ R5,F3
	RET			
	END

6.2 串口接收

实现功能:

        1、借助STC驱动软件的串口助手,设定好多字符传送的内容,使用单片机接收,并将接收到的数据内容显示到数码管上。

具体代码:

ORG 0000H     	
AJMP START     
ORG 0023H			    ;串口中断入口地址
AJMP INTER
ORG 0060H               ;主程序起始地址
AUXR EQU 8EH	        ;AUXR伪指令部分
START:
	;系统初始化
	MOV P2,#0A0H 	    ;选通控制蜂鸣器与继电器
	MOV P0,#00H 	    ;关闭蜂鸣器与继电器
	MOV P2,#00H		    ;清零P2口
	MOV P0,#00H 	    ;清零P0口
	MOV TMOD,#20H	    ;0010 0000 M1 M2 = 1 0 选择定时器T1为方式2 自动重装8位
	MOV TH1,#0E8H	    ;定时器赋初值
	MOV TL1,#0E8H	    ;设置波特率为1200Baud
	SETB TR1		    ;打开定时器T1
	MOV AUXR,#00H	    ;定时器1时钟为Fosc/12,即12T
	MOV PCON,#00H	    ;令SMOD=0
	MOV SCON,#40H	    ;0100 0000 SM0 SM1 = 0 1 串行口为方式1
	SETB EA             ;打开总中断
	SETB ES             ;打开串口中断
	MOV R0,#20H;
	MOV R2,#8
	SETB REN		    ;启动接受允许位
	MOV A,SBUF
	
	SJMP $              ;等待中断

REC:
	CLR RI			    ;接收完清零RI
	
	MOV A,SBUF		    ;读取接收的数据
	MOV P2,#0C0H	    ;选通控制数码管位选
	MOV P0,#01H
	MOV P2,#0E0H	    ;选通控制数码管段选
    MOV P0,A		    ;(P0)=(A)
 	MOV P2,#00H		    ;清零P2口
	MOV P0,#00H		    ;清零P0口	
	
	RETI

DELAY:	
	MOV R5,#0FH	        ;延时功能
F3:	MOV R6,#0FH
F2:	MOV R7,#0FFH
F1:	DJNZ R7,F1	        ;若为0程序向下执行,若不为0程序跳转到
	DJNZ R6,F2
	DJNZ R5,F3
	RET			
	END

物联沃分享整理
物联沃-IOTWORD物联网 » 51单片机原理、接口技术与汇编语言实验及代码分享

发表评论