?? uart_ir_pc.asm
字號:
;*******************************************************************
; 文件: UART_IR_PC.ASM
; 開發: WWW.ZLGMCU.COM
; 日期: 2004.03.10
; 功能: 利用LPC900系列單片機的UART和T1實現與PC的紅外通信。
; 本程序中,每按鍵一次,就通過紅外接口連續發送16字節數據。
;********************************************************************
$INCLUDE (REG932.INC)
;變量定義
KEY1 BIT P0.0
FE BIT SCON.7
SEND_BUF DATA 40H ;發送緩沖區
BRGR1_DATA DATA 09H ;波特率設為2400bit/s
BRGR0_DATA DATA 0B4H
TH1_DATA DATA 0D9H ;定時器重裝值
ORG 0000H
AJMP MAIN
;主程序開始
ORG 0100H
MAIN:
MOV SP,#60H
MOV P0M1,#80H ;P0.7設置為開漏,其他為準雙向
MOV P0M2,#80H
MOV P1M1,#01H
MOV P1M2,#01H ;TXD(P1.0)設置為開漏,其他為準雙向
MOV SEND_BUF,#00H
ACALL T1_INIT
ACALL UART_INIT
MAIN_L1:
JB KEY1,$
ACALL SEND_DATA ;發送16字節數據
MOV R7,#02H ;延時0.2S
ACALL DELAY
AJMP MAIN_L1
;***************************************
; 名稱: SEND_DATA
; 功能: 通過UART連續發送16字節數據
; 入口參數:無
; 出口參數:無
; 注意: 此程序采用查詢方式發送。
;***************************************
SEND_DATA:
MOV R7,#10H
CLR TI
SEND_DL1:
MOV SBUF,SEND_BUF
JNB TI,$ ;等待一字節發送完畢
CLR TI
INC SEND_BUF ;發送數據加1
DJNZ R7,SEND_DL1
RET
;****************************************************************************
; 名稱: T1_INIT
; 功能: 定時器1初始化,使T1(P0.7)輸出38KHz,50%占空比的方波,
; 作為紅外線的載波。當使用6MHz晶振時,
; 紅外線載頻=CCLK/(4×(256-定時器重載值)
; 定時器重裝值=256-CCLK/(4*紅外線載頻)=256-6000000/(4*38000)=0D9H
;****************************************************************************
T1_INIT:
MOV TH1,#TH1_DATA ;定時器1重載值
MOV TAMOD,#00H
MOV TMOD,#20H ;定時器1工作于模式2(自動重載)
ORL AUXR1,#20H ;置位ENT1,當T1溢出時觸發P0.7翻轉
SETB TR1 ;啟動定時器
RET
;***************************************
; 名稱: UART_INIT
; 功能: UART初始化,波特率2400bit/s
;***************************************
UART_INIT:
MOV PCON,#00H
MOV SSTAT,#00H ;雙緩沖禁止,中斷禁止,采用查詢方式發送和接收
MOV SCON,#40H ;串口模式1,接收禁止
ORL PCON,#40H ;SMOD0=1,SCON的位7作為FE
MOV BRGCON,#00H
MOV BRGR1,#BRGR1_DATA
MOV BRGR0,#BRGR0_DATA
MOV BRGCON,#03H ;啟動UART的波特率發生器
RET
;*****************************************************
; 名稱: DELAY
; 功能: 延時(R7*0.1)秒(振蕩器為6MHz)
; 入口參數:R7--延時時間
; 出口參數:無
; 注意: 如果入口參數R7等于0,則不延時而直接返回。
;*****************************************************
DELAY:
MOV A,R7
JZ DELAY_RTN
DELAY_L1:
MOV R6,#0C8H ;延時0.1S
DELAY_L2:
MOV R5,#0FAH
DELAY_L3:
NOP
NOP
NOP
NOP
DJNZ R5,DELAY_L3
DJNZ R6,DELAY_L2
DJNZ R7,DELAY_L1
DELAY_RTN:
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -