//此程序通过RS-232接口来完成计算机和单片机通信(程序已用p18f458试验板上调试通过) //程序的调试可以用"串口调试助手V2.1"辅助完成,
//此程序首先发送测试数据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.51hei.com提供 ;此程序首先发送测试数据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
|