📄 fasong.sdi
字号:
,,,;一个以89C51为核心构成的数据采集系统,要求每分钟向上位机发送32字节的采集数据
,,,;通讯波特率9600波特,系统晶振11.0592MHz,数据采用校验和方式进行校验。
,,,;当接收方接收的数据出错时,向发送方发送ASCII码"E",否则发送"R"。
,,,;若发现接收错误,发送方应该重发数据。
,,,S_END BIT 00H
,,,ACK BIT 01H
,,,OK BIT 02H
,,,MIN BIT 03H
,,,CR2 EQU 0AH
,,,CR3 EQU 0BH ;1区R2,R3
,,,BR0 EQU 10H
,,,BR2 EQU 12H ;2区R0,R2
,,,LEN EQU 32 ;数据块长度
,,,ADDR1 EQU 30H ;数据块首地址
,,, ORG 0
0000,02 00 30,, LJMP START
,,, ORG 0BH
000B,02 00 A3,, LJMP TS
,,, ORG 23H
0023,02 00 C0,, LJMP TR
,,, ORG 30H
0030,75 81 60,START,START: MOV SP,#60H
,,,;===============================
,,,;向发送数据缓冲区赋值
,,,;===============================
0033,78 30,, MOV R0,#ADDR1
0035,7A 1A,, MOV R2,#26
0037,74 41,, MOV A,#'A'
0039,F6,LL1,LL1: MOV @R0,A
003A,04,, INC A
003B,08,, INC R0
003C,DA FB,, DJNZ R2,LL1
003E,7A 04,, MOV R2,#4
0040,74 30,, MOV A,#'0'
0042,F6,LL2,LL2: MOV @R0,A
0043,04,, INC A
0044,08,, INC R0
0045,DA FB,, DJNZ R2,LL2
0047,76 0A,, MOV @R0,#0AH ;存换行符
0049,08,, INC R0
004A,76 0D,, MOV @R0,#0DH ;存回车符
,,,;=================================
004C,75 89 21,, MOV TMOD,#21H
004F,75 8C 4C,, MOV TH0,#4CH
0052,75 8A 00,, MOV TL0,#0
0055,75 8D FD,, MOV TH1,#0FDH
0058,75 8B FD,, MOV TL1,#0FDH
005B,D2 B9,, SETB PT0
005D,D2 A9,, SETB ET0
005F,53 87 7F,, ANL PCON,#7FH ;SMOD=0
0062,75 98 50,, MOV SCON,#50H
0065,D2 AC,, SETB ES
0067,D2 AF,, SETB EA
0069,D2 8C,, SETB TR0
006B,D2 8E,, SETB TR1
006D,75 0A 14,, MOV CR2,#20
0070,75 0B 3C,, MOV CR3,#60
0073,C2 00,, CLR S_END
0075,C2 01,, CLR ACK
0077,C2 02,, CLR OK
0079,C2 03,, CLR MIN
007B,30 03 FD,LOOP,LOOP: JNB MIN,$
007E,C2 03,, CLR MIN
0080,7A 20,, MOV R2,#LEN
0082,78 30,, MOV R0,#ADDR1
0084,E4,, CLR A
0085,26,L1,L1: ADD A,@R0
0086,08,, INC R0
0087,DA FC,, DJNZ R2,L1
0089,F6,, MOV @R0,A ;存检查和
008A,75 12 21,L2,L2: MOV BR2,#LEN+1
008D,75 10 30,, MOV BR0,#ADDR1
0090,E5 30,, MOV A,ADDR1
0092,F5 99,, MOV SBUF,A ;发送第一个字节
0094,30 00 FD,, JNB S_END,$ ;没有发送完毕就等待
0097,C2 00,, CLR S_END
0099,30 01 FD,, JNB ACK,$ ;没有应答则等待
009C,C2 01,, CLR ACK
009E,30 02 E9,, JNB OK,L2 ;接收方返回错误代码则重发
00A1,80 D8,, SJMP LOOP
00A3,C0 D0,TS,TS: PUSH PSW
00A5,D2 D3,, SETB RS0
00A7,C2 D4,, CLR RS1 ;选择1区R寄存器
00A9,C2 8C,, CLR TR0
00AB,75 8C 4C,, MOV TH0,#4CH
00AE,75 8A 00,, MOV TL0,#0
00B1,D2 8C,, SETB TR0
00B3,DA 08,, DJNZ R2,TS1
00B5,7A 14,, MOV R2,#20
00B7,DB 04,, DJNZ R3,TS1
00B9,7B 3C,, MOV R3,#60
00BB,D2 03,, SETB MIN ;一分钟到,置MIN标志
00BD,D0 D0,TS1,TS1: POP PSW
00BF,32,, RETI
00C0,C0 D0,TR,TR: PUSH PSW
00C2,C0 E0,, PUSH ACC
00C4,C2 D3,, CLR RS0
00C6,D2 D4,, SETB RS1 ;选2区R寄存器
00C8,30 99 0E,, JNB TI,SR2
00CB,C2 99,, CLR TI
00CD,DA 04,, DJNZ R2,SR1
00CF,D2 00,, SETB S_END
00D1,80 06,, SJMP SR2
00D3,08,SR1,SR1: INC R0
00D4,E6,, MOV A,@R0
00D5,F5 99,, MOV SBUF,A
00D7,80 12,, SJMP SR4
00D9,30 98 0F,SR2,SR2: JNB RI,SR4
00DC,C2 98,, CLR RI
00DE,D2 01,, SETB ACK
00E0,E5 99,, MOV A,SBUF
00E2,B4 52 04,, CJNE A,#'R',SR3
00E5,D2 02,, SETB OK
00E7,80 02,, SJMP SR4
00E9,C2 02,SR3,SR3: CLR OK
00EB,D0 E0,SR4,SR4: POP ACC
00ED,D0 D0,, POP PSW
00EF,32,, RETI
000E,,, END
,,,
,,,
,,,
,,,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -