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

📄 dmatimer.lst

📁 aduc842原程序代码 ad公司芯片应用笔记
💻 LST
字号:
DMATIMER                                                                                                      PAGE 1

                       1    ;********************************************************************
                       2    ;
                       3    ; Author        : ADI - apps            www.analog.com/MicroConverter
                       4    ;
                       5    ; Date          : October 2003
                       6    ;
                       7    ; File          : DMAtimer.asm
                       8    ;
                       9    ; Description   : performs Timer2 triggered DMA conversions on a
                      10    ;                 single ADC channel at 116KSPS.
                      11    ;                 Debugger or emulator must be used to view
                      12    ;                 results.
                      13    ;
                      14    ;********************************************************************
                      15    
                      16    $MOD842                         ; use 8052&ADuC842 predefined symbols
                      17    
  0040                18    DMACOUNT   EQU  64              ; number of AD readings to take
  0010                19    DMAINIT    EQU  10h             ; top nibble of DMAINIT = ADC channel
                      20    
                      21    ;____________________________________________________________________
                      22                                       ; DEFINE VARIABLES IN INTERNAL RAM
----                  23    DSEG
0060                  24    ORG 0060h
0060                  25    DMASTOPH:  DS   1               ; DMA stop address hi byte
0061                  26    DMASTOPL:  DS   1               ; DMA stop address lo byte
                      27    
                      28    ;____________________________________________________________________
                      29                                         ; DEFINE SEGMENT OF EXTERNAL RAM
----                  30    XSEG
0000                  31    ORG 000000h
0000                  32    DMASTART:  DS   DMACOUNT*2      ; location for DMA results
0080                  33    DMASTOP:   DS   4               ; location for DMA stop sequence
                      34    
                      35    ;____________________________________________________________________
                      36                                                      ; BEGINNING OF CODE
----                  37    CSEG
0000                  38    ORG 0000h
0000 02004B           39            JMP     MAIN            ; jump to main program
                      40    
                      41    ;____________________________________________________________________
                      42                                                 ; INTERRUPT VECTOR SPACE
0033                  43    ORG 0033h ; (ADC ISR)
0033 C2CA             44            CLR     TR2             ; stop Timer2
0035 C3               45            CLR     C               ; clear C to indicate DMA done
0036 32               46            RETI
                      47    
                      48    ;====================================================================
                      49                                                           ; MAIN PROGRAM
004B                  50    ORG 004Bh
004B 75D703           51    MAIN:   MOV     PLLCON,#03H
                      52            
                      53    ; PRECONFIGURE external RAM for DMA capture on a single channel...
004E 75EF00           54            MOV     ADCCON1,#00h
0051 900080           55            MOV     DPTR,#DMASTOP   ; store DMASTOP 16bit value..
0054 858261           56            MOV     DMASTOPL,DPL    ; ..as a high byte & low byte
0057 858360           57            MOV     DMASTOPH,DPH    ; (for use in GETSTOPFLAG subr)
005A 900000           58            MOV     DPTR,#DMASTART  ; set DPTR to DMASTART address
DMATIMER                                                                                                      PAGE 2

005D 7410             59    SETUP:  MOV     A,#DMAINIT      ; set up x-mem with init value
005F F0               60            MOVX    @DPTR,A
0060 A3               61            INC     DPTR
0061 E4               62            CLR     A               ; clear second byte
0062 F0               63            MOVX    @DPTR,A
0063 A3               64            INC     DPTR
0064 12009C           65            CALL    GETSTOPFLAG     ; C cleared if DPTR>=DMAEND
0067 40F4             66            JC      SETUP
                      67    
0069 7410             68            MOV     A,#DMAINIT      ; "dummy" DMA location..
006B F0               69            MOVX    @DPTR,A         ; ..to preceed stop command
006C A3               70            INC     DPTR
006D E4               71            CLR     A
006E F0               72            MOVX    @DPTR,A
006F A3               73            INC     DPTR
                      74    
0070 74F0             75            MOV     A,#0F0h         ; DMA stop command
0072 F0               76            MOVX    @DPTR,A
                      77    
                      78    ; CONFIGURE ADC and Timer2 for DMA conversion...
                      79    
0073 75D200           80            MOV     DMAL,#0         ; 
0076 75D300           81            MOV     DMAH,#0         ; 
0079 75D400           82            MOV     DMAP,#0         ; 
                      83            
