北京交通大学单片机实验程序报告

单片机实验程序

北京交通大学单片机实验程序报告

实验二 8155并行I/O口扩展和动态扫描程序编制

1.实验目的

(1)掌握8155并行I/O芯片扩展和使用方法

(2)掌握数码管动态扫描汇编语言的编制方法

2.预习要点

(1)8155芯片基础知识

(2)51单片机的总线时序、地址译码的原理

(3)数码管动态扫描显示方法

3.实验设备

计算机、单片机实验箱。

4.实验内容

基本要求:

通过实验板的上的8155(U16)显示电路(在电路板上已经固定连接字形和字位控制线的8155部分),并通过跳线确定8155的地址,在8个LED数码管上依次动态显示数字1~8。

扩展要求:

假定30H~33H的存储单元内容为4个字节16进制数,请依序将他们显示在8个LED数码管上

根据程序要求做如下程序流程图:

主程序流程图:

显示子程序流程框图:

北京交通大学单片机实验程序报告

基本要求编程如下:

ORG0000H

AJMP MAIN ORG 0050H

MAIN: MOV SP,#60H MOV DPTR, #4100H MOV A,#0FH MOVX @DPTR, A

MOV 70H,#01H MOV 71H,#02H MOV 72H,#03H MOV 73H,#04H MOV

北京交通大学单片机实验程序报告

74H,#05H ;压栈 ;方式控制字0FH送A ;8155初始化 ;设置显示缓冲区

MOV 75H,#06H

MOV 76H,#07H

MOV 77H,#08H

LOOP: ACALL DISPLAY ;循环调用显示子程序

AJMP LOOP

DISPLAY:

MOV R0,#70H ;显示缓冲区首地址送R0

MOV R3,#0FEH ;字位控制初值送R3

LD0: MOV DPTR,#4102H

MOV A,#0FFH

MOVX @DPTR, A ;B口字位送高,关共阴显示

MOV A,@R0

MOV DPTR,#DISTAB

MOVC A,@A+DPTR ;查表

MOV DPTR,#4101H ;PA口作字形

MOVX @DPTR,A

MOV DPTR,#4102H ;PB口作字位

MOV A,R3

MOVX @DPTR,A

ACALL DELAY ;延时1ms

INC R0 ;修正显示缓冲区指针

JNB ACC.7,LD1 ;若显示完一遍,则LD1

RL A ;字位码左移一位 此处A中的值是R3

MOV R3,A ;送回R3

AJMP LD0 ;显示下一个数码

LD1: RET ;此处把每一个八位显示看成一次函数。

DISTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;(共阴极字形表) DELAY: MOV R7,#02H ;1ms延时

DELAY1:MOV R6,#0FFH

DELAY2:DJNZ R6,DELAY2

DJNZ R7,DELAY1

RET

END

实验中遇到的问题:

开始时没有预先在显示缓冲区中存入1~7,故实验显示的数据不是1、2、3、4、5、6、7、8,而是显示缓冲区中之前存在的无规则的一些数据,待向显示缓冲区重新赋值后,显示正常。

扩展要求编程如下:

ORG 0000H

LJMP MAIN

ORG 1000H

MAIN:MOV SP,#50H

MOV 30H,#0A1H

MOV 31H,#0C2H

MOV 32H,#0D3H

MOV 33H,#0F4H

LCALL TRAN

MOV DPTR,#4100H

MOV A,#0FH

MOVX @DPTR,A

LOOP: LCALL DISPLAY

SJMP LOOP

TRAN: MOV R1,#30H;将30-31H里的十六进制数分成两位存在70-71H中

MOV R0,#70H

MOV R3,#04

LD2:MOV A,@R1

ANL A,#0FH ;取出低字节 INC R0

MOV A,@R1 ;取出高字节

SWAP A ;高低字节交换,将十六进制数的两位分开存放 MOV @R0,A

INC R0

INC R1

DJNZ R3,LD2

RET

DISPLAY:MOVR1,#0FEH ;显示部分同基本要求

MOV R0,#70H

MOV A,R1

LD0:MOV DPTR,#4102H

MOVX @DPTR,A

MOV A,@R0

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV DPTR,#4101H

MOVX @DPTR,A

LCALL DELAY

INC R0

MOV A,R1

JNB ACC.7,LD1

RLA

MOV R1,A

SJMP LD0

LD1:RET

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

DB 77H,7CH,39H,5EH,79H, 71H

DELAY:MOV R7,#02H

