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

📄 master.lst

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


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

LOC  OBJ            LINE     SOURCE

                       1     ;----------------------------------
                       2     ;                   单片机与单片机通信实例(主机)
                       3     ;功能:通过串口与从机与主机的通信,对从机1发出问询帧,然后接收从机1 
                       4     ;       的脉冲数,通过简单计算得出电压控制值,通过串口发给从机2
                       5     ;-----------------------------------
0000                   6     ORG 0000H
0000 800B              7     JMP START                 ; 程序开始
000B                   8     ORG 000BH                 
000B 018E              9     JMP Timer0_ISR           ; 定时器T0中断向量
                      10     
000D                  11     START:
000D 758160           12         MOV SP,#60H         ; 将堆栈位置设为60H
0010 1117             13         CALL Init             ; 进行串口及相关寄存器的初始化
0012 75307F           14         MOV 30H,#7FH        ; 将30h设为7fh
0015 7B00             15     MOV R3,#0H          ; 将触发标志位清零
                      16     
0017                  17     Init:
                      18     ;---------------------------------
                      19     ;     程序初始化,包括串口、定时器T1、中断的初始化
                      20     ;---------------------------------
0017 7598D0           21           MOV SCON,#11010000B    ; 串口控制寄存器初始化
001A 438780           22           ORL PCON,#10000000B    ; 把SMOD位置1
001D D2AF             23           SETB EA                ; 中断允许总控制位使能
001F D2A9             24           SETB ET0                ; 定时器T0中断使能
0021 D2B9             25           SETB PT0                ; 把定时器T0中断设为高优先级
0023 1128             26           CALL Timer0_Init       ; 进行定时器T0的初始化
0025 112F             27           CALL Timer1_Init       ; 进行定时器T1的初始化
0027 22               28           RET
0028                  29     Timer0_Init:
                      30     ;-------------------------
                      31     ;    T0作为定时器,T0溢出一次为一个控制周期
                      32     ;-------------------------
0028 438901           33           ORL TMOD,#00000001B   ; 定时器T0工作在方式1
002B 438810           34           ORL TCON,#00010000B   ; 定时器T0使能
002E 22               35           RET
                      36     
002F                  37     Timer1_Init:
                      38     ;-------------------------
                      39     ;     定时器T1作为串口的波特率发生器
                      40     ;     (2^SMOD)*fosc/32*12*(256-th1)=57600
                      41     ;-------------------------
002F 438920           42           ORL TMOD,#00100000B   ; 定时器T1工作在方式2
0032 438840           43           ORL TCON,#01000000B   ; 定时器T1使能
0035 758DFF           44           MOV TH1,#0FFH         ; 设定定时器T1的初始值
0038 22               45           RET
0039                  46     MainLoop:
0039 BB00FD           47           CJNE R3,#0,MainLoop   ; 等待中断触发
003C 7901             48           MOV R1,#01H           ; R1中存放地址字节
003E 7AFE             49           MOV R2,#0FEH          ; R2中存放命令字节
0040 1164             50           CALL Serial_TX        ; 放送给从机1命令帧
0042 00               51           NOP
0043 117D             52           CALL Serial_RX        ; 等待接收从机1返回的脉冲数
                      53           
0045 E9               54           MOV A,R1              
0046 9401             55           SUBB A,#01H           ; 脉冲数减256
0048 4008             56           JC UP_POWER           ; 比256小则电压加大,反之则减小
004A                  57     DOWN_POWER:
004A 7830             58           MOV R0,#30H           ; 30h中存储电压控制值
A51 MACRO ASSEMBLER  MASTER                                                               06/23/2007 10:55:31 PAGE     2

004C E6               59           MOV A,@R0            ; 将电压控制值增加2
004D 04               60           INC A
004E 04               61           INC A
004F F6               62           MOV @R0,A            ; 将电压控制值写回缓存
0050 8006             63           JMP Send_Con
0052                  64     UP_POWER:
0052 7830             65           MOV R0,#30H
0054 E6               66           MOV A,@R0            ; 将电压控制值减小2
0055 14               67           DEC A
0056 14               68           DEC A
0057 F6               69           MOV @R0,A            ; 将电压控制值写回缓存
0058                  70     Send_Con:
0058 7902             71           MOV R1,#02H            ; R1地址字节
005A 7830             72           MOV R0,#30H            ; 读取电压控制值
005C E6               73           MOV A,@R0
005D FA               74           MOV R2,A               ; R2中存放电压控制值
005E 1164             75           CALL Serial_TX          ; 放送从机2的命令帧
0060 7B00             76           MOV R3,#0              ; 清除触发标志位
0062 80D5             77           JMP MainLoop
                      78     
