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