?? w77e58demo.asm
字號:
;****************************************************
;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 ;測試 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位設置為”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 ;把定時器T2設置為波特率產生器
SETB TCLK
SETB TR2
SETB REN
SETB ES
;注意事項:串口0可以用定時器1或定時器2作波特率發生器,串口1只能用T1作波特率發生器。
;當2個串口波特率相同時,可以使用一個定時器T1作波特率發生器。
;串口1
MOV TMOD,#00100000B ;定時器T1設置為方式2作波特率發生器
MOV TH1,#0E8H ;1200波特定時初值:11.0592M
MOV TL1,#0E8H
SETB TR1 ;定時器T1開始運行。
MOV SCON1,#01000000B ;串口1工作于方式1
SETB ES1
SETB REN_1
SETB EA
MAIN:
CLR ES1
MOV A,#55H
MOV SBUF1,A ;從串口發送回PC
JNB TI_1,$
CLR TI_1
SETB ES1
AJMP MAIN ;等待串口中斷;
;********************************************************************************
UART0:
CLR RI
MOV A,SBUF0 ;接收串口數據
MOV DPTR,#UART0_DATA
MOVX @DPTR,A ;用外部1K SRAM
CLR A
NOP
CLR ES
MOVX A,@DPTR
MOV SBUF0,A ;從串口發送回PC
JNB TI,$
CLR TI
SETB ES
RETI
UART1:
CLR RI_1
MOV A,SBUF1 ;接收串口數據
MOV DPTR,#UART1_DATA
MOVX @DPTR,A ;用外部1K SRAM
CLR A
NOP
MOVX A,@DPTR
NOP
CLR ES1
MOV SBUF1,A ;從串口發送回PC
JNB TI_1,$
CLR TI_1
SETB ES1
RETI
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -