📄 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 + -