⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhujiasm.lst

📁 51单片机的串口多机通讯设计
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  ZHUJIASM                                                             01/24/2008 12:06:00 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN zhujiasm.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE zhujiasm.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

  0097                 1           T_RSTATE EQU P1.7
0000                   2           ORG 0000H
0000 020100            3           LJMP START
0100                   4               ORG 0100H
                       5     ;**********************************************************
                       6     ;
                       7     ;系统初始化
                       8     ;
                       9     ;********************************************************** 
0100 758920           10     START:MOV TMOD,#20H
0103 758DFD           11           MOV TH1,#0FDH
0106 758BFD           12               MOV TL1,#0FDH
0109 D28E             13               SETB TR1
010B 7598D0           14               MOV SCON,#0D0H
010E 758780           15               MOV PCON,#80H
0111 31C2             16               ACALL INIT_LCD
0113 31E5             17               ACALL SCAN_SENSOR
0115 5157             18               ACALL STRING_DISPLAY 
                      19     ;**********************************************************
                      20     ;
                      21     ;发送请求信号
                      22     ;
                      23     ;********************************************************** 
0117                  24     MAIN_LOOP:
0117 D297             25     STEP1:SETB T_RSTATE 
0119 B80042           26           CJNE R0,#00H,MODE_1;是否选择模式0(循环显示模式)
011C 09               27               INC R1;循环模式的从机号
011D E9               28               MOV A,R1
011E B53802           29               CJNE A,38H,MODE_0
0121 7900             30               MOV R1,#00H
0123                  31     MODE_0:
                      32     ;         MOV A,R1;从机号加一
                      33     ;         ANL A,#03H;预设有4个从机
                      34     ;         MOV R1,A
0123 D29B             35               SETB TB8;表明传送的是地址数据
0125 8999             36               MOV SBUF,R1
0127 3099FD           37               JNB TI,$;等待发送完成
012A C299             38               CLR TI
012C C297             39               CLR T_RSTATE
012E 3098FD           40               JNB RI,$;等待从机应答
0131 C298             41               CLR RI
0133 D297             42               SETB T_RSTATE
0135 E599             43               MOV A,SBUF
0137 8939             44               MOV 39H,R1
0139 B53915           45               CJNE A,39H,RESET1
013C C29B             46               CLR TB8
013E 759900           47               MOV SBUF,#00H
0141 3099FD           48               JNB TI,$
0144 C299             49               CLR TI
0146 C297             50               CLR T_RSTATE
0148 3098FD           51               JNB RI,$
014B C298             52               CLR RI
014D AB99             53               MOV R3,SBUF
014F 21A0             54               AJMP STEP2
0151                  55     RESET1:
0151 7599FF           56           MOV SBUF,#0FFH
0154 3099FD           57               JNB TI,$
0157 C299             58               CLR TI
A51 MACRO ASSEMBLER  ZHUJIASM                                                             01/24/2008 12:06:00 PAGE     2

0159 753A01           59               MOV 3AH,#01H;40H为显示错误状态的标志     
015C 21A0             60               AJMP STEP2
015E                  61     MODE_1:
015E C3               62           CLR C;清借位
015F E538             63           MOV A,38H
0161 14               64               DEC A
0162 9A               65           SUBB A,R2;比较从机数和选择的机号的大小
0163 4038             66               JC INPUT_ERROR;若从机数小于选择的机号,就跳转
0165 D29B             67           SETB TB8;表明传送的是地址数据
0167 8A99             68               MOV SBUF,R2;将自选模式的从机号发出
0169 3099FD           69               JNB TI,$;等待发送完成
016C C299             70               CLR TI
016E C297             71               CLR T_RSTATE
0170 3098FD           72               JNB RI,$
0173 C298             73               CLR RI
0175 D297             74               SETB T_RSTATE
0177 EA               75               MOV A,R2
0178 B59915           76               CJNE A,SBUF,RESET2;若接收到的地址不符合发送地址,则发送复位
017B C29B             77               CLR TB8
017D 759900           78               MOV SBUF,#00H
0180 3099FD           79               JNB TI,$
0183 C299             80               CLR TI
0185 C297             81               CLR T_RSTATE
0187 3098FD           82               JNB RI,$
018A C298             83               CLR RI
018C AB99             84               MOV R3,SBUF
018E 21A0             85               AJMP STEP2
0190                  86     RESET2:
0190 7599FF           87           MOV SBUF,#0FFH
0193 3099FD           88               JNB TI,$
0196 C299             89               CLR TI
0198 753A01           90               MOV 3AH,#01H
019B 21A0             91               AJMP STEP2
019D                  92     INPUT_ERROR:
019D 753A01           93               MOV 3AH,#01H            
                      94     ;**********************************************************
                      95     ;
                      96     ;接收数据并显示
                      97     ;
                      98     ;**********************************************************
