?? w77e58demo.asm.bak
字號(hào):
;****************************************************
;W77E58雙串口演示程序
;CHENWEN 2006-6-12
;****************************************************
SCON0 EQU 98H
SCON1 EQU 0C0H
RCAP2H EQU 0CBH
RCAP2L EQU 0CAH
SBUF0 EQU 99H
SBUF1 EQU 0C1H
TL2 EQU 0CCH
TH2 EQU 0CDH
T2CON EQU 0C8H
;T2MOD EQU 0C9H
RCLK BIT T2CON.5
TCLK BIT T2CON.4
TR2 BIT T2CON.2
REN_1 BIT SCON1.4
TI_1 BIT SCON1.1
RI_1 BIT SCON1.0
;ES BIT IE.4
ES1 BIT IE.6
PMR EQU 0C4H
UART0_DATA EQU 0100H ;測(cè)試 1K SRAM
UART1_DATA EQU 0200H
ORG 0000H
LJMP START
ORG 0023H
AJMP UART0
ORG 003BH
AJMP UART1
ORG 100H
START:
MOV SP,#5FH ;初始化堆棧
ORL PMR, #00000001B ; DME0位設(shè)置為”1”,允許使用1K SRAM
;串口0
MOV SCON0,#01000000B ;串口0工作于方式1
MOV RCAP2H,#0FFH
MOV RCAP2L,#0B8H ;9600波特, 22.1184M;
MOV TH2,#0FFH
MOV TL2,#0B8H ;9600波特, 22.1184M;
MOV PCON,#00H
SETB RCLK ;把定時(shí)器T2設(shè)置為波特率產(chǎn)生器
SETB TCLK
SETB TR2
SETB REN
SETB ES
;注意事項(xiàng):串口0可以用定時(shí)器1或定時(shí)器2作波特率發(fā)生器,串口1只能用T1作波特率發(fā)生器。
;當(dāng)2個(gè)串口波特率相同時(shí),可以使用一個(gè)定時(shí)器T1作波特率發(fā)生器。
;串口1
MOV TMOD,#00100000B ;定時(shí)器T1設(shè)置為方式2作波特率發(fā)生器
MOV TH1,#0E8H ;1200波特定時(shí)初值:11.0592M
MOV TL1,#0E8H
SETB TR1 ;定時(shí)器T1開始運(yùn)行。
MOV SCON1,#01000000B ;串口1工作于方式1
SETB ES1
SETB REN_1
SETB EA
MAIN:
MOV A,#55H
MOV SBUF0,A
AJMP MAIN ;等待串口中斷;
;********************************************************************************
UART0:
CLR RI
MOV A,SBUF0 ;接收串口數(shù)據(jù)
MOV DPTR,#UART0_DATA
MOVX @DPTR,A ;用外部1K SRAM
CLR A
NOP
CLR ES
MOVX A,@DPTR
MOV SBUF0,A ;從串口發(fā)送回PC
JNB TI,$
CLR TI
SETB ES
RETI
UART1:
CLR RI_1
MOV A,SBUF1 ;接收串口數(shù)據(jù)
MOV DPTR,#UART1_DATA
MOVX @DPTR,A ;用外部1K SRAM
CLR A
NOP
MOVX A,@DPTR
NOP
CLR ES1
MOV SBUF1,A ;從串口發(fā)送回PC
JNB TI_1,$
CLR TI_1
SETB ES1
RETI
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -