//此程序通過RS-232接口來完成計(jì)算機(jī)和單片機(jī)通信(程序已用p18f458試驗(yàn)板上調(diào)試通過) //程序的調(diào)試可以用"串口調(diào)試助手V2.1"輔助完成,
//此程序首先發(fā)送測試數(shù)據(jù)55H,再通過中斷實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送
#include "p18f458.h"
void InterruptHandlerHigh(void);
//初始化程序 void initial() { SPBRG=0X19; //選擇傳輸波特率為9600bps TXSTA=0X04; //選擇異步高速方式傳輸8位數(shù)據(jù) RCSTA=0X80; //允許同步串行口工作 TRISC=0X80; //將RC7,RC6設(shè)置為輸入,斷絕與外接電路的連接 TXSTAbits.TXEN=1; //發(fā)送允許 RCSTAbits.CREN=1; //接受數(shù)據(jù)允許 PIE1bits.RCIE=1; //接收中斷使能 INTCON=0XC0; //總中斷和外圍中斷允許 }
//高優(yōu)先級中斷向量 #pragma code InterruptVectorHigh=0x08 void InterruptVectorHigh (void) { _asm goto InterruptHandlerHigh //跳到中斷程 _endasm }
//高優(yōu)先級中斷服務(wù)程序 #pragma code #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh () { while(PIR1bits.RCIF==1) //若接收中斷標(biāo)志不為1,則為誤操作,返回 { TXREG=RCREG; //將接收到的數(shù)據(jù)放入發(fā)送寄存器,并啟動(dòng)發(fā)送 } }
//主程序 main() { initial(); //系統(tǒng)初始化 TXREG=0X55; //發(fā)送數(shù)據(jù)55H進(jìn)行測試 for(;;); }
------------------------------------------匯編語言版本的RS-232接口實(shí)現(xiàn)計(jì)算機(jī)和單片機(jī)通信程序------------
;此程序通過RS-232接口來完成計(jì)算機(jī)和單片機(jī)通訊(程序以在p18f458試驗(yàn)板上調(diào)通) ;本單片機(jī)程序由
LIST P=18f458 INCLUDE "P18f458.INC"
ORG 0x00 GOTO MAIN ORG 0x08 GOTO INTSERVE ORG 0X30
;**************中斷服務(wù)子程序*************** INTSERVE BTFSS PIR1,RCIF ;接收中斷標(biāo)志為1? GOTO ERR_RE ;誤操作,返回 MOVF RCREG,0 ;否則,將接收到的數(shù)據(jù)通過W寄存器 MOVWF TXREG ;放入發(fā)送寄存器,并啟動(dòng)發(fā)送 ERR_RE NOP RETFIE
;****************初始化程序*************** INITIAL NOP MOVLW 0X19 ;選擇傳輸波特率為9600bps MOVWF SPBRG MOVLW 0X04 ;選擇異步高速方式傳輸8位數(shù)據(jù) MOVWF TXSTA MOVLW 0X80 ;允許同步串行口工作 MOVWF RCSTA MOVLW 0X80 ;將RC7,RC6設(shè)置為輸入,斷絕與外接電路的連接 MOVWF TRISC BSF TXSTA,TXEN ;發(fā)送允許 BSF RCSTA,CREN ;接受數(shù)據(jù)允許 BSF PIE1,RCIE ;接收中斷使能 MOVLW 0XC0 ;總中斷和外圍中斷允許 MOVWF INTCON RETURN
;**********************主程序********************* MAIN NOP CLRWDT CALL INITIAL MOVLW 0X55 ;發(fā)送數(shù)據(jù)55H進(jìn)行測試 MOVWF TXREG LOOP GOTO LOOP END
|