01A0                  99     STEP2:
01A0 51CF            100               ACALL DISPLAY_NO;显示接收的数据
01A2 7F02            101               MOV R7,#02H
01A4 31B3            102               ACALL DELAY_S;延迟2秒
01A6 2117            103               AJMP MAIN_LOOP          
                     104     ;**********************************************************
                     105     ;
                     106     ;延时子程序
                     107     ;
                     108     ;**********************************************************
01A8                 109     DELAY_MS:
01A8                 110     DEL_MS2:
01A8 7537F9          111           MOV 37H,#0F9H
01AB                 112     DEL_MS1:
01AB 00              113           NOP
01AC 00              114           NOP
01AD D537FB          115               DJNZ 37H,DEL_MS1
01B0 DDF6            116               DJNZ R5,DEL_MS2
01B2 22              117               RET
                     118     
01B3                 119     DELAY_S:
01B3                 120     DEL_S2:
01B3 75360A          121           MOV 36H,#0AH
01B6                 122     DEL_S1:
01B6 7D64            123           MOV R5,#64H
01B8 31A8            124           ACALL DELAY_MS
A51 MACRO ASSEMBLER  ZHUJIASM                                                             01/24/2008 12:06:00 PAGE     3

01BA 7138            125               ACALL SCAN_KEYBOARD
01BC D536F7          126               DJNZ 36H,DEL_S1
01BF DFF2            127               DJNZ R7,DEL_S2
01C1 22              128               RET
                     129     ;**********************************************************
                     130     ;
                     131     ;液晶初始化子程序
                     132     ;
                     133     ;**********************************************************
01C2                 134     INIT_LCD:
01C2 7DFA            135          MOV R5,#0FAH
01C4 31A8            136          ACALL DELAY_MS;延时,等待液晶进入工作状态
01C6 753101          137              MOV 31H,#01H
01C9 5194            138              ACALL WRITE_COMM;显示清零
01CB 753102          139              MOV 31H,#02H
01CE 5194            140              ACALL WRITE_COMM;光标复位
01D0 753138          141              MOV 31H,#38H
01D3 5194            142              ACALL WRITE_COMM;设置显示状态
01D5 75310C          143              MOV 31H,#0CH
01D8 5194            144              ACALL WRITE_COMM;开显示,无光标
01DA 753118          145              MOV 31H,#18H
01DD 5194            146              ACALL WRITE_COMM;移动显示的文字
01DF 753101          147              MOV 31H,#01H
01E2 5194            148              ACALL WRITE_COMM;显示清零
01E4 22              149              RET
                     150     ;**********************************************************
                     151     ;
                     152     ;从机存在扫描子程序
                     153     ;
                     154     ;**********************************************************
