📄 slave2.lst
字号:
A51 MACRO ASSEMBLER SLAVE2 06/23/2007 10:57:34 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN slave2.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE slave2.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;----------------------------------
2 ; 单片机与单片机通信实例(从机2)
3 ;功能:通过串口接收主机的控制信号,然后通过数模转换输出模拟信号
4 ;-----------------------------------
0000 5 ORG 0000H
0000 8023 6 JMP START ; 程序开始
0023 7 ORG 0023H
0023 8027 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 113B 29 CALL Timer1_Init ; 进行定时器T1的初始化
003A 22 30 RET
31
003B 32 Timer1_Init:
33 ;-------------------------
34 ; 定时器T1作为串口的波特率发生器
35 ; (2^SMOD)*fosc/32*12*(256-th1)=57600
36 ;-------------------------
003B 438920 37 ORL TMOD,#00100000B ; 定时器T1工作在方式2
003E 438840 38 ORL TCON,#01000000B ; 定时器T1使能
0041 758DFF 39 MOV TH1,#0FFH ; 设定定时器T1的初始值
0044 22 40 RET
41
0045 42 DA_Operation:
43 ;-------------------------
44 ; DAC0832的操作
45 ; 电压控制值存放在ACC中
46 ;-------------------------
0045 C2B6 47 CLR P3.6 ; 将WR设为低
0047 90EFFF 48 MOV DPTR,#0EFFFH ; 选中片选信号
004A F0 49 MOVX @DPTR,A ; 输出控制电压
004B 22 50 RET
004C 51 Serial_RX_ISR:
52 ;-----------------------------------
53 ; 串口接收中断服务程序,需要在程序开始时在2FH处写入缓存区首地址
54 ;-----------------------------------
004C C0D0 55 PUSH PSW ; 程序状态字压栈
004E C001 56 PUSH 1 ; R1压栈
0050 C002 57 PUSH 2 ; R2压栈
0052 A299 58 MOV C,TI
A51 MACRO ASSEMBLER SLAVE2 06/23/2007 10:57:34 PAGE 2
0054 C299 59 CLR TI
0056 4015 60 JC OUT_ISR
61
0058 E599 62 MOV A,SBUF
005A B40210 63 CJNE A,#02,Out_ISR ; 判断是否为从机2的命令帧
005D C29D 64 CLR SM2 ; 把SM2清零
005F C2AC 65 CLR ES ; 禁止串口中断
0061 C298 66 CLR RI ; 软件清除串口接收中断标志
0063 00 67 NOP
0064 68 Serial_RX_WAIT: ; 等待下一个字节数据的接收
0064 3098FD 69 JNB RI,Serial_RX_WAIT
0067 E599 70 MOV A,SBUF ; 将接收到的数据写入A
0069 1145 71 CALL DA_Operation ; 模拟输出
006B D29D 72 SETB SM2 ; SM2置1
006D 73 Out_ISR:
006D C298 74 CLR RI ; 软件清除串口接收中断标志位
006F D002 75 POP 2 ; R2 出栈
0071 D001 76 POP 1 ; R1 出栈
0073 D0D0 77 POP PSW ; 程序状态字出栈
0075 32 78 RETI
79
80 END
A51 MACRO ASSEMBLER SLAVE2 06/23/2007 10:57:34 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
DA_OPERATION . . . C ADDR 0045H A
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 006DH A
P3 . . . . . . . . D ADDR 00B0H 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 004CH A
SERIAL_RX_WAIT . . C ADDR 0064H A
SM2. . . . . . . . B ADDR 0098H.5 A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 0025H A
TCON . . . . . . . D ADDR 0088H A
TH1. . . . . . . . D ADDR 008DH A
TI . . . . . . . . B ADDR 0098H.1 A
TIMER1_INIT. . . . C ADDR 003BH 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 + -