//SPBRG=25; // SPBRG=51; 9600波特率计算出来的结果。 25为19200 波特率计算的通讯结果 // 辅助试验,改变波特率 或者改变通讯方式“ 异步高速、异步低速通讯方式 及基本的同步通讯方式F/4(X+1) 通常简易9600 高速异步通讯误差小
#include"pic.h" #include"pic1687x.h" unsigned char table0[10]={0XBF,0X86,0XDB,0XCF,0XE6,0XED,0XFD,0XF7,0XFF,0XEF}; //LED 共阴极数码管显示代码,带点。 unsigned char table[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
unsigned char recdata; //来自计算机串口窗口发送的数据 V2.2
void SYSinitial() { TRISD=0X00; PORTD=0XFF; INTCON=0X00; ADCON1=0X07; //声明8个模拟通道都恢复通常的IO输入输出功能。不是模拟输入也不是参考电压设置。 }
void USART232initial() { TRISC6=0; //RC6,SCL/TX 方向输出 RC7,SDA/RX 方向输入接受; TRISC7=1; PORTD=0XFF;
TXSTA=0B00000000; //改为异步低速通讯 //CSRC, TX9,TXEN,SYNC; * ;BRGH,TRMT,TX9D; 异步通讯模式下,没有启用CSRC时钟源选择位。 本题是异步高速通讯模式。 RCSTA=0X80; //SPEN,RX9,SREN,CREN; ADDEN, FERR,OERR,RX9D;
SPBRG=13; // SPBRG=51; 9600波特率计算出来的结果。 25为19200 波特率计算的通讯结果 PIR1=0X00;
RCIE=1; //设置好串口的接受、发送中断使能位。 之后则只需要一个中断标志位置1. //TXIE=1; //函数加了这条语句,RD 端口显示为全8 字符。 会影响到后期的显示部分,可以根据书本要点,省列此语句。 CREN=1; TXEN=1; //首先考虑中断使能位, 再考虑具体的位。 RCSTA; TXSTA; }
void interrupt USART232() //异步同步(都包括) 的串口通讯中断子程序 { if(RCIF==1) { RCIF=0; recdata=RCREG; //数据信息首先来自 PC机界面 V2.2窗口。 四个寄存器 接受结果寄存器,其中的数据赋值给变量,变量再转给发送 结果寄存器。 TXREG=recdata+1; // TXREG=recdata+2; 如果函数再界面传送的数据都是16进制,那么可以考虑同时选中。 } }
void main() { SYSinitial(); USART232initial(); INTCON=INTCON|0XC0;
while(1) { PORTD=table0[7]; }
} |