007C 75CAF6           84            MOV     RCAP2L,#0F6h    ; sample period = 2 * T2 reload prd
007F 75CBFF           85            MOV     RCAP2H,#0FFh    ;   = 2*(10000h-FFF6h)*0.476us
0082 75CCF6           86            MOV     TL2,#0F6h       ;   = 2*9*0.476us
0085 75CDFF           87            MOV     TH2,#0FFh       ;   = 8.5us
                      88            
0088 00               89            NOP
0089 00               90            NOP
                      91    
                      92           
008A 75D840           93            MOV     ADCCON2,#040h   ; DMA mode
008D 75EF9E           94            MOV     ADCCON1,#09Eh   ; Timer2 mode
                      95    
0090 D2AF             96            SETB    EA              ; enable interrupts
0092 D2AE             97            SETB    EADC            ; enable ADC interrupt
                      98    
                      99    ; LAUNCH DMA conversion...  when finished, ADC interrupt will clear C
                     100    
0094 D2CA            101            SETB    TR2             ; run Timer2 = start DMA
0096 D3              102            SETB    C
0097 40FE            103            JC      $               ; wait for DMA to finish
                     104    
0099 00              105            NOP ;.................................... SET BREAKPOINT HERE
                     106    
                     107    ; REPEAT entire program...
                     108    
009A 80AF            109            JMP     MAIN
                     110    
                     111    ;____________________________________________________________________
                     112                                                             ; SUBROUTINE
                     113    
009C                 114    GETSTOPFLAG:                    ; clears C if DPTR>=DMASTOP
009C D3              115            SETB    C
009D E583            116            MOV     A,DPH
DMATIMER                                                                                                      PAGE 3

009F B56005          117            CJNE    A,DMASTOPH,RET1 ; C cleared if DPH>=DMASTOPH
00A2 E582            118            MOV     A,DPL
00A4 B56100          119            CJNE    A,DMASTOPL,RET1 ; C cleared if DPL>=DMASTOPL
00A7 22              120      RET1: RET
                     121    
                     122    ;____________________________________________________________________
                     123    
                     124    END

VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
DMATIMER                                                                                                      PAGE 4

ADCCON1. . . . . . . . . . . . .  D ADDR  00EFH  PREDEFINED  
ADCCON2. . . . . . . . . . . . .  D ADDR  00D8H  PREDEFINED  
DMACOUNT . . . . . . . . . . . .    NUMB  0040H  
DMAH . . . . . . . . . . . . . .  D ADDR  00D3H  PREDEFINED  
DMAINIT. . . . . . . . . . . . .    NUMB  0010H  
DMAL . . . . . . . . . . . . . .  D ADDR  00D2H  PREDEFINED  
DMAP . . . . . . . . . . . . . .  D ADDR  00D4H  PREDEFINED  
DMASTART . . . . . . . . . . . .  X ADDR  0000H  
DMASTOP. . . . . . . . . . . . .  X ADDR  0080H  
DMASTOPH . . . . . . . . . . . .  D ADDR  0060H  
DMASTOPL . . . . . . . . . . . .  D ADDR  0061H  
DPH. . . . . . . . . . . . . . .  D ADDR  0083H  PREDEFINED  
DPL. . . . . . . . . . . . . . .  D ADDR  0082H  PREDEFINED  
EA . . . . . . . . . . . . . . .  B ADDR  00AFH  PREDEFINED  
EADC . . . . . . . . . . . . . .  B ADDR  00AEH  PREDEFINED  
GETSTOPFLAG. . . . . . . . . . .  C ADDR  009CH  
MAIN . . . . . . . . . . . . . .  C ADDR  004BH  
PLLCON . . . . . . . . . . . . .  D ADDR  00D7H  PREDEFINED  
RCAP2H . . . . . . . . . . . . .  D ADDR  00CBH  PREDEFINED  
RCAP2L . . . . . . . . . . . . .  D ADDR  00CAH  PREDEFINED  
RET1 . . . . . . . . . . . . . .  C ADDR  00A7H  
SETUP. . . . . . . . . . . . . .  C ADDR  005DH  
TH2. . . . . . . . . . . . . . .  D ADDR  00CDH  PREDEFINED  
TL2. . . . . . . . . . . . . . .  D ADDR  00CCH  PREDEFINED  
TR2. . . . . . . . . . . . . . .  B ADDR  00CAH  PREDEFINED  

⌨️ 快捷键说明

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