winnie 发表于 2009-3-24 17:03:32

双机异步通讯,调试通过

file://******************************************************************
file://tran.c
file://单片机双机异步通讯,发送接收程序
file://PIC16F27单片机
file://发送一个数,发送完毕后,等待从机接收
file://从机接收后,进行数据校验,如果正确。点亮显示灯
file://*******************************************************************
#include <16F627.h>
unsigned char tran;                                  file://定义一个变量或数组存储发送数据
unsigned char t,s;                                     file://定义一个变量
file://unsigned char k,data                                 file://定义通用寄存器
unsigned char flag;
file://程序初始定义,定义各寄存器地址或位
#byte SPBRG = 0x99
#byte TXSTA = 0x98
#byte RCSTA = 0x18
#byte TRISB = 0x86
#byte RCREG = 0x1A
#byte TXREG = 0x19
#bitTRISB1 = 0x86.1
#bitTRISB2 = 0x86.2
#bitTRISB3 = 0x86.3
#bitTRISB4 = 0x86.4
#bitTXEN=0x98.5
#bitCREN=0x18.4
#bitTXIF= 0x0C.4
#bitRCIF= 0x0C.5
#bitGIE=0x0B.7
#bitKEY = 0x06.4
#bitSHOW = 0x06.3
#bitTXIE = 0x8C.4
#bitRCIE = 0x8C.5
file://给变量或数组赋初值子程序
void fuzhi()
{
    tran=7;
}
file://USART工作初始化子程序
void USART_init()
{
    SPBRG=0x25;                                       file://波特率设置为9600bps
    TXSTA=0x40;                                       file://选用异步高速方式传输8bit数据
    RCSTA=0x80;                                       file://允许同步串行口工作   
    TRISB1=1;
    TRISB2=1;                                           file://设置RB1,RB2为输入方式,对外部呈高阻状态
    TRISB3=0;                                           file://设置RB3为输出方式
    TRISB4=1;                                           file://设置RB4为输入方式,对外部呈高阻状态
}

file://主程序
void main()
{
unsigned long int t;
    fuzhi();
    KEY=1;                                              file://给按键初始值,高电位
    USART_init();                                    file://USART工作初始化
//    GIE=0;                                              file://中断禁止
while(1)
{   
    RCIE=1;                                          file://串口接收中断允许
    TXIE=1;                                          file://串口发送中断允许
    TXEN=1;                                          file://发送允许
    CREN=1;                                          file://接收数据允许
flag=0;
//if(RCIF==1)                                    file://接收寄存器已满                                 
//{
//   s=RCREG;                                 file://读该寄存器
//   flag=1;
//   if(s==0x33)SHOW=0;                         file://判断数据是否正确,正确点亮灯
//}
//if(KEY==0)                                     file://按键开始即送数
      TXREG=0x33;
if(TXIF==1)                                 file://判断是否送完
for(t=0;t<1000;t++);
      SHOW=0;
}
}
页: [1]
查看完整版本: 双机异步通讯,调试通过