📄 adcsingl.lst
字号:
ADCSINGL PAGE 1
1 ;********************************************************************
2 ;
3 ; Author : ADI - Apps www.analog.com/MicroConverter
4 ;
5 ; Date : March 2001
6 ;
7 ; File : ADCsingl.asm
8 ;
9 ; Hardware : ADuC814
10 ;
11 ; Description : Performs repeated single ADC conversions and moves
12 ; results to UART. Sets the red LED on the eval
13 ; board upon completion of each conversion. A new
14 ; conversion is innitiated every 200ms.
15 ; All rate calculations assume an 2.097152MHz Mclk.
16 ;
17 ;********************************************************************
18
19 $MOD814 ; Use 8052&ADuC814 predefined symbols
20
00B3 21 LED EQU P3.3 ; P3.3 drives red LED on eval board
0000 22 CHAN EQU 0 ; convert this ADC input channel..
23 ; ..chan values can be 0 thru 6
24 ;____________________________________________________________________
25 ; BEGINNING OF CODE
---- 26 CSEG
27
0000 28 ORG 0000h
29
0000 02004B 30 JMP MAIN ; jump to main program
31 ;____________________________________________________________________
32
0033 33 ORG 0033H ; INTERRUPT VECTOR SPACE
0033 D2B3 34 SETB LED
0035 32 35 RETI
36
37
38 ;====================================================================
39 ; MAIN PROGRAM
004B 40 ORG 004Bh
41
004B 42 MAIN:
43
44 ; Set up UART
004B 75CBFF 45 MOV RCAP2H,#0FFh ; config UART for 9600 baud
004E 75CAF9 46 MOV RCAP2L,#-7 ;
0051 75CDFF 47 MOV TH2,#0FFh
0054 75CCF9 48 MOV TL2,#-7
0057 759852 49 MOV SCON,#52h
005A 75C834 50 MOV T2CON,#34h
51 ; PRECONFIGURE...
52
005D 75EF80 53 MOV ADCCON1,#080h ; power up ADC
0060 75D800 54 MOV ADCCON2,#CHAN ; select channel to convert
0063 D2AF 55 SETB EA ; enable interrupts
0065 D2AE 56 SETB EADC ; enable ADC interrupt
57
58 ; PERFORM REPEATED SINGLE CONVERSIONS...
ADCSINGL PAGE 2
59
0067 C2B3 60 AGAIN: CLR LED ; turn the LED off
0069 7401 61 MOV A,#01H ; Delay length
006B 120084 62 CALL DELAY ; delay 100ms
006E D2DC 63 SETB SCONV ; innitiate single ADC conversion
64 ; ADC ISR is called upon completion
0070 30B3FD 65 JNB LED,$
0073 E5DA 66 MOV A,ADCDATAH
0075 1200B0 67 CALL SENDVAL
0078 E5D9 68 MOV A,ADCDATAL
007A 1200B0 69 CALL SENDVAL
70
007D 7401 71 MOV A,#01H ; Delay length
007F 120084 72 CALL DELAY ; delay 100ms
0082 80E3 73 JMP AGAIN ; repeat
74
75 ;____________________________________________________________________
76 ; SUBROUTINE
0084 77 DELAY: ; Delays by 100ms * A
78 ; 100mSec based on 2.097152MHZ
79 ; Core Clock
80 ; i.e. default ADuC814 Clock
81
0084 F9 82 MOV R1,A ; Acc holds delay variable
0085 7A22 83 DLY0: MOV R2,#022h ; Set up delay loop0
0087 7BFF 84 DLY1: MOV R3,#0FFh ; Set up delay loop1
0089 DBFE 85 DJNZ R3,$ ; Dec R3 & Jump here until R3 is 0
008B DAFA 86 DJNZ R2,DLY1 ; Dec R2 & Jump DLY1 until R2 is 0
008D D9F6 87 DJNZ R1,DLY0 ; Dec R1 & Jump DLY0 until R1 is 0
008F 22 88 RET ; Return from subroutine
89
90
91 ;____________________________________________________________________
92
93
=1 94 $INCLUDE(UARTIO.ASM)
=1 95 ;********************************************************************
=1 96 ;
=1 97 ; Author : ADI - Apps www.analog.com/MicroConverter
=1 98 ;
=1 99 ; Date : 12 October 1999
=1 100 ;
=1 101 ; File : UARTIO.hex
=1 102 ;
=1 103 ; Hardware : any 8051 based microcontroller or MicroConverter
=1 104 ;
=1 105 ; Description : standard UART I/O subroutines. total size of this
=1 106 ; code when assembled is 155 bytes. routines for use
=1 107 ; external to this file are:
=1 108 ;
=1 109 ; SENDSTRING - sends a string of characters
=1 110 ; SENDCHAR - sends a single character
=1 111 ; SENDVAL - sends a byte as 2 ASCII characters
=1 112 ; HEX2ASCII - converts from HEX to ASCII
=1 113 ; ASCII2HEX - converts from ASCII to HEX
=1 114 ; GETCHAR - gets a single character
=1 115 ; GETVAL - gets a byte as 2 ASCII characters
=1 116 ;
ADCSINGL PAGE 3
=1 117 ;********************************************************************
=1 118
=1 119 ;____________________________________________________________________
=1 120 ; SENDSTRING
=1 121
0090 =1 122 SENDSTRING: ; sends ASCII string to UART starting at location
=1 123 ; DPTR and ending with a null (0) value
=1 124
0090 C0E0 =1 125 PUSH ACC
0092 C0F0 =1 126 PUSH B
0094 E4 =1 127 CLR A
0095 F5F0 =1 128 MOV B,A
0097 E5F0 =1 129 IO0010: MOV A,B
0099 05F0 =1 130 INC B
009B 93 =1 131 MOVC A,@A+DPTR
009C 6005 =1 132 JZ IO0020
009E 1200A8 =1 133 CALL SENDCHAR
00A1 80F4 =1 134 JMP IO0010
00A3 D0F0 =1 135 IO0020: POP B
00A5 D0E0 =1 136 POP ACC
=1 137
00A7 22 =1 138 RET
=1 139
=1 140 ;____________________________________________________________________
=1 141 ; SENDCHAR
=1 142
00A8 =1 143 SENDCHAR: ; sends ASCII value contained in A to UART
=1 144
00A8 3099FD =1 145 JNB TI,$ ; wait til present char gone
00AB C299 =1 146 CLR TI ; must clear TI
00AD F599 =1 147 MOV SBUF,A
=1 148
00AF 22 =1 149 RET
=1 150
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -