这是个自己写的数模调试程序

源代码在线查看: ad-to-pc.lst

软件大小: 13 K
上传用户: lwp
关键词: 数模 调试 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				A51 MACRO ASSEMBLER  AD_TO_PC                                                             06/04/2007 22:24:01 PAGE     1
				
				
				MACRO ASSEMBLER A51 V7.07
				OBJECT MODULE PLACED IN ad-to-pc.OBJ
				ASSEMBLER INVOKED BY: D:\mcu\keil\C51\BIN\A51.EXE ad-to-pc.asm SET(SMALL) DEBUG EP
				
				LOC  OBJ            LINE     SOURCE
				
				                       1     ;copyright:-----维斯特开发天地-----
				                       2     ;;led.asm
				                       3     ;;作者  :xtgk
				                       4     ;;MCU:stc12c4052    COLCK:11.0592MHZ
				                       5     
				                       6     ;时钟 11.0532MHz, 波特率 = 9600bps。按k1键,A/D 转换结果在上位机显示
				                       7     ;ADC DEMO_4052_ASM.ASM 汇编程序演示 STC12C5410AD 系列 MCU 的 A/D 转换功能。
				                       8     
				                       9     ;转换结果以 16 进制形式输出到串行口,可以用串行口调试程序观察输出结果。
				                      10     
				                      11     
				  0097                12     LED_MCU_START EQU P1.7
				  00C5                13     ADC_CONTR EQU 0C5H ;A/D 转换寄存器
				  00C6                14     ADC_DATA EQU 0C6H ;A/D 转换结果寄存器, 为10 位 A/D 转换结果的高8 位
				                      15     ;ADC_LOW2 EQU 0BEH ;A/D 转换结果寄存器, 低2 位有效, 为10 位 A/D 转换结果的低2 位
				                      16     ;如果不用ADC_LOW2 的低2 位,只用ADC_DATA 的8 位,则为8 位A/D 转换
				  0091                17     P1M0 EQU 91H ;P1 口模式选择寄存器0
				  0092                18     P1M1 EQU 92H ;P1 口模式选择寄存器1
				  00E0                19     ADC_Power_On_Speed_Channel_0 EQU 11100000B ;P1.0 作为A/D 输入
				  00E1                20     ADC_Power_On_Speed_Channel_1 EQU 11100001B ;P1.1 作为A/D 输入
				  00E2                21     ADC_Power_On_Speed_Channel_2 EQU 11100010B ;P1.2 作为A/D 输入
				  00E3                22     ADC_Power_On_Speed_Channel_3 EQU 11100011B ;P1.3 作为A/D 输入
				  00E4                23     ADC_Power_On_Speed_Channel_4 EQU 11100100B ;P1.4 作为A/D 输入
				  00E5                24     ADC_Power_On_Speed_Channel_5 EQU 11100101B ;P1.5 作为A/D 输入
				  00E6                25     ADC_Power_On_Speed_Channel_6 EQU 11100110B ;P1.6 作为A/D 输入
				  00E7                26     ADC_Power_On_Speed_Channel_7 EQU 11100111B ;P1.7 作为A/D 输入
				                      27     ;-------------------------------------------------
				                      28     ;定义变量
				  0030                29     ADC_Channel_0_Result EQU 30H ;0 通道A/D 转换结果
				  0031                30     ADC_Channel_1_Result EQU 31H ;1 通道A/D 转换结果
				  0032                31     ADC_Channel_2_Result EQU 32H ;2 通道A/D 转换结果
				  0033                32     ADC_Channel_3_Result EQU 33H ;3 通道A/D 转换结果
				  0034                33     ADC_Channel_4_Result EQU 34H ;4 通道A/D 转换结果
				  0035                34     ADC_Channel_5_Result EQU 35H ;5 通道A/D 转换结果
				  0036                35     ADC_Channel_6_Result EQU 36H ;6 通道A/D 转换结果
				  0037                36     ADC_Channel_7_Result EQU 37H ;7 通道A/D 转换结果
				                      37     ;--------------------------------------------------
				0000                  38     ORG 0000H
				0000 020050           39     LJMP MAIN
				0050                  40     ORG 0050H
				0050                  41     MAIN:
				0050 C297             42     CLR LED_MCU_START ;MCU 工作指示灯 LED_MCU_START EQU P1.7
				0052 75817F           43     MOV SP, #7FH ;设置堆栈
				0055 1169             44     ACALL Initiate_RS232 ;初始化串口
				0057 1184             45     ACALL ADC_Power_On ;开ADC 电源, 第一次使用时要打开内部模拟电源
				                      46     ;开ADC 电源, 可适当加延时,1mS 以内就足够了
				0059 1190             47     ACALL Set_P12_Open_Drain ;设置 P1.2 为开漏
				005B 11A6             48     ACALL Set_ADC_Channel_2 ;设置 P1.2 作为A/D 转换通道
				                      49     ;ACALL Set_P10_Normal_IO ;设置 P1.0为普通IO
				                      50     
				005D                  51     loop:
				                      52     
				                      53     
				                      54            ; JB P1.0,$;判断K1是否按下,如果没有按下就等待
				                      55            ; ACALL Delay;延时10毫秒消触点抖动
				                      56            ; JB P1.0,WRIT;去除干扰信号
				                      57            ; JNB P1.0,$;等待按键松开
				005D                  58     WRIT:       
				A51 MACRO ASSEMBLER  AD_TO_PC                                                             06/04/2007 22:24:01 PAGE     2
				
				005D 11B7             59             ACALL Get_AD_Result ;测量电压并且取A/D 转换结果
				005F 11AE             60             ACALL Send_AD_Result ;发送转换结果到 PC 机
				0061 11CF             61             ACALL Delay
				0063 11CF             62             ACALL Delay
				0065 11CF             63             ACALL Delay
				                      64     ;MOV A, ADC_Channel_2_Result ;用 P1 口显示A/D 转换结果
				                      65     ;CPL A
				                      66     ;MOV P1, A
				                      67     ;Wait_Loop:
				0067 80F4             68     SJMP  Loop ;停机
				                      69     ;-------------------------------------------------------------
				                      70     ;-------------------------------------------------------------
				                      71     ;-------------------------------------------------------------
				                      72     ;-------------------------------------------------------------
				0069                  73     Initiate_RS232: ;串口初始化
				0069 C2AC             74     CLR ES ;禁止串口中断
				006B 758920           75     MOV TMOD, #20H ;设置 T1 为波特率发生器
				006E 759850           76     MOV SCON, #50H ;0101,0000 8 位数据位, 无奇偶校验
				0071 758DFD           77     MOV TH1, #0FdH ;11.0592MHz 晶振, 波特率 = 9600
				0074 758BFD           78     MOV TL1, #0FdH
				0077 D28E             79     SETB TR1 ;启动 T1
				0079 22               80     RET
				                      81     ;--------------------------------------------------------------
				007A                  82     Send_Byte:
				007A C299             83     CLR TI
				007C F599             84     MOV SBUF, A
				007E                  85     Send_Byte_Wait_Finish:
				007E 3099FD           86     JNB TI, Send_Byte_Wait_Finish
				0081 C299             87     CLR TI
				0083 22               88     RET
				                      89     ;--------------------------------------------------------------
				0084                  90     ADC_Power_On:
				0084 C0E0             91     PUSH ACC
				0086 43C580           92     ORL ADC_CONTR, #80H ;开A/D 转换电源
				0089 7420             93     MOV A, #20H
				008B 11CF             94     ACALL Delay ;开A/D 转换电源后要加延时,1mS 以内就足够了
				008D D0E0             95     POP ACC
				008F 22               96     RET
				                      97     ;-------------------------------------------------------------
				                      98     ;设置P1.2,设置A/D 通道所在的I/O 为开漏模式
				0090                  99     Set_P12_Open_Drain:
				0090 C0E0            100     PUSH ACC
				0092 7404            101     MOV A, #00000100B
				0094 4291            102     ORL P1M0, A
				0096 4292            103     ORL P1M1, A
				0098 D0E0            104     POP ACC
				009A 22              105     RET
				                     106     ;-------------------------------------------------------------
				                     107     ;设置 P1.2 为普通IO
				009B                 108     Set_P12_Normal_IO:
				009B C0E0            109     PUSH ACC
				009D 74FB            110     MOV A, #11111011B
				009F 5291            111     ANL P1M0, A
				00A1 5292            112     ANL P1M1, A
				00A3 D0E0            113     POP ACC
				00A5 22              114     RET
				                     115     ;-------------------------------------------------------------
				00A6                 116     Set_ADC_Channel_2:
				00A6 75C5E2          117     MOV ADC_CONTR, #ADC_Power_On_Speed_Channel_2
				                     118     ;选择P1.2 作为A/D 转换通道
				00A9 7405            119     MOV A, #05H ;更换 A/D 转换通道后要适当延时, 使输入电压稳定
				                     120     ;以后如果不更换 A/D 转换通道的话, 不需要加延时
				00AB 11CF            121     ACALL Delay ;切换 A/D 转换通道,加延时20uS~200uS 就可以了,与输入电压源的内阻有关
				                     122     ;如果输入电压信号源的内阻在10K 以下,可不加延时
				00AD 22              123     RET
				                     124     ;-------------------------------------------------------------
				A51 MACRO ASSEMBLER  AD_TO_PC                                                             06/04/2007 22:24:01 PAGE     3
				
				00AE                 125     Send_AD_Result:
				00AE C0E0            126     PUSH ACC
				00B0 E532            127     MOV A, ADC_Channel_2_Result ;取 AD 转换结果
				00B2 117A            128     ACALL Send_Byte ;发送转换结果到 PC 机
				00B4 D0E0            129     POP ACC
				00B6 22              130     RET
				                     131     ;----------------------------------------------------------
				00B7                 132     Get_AD_Result:
				00B7 C0E0            133     PUSH ACC ;入栈保护
				00B9 75C600          134     MOV ADC_DATA, #0
				00BC 43C508          135     ORL ADC_CONTR, #00001000B ;启动 AD 转换
				00BF                 136     Wait_AD_Finishe:
				00BF 7410            137     MOV A, #00010000B ;判断 AD 转换是否完成
				00C1 55C5            138     ANL A, ADC_CONTR
				00C3 60FA            139     JZ Wait_AD_Finishe ;AD 转换尚未完成, 继续等待
				00C5 53C5E7          140     ANL ADC_CONTR, #11100111B ;清0 ADC_FLAG, ADC_START 位, 停止A/D 转换
				00C8 E5C6            141     MOV A, ADC_DATA
				00CA F532            142     MOV ADC_Channel_2_Result, A ;保存 AD 转换结果
				00CC D0E0            143     POP ACC
				00CE 22              144     RET
				                     145     ;---------------------------------------------------------------
				00CF                 146     Delay:
				00CF C002            147     PUSH 02 ;将寄存器组0 的 R2 入栈
				00D1 C003            148     PUSH 03 ;将寄存器组0 的 R3 入栈
				00D3 C004            149     PUSH 04 ;将寄存器组0 的 R4 入栈
				00D5 FC              150     MOV R4, A
				00D6                 151     Delay_Loop0:
				00D6 7BC8            152     MOV R3, #200 ;2 CLOCK ---------------------+
				00D8                 153     Delay_Loop1: ; |
				00D8 7AF9            154     MOV R2, #249 ;2 CLOCK ------+ |
				00DA                 155     Delay_Loop: ; | 1002 CLOCK |200406 CLOCK
				00DA DAFE            156     DJNZ R2, Delay_Loop ;4 CLOCK | |
				00DC DBFA            157     DJNZ R3, Delay_Loop1 ;4 CLOCK ------+ |
				00DE DCF6            158     DJNZ R4, Delay_Loop0 ;4 CLOCK ---------------------+
				00E0 D004            159     POP 04
				00E2 D003            160     POP 03
				00E4 D002            161     POP 02
				00E6 22              162     RET
				                     163     ;----------------------------------------------------------------
				                     164     END
				A51 MACRO ASSEMBLER  AD_TO_PC                                                             06/04/2007 22:24:01 PAGE     4
				
				SYMBOL TABLE LISTING
				------ ----- -------
				
				
				N A M E                       T Y P E  V A L U E   ATTRIBUTES
				
				ACC. . . . . . . . . . . . .  D ADDR   00E0H   A   
				ADC_CHANNEL_0_RESULT . . . .  N NUMB   0030H   A   
				ADC_CHANNEL_1_RESULT . . . .  N NUMB   0031H   A   
				ADC_CHANNEL_2_RESULT . . . .  N NUMB   0032H   A   
				ADC_CHANNEL_3_RESULT . . . .  N NUMB   0033H   A   
				ADC_CHANNEL_4_RESULT . . . .  N NUMB   0034H   A   
				ADC_CHANNEL_5_RESULT . . . .  N NUMB   0035H   A   
				ADC_CHANNEL_6_RESULT . . . .  N NUMB   0036H   A   
				ADC_CHANNEL_7_RESULT . . . .  N NUMB   0037H   A   
				ADC_CONTR. . . . . . . . . .  N NUMB   00C5H   A   
				ADC_DATA . . . . . . . . . .  N NUMB   00C6H   A   
				ADC_POWER_ON . . . . . . . .  C ADDR   0084H   A   
				ADC_POWER_ON_SPEED_CHANNEL_0  N NUMB   00E0H   A   
				ADC_POWER_ON_SPEED_CHANNEL_1  N NUMB   00E1H   A   
				ADC_POWER_ON_SPEED_CHANNEL_2  N NUMB   00E2H   A   
				ADC_POWER_ON_SPEED_CHANNEL_3  N NUMB   00E3H   A   
				ADC_POWER_ON_SPEED_CHANNEL_4  N NUMB   00E4H   A   
				ADC_POWER_ON_SPEED_CHANNEL_5  N NUMB   00E5H   A   
				ADC_POWER_ON_SPEED_CHANNEL_6  N NUMB   00E6H   A   
				ADC_POWER_ON_SPEED_CHANNEL_7  N NUMB   00E7H   A   
				DELAY. . . . . . . . . . . .  C ADDR   00CFH   A   
				DELAY_LOOP . . . . . . . . .  C ADDR   00DAH   A   
				DELAY_LOOP0. . . . . . . . .  C ADDR   00D6H   A   
				DELAY_LOOP1. . . . . . . . .  C ADDR   00D8H   A   
				ES . . . . . . . . . . . . .  B ADDR   00A8H.4 A   
				GET_AD_RESULT. . . . . . . .  C ADDR   00B7H   A   
				INITIATE_RS232 . . . . . . .  C ADDR   0069H   A   
				LED_MCU_START. . . . . . . .  B ADDR   0090H.7 A   
				LOOP . . . . . . . . . . . .  C ADDR   005DH   A   
				MAIN . . . . . . . . . . . .  C ADDR   0050H   A   
				P1 . . . . . . . . . . . . .  D ADDR   0090H   A   
				P1M0 . . . . . . . . . . . .  N NUMB   0091H   A   
				P1M1 . . . . . . . . . . . .  N NUMB   0092H   A   
				SBUF . . . . . . . . . . . .  D ADDR   0099H   A   
				SCON . . . . . . . . . . . .  D ADDR   0098H   A   
				SEND_AD_RESULT . . . . . . .  C ADDR   00AEH   A   
				SEND_BYTE. . . . . . . . . .  C ADDR   007AH   A   
				SEND_BYTE_WAIT_FINISH. . . .  C ADDR   007EH   A   
				SET_ADC_CHANNEL_2. . . . . .  C ADDR   00A6H   A   
				SET_P12_NORMAL_IO. . . . . .  C ADDR   009BH   A   
				SET_P12_OPEN_DRAIN . . . . .  C ADDR   0090H   A   
				SP . . . . . . . . . . . . .  D ADDR   0081H   A   
				TH1. . . . . . . . . . . . .  D ADDR   008DH   A   
				TI . . . . . . . . . . . . .  B ADDR   0098H.1 A   
				TL1. . . . . . . . . . . . .  D ADDR   008BH   A   
				TMOD . . . . . . . . . . . .  D ADDR   0089H   A   
				TR1. . . . . . . . . . . . .  B ADDR   0088H.6 A   
				WAIT_AD_FINISHE. . . . . . .  C ADDR   00BFH   A   
				WRIT . . . . . . . . . . . .  C ADDR   005DH   A   
				
				
				REGISTER BANK(S) USED: 0 
				
								ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)
							

相关资源