要实现通过串口助手给单片机发一个数据,单片机再把数据回发给串口助手。仿真和ICD3在线调试都试了。能接收,放了颗LED做测试,但数据不对,也发不回来。
俺的智能蓝牙遥控调光LED格栅灯还差蓝牙遥控部分,实现了俺开源,大家一玩。
/************************************************************
项目名称:串口接收
要求:串口接收/发送
设计:robin_chen559
日期:2013.12.05
备注:
************************************************************/
#include<pic.h> //包含头文件pic12lf1822.h
#include<stdio.h>
#define LED_G RA0 //RA0为LED_G口
#define uchar unsigned char
#define uint unsigned int
uchar Uart_Data = 0x00;
//子程序声明
void Init_star(void); //系统初始化
void Init_UART(void); //串口初始化
void Delay_MS(uint MS); //延迟子程序
//子程序
void Init_star(void) //系统初始化子程序
{
OSCCON = 0b01101010; //4M系统时钟
APFCON = 0b10000100; //端口复用定义RA5/4 RD TX,RA2 CPP
TRISA = 0b00101010; //A口输入输出设置,RA5/1/3输入,RA4/0/2输出
ANSELA = 0b00000000; //RA2设模拟输入,其他全部是数字输入
}
void Init_UART(void)
{
INTCON = 0b11000000; //开总中断GIE,外设中断PEIE
TXIE = 1; //允许发送中断
RCIE = 1; //允许接收中断
TXSTA = 0b00100110; //串口配置字
RCSTA = 0b10010000; //接受寄存器配置P295
BAUDCON = 0b11001001; //16位波特率计数器
SPBRGH = 0b00000000; //011,16位异步,9600波特率,查表103
SPBRGL = 0b01111101;
}
void Delay_MS(uint MS) //延时函数
{
uchar i;
uint j;
for(i=0;i<MS;i++)
for(j=115;j>0;j--);
}
void interrupt ISR(void) //中断子程序无需声明
{
if(RCIF == 1)
{
Uart_Data = RCREG; //读串口数据
//LED_G = 0; //test1
TXIE = 1; //开串口发送中断
while(TXIF == 0); //待串口准备好
TXREG = Uart_Data ; //Uart_Data
while(TRMT == 0); //串口发送中,等待
TXIE = 0; //防止串口发送中断一直申请
}
}
void main (void) //主程序
{
Init_star(); //开机初始化
Init_UART(); //中断初始化
while(1)
{
if(Uart_Data == 0x0A)
{
LED_G = 0;
}
if(Uart_Data == 0x0B)
{
LED_G = 1;
}
}
}
附件 :仿真包,原程序。malab8.7 proteus7.10 |