DELAY1:MOV R6,#0FFH

DELAY2:DJNZR6,DELAY2

DJNZ R7,DELAY2

RET

END

实验三查询式键盘实验

1.实验目的

(1)掌握查询式按键检测方法

(2)掌握数码管动态扫描汇编语言的编制方法

2.预习要点

(1)按键检测的基本原理

(2)数码管动态扫描显示方法

3.实验设备

计算机、单片机实验箱。

4.实验内容

基本要求:

接实验二的实验内容,通过实验板的4个按键电路,将按键的检测线连接到CPU的p1.0~p1.3上。当按下按键1到4时,在实验板显示电路(U16)分别对应显示1,2,3,4。

扩展要求:

30H~33H中放置字母A~D,字母在LED上循环显示,默认的循环周期为50ms,当按下按键1到4时,A~D循环间隔分别变为1至4秒,无按键按下时,恢复默认的时间间隔。

根据程序要求得到如下程序流程图:

基本要求编程如下:

ORG0000H

MAIN:MOV 70H,#0

MOV 71H,#1

MOV 72H,#2

MOV 73H,#3

MOV 74H,#4

MOV DPTR,#4100H MOV A,#03H

MOVX@DPTR,A READKEY:MOVA,#0FFH MOV P1,A MOV A,P1

JNB ACC.0,RP10 JNB ACC.1,RP11 JNB ACC.2,RP12 JNB ACC.3,RP13 OFF: MOV R0,#70H MOV R3,#0FFH SJMP LD0

RP10:MOV R0,#70H MOV R3,#0FEH AJMPLD0

RP11:MOV R0,#71H MOV R3,#0FEH AJMPLD0

RP12:MOV R0,#72H MOV R3,#0FEH AJMP LD0

RP13:MOV R0,#73H MOV R3,#0FEH AJMP LD0

北京交通大学单片机实验程序报告

LD0:MOV A,R3

MOV DPTR,#4102H MOVX @DPTR,A MOV A,@R0

MOV DPTR,#TAB MOVC A,@A+DPTR MOV DPTR,#4101H MOVX @DPTR,A ACALL DELAY AJMPMAIN

TAB:DB 06H, 5BH, 4FH, 66H DB 6DH, 7DH, 07H, 7FH DELAY:MOV R7,#02H DELAY1:MOVR6,#0FFH DELAY2: DJNZR6,DELAY2 DJNZ R7,DELAY1

RET

SJMP$

END

扩展要求编程如下:

ORG 0000H

LJMPMAIN

ORG 1000H

MAIN:MOV SP,#60H

MOV 30H,#0AH

MOV 31H,#0BH

MOV 32H,#0CH

MOV 33H,#0DH

MOV A,#0FH

MOV DPTR,#4100H MOVX @DPTR,A

READKEY:MOVA,#0FFH MOV P1,A MOV A,P1

JNB ACC.0,RP10 JNB ACC.1,RP11 JNB ACC.2,RP12 JNB ACC.3,RP13 OFF: MOV R7,#50 AJMP DISPLAY

RP10:MOV R7,#100 AJMPDISPLAY

RP11:MOV R7,#200

AJMPDISPLAY

RP12:MOV R7,#300

AJMP DISPLAY

RP13:MOV R7,#400

AJMP DISPLAY

DISPLAY:MOV R0,#30H

MOV R2,#0FEH

LD:MOV A,@R0

MOV DPTR,#TAB

MOV A,@A+DPTR

MOV DPTR,#4101H

MOVX @DPTR,A

MOV DPTR,#4102H

MOV A,R2

MOVX @DPTR,A

ACALL DELAY

INCR0

JNBACC.3,LD1

RLA

MOV R2,A

AJMP LD

LD1: AJMP READKEY

DELAY:MOVR6,#500

DELAY1: DJNZR6,DELAY1

DJNZ R7,DELAY

RET

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

DB 77H,7CH,39H,5EH,79H, 71H

实验四利用中断控制LED灯

1.实验目的

(1)掌握单片机中断的基本原理。

(2)掌握单片机中断程序的编制方法。

2.预习要点

(1)单片机中断基本原理

(2)中断程序编制方法

3.实验设备

计算机、单片机实验箱、信号发生器。

4.实验内容

基本要求:

将信号发生器输出的脉冲信号连接到CPU的INT0上,将CPU的P1.0到P1.7和8个红色LED灯连接,脉冲信号为5V、100Hz,每输入一百个脉冲LED灯亮一次,并且LED灯顺序循环移位一次,形成跑马灯。

扩展要求:

在LED数码管上与跑马灯同步显示1~8,顺序为P1.0对应的灯亮时对应显示数字1,依次类推。

根据程序要求得到如下程序流程图:

主程序流程图 中断子程序流程图

基本要求编程如下:

ORG0000H

AJMPMAIN

ORG0003H

AJMP EXINT0

MAIN: MOVSP,#70H

SETBIT0 ;设定为负边沿触发

SETBEX0 ;开INT0中断

SETB EA ;开总中断

MOV R3,#00H

MOV P1,#01H

HERE: SJMP HERE

EXINT0: INCR3

CJNE R3,#64H , NEXT ;计数值不到100,则返回

MOV R3,#00H

MOV A,P1 ;计数值到100则对P1口的内容进行移位

北京交通大学单片机实验程序报告

北京交通大学单片机实验程序报告

RLA

MOVP1,A

NEXT:RETI

扩展实验程序:

ORG 0000H

AJMP MAIN

ORG 0003H

AJMP EXINT0

ORG 0060H

MAIN:MOV SP,#60H

SETB IT0

SETB EX0

SETB EA

MOV 30H,#0

MOV 31H,#1

MOV 32H,#3

MOV 33H,#2

MOV 34H,#5

MOV 35H,#6

MOV 36H,#7

MOV 37H,#8 ;缓存器中送入1--8

MOV R3,#00H ;用于计脉冲

MOV P1,#00H ;关LED显示

MOV R4,#01H ;控制跑马灯

MOV R0,#30H

MOV R5,#0FEH

MOV R2,#8

MOV DPTR,#4100H

MOV A,#03H

MOVX @DPTR,A ;方式控制字送8155命令口 SJMP $

EXINT0:INC R3

CJNE R3,#64H,NEXT ;计算脉冲达到100 MOV R3,#00H ;清零,重新计数 MOV A,R4

MOV P1,A ;跑马灯显示

RL A

MOV R4,A

DISPLAY1:MOVR0,#30H

MOV R5,#0FEH

MOV A,@R0

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV DPTR,#4101H

MOVX @DPTR,A

MOV DPTR,#4102H

MOV A ,R5

MOVX @DPTR,A

ACALLDELAY ;

INC R0

DJNZ R2,NEXT

MOV R2,#8

MOV R0,#30H

NEXT:RETI

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

DELAY:MOVR7,#05H

DELAY1:MOV R6,#0FFH

DELAY2:DJNZR6,DELAY2

DJNZ R7,DELAY1

RET

END

实验五单相方波波形发生器

1.实验目的

(1)掌握单片机定时器基本原理和使用方法。

(2)掌握单片机中断程序的编制方法。

2.预习要点

(1)单片机定时器基本原理

(2)中断程序编制方法

3.实验设备

计算机、单片机实验箱,示波器。

4.实验内容

基本要求:

(1)利用定时器在p1.1输出方波,方波的周期为50ms,占空比为50%。

(2)改上例中方波的占空比为25%。

扩展要求:

利用LED数码管做一个包含时、分、秒的计时器

根据题目得如下结构框图:

主程序流程图 中断子程序流程图

基本要求编程如下:

占空比为50%的方波(晶振为12M): ORG 0000H

AJMP MAIN

ORG 000BH

AJMP BRT0

MAIN:MOV SP,#60H

MOV TMOD,#01H

MOV TH0,#9EH

MOV TL0,#58H

MOV IE,#82H

SETB TR0

HERE:SJMP HERE

BRT0: CPL P1.1

MOV TH0,#9EH

MOV TL0,#58H

RETI

END

占空比为25%的方波(晶振为12M): ORG 0000H

AJMP MAIN

ORG 000BH

AJMP BRT0

MAIN:MOV SP,#60H

SETB P1.1

MOV TMOD,#01H

MOV TH0, ,#0CFH

MOV TL0, #2CH

MOV IE,#82H

SETB TR0

HERE:SJMP HERE

BRT0: CPL P1.1

JNB P1.1,D3

MOV TH0,#0CFH

北京交通大学单片机实验程序报告

北京交通大学单片机实验程序报告

MOV TL0,#2CH

RETI

D3:MOV TH0,#6DH MOV TL0,#84H

RETI

END

扩展实验程序:

ORG 0000H AJMP MAIN ORG 000BH AJMP BRT0 ORG 0060H

MAIN:MOVSP,#60H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV IE,#82H SETB TR0

MOV R5,#20 MOV R6,#60 MOV R7,#60

MOV 40H,#00H ;秒 MOV 41H,#00H ;分 MOV 42H,#00H ;时

MOV 30H,#00H MOV 31H,#00H MOV 32H,#00H MOV 33H,#00H MOV 34H,#00H MOV 35H,#00H

HERE:LCALL LD0 SJMP HERE BRT0:MOV TH0,#3CH MOV TL0,#0B0H DJNZ R5,NEXT MOV A,40H ADD A,#01H MOV 40H,A MOV B,#10 DIVAB ACALL LD1

MOV 31H,A MOV 30H,B MOV R5,#20

DJNZ R6,NEXT MOV 40H,#00H MOVA,41H

ADD A,#01H MOV 41H,A MOV B,#10

DIV AB

ACALL LD1

MOV 33H,A MOV 32H,B MOV R6,#60 DJNZ R7,NEXT MOV 41H,#00H MOV A,42H ADD A,#01H MOV 42H,A ACALL LD2

MOV B,#10

DIV AB

MOV 35H,A

MOV 34H,B

MOV R7,#60

NEXT:RETI

LD1:CJNEA,#06H,LOOP MOV A,#00H SJMP LOOP

LD2:CJNEA,#0CH,LOOP MOV A,#00H MOV 42H,#00H LOOP:RET

LD0:MOVR0,#30H MOV R2,#6

MOV R3,#7FH

DISPLAY:MOVDPTR,#4100H MOV A,#03H

MOVX @DPTR,A MOV DPTR,#TAB

MOV A,@R0

MOVC A,@A+DPTR

MOV DPTR,#4101H

MOVX @DPTR,A

MOV DPTR,#4102H

MOV A,R3

MOVX @DPTR,A

ACALL DELAY

RR A

MOV R3,A

INC R0

DJNZ R2,DISPLAY

RET

TAB:DB 3FH,06H,5BH,4FH,66H

DB 6DH,7DH,07H,7FH,6FH

DB 77H,7CH,39H,5EH,79H

DB 71H

DELAY:MOV 57H,#250

DELAY1:DJNZ 57H,DELAY1

RET

END

实验六利用A/D完成电压测量及显示

1.实验目的

(1)掌握A/D转换器的基本原理和使用方法。

(2)掌握二进制数和BCD码之间的数值转换方法。

2.预习要点

(1)A/D转换器的基本原理和使用方法

(2)二进制数和BCD码之间的数值转换方法

3.实验设备

计算机、单片机实验箱,万用表。

4.实验内容

基本要求:

利用ACH1电位器,在0~5V范围调节A/D转换器0809的输入端ADIN0的电压,在显示电路上(U16)显示00~50数值。

扩展要求:

相同输入条件下,在显示电路上显示-25~+24的数值。 根据题目得如下结构框图:

主程序流程图 A/D转换子程序流程图

基本要求编程如下:

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN:ACALLREADAD

ACALL DISPLY

SJMP MAIN

READAD: MOV A,#00H

MOV DPTR,#8000H ;IN0,

MOVX @DPTR,A ;启动A/D转换

MOV R7,#80H ;等待A/D转换完成

AD0809:DJNZR7,AD0809

MOVX A,@DPTR

MOVB,#50

MUL AB

MOV 40H,B ;将0~255范围内的数据转换成00~50范围内的数据 MOV A ,40H

MOV B,#10

DIV AB

MOV 50H,A

MOV 51H,B

RET

DISPLY:MOV A,#03H

MOVDPTR,#4100H

MOVX@DPTR,A

MOV R0,#51H

MOV R6,#0FEH

LD0: MOV A,R6

MOV DPTR,#4102H

MOVX @DPTR,A

MOV DPTR,#4101H

北京交通大学单片机实验程序报告

北京交通大学单片机实验程序报告

MOV A,@R0

MOV DPTR,#TAB

MOVC A,@A+ DPTR

ACALL DELAY12MS

DEC R0

MOV A,R6

JNB ACC.1,LD01

RL A

MOV R6,A

AJMP LD0

LD01: RET

TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

DELAY12MS: MOV R4,#02H

DL2: MOV R5,#0FBH

DL1:DJNZ R5,DL1

DJNZ R4,DL2

RET

END

扩展实验编程如下:

ORG 0000H

AJMP MAIN

ORG 0030H

MAIN:MOV SP,#60H

MOV DPTR,#4100H

MOV A,#0FH

MOVX @DPTR,A

MOV DPTR,#8000H

MOV A,#00H

MOVX @DPTR,A

ACALL DELAY

ACALL DELAY

ACALL GETV

ACALL DISPLAY ;调用显示程序

LJMP MAIN ;循环主程序

GETV:MOV DPTR,#8000H

MOVX A,@DPTR

MOV B,#50

MUL AB ; A*50/255, A先乘以50。高8位放在B,低8位放在A MOV A,B ; 取出高8位,相当于除以了256,右移8位 CLR C

SUBB A,#25;减25

JB ACC.7,FUSHU ;最高位不等于0跳转

MOV 50H,#10H

SJMP NEXT

FUSHU:MOV50H,#14H

CPL A;有符号数取其正值

NEXT:MOV B,#10 ;分两位数显示

DIV AB

MOV51H,A

MOV 52H,B

RET

DISPLAY:MOV DPTR,#4102H

MOV A,#0FFH

MOVX @DPTR,A

实验七利用DAC0832完成波形发生器

1.实验目的

(1)掌握D/A转换器的基本原理和使用方法。

2.预习要点

(1)D/A转换器的基本原理和使用方法。

3.实验设备

计算机、单片机实验箱,示波器。

4.实验内容

基本要求:

利用实验板上的0832D/A芯片,将示波器连接到滤波电路后,通过程序产生周期为20ms的三角波。

扩展要求:

利用实验板上的0832D/A芯片和电位器,将示波器连接到滤波电路后,通过程序产生周期或幅度可调的锯齿波。

根据题目要求构造如下程序流程图:

基本要求编程如下:

ORG 0000H

AJMP MAIN ORG 0050H

MAIN: MOV SP,#60H CLRA

MOV DPTR,#4000H DOWN: MOVX @DPTR,A ACALL DELAY INC A

JNZ DOWN

MOVA,#0FEH

UP: MOVX @DPTR,A ACALL DELAY

DEC A

JNZ UP

SJMP DOWN DELAY: MOV R7,#41

DELAY1: DJNZ R7,DELAY1

RET

北京交通大学单片机实验程序报告

END

扩展实验程序:

ORG 0000H

AJMP MAIN

ORG 0060

MAIN:MOVSP,#60H

MOV DPTR,#0A000H

MOV R1,#1 ;R2/R1----周期

MOV R2,#200 ;R2----幅度

MOV A,R2

MOV B,R1

DIV AB

MOV B,R1

MUL AB

MOV 20H,A

LOOP:CLR A

NEXT:MOVX @DPTR,A

ADD A,R1

CJNE A,20H,NEXT

MOVX @DPTR,A

SJMP LOOP

END

实验八点对点的单片机双机通信实验

1.实验目的

(1)掌握串行口基本原理和使用方法。

(2)掌握点对点串行通信程序的编制方法。

2.预习要点

(1)串行口基本原理和使用方法。

(2)串行口的工作方式和点对点串行通信程序的编制方法。

3.实验设备

计算机、单片机实验箱

4.实验内容

基本要求:

两组配合,一组作为主机(发送数据),一组作为从机(接收数据)。要求主机发送16个数据,其第一帧为数据长度,从机收到数据后,给主机发送回16个数据的数据和。

扩展要求:

主机收到数据和后给从机发送“good”字符串,并同时在主机和从机上利用LED数码管显示出来。

基本要求编程如下:

发送程序:

ORG 0000H

LJMP MAIN

ORG 0023H

LJMP SINT

ORG 0100H

MAIN: MOV 40H,#00H

MOV 41H,#1

MOV 42H,#2

MOV 43H,#3 ;将待发送的数据存入40H为起始地址的数据单元中 MOV 44H,#4

MOV 45H,#5

MOV 46H,#6

MOV 47H,#7

MOV 48H,#8

MOV 49H,#9

MOV 4AH,#10

MOV 4BH,#11

MOV 4CH,#12

MOV 4DH,#13

MOV 4EH,#14

MOV 4FH,#15

MOV SP,#70H

MOV TMOD,#20H ;定时器工作于方式2

MOV TL1,#0F4H ;设定初值

MOV TH1,#0F4H

MOV PCON,#80H ;SMOD=1

SETB TR1 ;起动T1计数器

MOV SCON,#50H ;设置通信方式1,单机对单机,允许接收

MOV R0,#40H ;待发数据存入40H

