|
;***************************************************************** ; 文件: UART_IR_Slave.asm ; 功能: 利用LPC900系列單片機(jī)的UART和CCU模塊實現(xiàn)紅外通信. ; 此程序為從機(jī)程序,當(dāng)接收到16字節(jié)數(shù)據(jù)后,再把接收的數(shù)據(jù) ; 返回給主機(jī). ;***************************************************************** $INCLUDE (REG932.INC) ;變量定義 FE BIT SCON.7 PLEEN BIT TCR20.7 BRGR1_DATA DATA 09H ;波特率設(shè)為2400bit/s BRGR0_DATA DATA 0B4H RCV_BUF DATA 30H ;接收緩沖區(qū)首地址(30H~3FH) ORG 0000H AJMP MAIN
;主程序開始 ORG 0100H MAIN: MOV SP,#60H MOV P0M1,#00H ;P0,P1口設(shè)置為準(zhǔn)雙向 MOV P0M2,#00H MOV P1M1,#00H MOV P1M2,#00H MOV P2M1,#0C0H ;P2.6,P2.7設(shè)置為開漏 MOV P2M2,#0C0H ACALL CCU_INIT ;CCU模塊初始化,用以產(chǎn)生38KHz調(diào)制信號 ACALL UART_INIT MAIN_L1: MOV R7,#01H ACALL DELAY ACALL RCV_DATA ;接收16字節(jié)數(shù)據(jù) MOV R7,#02H ACALL DELAY ACALL SEND_DATA ;把接收到的16字節(jié)數(shù)據(jù)發(fā)送出去 AJMP MAIN_L1 ;********************************************* ; 名稱: SEND_DATA ; 功能: 通過UART連續(xù)發(fā)送16字節(jié)數(shù)據(jù)(0~15) ; 入口參數(shù): bpuf--發(fā)送緩沖區(qū)首地址 ; 出口參數(shù): 無 ; 注意: 此程序采用查詢方式發(fā)送 ;********************************************* SEND_DATA: MOV R7,#10H MOV R0,#RCV_BUF CLR TI CLR A SEND_DL1: MOV A,@R0 MOV SBUF,A JNB TI,$ CLR TI INC R0 DJNZ R7,SEND_DL1 RET ;********************************************************************* ; 名稱: RCV_DATA ; 功能: 通過UART連續(xù)接收16字節(jié)數(shù)據(jù) ; 入口參數(shù): pbuf--用于接收數(shù)據(jù)的緩沖區(qū)首地址 ; 出口參數(shù): 接收到的16字節(jié)數(shù)據(jù)位于接收緩沖區(qū) ; 注意: 此程序采用查詢方式進(jìn)行接收。由于采取半雙工通信,所以接收 ; 數(shù)據(jù)之前要打開接收允許,接收完畢之后要關(guān)閉接收允許。 ;********************************************************************* RCV_DATA: MOV R7,#10H MOV R0,#RCV_BUF SETB REN CLR FE CLR RI RCV_DL1: JNB RI,$ CLR RI MOV A,SBUF MOV @R0,A INC R0 DJNZ R7,RCV_DL1 CLR REN RET ;********************************************************************* ; 名稱: CCU_INIT ; 功能: CCU模塊初始化,使OCA(P2.7)輸出38KHz,50%占空比的PWM波, ; 作為紅外線的載波 ; 使用6MHz晶振時,CCU頻率=((6000000/2)/6)*32=16MHz ; 定時器重裝值=CCU頻率/紅外線載頻=16000000/38000=421=01A5H ;********************************************************************* CCU_INIT: MOV TOR2H,#01H ;定時器重裝值 MOV TOR2L,#0A5H MOV OCRAH,#00H ;(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比為50% MOV OCRAL,#0D2H MOV TCR21,#85H ;PLL預(yù)分頻為5+1 MOV CCCRA,#01H ;非反相的PWM MOV TCR20,#00H SETB PLEEN NOP JNB PLEEN,$ ORL TCR20,#03H ;啟動定時器,對稱PWM模式 RET ;************************************** ; 名稱: UART_INIT ; 功能: UART初始化,波特率2400bit/s ;************************************** UART_INIT: MOV PCON,#00H MOV SSTAT,#00H ;雙緩沖禁止,中斷禁止,采用查詢方式發(fā)送和接收 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的波特率發(fā)生器 RET ;***************************************************** ; 名稱: DELAY ; 功能: 延時(R7*0.1)秒(振蕩器為6MHz) ; 入口參數(shù):R7--延時時間 ; 出口參數(shù):無 ; 注意: 如果入口參數(shù)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
|