01E5                 155     SCAN_SENSOR:
01E5 753186          156          MOV 31H,#86H
01E8 5194            157              ACALL WRITE_COMM
01EA 753206          158              MOV 32H,#06H;字符串长度为6个字节
01ED 753300          159              MOV 33H,#00H;设置字符串中指针
01F0                 160     DISPLAY_LOOP1:
01F0 E533            161          MOV A,33H
01F2 900245          162              MOV DPTR,#STRING_SYSTEM
01F5 93              163              MOVC A,@A+DPTR
01F6 F531            164              MOV 31H,A
01F8 51A2            165              ACALL WRITE_DATA
01FA 0533            166              INC 33H
01FC D532F1          167              DJNZ 32H,DISPLAY_LOOP1
01FF 7531C2          168              MOV 31H,#0C2H
0202 5194            169              ACALL WRITE_COMM
0204 75320C          170              MOV 32H,#0CH;字符串长度为12个字节
0207 753300          171              MOV 33H,#00H;设置字符串中指针
020A                 172     DISPLAY_LOOP2:
020A E533            173          MOV A,33H
020C 90024B          174              MOV DPTR,#STRING_INITIALIZE
020F 93              175              MOVC A,@A+DPTR
0210 F531            176              MOV 31H,A
0212 51A2            177              ACALL WRITE_DATA
0214 0533            178              INC 33H
0216 D532F1          179              DJNZ 32H,DISPLAY_LOOP2
0219 D29B            180              SETB TB8
021B 753301          181              MOV 33H,#01H
021E                 182     SCAN:
021E 853299          183              MOV SBUF,32H;32H作为扫描发出的从机号
0221 3099FD          184              JNB TI,$
0224 C299            185              CLR TI
0226 7D01            186              MOV R5,#01H
0228 31A8            187              ACALL DELAY_MS
022A 309808          188              JNB RI,OUT_SCAN
022D 0532            189              INC 32H
022F C298            190          CLR RI
A51 MACRO ASSEMBLER  ZHUJIASM                                                             01/24/2008 12:06:00 PAGE     4

0231 E533            191              MOV A,33H
0233 8008            192              SJMP JUDGE_SCAN
0235                 193     OUT_SCAN:
0235 853238          194          MOV 38H,32H;将从机数保存在38H中
0238 753300          195              MOV 33H,#00H;33H作为结束扫描的标志
023B E533            196              MOV A,33H
023D                 197     JUDGE_SCAN:
023D B400DE          198              CJNE A,#00H,SCAN
0240 7F02            199              MOV R7,#02H
0242 31B3            200              ACALL DELAY_S
0244 22              201              RET
0245 53595354        202     STRING_SYSTEM:DB 'S','Y','S','T','E','M'
0249 454D                    
024B 494E4954        203     STRING_INITIALIZE:DB 'I','N','I','T','I','A','L','I','Z','I','N','G'      
024F 49414C49                
0253 5A494E47                
                     204     ;**********************************************************
                     205     ;
                     206     ;显示字符串子程序
                     207     ;
                     208     ;**********************************************************
0257                 209     STRING_DISPLAY:
0257 753101          210              MOV 31H,#01H
025A 5194            211              ACALL WRITE_COMM;显示清零
025C 753180          212              MOV 31H,#80H
025F 5194            213              ACALL WRITE_COMM;设置输入字符串的首地址
0261 753210          214              MOV 32H,#10H;字符串长度为16个字节
0264 753300          215              MOV 33H,#00H;设置字符串中指针
0267                 216     DISPLAY_LOOP3:
0267 E533            217          MOV A,33H
0269 900284          218              MOV DPTR,#STRING
026C 93              219              MOVC A,@A+DPTR
026D F531            220              MOV 31H,A
026F 51A2            221              ACALL WRITE_DATA
0271 0533            222              INC 33H
0273 D532F1          223              DJNZ 32H,DISPLAY_LOOP3
0276 753187          224              MOV 31H,#87H
0279 5194            225              ACALL WRITE_COMM
027B E538            226              MOV A,38H
027D 2430            227              ADD A,#30H;将从机数转化为相应的ASCII码
027F F531            228              MOV 31H,A
0281 51A2            229              ACALL WRITE_DATA 
0283 22              230              RET
0284 4E4F2020        231     STRING:DB 'N','O',' ',' ','o','f',' ',' ',' ','s','e','n','s','o','r','s'
0288 6F662020                
028C 2073656E                
0290 736F7273                
                     232     ;**********************************************************
                     233     ;
                     234     ;液晶显示调用子程序库
                     235     ;
                     236     ;**********************************************************
0294                 237     WRITE_COMM:
0294 853180          238          MOV P0,31H
0297 C294            239              CLR P1.4
0299 C293            240              CLR P1.3
029B C292            241              CLR P1.2
029D 51B0            242          ACALL READ_BUSY
029F D292            243              SETB P1.2
02A1 22              244              RET
02A2                 245     WRITE_DATA:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -