《51单片机应用开发桉例精选》源代码及图片下载

源代码在线查看: com.lst

软件大小: 3718 K
上传用户: williamchen199
关键词: 51单片机 应用开发 源代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				A51 MACRO ASSEMBLER  COM                                                                  06/23/2007 10:33:35 PAGE     1
				
				
				MACRO ASSEMBLER A51 V7.10
				OBJECT MODULE PLACED IN com.OBJ
				ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE com.asm SET(SMALL) DEBUG EP
				
				LOC  OBJ            LINE     SOURCE
				
				                       1     ;----------------------------------
				                       2     ;                   单片机与PC通信实例
				                       3     ;功能:从PC机串口端接收13个字节的数据,然后将接收到的数据加上
				                       4     ;     "Serial Port OK!"的后缀后,发送给PC作为应答
				                       5     ;-----------------------------------
				0000                   6     ORG 0000H
				0000 8023              7     JMP START                 ; 程序开始
				0023                   8     ORG 0023H                 
				0023 8073              9     JMP Serial_RX_ISR           ; 串口中断向量
				                      10     
				0025                  11     START:    
				0025 758160           12           MOV SP,#60H         ; 将堆栈位置设为60H
				0028 116E             13           CALL Init             ; 进行串口及相关寄存器的初始化
				002A 752F30           14           MOV 2FH,#30H        ; 将收发缓存区的首地址写入20h
				                      15           
				002D 793D             16           MOV R1,#3DH
				002F 7753             17           MOV @R1,#53H        ; 'S'的ASCII码写入发送缓存的对应空间(下同)
				0031 09               18           INC R1
				0032 7765             19           MOV @R1,#65H        ; 'e'
				0034 09               20           INC R1
				0035 7772             21           MOV @R1,#72H        ; 'r'
				0037 09               22           INC R1
				0038 7769             23           MOV @R1,#69H        ; 'i'
				003A 09               24           INC R1
				003B 7761             25           MOV @R1,#61H        ; 'a'
				003D 09               26           INC R1
				003E 776C             27           MOV @R1,#6CH        ; 'l'
				0040 09               28           INC R1
				0041 7714             29           MOV @R1,#20         ; 空格的ASCII码
				0043 09               30           INC R1
				0044 7750             31           MOV @R1,#50H        ; 'P'
				0046 09               32           INC R1
				0047 776F             33           MOV @R1,#6FH        ; 'o'
				0049 09               34           INC R1
				004A 7772             35           MOV @R1,#72H        ; 'r'
				004C 09               36           INC R1
				004D 7774             37           MOV @R1,#74H        ; 't'
				004F 09               38           INC R1
				0050 7720             39           MOV @R1,#20H        ; 空格的ASCII码
				0052 09               40           INC R1
				0053 774F             41           MOV @R1,#4FH        ; 'O'
				0055 09               42           INC R1
				0056 774B             43           MOV @R1,#4BH        ; 'K'
				0058 09               44           INC R1
				0059 7721             45           MOV @R1,#21H        ; '!'
				005B 00               46           NOP
				005C 00               47           NOP
				005D 00               48           NOP
				                      49     
				005E                  50     MainLoop:
				                      51     ;-----------------------
				                      52     ; 主循环:查询接收是否完成,并进行发送
				                      53     ;-----------------------
				005E E52F             54           MOV A,2FH              ; 读入当前的缓存地址
				0060 B43DFB           55           CJNE A,#3DH,MainLoop    ; 当前缓存地址为3DH说明串口已完成13个字节数据的接收
				0063 7BFF             56           MOV R3,#0FFH
				0065                  57     Delay:
				0065 DBFE             58           DJNZ R3,Delay          ; 延时
				A51 MACRO ASSEMBLER  COM                                                                  06/23/2007 10:33:35 PAGE     2
				
				0067 1187             59           CALL Serial_TX         ; 调用串口发送函数
				0069 752F30           60           MOV 2FH,#30H         ; 将缓存地址重新设为初始地址,准备下一个循环的接收
				006C 80F0             61           JMP MainLoop           
				                      62     
				006E                  63     Init:
				                      64     ;---------------------------------
				                      65     ;     程序初始化,包括串口、定时器T1、中断的初始化
				                      66     ;---------------------------------
				006E 759890           67           MOV SCON,#10010000B    ; 串口控制寄存器初始化
				0071 438780           68           ORL PCON,#10000000B    ; 把SMOD位置1
				0074 D2AF             69           SETB EA                 ; 中断允许总控制位使能
				0076 D2AC             70           SETB ES                 ; 串口中断使能
				0078 D2BC             71           SETB PS                 ; 把串口中断设为高优先级
				007A 117D             72           CALL Timer1_Init         ; 进行定时器T1的初始化
				007C 22               73           RET
				                      74     
				007D                  75     Timer1_Init:
				                      76     ;-------------------------
				                      77     ;     定时器T1作为串口的波特率发生器
				                      78     ;     (2^SMOD)*fosc/32*12*(256-th1)=57600
				                      79     ;-------------------------
				007D 758920           80           MOV TMOD,#00100000B   ; 定时器T1工作在方式2
				0080 758840           81           MOV TCON,#01000000B    ; 定时器T1使能
				0083 758DFF           82           MOV TH1,#0FFH          ; 设定定时器T1的初始值
				0086 22               83           RET
				                      84     
				0087                  85     Serial_TX:
				                      86     ;-----------------------
				                      87     ;   串口发送,采用查询的方式
				                      88     ;-----------------------
				0087 7930             89            MOV R1,#30H          ; 发送数据的缓存区起始位置为30h
				0089 7A1C             90            MOV R2,#1CH          ; 一次发送28字节数据
				008B                  91     Serial_TX_LOOP:
				008B E7               92            MOV A,@R1            ; 将要发送的数据写入A
				008C F599             93            MOV SBUF,a            ; 将一个字节写入串口缓存中
				008E                  94     Serial_TX_WAIT:
				008E 3099FD           95            JNB TI,Serial_TX_WAIT ; 等待该字节数据发送完成
				0091 00               96            NOP
				0092 C299             97            CLR TI                ; 软件清除串口发送中断标志位
				0094 09               98            INC R1                ; 缓存区地址加1
				0095 DAF0             99            DJNZ R2,Serial_TX      ; 判断是否所有数据均已发送
				0097 22              100            RET
				                     101     
				0098                 102     Serial_RX_ISR:
				                     103     ;-----------------------------------
				                     104     ;     串口接收中断服务程序,需要在程序开始时在2FH处写入缓存区首地址
				                     105     ;-----------------------------------
				0098 C0D0            106            PUSH PSW                   ; 程序状态字压栈
				009A C001            107            PUSH 1                      ; R1压栈
				                     108     
				009C A299            109            MOV C,TI                    ; 判断是否为接收中断
				009E C299            110            CLR TI
				00A0 4009            111            JC ISR_OUT
				                     112     
				00A2 A92F            113            MOV R1,2FH                 ; 缓存区地址存于2FH
				00A4 A799            114            MOV @R1,SBUF              ; 将接收数据写入缓存区
				00A6 C298            115            CLR RI                      ; 软件清除串口接收中断标志
				00A8 09              116            INC R1                   
				00A9 892F            117            MOV 2FH,R1                 ; 缓存区地址加1
				00AB                 118       ISR_OUT:
				00AB D001            119            POP 1                       ; R1 出栈
				00AD D0D0            120            POP PSW                    ; 程序状态字出栈
				00AF 32              121            RETI       
				                     122                     
				                     123            END
				A51 MACRO ASSEMBLER  COM                                                                  06/23/2007 10:33:35 PAGE     3
				
				SYMBOL TABLE LISTING
				------ ----- -------
				
				
				N A M E             T Y P E  V A L U E   ATTRIBUTES
				
				DELAY. . . . . . .  C ADDR   0065H   A   
				EA . . . . . . . .  B ADDR   00A8H.7 A   
				ES . . . . . . . .  B ADDR   00A8H.4 A   
				INIT . . . . . . .  C ADDR   006EH   A   
				ISR_OUT. . . . . .  C ADDR   00ABH   A   
				MAINLOOP . . . . .  C ADDR   005EH   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   0098H   A   
				SERIAL_TX. . . . .  C ADDR   0087H   A   
				SERIAL_TX_LOOP . .  C ADDR   008BH   A   
				SERIAL_TX_WAIT . .  C ADDR   008EH   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   007DH   A   
				TMOD . . . . . . .  D ADDR   0089H   A   
				
				
				REGISTER BANK(S) USED: 0 
				
								ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)
							

相关资源