📄 uart3.lst
字号:
UART3 PAGE 1
1 ;====================================================================
2 ;
3 ; Author : ADI - Apps
4 ;
5 ; Date : Febuary 2001
6 ;
7 ; File : UART3.asm
8 ;
9 ; Hardware : ADuC814
10 ;
11 ; Description : This Program transmits a number (starting at 0)
12 ; down the UART every second. Pressing the INT0
13 ; button increases the number being outputted.
14 ; Pressing a key on the keyboard causes the ASCII
15 ; char to be transmitted. Eg Pressing the 'A' button
16 ; causes the number '41h' to appear on the
17 ; hyperterminal program.
18 ;
19 ;====================================================================
20 ;
21 $MOD814 ;Use 8052 predefined Symbols
22
00B3 23 LED EQU P3.3
24
25 ;____________________________________________________________________
26 ; DEFINE VARIABLES IN INTERNAL RAM
---- 27 DSEG
0060 28 ORG 0060h
0060 29 INPUT: DS 1 ; data byte received by SPI
0061 30 OUTPUT: DS 1 ; data byte to send by SPI
31
32 ;____________________________________________________________________
33 ; BEGINNING OF CODE
---- 34 CSEG
0000 35 ORG 0000H
36
0000 020060 37 JMP MAIN
38 ;____________________________________________________________________
39 ; INTERRUPT VECTOR SPACE
0003 40 ORG 0003h ; (.................... INT0 ISR)
41
0003 0561 42 INC OUTPUT
0005 32 43 RETI
44 ;____________________________________________________________________
45
0060 46 ORG 0060H ; Start code at address above interrupts
47
48
0060 49 MAIN: ; Main program
50
0060 75CBFF 51 MOV RCAP2H,#0FFh ; config uart for 9600
0063 75CAF9 52 MOV RCAP2L,#-7 ;
0066 75CDFF 53 MOV TH2,#0FFh
0069 75CCF9 54 MOV TL2,#-7
006C 759852 55 MOV SCON,#52h
006F 75C834 56 MOV T2CON,#34h
57
58
UART3 PAGE 2
59 ; CONFIGURE INTERRUPT 0...
60
0072 D288 61 SETB IT0 ; INT0 edge triggered
0074 D2A8 62 SETB EX0 ; enable INT0 interrupt
63
64 ; ENABLE INTERRUPTS & ENTER MAIN LOOP...
65
0076 756100 66 MOV OUTPUT,#0 ; set initial value for output byte
0079 D2AF 67 SETB EA ; enable inturrupts
68
007B 69 TXDATA:
007B B2B3 70 CPL LED ; CPL LED with each transmission
71
007D E561 72 MOV A, OUTPUT ; output value
007F 1200B7 73 CALL SENDVAL
0082 9000E3 74 MOV DPTR,#SEPERATOR ; send line-feed & crdg-return..
0085 120097 75 CALL SENDSTRING ; ..out the UART
76
0088 740A 77 MOV A, #0Ah
008A 1200D7 78 CALL DELAY ; delay for 1s
79
008D 3098EB 80 JNB RI, TXDATA ; check if data is received from keyboard
81
0090 859961 82 MOV OUTPUT, SBUF
0093 C298 83 CLR RI
0095 80E4 84 JMP TXDATA
85
86
87 ;____________________________________________________________________
88 ; SENDSTRING
89
0097 90 SENDSTRING: ; sends ASCII string to UART starting at location
91 ; DPTR and ending with a null (0) value
92
0097 C0E0 93 PUSH ACC
0099 C0F0 94 PUSH B
009B E4 95 CLR A
009C F5F0 96 MOV B,A
009E E5F0 97 IO0010: MOV A,B
00A0 05F0 98 INC B
00A2 93 99 MOVC A,@A+DPTR
00A3 6005 100 JZ IO0020
00A5 1200AF 101 CALL SENDCHAR
00A8 80F4 102 JMP IO0010
00AA D0F0 103 IO0020: POP B
00AC D0E0 104 POP ACC
105
00AE 22 106 RET
107
108 ;____________________________________________________________________
109 ; SENDCHAR
110
00AF 111 SENDCHAR: ; sends ASCII value contained in A to UART
112
00AF 3099FD 113 JNB TI,$ ; wait til present char gone
00B2 C299 114 CLR TI ; must clear TI
00B4 F599 115 MOV SBUF,A
116
UART3 PAGE 3
00B6 22 117 RET
118
119 ;____________________________________________________________________
120 ; SENDVAL
121
00B7 122 SENDVAL: ; converts the hex value of A into two ASCII chars,
123 ; and then spits these two characters up the UART.
124 ; does not change the value of A.
125
00B7 C0E0 126 PUSH ACC
00B9 C4 127 SWAP A
00BA 1200CB 128 CALL HEX2ASCII
00BD 11AF 129 CALL SENDCHAR ; send high nibble
00BF D0E0 130 POP ACC
00C1 C0E0 131 PUSH ACC
00C3 1200CB 132 CALL HEX2ASCII
00C6 11AF 133 CALL SENDCHAR ; send low nibble
00C8 D0E0 134 POP ACC
135
00CA 22 136 RET
137
138
139 ;____________________________________________________________________
140 ; HEX2ASCII
141
00CB 142 HEX2ASCII: ; converts A into the hex character representing the
143 ; value of A's least significant nibble
144
00CB 540F 145 ANL A,#00Fh
00CD B40A00 146 CJNE A,#00Ah,$+3
00D0 4002 147 JC IO0030
00D2 2407 148 ADD A,#007h
00D4 2430 149 IO0030: ADD A,#'0'
150
00D6 22 151 RET
152
153 ;____________________________________________________________________
154 ; DELAY
155 ; 100ms DELAY
00D7 156 DELAY: ; Delays by 100ms * A
157 ; 100mSec based on 2.097152MHZ
158 ; Core Clock
159 ; i.e. default ADuC814 Clock
160
00D7 FA 161 MOV R2,A ; Acc holds delay variable
00D8 7B22 162 DLY0: MOV R3,#022h ; Set up delay loop0
00DA 7CFF 163 DLY1: MOV R4,#0FFh ; Set up delay loop1
00DC DCFE 164 DJNZ R4,$ ; Dec R4 & Jump here until R4 is 0
00DE DBFA 165 DJNZ R3,DLY1 ; Dec R3 & Jump DLY1 until R3 is 0
00E0 DAF6 166 DJNZ R2,DLY0 ; Dec R2 & Jump DLY0 until R2 is 0
00E2 22 167 RET ; Return from subroutine
168
169 ;____________________________________________________________________
170
00E3 0A0D00 171 SEPERATOR: DB 10,13,0
172
173
174 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
UART3 PAGE 4
ACC. . . . . . . . . . . . . . . D ADDR 00E0H PREDEFINED
B. . . . . . . . . . . . . . . . D ADDR 00F0H PREDEFINED
DELAY. . . . . . . . . . . . . . C ADDR 00D7H
DLY0 . . . . . . . . . . . . . . C ADDR 00D8H
DLY1 . . . . . . . . . . . . . . C ADDR 00DAH
EA . . . . . . . . . . . . . . . B ADDR 00AFH PREDEFINED
EX0. . . . . . . . . . . . . . . B ADDR 00A8H PREDEFINED
HEX2ASCII. . . . . . . . . . . . C ADDR 00CBH
INPUT. . . . . . . . . . . . . . D ADDR 0060H NOT USED
IO0010 . . . . . . . . . . . . . C ADDR 009EH
IO0020 . . . . . . . . . . . . . C ADDR 00AAH
IO0030 . . . . . . . . . . . . . C ADDR 00D4H
IT0. . . . . . . . . . . . . . . B ADDR 0088H PREDEFINED
LED. . . . . . . . . . . . . . . NUMB 00B3H
MAIN . . . . . . . . . . . . . . C ADDR 0060H
OUTPUT . . . . . . . . . . . . . D ADDR 0061H
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
RCAP2H . . . . . . . . . . . . . D ADDR 00CBH PREDEFINED
RCAP2L . . . . . . . . . . . . . D ADDR 00CAH PREDEFINED
RI . . . . . . . . . . . . . . . B ADDR 0098H PREDEFINED
SBUF . . . . . . . . . . . . . . D ADDR 0099H PREDEFINED
SCON . . . . . . . . . . . . . . D ADDR 0098H PREDEFINED
SENDCHAR . . . . . . . . . . . . C ADDR 00AFH
SENDSTRING . . . . . . . . . . . C ADDR 0097H
SENDVAL. . . . . . . . . . . . . C ADDR 00B7H
SEPERATOR. . . . . . . . . . . . C ADDR 00E3H
T2CON. . . . . . . . . . . . . . D ADDR 00C8H PREDEFINED
TH2. . . . . . . . . . . . . . . D ADDR 00CDH PREDEFINED
TI . . . . . . . . . . . . . . . B ADDR 0099H PREDEFINED
TL2. . . . . . . . . . . . . . . D ADDR 00CCH PREDEFINED
TXDATA . . . . . . . . . . . . . C ADDR 007BH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -