双机异步通讯,调试通过
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]