专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

RS-232接口实现计算机和单片机通信程序

作者:佚名   来源:本站原创   点击数:  更新时间:2008年07月10日   【字体:

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

 

关闭窗口