?? main.asm
字號(hào):
;*************************************************************************
; main.c
; 串行口通信方式1例程
;*************************************************************************
;*************************************************************************
;定義全局變量
;*************************************************************************
SIZE EQU 40 ;定義接收緩沖區(qū)大小
UartBuf DATA 0x30 ;定時(shí)接收緩沖區(qū)
BufP1 DATA 0x30+SIZE ;定義接收緩沖區(qū)下標(biāo)變量
BufP2 DATA 0x30+SIZE+1
_TI_ BIT 0x20.0 ;定義發(fā)送輔助標(biāo)志
;*************************************************************************
;復(fù)位入口
;*************************************************************************
ORG 0x0000
LJMP PreMain
;*************************************************************************
;串行口中斷入口
;*************************************************************************
ORG 0x0023
LJMP UartINTSVC
;*************************************************************************
;進(jìn)入主程序之前的初始化
;*************************************************************************
PreMain:
MOV SP, #(0x2F+SIZE+2) ;設(shè)置堆棧起始位置
LJMP main
;*************************************************************************
;函數(shù):void UartInit()
;功能:串行口初始化
;*************************************************************************
UartInit:
PUSH 0x02
CLR EA
CLR A
MOV BufP1, A
MOV BufP2, A
MOV R2, A
MOV R0, #UartBuf
UartInit_for:
MOV @R0, A
INC R0
INC R2
CJNE R2, #SIZE, UartInit_for
CLR TR1
SETB RXD
SETB TXD
SETB _TI_
MOV SCON, #0x50 ;串行口方式1(8位Uart),允許接收
ORL PCON, #0x80 ;波特率加倍
ANL TMOD, #0x0F
ORL TMOD, #0x20 ;設(shè)置T1為8位自動(dòng)重裝定時(shí)器
MOV A, #0xFA
MOV TH1, A
MOV TL1, A ;設(shè)置波特率為9600
SETB TR1 ;啟動(dòng)定時(shí)器T1
SETB ES ;使能串行口中斷
SETB EA
POP 0x02
RET
;*************************************************************************
;函數(shù):void UartINTSVC() interrupt 4
;功能:串行口中斷服務(wù)函數(shù)
;*************************************************************************
UartINTSVC:
;保護(hù)寄存器
PUSH ACC
PUSH PSW
PUSH 0x00
PUSH 0x02
;處理接收中斷
JNB RI, UartINTSVC_TI
MOV R2, SBUF
CLR RI
MOV A, #UartBuf
ADD A, BufP1
INC BufP1
MOV R0, A
MOV A, R2
MOV @R0, A
MOV A, BufP1
CLR C
SUBB A, #SIZE
JC UartINTSVC_TI
MOV BufP1, #0
;處理發(fā)送中斷
UartINTSVC_TI:
JNB TI, UartINTSVC_end
CLR TI
SETB _TI_
;恢復(fù)寄存器
UartINTSVC_end:
POP 0x02
POP 0x00
POP PSW
POP ACC
;中斷返回
RETI
;*************************************************************************
;函數(shù):void UartSendChar(unsigned char c)
;功能:通過(guò)串行口發(fā)送單個(gè)字節(jié)
;參數(shù):
; c:被發(fā)送的字節(jié)數(shù)據(jù),取值0x00~0xFF
;*************************************************************************
;c = R7
UartSendChar:
JNB _TI_, $
CLR _TI_
MOV SBUF, R7
RET
;*************************************************************************
;函數(shù):void main()
;功能:主函數(shù)
;*************************************************************************
main:
; UartInit();
LCALL UartInit
; for (;;)
main_for:
; {
; if ( BufP2 != BufP1 )
MOV A, BufP2
XRL A, BufP1
JZ main_endif
; {
; UartSendChar(UartBuf[BufP2++]);
MOV A, #UartBuf
ADD A, BufP2
INC BufP2
MOV R0, A
MOV A, @R0
MOV R7, A
LCALL UartSendChar
; if ( BufP2 >= SIZE )
MOV A, BufP2
CLR C
SUBB A, #SIZE
JC main_endif
; {
; BufP2 = 0;
MOV BufP2, #0
; }
; }
main_endif:
; }
SJMP main_for
;*************************************************************************
;程序結(jié)束
;*************************************************************************
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -