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

📄 slave1.lst

📁 关于51单片机学习的基本样例程序
💻 LST
字号:
A51 MACRO ASSEMBLER  SLAVE1                                                               06/23/2007 10:56:36 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;----------------------------------
                       2     ;                   单片机与单片机通信实例(从机1)
                       3     ;功能:通过串口接收主机的询问信号,然后通过串口返回脉冲数
                       4     ;-----------------------------------
0000                   5     ORG 0000H
0000 8023              6     JMP START                 ; 程序开始
0023                   7     ORG 0023H                 
0023 803C              8     JMP Serial_RX_ISR           ; 串口中断向量
                       9     
0025                  10     START:    
0025 758160           11           MOV SP,#60H         ; 将堆栈位置设为60H
0028 112C             12           CALL Init             ; 进行串口及相关寄存器的初始化       
                      13     
002A                  14     MainLoop:
                      15     ;-----------------------
                      16     ; 主循环:
                      17     ;-----------------------
002A 80FE             18           JMP MainLoop           
                      19     
002C                  20     Init:
                      21     ;---------------------------------
                      22     ;     程序初始化,包括串口、定时器T1、中断的初始化
                      23     ;---------------------------------
002C 7598F0           24           MOV SCON,#11110000B    ; 串口控制寄存器初始化
002F 438780           25           ORL PCON,#10000000B    ; 把SMOD位置1
0032 D2AF             26           SETB EA                 ; 中断允许总控制位使能
0034 D2AC             27           SETB ES                 ; 串口中断使能
0036 D2BC             28           SETB PS                 ; 把串口中断设为高优先级
0038 113D             29           CALL Timer0_Init        ; 进行定时器T0的初始化
003A 1144             30           CALL Timer1_Init         ; 进行定时器T1的初始化
003C 22               31           RET
003D                  32     Timer0_Init:
                      33     ;-------------------------
                      34     ;    T0作为计数器
                      35     ;-------------------------
003D 438905           36           ORL TMOD,#00000101B   ; 计数器T0工作在方式1
0040 438810           37           ORL TCON,#00010000B   ; 计数器T0使能
0043 22               38           RET
0044                  39     Timer1_Init:
                      40     ;-------------------------
                      41     ;     定时器T1作为串口的波特率发生器
                      42     ;     (2^SMOD)*fosc/32*12*(256-th1)=57600
                      43     ;-------------------------
0044 438920           44           ORL TMOD,#00100000B   ; 定时器T1工作在方式2
0047 438840           45           ORL TCON,#01000000B    ; 定时器T1使能
004A 758DFF           46           MOV TH1,#0FFH          ; 设定定时器T1的初始值
004D 22               47           RET
                      48     
004E                  49     Serial_TX:
                      50     ;-----------------------
                      51     ;   串口发送,采用查询的方式
                      52     ;-----------------------
004E E9               53            MOV A,R1            ; 将要发送的数据写入A
004F F599             54            MOV SBUF,a            ; 将一个字节写入串口缓存中
0051                  55     Serial_TX_WAIT1:
0051 3099FD           56            JNB TI,Serial_TX_WAIT1 ; 等待该字节数据发送完成
0054 00               57            NOP
0055 C299             58            CLR TI                ; 软件清除串口发送中断标志位
A51 MACRO ASSEMBLER  SLAVE1                                                               06/23/2007 10:56:36 PAGE     2

                      59     
0057 EA               60            MOV A,R2              ; 将要发送的数据写入A
0058 F599             61            MOV SBUF,a            ; 将一个字节写入串口缓存中
005A                  62     Serial_TX_WAIT2:
005A 3099FD           63            JNB TI,Serial_TX_WAIT2 ; 等待该字节数据发送完成
005D 00               64            NOP
005E C299             65            CLR TI                ; 软件清除串口发送中断标志位      
0060 22               66            RET
                      67     
0061                  68     Serial_RX_ISR:
                      69     ;-----------------------------------
                      70     ;     串口接收中断服务程序,需要在程序开始时在2FH处写入缓存区首地址
                      71     ;-----------------------------------
0061 C0D0             72            PUSH PSW                   ; 程序状态字压栈
0063 C001             73            PUSH 1                      ; R1压栈
0065 C002             74            PUSH 2                     ; R2压栈
                      75            
0067 A299             76            MOV C,TI
0069 C299             77            CLR TI
006B 401E             78     JC OUT_ISR
                      79            
006D E599             80            MOV A,SBUF 
006F B40119           81            CJNE A,#01,Out_ISR         ; 判断是否为从机1的命令帧
0072 C29D             82            CLR SM2                    ; 把SM2清零
0074 C2AC             83            CLR ES                     ; 禁止串口中断
0076 C298             84            CLR RI                      ; 软件清除串口接收中断标志
0078 00               85            NOP
0079                  86     Serial_RX_WAIT:                    ; 等待下一个字节数据的接收     
0079 3098FD           87            JNB RI,Serial_RX_WAIT
007C E599             88            MOV A,SBUF                ; 将接收到的数据写入A
007E B4FE0A           89            CJNE A,#0FEH,Out_ISR
0081 E58C             90            MOV A,TH0
0083 F9               91            MOV R1,A                   ; 计数器高位放入R1
0084 E58A             92            MOV A,TL0
0086 FA               93            MOV R2,A                   ; 计数器低位放入R2
0087 114E             94            CALL Serial_TX              ; 应答主机
0089 D29D             95            SETB SM2                   ; SM2置1
008B                  96     Out_ISR:  
008B C298             97            CLR RI                     ; 软件清除串口接收中断标志位
008D D002             98            POP 2                      ; R2 出栈
008F D001             99            POP 1                       ; R1 出栈
0091 D0D0            100            POP PSW                    ; 程序状态字出栈
0093 32              101            RETI       
                     102                     
                     103            END
A51 MACRO ASSEMBLER  SLAVE1                                                               06/23/2007 10:56:36 PAGE     3

SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES

EA . . . . . . . .  B ADDR   00A8H.7 A   
ES . . . . . . . .  B ADDR   00A8H.4 A   
INIT . . . . . . .  C ADDR   002CH   A   
MAINLOOP . . . . .  C ADDR   002AH   A   
OUT_ISR. . . . . .  C ADDR   008BH   A   
PCON . . . . . . .  D ADDR   0087H   A   
PS . . . . . . . .  B ADDR   00B8H.4 A   
PSW. . . . . . . .  D ADDR   00D0H   A   
RI . . . . . . . .  B ADDR   0098H.0 A   
SBUF . . . . . . .  D ADDR   0099H   A   
SCON . . . . . . .  D ADDR   0098H   A   
SERIAL_RX_ISR. . .  C ADDR   0061H   A   
SERIAL_RX_WAIT . .  C ADDR   0079H   A   
SERIAL_TX. . . . .  C ADDR   004EH   A   
SERIAL_TX_WAIT1. .  C ADDR   0051H   A   
SERIAL_TX_WAIT2. .  C ADDR   005AH   A   
SM2. . . . . . . .  B ADDR   0098H.5 A   
SP . . . . . . . .  D ADDR   0081H   A   
START. . . . . . .  C ADDR   0025H   A   
TCON . . . . . . .  D ADDR   0088H   A   
TH0. . . . . . . .  D ADDR   008CH   A   
TH1. . . . . . . .  D ADDR   008DH   A   
TI . . . . . . . .  B ADDR   0098H.1 A   
TIMER0_INIT. . . .  C ADDR   003DH   A   
TIMER1_INIT. . . .  C ADDR   0044H   A   
TL0. . . . . . . .  D ADDR   008AH   A   
TMOD . . . . . . .  D ADDR   0089H   A   


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

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