MOV R1,#50H ;接收到的数据和存入50H

MOV R2,#10H ;发送数据个数为16

MOV A,R2

MOV SBUF,A ;发送数据

SETB EA ;开总中断

SETB ES ;开串口通信中断

WAIT: SJMP WAIT

SINT: JNB TI,SINT1 ;判断中断产生原因,是TI还是RI。若为RI,则SINT1 CLR TI ;若产生的中断为TI,则清零为下一次发送做准备

CJNE R2,#00H,SINT3

SJMP SINT2

SINT3: MOV A,@R0

MOV SBUF,A ;主机发送数据

DEC R2

INC R0 ;40H地址自增1,取下一个待发送的数据 SJMP SINT2

SINT1: MOV A,SBUF ;将接收到的数据累加和存入A CLR RI

MOV @R1,A

MOV SBUF,#0BH

JNB TI,$

CLR TI

CLR TI

MOV SBUF,#0AH

JNB TI,$

CLR TI

CLR TI

MOV SBUF,#0CH

JNB TI,$

CLR TI

CLR TI

MOV SBUF,#0DH

ACALL DISP

SINT2: RETI

DISP:MOV 30H,#9

MOV 31H,#0

MOV32H,#0

MOV33H,#0DH

MOV R3,#0FEH

MOV R0,#30H

MOV R1,#4

MOV DPTR,#4100H

MOV A,#03H

MOVX @DPTR,A

LOOP1:MOV DPTR,#4102H

MOV A,R3

MOVX @DPTR,A

MOV A,@R0

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV DPTR,#4101H

MOVX @DPTR,A

LCALL DELAY ;将接收到的数据累加和存入50H ;设置命令状态字 ;设置字位码(B口) ;设置字形码(A口)

INC R0 ;为下一循环赋值 MOV A,R3

RL A

MOV R3,A

DJNZ R1,LOOP1

SJMP DISP

TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH, DB 77H,7CH,39H,5EH,79H,71H

DELAY:MOV 40H,#1000

LOOP:NOP

NOP

DJNZ 40H,LOOP

RET

END

接收程序:

ORG 0000H

LJMP MAIN

ORG 0023H

LJMP SINT

ORG 0100H

MAIN: MOV SP,#70H

MOV TMOD,#20H

MOV TL1,#0F4H

MOV TH1,#0F4H

MOV PCON,#80H

SETB TR1

MOV SCON,#50H

SETB EA

SETB ES

MOV 60H,#00H

MOV R2,#00H

MOV R0,#40H

WAIT: SJMP WAIT

SINT: JNB TI,SINT1

CLR TI

RETI

SINT1: CLR RI

MOV A,SBUF

MOV R3,60H

CJNE R3,#00H,SINT3

MOV 60H,#01H

MOV R1,A

MOV B,R1 ;将60H中的数送R3 ;隔离第一个数据,使其不参与累加 ;将数据个数存入R1,不参与累加 ;保护R1中的数据,最后在B中查看数据个数

SJMP SINT2

SINT3: MOV @R0,A ;接收到的数据存入40H为起始的地址单元中 INC R0

ADD A,R2

MOV R2,A ;将接收到的数据累加和存入R2

DJNZ R1,SINT2

MOV SBUF,A ;累加完之后A和R2中数据相等,将累加结果发送出去 MOV R0,#30H

MOV R7,#04H

LOOP2: JNB RI,$

CLR RI

MOV A,SBUF

MOV @R0,A

INC R0

DJNZ R7,LOOP2

ACALL DISP

SINT2: RETI

DISP:MOV R3,#0FEH ;显示程序:赋初值

MOV R0,#30H

MOV R1,#4

MOV DPTR,#4100H ;设置命令状态字

MOV A,#03H

MOVX@DPTR,A

LOOP1:MOV DPTR,#4102H ;设置字位码(B口)

MOV A,R3

MOVX @DPTR,A

MOV A,@R0

MOVDPTR,#TAB

MOVC A,@A+DPTR

MOV DPTR,#4101H ;设置字形码(A口)

MOVX @DPTR,A

LCALL DELAY

INC R0 ;为下一循环赋值

MOV A,R3

RL A

MOV R3,A

DJNZ R1,LOOP1

SJMP DISP

RET

TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,

DB 77H,7CH,39H,5EH,79H,71H

DELAY:MOV 40H,#200

LOOP:NOP

NOP

DJNZ 40H,LOOP RET

END

相关推荐