0064                  79     Serial_TX:
                      80     ;-----------------------
                      81     ;   串口发送,采用查询的方式
                      82     ;-----------------------
0064                  83     Serial_TX_LOOP1:
0064 E9               84            MOV A,R1
0065 F599             85            MOV SBUF,a            ; 将一个字节写入串口缓存中
0067 D3               86            SETB C
0068 929B             87            MOV TB8,C             ; 将发送的第9位置为1,此字节为地址
006A                  88     Serial_TX_WAIT1:
006A 3099FD           89            JNB TI,Serial_TX_WAIT1 ; 等待该字节数据发送完成
006D 00               90            NOP
006E C299             91            CLR TI                ; 软件清除串口发送中断标志位
0070                  92     Serial_TX_LOOP2:
0070 EA               93            MOV A,R2
0071 F599             94            MOV SBUF,a            ; 将一个字节写入串口缓存中
0073 C3               95            CLR C
0074 929B             96            MOV TB8,C             ; 将发送的第9位置为0
0076                  97     Serial_TX_WAIT2:
0076 3099FD           98            JNB TI,Serial_TX_WAIT2 ; 等待该字节数据发送完成
0079 00               99            NOP
007A C299            100            CLR TI                ; 软件清除串口发送中断标志位
007C 22              101            RET
                     102     
007D                 103     Serial_RX:
                     104     ;-------------------
                     105     ;    串口接收,采用查询RI位的方式
                     106     ;-------------------  
007D                 107     Serial_RX_WAIT1:                    ; 等待下一个字节数据的接收     
007D 3098FD          108            JNB RI,Serial_RX_WAIT1
0080 E599            109            MOV A,SBUF                ; 将接收到的数据写入A
0082 F9              110            MOV R1,A                   ; 将接收的数据写入接收数据缓存区 
0083 C298            111            CLR RI                      ; 软件清除串口接收中断标志位
0085                 112     Serial_RX_WAIT2:                    ; 等待下一个字节数据的接收     
0085 3098FD          113            JNB RI,Serial_RX_WAIT2
0088 E599            114            MOV A,SBUF                ; 将接收到的数据写入A
008A FA              115            MOV R2,A                   ; 将接收的数据写入接收数据缓存区 
008B C298            116            CLR RI              
008D 22              117            RET
                     118     
008E                 119     Timer0_ISR:
008E C0D0            120           PUSH PSW
0090 0B              121           INC R3                    ; 设置标志位,表示定时器T0触发
0091 D0D0            122           POP PSW
0093 32              123           RETI
                     124     END
A51 MACRO ASSEMBLER  MASTER                                                               06/23/2007 10:55:31 PAGE     3

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


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

DOWN_POWER . . . .  C ADDR   004AH   A   
EA . . . . . . . .  B ADDR   00A8H.7 A   
ET0. . . . . . . .  B ADDR   00A8H.1 A   
INIT . . . . . . .  C ADDR   0017H   A   
MAINLOOP . . . . .  C ADDR   0039H   A   
PCON . . . . . . .  D ADDR   0087H   A   
PSW. . . . . . . .  D ADDR   00D0H   A   
PT0. . . . . . . .  B ADDR   00B8H.1 A   
RI . . . . . . . .  B ADDR   0098H.0 A   
SBUF . . . . . . .  D ADDR   0099H   A   
SCON . . . . . . .  D ADDR   0098H   A   
SEND_CON . . . . .  C ADDR   0058H   A   
SERIAL_RX. . . . .  C ADDR   007DH   A   
SERIAL_RX_WAIT1. .  C ADDR   007DH   A   
SERIAL_RX_WAIT2. .  C ADDR   0085H   A   
SERIAL_TX. . . . .  C ADDR   0064H   A   
SERIAL_TX_LOOP1. .  C ADDR   0064H   A   
SERIAL_TX_LOOP2. .  C ADDR   0070H   A   
SERIAL_TX_WAIT1. .  C ADDR   006AH   A   
SERIAL_TX_WAIT2. .  C ADDR   0076H   A   
SP . . . . . . . .  D ADDR   0081H   A   
START. . . . . . .  C ADDR   000DH   A   
TB8. . . . . . . .  B ADDR   0098H.3 A   
TCON . . . . . . .  D ADDR   0088H   A   
TH1. . . . . . . .  D ADDR   008DH   A   
TI . . . . . . . .  B ADDR   0098H.1 A   
TIMER0_INIT. . . .  C ADDR   0028H   A   
TIMER0_ISR . . . .  C ADDR   008EH   A   
TIMER1_INIT. . . .  C ADDR   002FH   A   
TMOD . . . . . . .  D ADDR   0089H   A   
UP_POWER . . . . .  C ADDR   0052H   A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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