#include<pic.h>
#define uint unsigned int
#define uchar unsigned char
uchar rdata;
#pragma config CONFIG1 = 0X0F04;
#pragma config CONFIG2 = 0X1EFC;
void init_port();
void init_USTRA();
void delay(uint z);
void USTRA_send(uchar data);
void main()
{
init_port();
init_USTRA();
while(1)
{
PORTC=rdata;
}
}
void init_USTRA()
{
BRG16=0; //使用8位波特率发生器
BRGH=1; //高波特率选择
SPBRGL=25; //设置波特率发生寄存器的值9600
SPBRGH=0;
ANSA1=0; //A1引脚被配置为端口或数字特殊功能
ANSA0=0; //A0引脚被配置为端口或数字特殊功能
SPEN=1; //串口功能打开
SYNC=0; //EUSART选择异步模式工作
PEIE=1;
GIE=1;
TX9=0; //不发送第9位数据
RX9=0; //不接收第9位数据
CREN=1; //串口接收功能打开
TXEN=1; //串口发送功能打开
TXIE=0; //打开关闭发送中断
RCIE=1; //关闭打开接收中断
RXDTSEL=1; //备用引脚控制寄存器0的bit7 即RA1上具有RX/DT功能
TXCKSEL=1; //备用引脚控制寄存器0的bit2 即RA0上具有TX/CK功能
TRISA0=0; //配置AO端口为输出
TRISA1=1; //配置A1端口为输入
}
void interrupt receive()
{
if(RCIE&&RCIF)
{
RCIF=0;
rdata=RCREG;
while(!TRMT);
}
}
void init_port()
{
OSCCON=0X6A; //0110 1000 内部时钟为4MHz
delay(10);
APFCON0=0XC4; //RA1、RC4 上具有RX/DT功能
APFCON1=0X08; //RC0上具有P1D功能,RC1上具有P1C 功能
TRISA=0X0A;
LATA=0x00;
ANSELA=0x00; //0000 0000 PORTA为数字功能
WPUA=0X00; //弱上拉输出使能
INLVLA=0x00; //0000 0000 PORTA电平TTL控制
RA2=0;
TRISC=0X00; //RC0、RC1、RC3、RC4、RC5为输出,RC2为输入
LATC=0x00;
ANSELC=0x00; //0000 0000 PORTC为数字功能
WPUC=0XFF; //弱上拉输出使能
INLVLC=0x00; //0000 0000 PORTC电平TTL控制
PORTC=0X00;
CCPTMRS0=0XE4;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
此帖出自
小平头技术问答
一周热门 更多>